嵌入式Linux的驱动难点并不在于一个个孤立的驱动而是驱动的层次和混用。笔者看来驱动分为三个层次——高中低,而且都存在混用的情况。
高层驱动就是指直接被应用层调用的驱动。比如input、sda、uvc、sysfs等。
中层次指被高层次封装调用的驱动,比如I2C、sdio等等。他们也有可能直接被应用层调用,这样就直接上升为高层驱动了。
低层次驱动指被中层次调用封装的驱动,它们可能是platform驱动、GPIO驱动等等。
驱动一般还存在混用,比如SDIO+网络驱动等等。那种单纯的简单的字符设备驱动,一条龙的,只会出现在培训课程里。真正的做项目基本都要混用驱动。
驱动的应用层API也很重要,特别是做系统开发的一定要写好API文档。每种驱动的API都与他自身息息相关。比如ALSA驱动实际上规定了应用层的API库,sysfs固定位置调用,网络驱动的socket接口等等。
驱动开发一定要抓住:
内核函数库和语法
makefile函数库和语法
驱动子系统的层次和混用
应用层API的确定