一、Linux驱动_驱动设计的思想(面向对象_分层_分离)
总则:Linux驱动=驱动框架+硬件操作
=驱动框架+单片机
1、面向对象就是用结构体表示某个对象
2、分层
3、分离
事实上,每一款芯片它的GPIO操作都是类似的,并且这跟主芯片相关,因此就可以针对该芯片写出比较通用的硬件操作代码。
具体见代码。
三、总线设备驱动模型
如果硬件很多,导致相对应的.c文件很多,造成内核臃肿。因此引入设备树,将硬件的设置文件不放在内核的.c文件中。
bus:device 和 drv一一对应。
device 和 drv是怎么挂钩的:
如下图划红线部分,如果device和drv都是
先后比较1、2、3。如果1不行,就比较2,2不行就比较3.一般2、3用得比较多。
具体参见文件:09.驱动进化之路_总线设备驱动模型
怎么启动的呢?
启动时drv和dev分别调入各自的链表,然后再把各自链表放入第三个链表进行比较。
四、LED模板驱动程序的改造_总线设备驱动模型
新框架关系如下图,驱动和硬件按新框架,原始的drv按原来的方法进行注册:
具体见代码。
五、设备树的引入及简明教程
1、传统方法的缺点如下,于是引用了设备树,使用配置文件。
2、设备树:
设备树的表示如下:
具体见文档:包括常见的节点、属性等
status的讲解:
reg在CPU上的用法:
dtb:dts对应的二进制文件 dts:文本格式汇编文件 fdt:设备树文件
六、内核对设备树的处理与使用
处理过程:
哪些设备树节点会被转换为platform_device:
例子:
添加设备树后,Dev与drv怎么进行匹配的:
1、2、3、4部比较过程具体见文件说明。
七:LED模板驱动程序的改造_设备树
见源码。