linux驱动笔记
文章平均质量分 88
学习linux驱动过程中的学习笔记
编程界的小学生、
这个作者很懒,什么都没留下…
展开
-
《Linux驱动:中断编程》
今天简单整理了下中断的相关概念,以及Linux内核中断处理程序架构,并整理了下中断编程会使用到的相关API、顶半部和底半部机制(tasklet、工作队列、软中断、线程化irq)的使用。关于底半部机制的具体实现,后续有空的时候再去深入学习。原创 2023-04-09 21:32:50 · 239 阅读 · 1 评论 -
《Linux驱动:设备节点文件的创建过程》
之前学习字符设备驱动开发时,提到调用class_device_create函数会为设备创建一个设备节点文件(/dev/xxx)。那么这个创建的过程是怎样的呢?在这里便来简单分析一下。涉及的知识点主要有uevent机制、Sysfs文件系统、mdev程序的调用和实现(创建设备节点文件)。原创 2022-11-27 20:29:06 · 886 阅读 · 0 评论 -
《Linux驱动:DMA直接内存访问》
DMA(Direct Memory Aaccess)直接内存访问,意思是不通过CPU的干涉直接将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。它的作用就是解决大量数据传输过度消耗CPU资源的问题。DMA节省了大量的CPU资源,使CPU专注于更加实用的操作。原创 2022-11-13 22:30:12 · 1234 阅读 · 0 评论 -
《Linux驱动:使用音频设备驱动框架-OSS构建音频设备驱动》
OSS(Open Sound System(开放声音系统)),是unix平台上一个统一的音频接口。ALSA (Advanced Linux Sound Architecture(高级Linux声音体系)) 是为声卡提供驱动的Linux内核组件,替代OSS。在这里先来分析简单的OSS,后面有时间再研究下ALSA。分析OSS的基本框架,最后通过一个例子总结下OSS框架下实现一个音频设备驱动的一般步骤。原创 2022-10-29 23:37:56 · 2303 阅读 · 0 评论 -
《Linux驱动:register_chrdev、alloc_chrdev_region、register_chrdev_region》
Linux内核提供了多种注册字符设备驱动的接口,register_chrdev接口一般在Linux 2.6之后建议不再使用,推荐使用alloc_chrdev_region或者register_chrdev_region。这里分析下它们三者的实现,总结下三者的异同。使用register_chrdev注册字符设备,默认主设备下的0~255个次设备均对应于同一个设备驱动(使用同一个file_operations结构体的接口)。原创 2022-10-22 16:47:54 · 2020 阅读 · 0 评论 -
《Linux驱动:I2C驱动看这一篇就够了》
通常来说为某个特定的IIC设备去构建IIC设备驱动、针对平台硬件资源构建IIC适配器便是IIC驱动相关开发所需要做的工作,IIC核心相关、IIC总线驱动相关的部分,系统中一般已经存在。构建IIC设备驱动一般需要做的工作设置struct i2c_driver结构体,提供attach_adapter、detach_client接口。原创 2022-10-20 08:30:00 · 5018 阅读 · 0 评论 -
《Linux驱动:I2C协议分析》
I2C总线支持设备之间的短距离通信,用于处理器和一些外围设备之间数据传输,它只需要两根信号线来就能完成数据传输。在分析I2C总线驱动之前,需要先了解下i2c协议。原创 2022-10-16 15:18:09 · 880 阅读 · 0 评论 -
《Linux驱动:DM9000网卡驱动分析》
前面分析了网络设备驱动的框架以及构建设备驱动的一般流程,现在通过对DM9000C网卡驱动程序的分析进一步加强对网络设备驱动的理解。构建网络设备驱动程序的一般流程(设备驱动功能层)调用alloc_netdev接口申请分配一个net_device结构体。设置net_device结构体,至少提供一个发包函数。根据硬件电路申请一个网卡相关中断,在中断中接收网卡接收到的其他设备发送过来的数据,通过netif_rx函数发送给上层处理。调用register_netdev接口注册该驱动。原创 2022-10-03 11:00:07 · 754 阅读 · 0 评论 -
《Linux驱动:网络设备驱动》
发包:网络协议层调用网络协议接口层dev_queue_xmit( )接口发包;设备驱动功能层给网络设备接口层的net_device结构体的hard_start_xmit成员赋值,即提供发包函数;dev_queue_xmit( )函数调用该发包函数将数据通过网卡传输给其他网络设备。收包:一般是在设备驱动功能层中,创建一个中断,在中断中接收网卡传输过来的数据,然后通过网络协议接口层接口netif_rx发送给网络协议层处理->传输层处理->应用层处理。原创 2022-10-02 11:32:03 · 1282 阅读 · 0 评论 -
《Linux驱动:Nor flash驱动看这一篇就够了》
这一篇主要总结Nor Flash驱动的工作方式和逻辑,熟悉nor flash驱动的框架,并分析了不同规范的Nor Flash芯片的识别过程,比如CFI规范和JEDEC规范的nor flash。Nor flash驱动构建一般分为以下几个步骤根据硬件电路和芯片书册设置struct map_info结构体。调用do_map_probe接口识别对应规范的Nor Flash芯片,并获取到一个对应芯片的struct mtd_info结构体。原创 2022-09-24 16:09:46 · 4228 阅读 · 0 评论 -
《Linux驱动:nand flash驱动看这一篇就够了》
nand flash驱动开发总结,涉及到s3c2440芯片nand flash控制器的设置及操作、K9F2G08U0C nand flash的设置及操作、平台总线-驱动-设备模型等相关知识。系统启动,内核初始化时加载mtdchar模块,调用init_mtdchar,将 struct mtd_notifier 结构注册到mtd_notifiers链表中,供后续nand flash驱动程序使用。if(!原创 2022-09-11 20:24:58 · 2664 阅读 · 0 评论 -
《Linux驱动:块设备的读写流程( ll_rw_block 接口分析)》
在内核空间构建了块设备驱动程序,创建了块设备的设备节点,那么用户空间的APP如果通过该设备节点去读写对应的块设备呢?接下来便逐步分析这个过程。分析用户程序是如何一步步读写到块设备的数据的。用户程序通过块设备驱动节点,读写块设备数据的流程块设备驱动程序初始化时调用blk_init_queue接口初始一个i/o请求队列,并为该队列提供一个队列"请求处理函数";用户程序调用read()/write(),会转换成通用块层ll_rw_block接口的调用;原创 2022-09-05 09:00:00 · 1612 阅读 · 0 评论 -
《Linux驱动:块设备驱动--构建基本流程》
LINUX 驱动针对的对象是存储器和外设,而不是针对cpu内核。字符设备块设备网络设备字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、鼠标等。块设备可以按任意顺序进行访问,以块为单位进行操作,如硬盘、eMMC等。字符设备和块设备的驱动设计有很大的差异,但对于用户(应用程序)而言,它们都使用文件系统的接口(open()、write()、read()、close())来进行访问和操作。在这里学习块设备驱动的基本架构,以及构建一个块设备驱动的基本步骤,最后通过内存模拟了一个块设备,并构建了其块设备驱动。原创 2022-09-04 16:09:44 · 855 阅读 · 0 评论 -
《Linux驱动:USB设备驱动看这一篇就够了》
这一篇学习分析USB设备驱动程序,主要涉及到USB驱动基本概念,USB版本对比、USB主从结构、USB设备的传输类型、USB设备描述符关系、USB的数据传输对象;详细分析了USB总线驱动框架,USB Core、USB HCD、USB总线-设备-驱动模型;最后总结了USB驱动开发中的一般流程并模拟实现一个USB设备驱动程序。USB core注册了一个USB总线,并向USB总线中注册了三个驱动,分别是USB接口驱动、HUB驱动、USB设备驱动。......原创 2022-08-28 15:37:45 · 16239 阅读 · 5 评论 -
《Linux驱动:USB设备驱动》
这一篇学习分析USB设备驱动程序,主要涉及到USB子系统概览、USB总线驱动框架、USB总线-设备-驱动模型。最后模拟实现一个USB设备驱动程序。原创 2022-08-22 21:59:31 · 732 阅读 · 0 评论 -
《Linux驱动:s3c2440 lcd 驱动分析--终结篇》
s3c2440 lcd 驱动分析,涉及到的内容有,LCD图像显示原理、s3c2440的LCD控制器的操作、LCD驱动使用平台总线-设备-驱动模型的实例、LCD相关参数的设置、fb字符设备驱动实例、framebuffer的注册和管理、以及一次LCD显示的完整过程分析。原创 2022-08-20 10:14:18 · 372 阅读 · 0 评论 -
《Linux驱动:s3c2440 lcd 驱动分析》
s3c2440 lcd 驱动分析,涉及到的内容有,LCD图像显示原理、s3c2440的LCD控制器的操作、LCD驱动使用平台总线-设备-驱动模型的实例、LCD相关参数的设置、fb字符设备驱动实例、framebuffer的注册和管理、以及一次LCD显示的完整过程分析。...原创 2022-08-14 22:50:37 · 748 阅读 · 0 评论 -
《Linux驱动:s3c2410/s3c2440 ts驱动分析 -- 终结篇》
前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统详解、input输入子系统核心层程序分析、evdev输入子系统事件处理层程序分析、ts输入子系统设备驱动层程序分析、字符设备驱动分析、主设备号和次设备号的使用、以及s3c2440的ADC转换和触摸控制器的操作。.........原创 2022-08-13 11:03:01 · 1952 阅读 · 0 评论 -
《Linux驱动:s3c2410/s3c2440 ts驱动分析 之二》
前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统详解、核心层程序分析、evdev事件处理层程序分析、ts设备驱动层程序分析以及s3c2440的ADC转换和触摸控制器的操作。.........原创 2022-08-10 23:28:29 · 190 阅读 · 0 评论 -
《Linux驱动:s3c2410/s3c2440 ts驱动分析》
前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统、s3c2440的ADC转换和触摸控制器。原创 2022-08-09 23:15:27 · 571 阅读 · 0 评论 -
《Linux 驱动:s3c2410_ts加载过程》
s3c2410_ts加载过程;总线 驱动 设备 模型;MACHINE_START;MACHINE_START(SMDK2410, "SMDK2410") ;输入子系统;bus-driver-device;platform_add_devices;platform_driver_register;input_register_device;原创 2022-08-01 22:44:22 · 1462 阅读 · 0 评论 -
《Linux 驱动:输入子系统》
输入子系统作为一个模块存在,向上,为用户层提供调用接口;向下,为驱动层程序提供统一的注册接口。这样,就能够使输入设备的事件通过输入子系统发送给用户层应用程序,用户层应用程序也可以通过输入子系统通知驱动程序完成某项功能。(Linux中在用户空间将所有的设备都当作文件来处理,在一般的驱动程序中都有提供fops接口,以及在/dev下生成相应的设备文件nod,现在这些操作在输入子系统中由事件处理层统一完成)。Linux 输入子系统 事件处理层 核心层 设备驱动层 设备节点.........原创 2022-07-26 20:32:04 · 458 阅读 · 0 评论 -
《linux驱动:字符设备驱动之四 定时器消按键抖动》
物理按键触发电平不是很稳定,会呈现锯齿状使得一次按键状态触发多个中断,导致应用程序读取按键值产生错误。驱动层使用内核定时器可以解决此种错误,每次中断到来时触发定时器10ms后再对该中断进行处理。这样一次按键状态因为抖动而触发的多个中断,最终只会去处理一次。Linux内核定时器采用系统时钟来实现,与硬件定时器功能一样,当超时时间到了以后设置的定时处理函数就会执行。内核定时器不需要一大堆寄存器的配置工作,并且内核定时器执行完超时处理函数以后就会自动关闭。............原创 2022-07-17 17:06:33 · 423 阅读 · 0 评论 -
《linux驱动:字符设备驱动之三 poll机制》
前一篇虽然在驱动层面使用了中断的方式,但是应用层面还是需要不断在死循环里面执行读取函数,应用程序不能去做其它事情。poll机制解决了这个问题,当有事件发生时,才去执行读read函数,按键事件没有按下时,去执行其它的处理函数。并可通过设置超时时间,调整应用层等待的时间。先分析内核中Poll的运行机制,然后使用之。............原创 2022-07-17 09:13:11 · 679 阅读 · 0 评论 -
《linux驱动:字符设备驱动之二 中断与休眠唤醒》
linux字符设备驱动。使用中断以及休眠唤醒的方式来获取按键状态。休眠唤醒流程,相关函数DECLARE_WAIT_QUEUE_HEAD、wait_event_interruptible、wake_up_interruptible 。中断服务程序。原创 2022-07-10 17:30:36 · 666 阅读 · 0 评论 -
《linux驱动:字符设备驱动之一》
学习linux驱动三个大类驱动设备,字符设备、块设备、网络设备。学习linux驱动的框架,熟悉所涉及的各个数据结构和函数,并结合具体代码分析。字符设备驱动的一般流程。原创 2022-07-03 16:14:42 · 2027 阅读 · 0 评论