本帖最后由 qiao--- 于 2024-2-11 13:51 编辑
前言:
开始我是打算自己写这个屏幕的驱动的,但是写到了一半过年了,然后还是决定配置一下这个屏幕的驱动吧。毕竟现在的Linux系统的绝大数驱动都可以用make menuconfig配置系统驱动+编写设备树的方式来驱动设备,可以大大减少我们的开发时间。
1.配置RGN_TFT的Linux驱动
我们进入我们之前拉取好的SDK目录下LuckFox_RV1106/luckfox-pico/sysdrv/source,这个目录中装着我们的所有源码,包括内核和buildroot。
我们进入kernel目录下将出厂的config文件拷贝到当前目录,这样减少了一些内核的基础配置。
cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config
然后我们输入下面的命令进入图形化配置界面
make ARCH=arm menuconfig
然后我们再图形化配置界面输入/搜索我们想要的驱动st7735的驱动
我们输入1跳转到屏幕驱动界面,如下图所示
我们输入Y选中这个驱动就行了,我们接着退出图形化界面当提示到是否保存的时候保存一下就行了。
然后我们将当前界面的.config文件拷贝覆盖至原来的配置文件中。
cp .config ./arch/arm/configs/luckfox_rv1106_linux_defconfig
2.编写设备树
设备树也是编译进源码内核当中的,所以我们把设备树也写好然后一起编译进内核。
设备树在内核源码的/kernel/arch/arm/boot/dts目录下。找到rv1106g-luckfox-pico-pro-max.dts文件
这里打算用PA2作为屏幕的dc引脚,用PA3作为屏幕的reset引脚,用spi0驱动我们的屏幕
我们先把PA2和PA3的引脚节点写出来如下图所示
紧接着我们在spi0节点下写出我们的st7735节点,如下图所示
这样我们把st7735的设备描绘出来了。但是这样肯定还是驱动不了的,因为我们的PA2和PA3引脚默认是被用到了SDMMC,我们需要把相关的代码注释掉,如下图所示:
这样我们的所有代码工做就完成了。
我们进入SDK 的主目录下输入下面的命令进行编译内核
./build.sh kernel
编译的结果会被输出到output/image文件夹下面
我们用这个替换掉之前的 boot.img文件,然后用我第二期的烧录方法烧录进板子就行了。
3.实验效果
我们给板子上电连接串口后可以看到内核启动过程,下面是我们屏幕的适配信息
我们登录到系统中进入/dev目录下,可以看到fb0设备
我们编写一个简单的用例测试下板子的颜色显示
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/mman.h>
uint16_t color = 0xff00;
uint16_t color2 = 0xff0;
uint16_t color3 = 0xff;
#define mmap_size 128*160*2
int main()
{
int fd = open("/dev/fb0", O_RDWR);
printf("fd=%d\r\n", fd);
uint16_t *fb0 = mmap(NULL, mmap_size, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0);
printf("fb0=%x\r\n", fb0);
perror("errno=");
for (int i = 0; i < (mmap_size / 2); i++)
fb0[i] = color;
sleep(1);
for (int i = (mmap_size / 2/2); i < (mmap_size / 2); i++)
fb0[i] = color2;
sleep(1);
for (int i = 0; i < (mmap_size / 2); i++)
fb0[i] = color3;
close(fd);
return 0;
}
运行效果:
IMG_8468
总结:Luckfox幸狐 RV1106 Linux 开发板spi能够很好驱动ST7735屏幕,颜色测试正常。下期我会给开发板移植qt,使其能够进行对GUI的开发。