前文回顾
《Linux驱动开发(一)—环境搭建与hello world》
《Linux驱动开发(二)—驱动与设备的分离设计》
《Linux驱动开发(三)—设备树》
《Linux驱动开发(四)—树莓派内核编译》
《Linux驱动开发(五)—树莓派设备树配合驱动开发》
《Linux驱动开发(六)—树莓派配合硬件进行字符驱动开发》
《Linux驱动开发(七)—树莓派按键驱动开发》
《Linux驱动开发(八)—树莓派SR04驱动开发》
《Linux驱动开发(九)—树莓派I2C设备驱动开发(BME280)》
《Linux驱动开发(十)—树莓派输入子系统学习(红外接收)》
《Linux驱动开发(十一)—树莓派SPI驱动学习(OLED)》
《Linux驱动开发(十二)—树莓派framebuffer学习(改造OLED)》
《Linux驱动开发(十三)—USB驱动HID开发学习(鼠标)》
《Linux驱动开发(十四)—USB驱动开发学习(键盘+鼠标)》
继续宣传一下韦老师的视频

70天30节Linux驱动开发快速入门系列课程【实战教学、技术讨论、直播答疑】
内核中目前存在了大量的设备驱动,如何能够快速利用起来,也是驱动工程师需要掌握的,毕竟人家都写好了,再从头去写,何苦呢?
本章目的
如果我们需要在自己的linux设备上增加一个外设,例如一个屏幕,一个键盘,首先要想到的不是去写驱动,而是看一下系统有没有带驱动。例如这块SPI的TFT屏幕,驱动芯片是ili9341。
都是学习单片机遗留下来的东西,现在学驱动又能玩一波了。
寻找驱动
那么首先要在内核中查询是否有该芯片的屏幕驱动。通过在menuconfig中搜索关键词ili9341,我们就发现了它本身已经动态编译了ili9341的fb驱动,并且是支持framebuffer的。
进入开发板看一下,连我们之前开发的ssd1306的驱动都存在了。
不过不要觉得写驱动就没有意义了,写驱动一方面能够将单片机的知识应用到linux上,熟悉驱动的逻辑架构,还能够让你更快速的了解一个别人写好的驱动。万一遇到bug,也知道从哪里入手。
设备树
既然驱动已经存在了。那么按照总线设备驱动模型,要想正常工作,就需要增加设备信息,提供给驱动使用,才能完成设备的驱动。
那么这个设备树如何编写,两个思路,
- 参考已有的设备树中别人怎么写的
- 查看内核的设备树文档了。
来查找一下有没有介绍文档
root@ubuntu:/home/pgg/shumeipai/linux/Documentation# find ./ -name "*ili9341*"
./devicetree/bindings/display/ilitek,ili9341.txt
./devicetree/bindings/display/panel/ilitek,ili9341.yaml
发现了描述文档《ilitek,ili9341.txt》,内容如下,告诉了你它是一个SPI模式控制器,需要三个关键参数,
compatile,dc-gpios和rest-gpios,还有一个例子。