跳到主要内容位置

立创tspi训练营笔记-rk3566修改编译设备树即编译内核(使用WSL、docker)

关于什么是设备树,设备树的语法,单独编译设备树的方法可以查看立创开发板训练营-Linux设备树的文档。

本文主要讲解使用WSL2与Docker修改设备树文件,编译内核并下载到开发板上。

关于WSL2、Docker的安装可以参考我之前的笔记:

立创泰山派tspi-Windows11安装与配置WSL

立创泰山派tspi-训练营笔记-WSL2安装使用Docker(Win11)

立创泰山派tspi-训练营笔记-WSL2使用Docker编译泰山派tspi的SDK(Win11)


修改设备树文件#

我们就以立创训练营的作业选几个为例来修改设备树:

  • 修改设备树失能泰山派上的三色用户LED灯
  • 修改设备树失能和使能HDMI输出
  • 关闭网口解决串口因寻不到网口频繁打印日志问题
  • 调试串口的波特率目前是1500000,尝试把波特率改成115200

如果使用WSL可以直接使用vscode打开SDK的文件夹:

第一次打开会有个弹窗,点允许就可以。

在右侧找到设备树文件,如图进入这个目录,拉到最下面

  • 修改设备树失能泰山派上的三色用户LED灯

    tspi-rk3566-user-v10-linux.dts文件中设置三色灯状态为disabled

    //用户三色灯
    &leds {
    status = "disabled";
    };

    LED默认还是亮,这是因为disabled仅仅是不能闪烁和操作了,而在驱动中LED被默认点亮了。

    RGB LED原理图如下所示:

    因此如果想熄灭LED,我们可以把上面的status = "okay";改回来,然后把打开时间blink-delay-on改为0即可

    leds: leds {
    compatible = "gpio-leds";
    rgb_led_r: rgb-led-r {
    gpios = <&gpio1 RK_PB2 GPIO_ACTIVE_LOW>;
    linux,default-trigger = "timer";
    linux,delay-reg = <0>; // 延时注册
    linux,blink-delay-on = <0>; // 打开时间
    linux,blink-delay-off = <1000>; // 关闭时间
    };
    rgb_led_g: rgb-led-g {
    gpios = <&gpio1 RK_PB1 GPIO_ACTIVE_LOW>;
    linux,default-trigger = "timer";
    linux,delay-reg = <100>; // 延时注册
    linux,blink-delay-on = <0>;
    linux,blink-delay-off = <1000>;
    };
    rgb_led_b: rgb-led-b {
    gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_LOW>;
    linux,default-trigger = "timer";
    linux,delay-reg = <100>; // 延时注册
    linux,blink-delay-on = <0>;
    linux,blink-delay-off = <1000>;
    };
    };
  • 修改设备树失能和使能HDMI输出

    在开头写的很清楚:

    //【开/关】HDMI 显示屏幕配置,里面内容几乎可以不用动,如果不需要hdmi显示直接注释掉即可
    //#include "tspi-rk3566-hdmi-v10.dtsi"

    可以选择注释掉或者如下图进去设置状态为disabled

  • 关闭网口解决串口因寻不到网口频繁打印日志问题

    同样把网口注释掉就行

  • 调试串口的波特率目前是1500000,尝试把波特率改成115200

    修改tspi-rk3566-core-v10.dtsi中的串口波特率属性,如下图所示

编译内核(包括设备树)#

windows需要先打开docker

然后如下图,在命令行启动并进入docker:

docker ps -a //查看容器
docker start lckfb_xly_container //启动容器
docker attach lckfb_xly_container //进入容器

编译内核:

lckfb@lckfb:~$ ls
app build.sh dtc_test Makefile rkflash.sh u-boot
br.log debian envsetup.sh mkfirmware.sh rockdev yocto
buildroot device external prebuilts tools
buildroot_dl_4c7c9df616fb.tar.gz docs kernel rkbin tspi_linux_sdk_repo_20240131.tar.gz
lckfb@lckfb:~$ ./build.sh kernel

拷贝boot.img到windows#

查看rockchip目录,boot.img -> /home/lckfb/kernel/boot.img,我们接下来只需要把/home/lckfb/kernel/boot.img拷贝到windows,注意这里是docker目录。

lckfb@lckfb:~$ ls -l rockdev/
total 12556
lrwxrwxrwx 1 lckfb lckfb 27 Mar 9 15:15 boot.img -> /home/lckfb/kernel/boot.img
lrwxrwxrwx 1 lckfb lckfb 41 Mar 9 10:03 MiniLoaderAll.bin -> ../u-boot/rk356x_spl_loader_v1.13.112.bin
lrwxrwxrwx 1 lckfb lckfb 44 Mar 9 10:03 misc.img -> ../device/rockchip/rockimg/wipe_all-misc.img
-rw-r--r-- 1 lckfb lckfb 17457152 Mar 9 10:03 oem.img
lrwxrwxrwx 1 lckfb lckfb 53 Mar 9 10:03 parameter.txt -> ../device/rockchip/rk356x/parameter-buildroot-fit.txt
lrwxrwxrwx 1 lckfb lckfb 64 Mar 9 10:03 recovery.img -> ../buildroot/output/rockchip_rk356x_recovery/images/recovery.img
lrwxrwxrwx 1 lckfb lckfb 54 Feb 6 05:40 rootfs.ext4 -> ../buildroot/output/rockchip_rk3566/images/rootfs.ext2
lrwxrwxrwx 1 lckfb lckfb 54 Mar 9 10:03 rootfs.img -> ../buildroot/output/rockchip_rk3566/images/rootfs.ext2
lrwxrwxrwx 1 lckfb lckfb 19 Mar 9 10:03 uboot.img -> ../u-boot/uboot.img
-rw-r--r-- 1 lckfb lckfb 4472832 Mar 9 10:03 userdata.img

我们先退出到docker(一定要先退出docker,如果容器正在运行,则复制的文件可能会被锁定),然后使用dockcer cp命令:

docker cp lckfb_xly_container:/home/lckfb/kernel/boot.img /mnt/c/Users/whc/Desktop/

lckfb_xly_container:容器名称

/home/lckfb/kernel/boot.img:容器内文件的路径,这里记得修改为你自己的boot.img路径哦

/mnt/c/Users/whc/Desktop/:要拷贝到的容器外的路径,因为WSL2自动把windows的盘符挂载到/mnt目录下,我们可以直接拷贝到windows的桌面上,这里记得修改为你自己的路径哦

下载到开发板#

这一部分就参考立创教程,烧录boot.img就行

  1. 烧录工具、驱动、配置文件都要下载安装好
  2. 导入配置Tspi_Linux_config.cfg
  3. 按住开发板的REC键,点击RST键,进入LOADER设备模式
  4. 烧录工具仅选中boot,选择自己的boot.img,我的刚才放在桌面了
  5. 勾选强制按地址写
  6. 点击执行

动画

查看结果:

就可以使用串口,波特率为115200连接了。串口也不会打印频繁打印网口日志问题,HDMI插上也没有输出的。

image-20240310123610121

大家可以尝试RGB三个灯同时闪烁就变成了,白色的呼吸灯效果,表示系统运行的“心跳”