10. 设备树的编译¶
在U-boot和kernel的源码中都有设备树文件。按照U-Boot 的原⽣架构要求⼀块板卡必须对应⼀份 U-Boot dts, 并且U-Boot dts⽣成的dtb是打包到U-Boot⾃⼰的镜像中的。这样就会出现各SoC平台上,N块板卡需要N份U-Boot镜像。
我们不难发现,其实⼀个SoC平台不同的板卡之间主要是外设的差异,SoC核⼼部分是⼀致的。RK平台 为了实现⼀个SoC平台仅需要⼀份U-Boot镜像,因此增加了 kernel DTB 机制。 本质就是在较早的阶段切到kernel DTB,⽤它的配置信息初始化外设。
RK平台通过⽀持 kernel DTB 可以达到兼容板卡差异,如:display、pmic/regulator、pinctrl、clk等。
我们可以简单的理解为,一些基础的通用外设使用U-Boot的设备树来进行初始化,而不通用的部分通过在U-Boot阶段加载内核的设备树来初始化。 所以我们在修改设备树时,主要也是去修改内核的设备树。例如在LubanCat-RK系列的开发过程中, 就没有修改过U-Boot的设备树,直接使用了rk3568-evb板卡的设备树。
10.1. 编译设备树文件¶
借助LubanCat-SDK提供的编译环境,我们在编译kernel镜像的同时,也会编译对应的设备树。
在LubanCat-SDK根目录下运行以下命令开编译内核:
1 2 3 4 5 | # 编译kerneldeb文件
./build.sh kerneldeb
# 编译extboot分区
./build.sh extboot
|
编译生成的设备树文件和设备树源文件在同一目录下,如LubanCat-2板卡, 其设备树源文件是arch/arm64/boot/dts/rockchip/rk3568-lubancat-2.dts, 编译后生成的设备树文件是arch/arm64/boot/dts/rockchip/rk3568-lubancat-2.dtb。
10.2. 同一板卡更换设备树文件¶
10.2.1. extboot分区更换设备树文件¶
对于使用extboot分区的镜像而言,在生成extboot镜像时就已经将所有Makefile中指定的设备树都打包了进去, 板卡第一次启动时使用一个基础设备树,并在第一次系统启动以后根据板卡硬件ID自动切换为对应板卡的设备树。
系统的boot分区默认挂载在/boot目录下,如果我们要切换显示设备的话, 可以使用配置工具或直接修改/boot/rk-kernel.dtb软链接到的实际设备树的文件地址。
具体的切换方法请查看: 《设备树和设备树插件》
如果想要自己添加设备树的话,可以按以下流程进行:
在kernel/arch/arm64/boot/dts/rockchip下新建一个设备树源文件,如名称为rk3568-lubancat-2-xxx.dts
修改同一目录下的Makefile,在 dtb-$(CONFIG_CPU_RK3568) += 后添加rk3568-lubancat-2-xxx.dtb \
使用./build.sh kerneldeb命令构建内核deb包
使用./build.sh extboot命令构建extboot分区
使用./mkfirmware.sh命令重新打包固件
在rockdev目录下查看boot.img分区镜像文件
使用分区烧录工具进行烧录