个人认为最好先学学linux kernel 框架及API,驱动写得多了感觉真的很空,linux本身将驱动框架层层规范导致初学看着难,其实就是调用kernel API进行各种ops跳转,互斥控制,通知等,最后怼到HW Reg和IRQ上。(了解rtos驱动就知道操作HW其实很直接,linux驱动各种烦)
必须有个arm开发板,配套有kernel和datasheet,公版linux看出花来也没用
学习如何编写ko,编译及insmod
学习字符驱动的编写cdev,知道sysfs怎么回事,和驱动的关系
学习如何通过sysfs或 dev下节点与驱动交互
照着datasheet看一些简单驱动eg. gpio led,uart ... ,
(其实最简单的是ARM Generic Timer,也没驱动但是一个很直观且能操作并能产生中断的HW,需看armv7或v8手册,提醒如果开发板arm版本过低可能不支持)
照书上写的方法去仿照写这些驱动
然后就不停的debug
PS. 保证看完这本书基本驱动编写的概念能建立,写鼠标驱动就想太多了
追问鼠标驱动这么难?有什么书介绍硬件协议的吗,比如usb、iic、spi之类等等?
「秒懂百科」一分钟读懂《LINUX设备驱动程序》