Linux的软件开发大家貌似都比较陌生,貌似大家平常也不会用什么操作复杂的Linux系统。但是你们用不用,和我啥关系?我最近要做Linux的驱动开发,就讲一下Linux的驱动吧。
Linux的驱动和STM32MCU的library库挺像的都是直接操作芯片上的硬件资源,直接控制寄存器来驱动外设。不同的就是STM32的Library库支持的仅仅是意法半导体那几款片子,家族性比较高,寄存器的地址上区别也不大,但是Linux需要支持的芯片非常多,因此在驱动层Linux就需要有对芯片更高的兼容性。为了满足兼容性和易用性Linux驱动层就有了很多的规则,也就是我们要说的Linux驱动类,Linux驱动分为三大类,字符设备驱动,块驱动,网络驱动。块驱动一般都是用于存储器的驱动,一般情况下用的比较少。网络设备驱动一般用于驱动网卡,一般用的也不是很频繁。用的最多的还是Linux的字符设备驱动,小到一个GPIO的led驱动,大到摄像头等等,可以说几乎所有常见的驱动都是字符设备驱动,但是Linux内核从诞生至今已经变化了很多版本,字符设备的驱动也在变化,刚开始有了设备驱动模型,后来又增添了总线设备模型,为了应对开发板众多引发的硬件描述文件拖沓重复的问题,又引用了PowerPC的设备树.....
在本系列中我会先从字符设备写起,再到plantfrom总线设备驱动,再到网络设备驱动,...,反正就是我学到了那里,我就写到哪里。
Linux内核一直都在变化,所以啥时候也不能停止学习的脚步啊!
推荐的学习文档和资源:
1.朱老师物联网大讲堂:Linux开发所有的课程
2.正点原子的Linux开源图书和视频