
1. 荔枝派Zero与ST7789v屏幕的硬件准备荔枝派Zero搭载全志V3s芯片是一款性价比极高的嵌入式开发板。ST7789v则是常见的SPI接口LCD驱动芯片支持240x240或240x320分辨率。在开始前需要准备以下硬件荔枝派Zero开发板V3s芯片ST7789v驱动的LCD屏幕建议选择带CS引脚的型号杜邦线若干建议使用彩色线区分功能5V电源适配器8GB以上TF卡连线示意图屏幕引脚 荔枝派对应GPIO GND → GND VCC → 3.3V SCL → PC1 (SPI0_CLK) SDA → PC3 (SPI0_MOSI) RES → PB6 DC → PB5 CS → PC2 (SPI0_CS0) BLK → PB7 (背光控制)实际接线时有个坑要注意不同厂家的屏幕引脚命名可能不同我曾遇到过SDA被标为MOSI、SCL标为SCK的情况。建议先用万用表测量VCC和GND避免接反烧毁屏幕。2. 构建U-Boot与内核开发环境2.1 交叉编译工具链安装推荐使用Linaro GCC 7.5.0版本wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz export PATH$PATH:$(pwd)/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin2.2 定制U-Boot配置克隆官方仓库后需要修改关键配置git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current cd u-boot make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- LicheePi_Zero_defconfig在include/configs/sun8i.h中添加LCD参数#define CONFIG_VIDEO_LCD_MODE x:240,y:320,depth:18,pclk_khz:10000,le:20,ri:20,up:10,lo:10,hs:5,vs:5,sync:3,vmode:0 #define CONFIG_VIDEO_LCD_BL_PWM PB4编译时会遇到一个常见错误Error: selected processor does not support ARM mode。解决方法是在Makefile中给CFLAGS添加-marm参数。3. Linux内核驱动移植实战3.1 内核配置与编译使用5.10版本内核更稳定git clone -b zero-5.10.y https://github.com/Lichee-Pi/linux.git make ARCHarm licheepi_zero_defconfig make ARCHarm menuconfig关键驱动配置路径Device Drivers → Staging drivers → Support for small TFT LCD display modules → * FB driver for the ST7789V LCD Controller * Generic FB driver for TFT LCD displays3.2 设备树深度修改在sun8i-v3s-licheepi-zero-dock.dts中添加SPI节点spi0 { status okay; pinctrl-names default; pinctrl-0 spi0_pins; st7789v: st7789v0 { compatible sitronix,st7789v; reg 0; spi-max-frequency 32000000; rotate 90; fps 60; buswidth 8; dc-gpios pio 1 5 GPIO_ACTIVE_HIGH; // PB5 reset-gpios pio 1 6 GPIO_ACTIVE_HIGH; // PB6 debug 0; }; };遇到过最坑的问题是屏幕显示反色需要在驱动源码drivers/staging/fbtft/fb_st7789v.c中修改初始化序列static int init_display(struct fbtft_par *par) { write_reg(par, MIPI_DCS_SET_ADDRESS_MODE, 0x08); // 修改为0x08实现RGB顺序 // 其他初始化命令... }4. 系统烧录与启动优化4.1 TF卡分区方案推荐使用以下分区结构/dev/sdb1 1MB : spl和uboot /dev/sdb2 16MB : kernel和dtb (FAT32) /dev/sdb3 剩余空间 : rootfs (ext4)烧录命令示例dd ifu-boot-sunxi-with-spl.bin of/dev/sdb bs1024 seek8 mkfs.vfat /dev/sdb2 mkfs.ext4 /dev/sdb34.2 启动参数优化在/boot/boot.cmd中添加setenv bootargs consolettyS0,115200 root/dev/mmcblk0p3 rootwait panic10 setenv bootm_boot_mode sec load mmc 0:2 0x41000000 zImage load mmc 0:2 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb bootz 0x41000000 - 0x418000005. Qt应用开发与问题排查5.1 交叉编译Qt5.12配置参数示例./configure -prefix /opt/qt5.12.9-arm \ -opensource \ -confirm-license \ -release \ -no-opengl \ -linuxfb \ -no-gtk \ -no-cups \ -no-iconv \ -no-pch \ -no-icu \ -no-eglfs \ -no-dbus \ -no-feature-getentropy \ -xplatform linux-arm-gnueabi-g5.2 字体显示问题解决Qt应用不显示文字的常见解决方法在/opt/qt5.12.9-arm/lib/fonts目录放入.ttf字体文件设置环境变量export QT_QPA_FONTDIR/opt/qt5.12.9-arm/lib/fonts export QT_QPA_PLATFORMlinuxfb:fb/dev/fb05.3 触摸屏校准使用tslib进行校准export TSLIB_TSDEVICE/dev/input/event0 export TSLIB_CALIBFILE/etc/pointercal ts_calibrate6. 性能优化技巧SPI时钟优化在设备树中将spi-max-frequency提高到36MHz时需要确保PCB走线质量否则会出现雪花点。双缓冲技术修改FB驱动启用双缓冲static struct fb_fix_screeninfo fb_fix { .ypanstep 1, .ywrapstep 1, .accel FB_ACCEL_NONE, };Qt渲染优化在main函数中添加QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);7. 常见问题速查表现象可能原因解决方案屏幕白屏复位信号异常检查reset-gpios配置为GPIO_ACTIVE_HIGH显示颜色异常RGB顺序错误修改MIPI_DCS_SET_ADDRESS_MODE值Qt应用卡顿未启用硬件加速在设备树启用DE2.0显示引擎触摸坐标偏移未校准或环境变量错误重新运行ts_calibrate最后分享一个实用技巧使用fbset命令可以动态调整显示参数fbset -g 240 320 240 320 16