作者:奔跑吧linux内核
链接:https://www.zhihu.com/question/267507175/answer/325187096
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
谢谢邀请,关于如何学习linux驱动,笨叔叔在十几年前,也就是大学刚毕业的时候也是从linux驱动移植开始学起,比如交叉编译这个软件那个软件,最典型的就是qt了。
学习驱动可以从简单字符设备驱动开始,你可以挑选一个字符设备的例子。我记得笨叔以前从一个触摸屏驱动开始学起的。
写好一个驱动除了要熟悉linux驱动各种API用法外,对这个设备硬件本身也是需要熟悉的,这个就要下功夫去看芯片的datasheet了,另外,芯片厂商一般会提供sample code来帮助你来理解硬件。
字符设备搞清楚了,你就可以继续摸索其他问题,比如中断,内存管理,锁,这三样是驱动和内核最难的。我记得《linux设备驱动》这本书在十几年前已经被窝翻烂了,但是这三样东西依然不能说理解的很透彻,这就是为什么我要写《奔跑吧linux内核》的一个原因。
很多人说,不需要透彻的理解linux内核也可以写好驱动,这话对一半,错一半。现在内核里有很多驱动例子,你葫芦画瓢也是能写出一个驱动来的,可是你对自己使用内核API如何实现的都一脸蒙圈,你怎么能保证你写的驱动在大规模测试和商用的时候没有问题呢?怎么保证你写的东西是最优的呢?就好比你说你是汽车发烧友,别人问你自然吸气发动机和涡轮增压发动机在实现原理上有啥区别?实际操控上有啥区别?发动机最大马力和扭矩有啥不同?你若一脸蒙圈,那就别在朋友面前装是汽车大神了。
《奔跑吧linux内核》配套视频第一季内存管理,就是让笨叔来给大家解开内存管理这个死结。