字符设备驱动之分层和分离:
驱动设备模型:设备总线驱动
设备树或者是platform设备文件或者是其他什么设备文件负责去描述设备的信息:使用的IO电器属性、信息,中断信息,IIC属性信息等。不过现在基本都是设备树用设备树描述设备信息了。
驱动就是从设备树获取到信息(有设备树就是从设备树,没有就只能从partform设备文件获取了),再去根据获取的信息去控制硬件操作,中断服务函数啥的。
用虚拟总线就是将驱动文件和设备树的compatible名字匹配。不用虚拟总线就是直接去获取设备树节点!
分层和分离
软硬分层
总所周知软硬分层,应用和硬件分层。所以应该是三层:应用层->驱动层->底层硬件操作。驱动层负责一些不涉及硬件操作的动作(负责使能或者配置一类的函数):init,exit等。底层硬件就单纯的提供硬件操作。
通用操作(改变)分离:
将不变的硬件动作和可变硬件的属性分离出来。这个大概是最初的设计思路。硬件操作很多时候都是固定的。比如打开发送啊。但是硬件信息是多变的。比如这个使用了GPIO1_15,那个使用了GPIO2_10。这个用了串口1那个用了串口2。难道我们每次都去改动驱动文件吗?(这太傻了吧),所以驱动层分离应运而生!用一个文件去控制硬件操作的属性(改变使用的的硬件),根据控制硬件的文件暴露的接口去改变使用的硬件(改变硬件属性),这样就不用每次傻了吧唧该驱动了,就是得手动改底层硬件属性。这就是最初的Platform总线!剥离出的硬件属性后来被人总结打包成了一棵树,就是设备树!
参考: