22.驱动开发篇总结
设备驱动的形式¶
3种常见的设备驱动模式。传统设备驱动模式、PlatformDevice/PlatformDriver模式、设备树/PlatformDriver模式。
传统设备驱动模式:将所有的资源分配放进一个文件中,使用cdev来进行管理。
PlatformDevice/PlatformDriver模式:资源放进PlatformDevice,实现驱动放进PlatformDriver文件。
设备树/PlatformDriver模式:资源放进设备树,实现驱动放进PlatformDriver文件。
后面两种方式都是为了实现**总线-设备-驱动**框架,实现设备驱动的分离。
GPIO子系统和Pinctrl¶
传统寄存器控制:使用ioremap的方式,将寄存器的地址信息映射到虚拟地址,然后控制对应的寄存器输入输出。
gpio子系统和pinctrl方式:这一部分的使用,应该在使用了设备树的情况下。pinctrl子系统在修改了设备树信息之后,会自己做相关的处理,使得gpio子系统能够获取并处理在设备树上设置的信息。
常用驱动方式¶
MISC驱动:通常嵌套在platform总线驱动中,实现比较杂项的驱动,在我感觉,他就是一个封装过的传统设备驱动,没有传统设备驱动的注册class和device的这些步骤。
Platform驱动:一种虚拟平台驱动,比如有些外设可以挂载到I2C、SPI等实际的总线上,但是有些设备,不是使用这些总线,我们就需要一个虚拟的设备总线来解决这个问题。比如普通的LED,只是使用了GPIO,就可以挂载到这个总线上。
重要的知识点¶
休眠与唤醒、POLL机制、异步通知、阻塞与非阻塞、定时器、中断下半部、工作队列、中断的线程化处理、mmap、同步和互斥操作
其他驱动方式¶
I2C驱动:和Platform驱动不同,这个就是一个实际的总线,不是虚拟的总线。但是实现它的思想还是为了实现**总线-设备-驱动**框架。
SPI驱动:和I2C驱动一样。
INPUT驱动:一样。
还会有许多如USB、PCI等等,暂时不详细说明。