linux驱动
qqliyunpeng
努力天天有收获,努力将知识都记下来。
展开
-
linux 设备树学习
设备树是什么1.1 帮助文件1.2 后缀1.3 单独编译设备树2. 语法2.1.1 chosen 节点2.1.2 aliases 节点2.1.3 memory 节点2.2 通用属性2.2.1 compatible 属性2.2.2 interrupts 属性2.2.3 ranges 属性2.2.4 合并原则3. 设备树(DTB)的组成3.1 头3.2 结构块3.3 字符串块3.4 memory reserve map4. 设备树相关过程4.1 旧方式和新方式的比较4.2 内核获取设备树中信息的过程5. 设备树原创 2020-05-19 20:48:20 · 1400 阅读 · 0 评论 -
linux中打开内核的动态调试
1. 简介在调试linux的驱动的时候,会遇到dev_dbg (“xxx”); ,如何让他显示出来,是本片文章的重点目的。2. 分析dev_dbg 的源码#if defined(CONFIG_DYNAMIC_DEBUG)#define dev_dbg(dev, format, ...) \do { \ dynamic_dev_dbg(...原创 2020-04-28 20:24:02 · 2033 阅读 · 0 评论 -
usb gadget printer驱动分析
1. 简介Gadget 英文是小物件,小装置Gadget 框架提供了一套标准API,USB设备控制器(USB Device Controller,UDC)驱动实现这一套API。Gadget 是实现的 USB Device,一般普通的 Gadget 驱动只实现一个功能。2. 驱动核心分析printer_func_setup 处理底层驱动不能处理的 EP0 请求。即响应 us...原创 2020-03-10 14:53:16 · 1091 阅读 · 1 评论 -
按键驱动
1. 思路分析:模块入口函数中:定时器初始化,添加到时后执行的函数,添加进内核。申请设备号。创建设备类,添加设备节点。内存映射 – ioremap在 struct file_operation 结构体中实现 open、read、release、poll、fasync方法全局变量中定义互斥体open函数中判断打开的方式中是不是 O_NONBLOCK 非阻塞方式打开,如果是非...原创 2019-04-23 18:33:46 · 1977 阅读 · 3 评论 -
led 驱动
1. 程序思路:通过ioctrl 来将应用程序的命令传递到驱动中的 struct file_operation 中的 unlocked_ioctl 方法中,判断命令进行相应的操作。在通用的头文件中定义ioctrl的命令#define LED_ON _IO('l',1)#define LED_OFF _IO('l',2)我们想在应用程序中这样来操作ledint main(int ar...原创 2019-04-23 18:16:53 · 519 阅读 · 0 评论 -
内核定时器和延时
介绍内核的定时器和延时执行原创 2016-09-09 17:28:33 · 2671 阅读 · 0 评论 -
中断的顶半部和底半部
介绍linux中中断的顶半部和底半部的实现。原创 2016-09-09 16:51:36 · 4732 阅读 · 1 评论 -
linux驱动中的互斥途径五:互斥锁
介绍linux中进程并发的解决方法之:互斥锁原创 2016-09-05 10:41:46 · 2268 阅读 · 0 评论 -
Linux kernel oops panic 调试技巧
http://blog.chinaunix.net/uid-291731-id-3142689.html最近在调试USB驱动的过程中,偶尔会出现拔出USB线缆时kernel会有oops错误,以下是对kernel oops错误调试的简单记录,该方法也适用于panic错误。oops错误日志信息:Unable to handle kernel NULL poi转载 2017-04-18 14:30:30 · 4163 阅读 · 0 评论 -
linux驱动中的互斥途径一二:中断屏蔽和原子操作
介绍并发解决办法中的 中断屏蔽 和 原子操作原创 2016-09-03 12:12:21 · 3277 阅读 · 0 评论 -
i2c 驱动:实例化设备
目录简介具体内容==1. 根据 bus 号声明 i2c 的设备们====2. 明确的实例化一个设备:====3. Probe一个针对于每一个设备的 i2c bus====4. 从用户空间实例化==简介这篇文章是针对 Documentation/i2c/instantiating-devices 的解释,部分增加自己的理解。为什么要将它解释下呢?因为他很好的说明了 linux3.4.xxx 内核...原创 2019-04-28 23:51:34 · 754 阅读 · 0 评论 -
led 驱动: 心跳灯
1. 简介:初次体验灯的跳动方式是 间隔 0.5s 和 1s 后都亮一下(刚开始的理解总是浅显的。。。)内核中 make menuconfig 中需要配置上 CONFIG_LEDS_TRIGGER_HEARTBEAT代码主要涉及到的文件:driver/leds/下的led-triggers.c // 对外提供函数Ledtrig-heartbeat.c //实现心跳灯...原创 2019-05-04 22:08:55 · 2403 阅读 · 0 评论 -
输入子系统
又叫做 input 子系统一. 简介:输入子系统主要涉及到比如键盘上的按键,鼠标的按键,滚轮等的事件,在linux内核中相应部分叫做输入子系统,按照子系统的规则,可以复用内核中代码,很简单的实现开发板上的按键实现鼠标的左键,键盘上的按键等的动作。 Linux之输入子系统分析(详解)总结:1. 注册输入子系统,进入input_init():创建主设备号为1...原创 2019-05-11 09:40:34 · 249 阅读 · 0 评论 -
LCD 驱动:基础
一、 简介:要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。二、需要知...原创 2019-05-24 23:03:11 · 1497 阅读 · 0 评论 -
DMA 驱动:简单实例
1. 简介:1)dma 直接内存访问。2)DMA控制器操作的内存区域要求是物理地址连续的,因此需要使用内核中提供的特定函数进行内存申请。3)把源地址和目的地址告诉芯片内部相关寄存器,根据 DMA 中断是不是发生来判断是不是操作完。char *src = dma_alloc_writecombine(NULL, BUF_SIZE, &src_phys, GFP_KERNEL)...原创 2019-05-26 22:49:51 · 4535 阅读 · 0 评论 -
hotplug_uevent 机制
1. kobj、kset 分析: http://www.wowotech.net/device_model/421.html2. uevent 设备模型: http://www.wowotech.net/device_model/uevent.html3. 分析 linux3.4.xxx 内核中设备节点的创建过程:在linux3.4.xxx中,lin...原创 2019-05-31 16:42:06 · 271 阅读 · 0 评论 -
Nandflash 驱动
1. 基本知识jz2440 中使用的nandflash的型号是 K9F2G08U0M图中可以看到这个nandflash的结构是:1页 = (2k + 64) 字节1块 = 64个页 = ( 2k + 64) x 64 = 128k + 4k 字节1个设备 = 2048个块 = ...对于某个字节的访问,地址的组成如上图,是分5个周期发送的,其中 Column是列,R...原创 2019-06-18 18:33:37 · 1526 阅读 · 0 评论 -
Norflash 驱动
对jz2440上norflash的情况需要先查看之前uboot中norflash的介绍:https://blog.csdn.net/qqliyunpeng/article/details/511345671. norflash 接口norflash 存储器接口有两个标准:CFI和JEDEC。CFI为公共Flash接口(Common Flash Interface),程序从Flas...原创 2019-07-01 13:46:41 · 636 阅读 · 0 评论 -
linux虚拟网络驱动
1. 简介本文章主要实现一个在linux3.4.xxx下的虚拟网卡,并在虚拟网卡中实现 ping 的命令。网络部分的逻辑分层图如下:2. 实现简单的虚拟网卡的第一步virt_net.c 文件/* * 参考 drivers\net\cs89x0.c */#include <linux/module.h>#include <linux/er...原创 2019-07-11 19:32:29 · 752 阅读 · 0 评论 -
linux驱动中的互斥途径三:自旋锁
介绍互斥机制中的互斥锁原创 2016-09-04 11:08:41 · 2046 阅读 · 0 评论 -
linux驱动中的互斥途径四:信号量、完成量
介绍linux中的互斥的一种解决办法,信号量原创 2016-09-04 17:40:55 · 2102 阅读 · 0 评论 -
字符驱动之:实现读写
在linux驱动中实现字符设备的读和写。原创 2016-08-25 17:15:20 · 3302 阅读 · 2 评论 -
linux的混杂设备驱动
介绍混杂设备 驱动原创 2016-10-20 17:28:14 · 1947 阅读 · 0 评论 -
IO 的阻塞和非阻塞二:轮询操作
IO 的阻塞用的是 等待队列非阻塞用的是 轮询1. 简介:轮询操作主要是实现的是用户层 select 和 poll 的支持,用户层的 select()/poll() 会调用设备驱动中的 poll() 函数被执行 ,对 poll 函数的扩展是 epoll()select() 和 poll() 系统调用的本质一样,前者是 BSD UNIX 中引入,后者在 System V 中引入...原创 2016-09-06 11:08:32 · 3263 阅读 · 0 评论 -
platform 架构
1. 简介:1.1 platform 总线是虚拟总线,当使用这个虚拟总线是带来的好处主要有两点:(1)使得设备被挂接在一个总线上,因此,符合 Linux 2.6 的设备模型。其结果是,配套的sysfs 结点、设备电源管理都成为可能。(2)隔离BSP和驱动。在BSP中定义platform 设备和设备使用的资源、设备的具体配置信息,而在驱动中,只需要通过通用 API 去获取资源和数据,做到...原创 2016-09-29 13:02:19 · 3568 阅读 · 0 评论 -
异步IO
介绍 IO 的异步 AIO原创 2016-09-08 12:37:36 · 784 阅读 · 0 评论 -
一个驱动程序对应多个设备
主要讲解一个驱动程序创建两个设备的例子原创 2016-08-31 18:09:03 · 7270 阅读 · 3 评论 -
线程的并发所引起的问题
介绍由于线程的并发引起的问题,并且介绍用什么机制来避免这些问题。原创 2016-09-03 12:06:33 · 1688 阅读 · 0 评论 -
linux驱动之:模块基本知识
linux中的模块的写法及使用原创 2016-08-21 20:24:21 · 2816 阅读 · 3 评论 -
IO 的阻塞和非阻塞一:等待队列
在驱动程序中添加 IO 的阻塞和非阻塞的支持原创 2016-09-05 19:14:04 · 2711 阅读 · 0 评论 -
按键驱动(平台文件、中断)
介绍 jz2440 的按键驱动原创 2016-10-19 19:02:23 · 1113 阅读 · 0 评论 -
按键驱动:platform架构
介绍驱动和设备分离的按键驱动原创 2016-10-20 16:19:34 · 2186 阅读 · 0 评论 -
字符驱动之:基本框架
讲解字符驱动的基本结构原创 2016-08-25 13:08:39 · 608 阅读 · 0 评论 -
内存相关部分
本片介绍的是linux中的内存相关的概念和函数的使用原创 2016-09-09 18:10:35 · 871 阅读 · 0 评论 -
spi 驱动一:spi基本结构和spidev文件系统
spidev形式的linux驱动在没有加上 spi 的设备的时候,Linux 系统中的 spi 相关的“节点”有:./sys/bus/spi./sys/bus/spi/devices./sys/bus/原创 2017-01-24 18:20:46 · 20918 阅读 · 0 评论 -
i2c 驱动二:devfs文件系统
介绍基于devfs文件系统的i2c驱动 和 介绍platform的设备和驱动是如何匹配的原创 2016-10-26 19:51:26 · 1493 阅读 · 0 评论 -
i2c 驱动五:gpio模拟i2c
介绍在linux中 gpio 模拟的 i2c 程序的编写原创 2016-11-16 18:45:10 · 8776 阅读 · 4 评论 -
i2c 驱动四:sysfs文件系统
sysfs 介绍和 i2c 与 sysfs 结合使用原创 2016-11-08 13:44:56 · 2476 阅读 · 0 评论 -
i2c 驱动一:简介
介绍 jz2440 的 i2c 驱动原创 2016-10-11 19:30:53 · 1970 阅读 · 0 评论 -
i2c 驱动三:自己实现设备和驱动分离
介绍字节实现platform形式的 i2c 驱动原创 2016-10-28 18:30:07 · 2310 阅读 · 0 评论