关于什么是设备树,设备树的语法,单独编译设备树的方法可以查看立创开发板训练营-Linux设备树的文档。
本文主要讲解使用WSL2与Docker修改设备树文件,编译内核并下载到开发板上。
关于WSL2、Docker的安装可以参考我之前的笔记:
立创泰山派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就行
- 烧录工具、驱动、配置文件都要下载安装好
- 导入配置
Tspi_Linux_config.cfg
- 按住开发板的REC键,点击RST键,进入LOADER设备模式
- 烧录工具仅选中boot,选择自己的boot.img,我的刚才放在桌面了
- 勾选强制按地址写
- 点击执行
查看结果:
就可以使用串口,波特率为115200连接了。串口也不会打印频繁打印网口日志问题,HDMI插上也没有输出的。
大家可以尝试RGB三个灯同时闪烁就变成了,白色的呼吸灯效果,表示系统运行的“心跳”