树莓派随笔
3B/4B设备(from kernel 5.4)添加fbtft小型LCD屏幕支持
1. 问题记录
在树莓派平台上如果想使用自己的TFT-LCD屏幕,目前网上的解决方案都是使用fbtft_device添加LCD设备。但是此方法自linux 5.4内核后便不能再使用,详见notro/fbtft/wiki:
fbtft_device is a kernel module for registering FBTFT devices.
Note: fbtft_device is not available starting from Linux 5.4
这也就导致了3B以后的设备无法再使用之前的方法添加LCD设备。
2. 解决方案
本文案例使用SPI-ILI9341屏幕,参考Watterott electronic的支持文档,这里使用Watterott electronic的设备树支持(国外网站)。其实ili9341的驱动在linux内核中已经自带了,感兴趣的同学可以查看一下linux内核源码,也可以直接在树莓派中输入指令查询:
ls /lib/modules/5.10.17-v7+/kernel/drivers/staging/fbtft/
对于大部分SPI屏幕,所需要的引脚除了SPI总线的MOSI/MISO/SCK/CE,还需要额外的DC/RESET/LED。对于树莓派,其本身只有一个SPI0,片选信号也理所当然的选择CE0,那么接下来主要就是适配这些额外的控制引脚。参照Watterott electronic提供的安装方法(Home> RPi HATs> RPi-Display> FBTFT Installation),我们在树莓派中对应的加入相关设备树覆盖。
wget -N https://github.com/watterott/RPi-Display/raw/master/software/rpi-display.dtbo
sudo cp rpi-display.dtbo /boot/overlays/rpi-display.dtbo
上述步骤是从GitHub上下载对应的rpi-display.dtbo文件,并加入树莓派的动态设备树覆盖文件目录中。这里笔者测试直接在树莓派中进行wget下载速度较慢,可以在PC端上直接从GitHub中下载好,然后通过nfs挂载方法,将文件传至树莓派中。
这里的.dtbo是已经编译好的二进制文件,无法直接查看,我们使用前还需要知道具体DC/RESET/LED的物理引脚是什么,那么便查看此dtbo编译前的dts文件,见:
https://github.com/watterott/RPi-Display/blob/master/software/rpi-display-overlay.dts
在上述文件中我们很轻易的就能找到ili9341对应的设备树详情,可以看到RESET对应BCM-23,DC对应BCM-24,LED对应BCM-18(后面的1、0代表引脚的初始状态,1为低电平,0为高电平),这里再附上一张树莓派3B的引脚图,方便读者参考,如图对应连接即可。
进行完上述步骤后,按照Watterott electronic提供的安装方法进行安装。
wget -N https://github.com/watterott/RPi-Display/raw/master/rpi-display.sh
sudo /bin/bash rpi-display.sh 270
Enable TFT display driver and activate X windows on TFT display? y/n Y
Activate the console on the TFT display? y/n Y
Install fbcp (Framebuffer Copy)? y/n N
Install xinput-calibrator? y/n Y
Install tslib (touchscreen library)? y/n N
Reboot the system now? y/n Y
Rebooting now...
sudo startx
安装完后确认连线正确,重启树莓派后应该就能成功看到界面了。
Good Luck.