这是本文档旧的修订版!
自定义设备树的实现
本文尚在完善中… —
一般设备树的编译是通过内核recipe来实现的,比如MP2目前是在: https://github.com/digi-embedded/meta-digi/blob/kirkstone/meta-digi-arm/recipes-kernel/linux/linux-dey_6.1.bb
我们一般无需更改或做一个bbapend,更方便的方法是,先手动在devshell里编译出设备树,然后在meta-custom中用文件系统复制的方式,把测试过的设备树复制到文件系统该有的位置。并通过UBoot的启动脚本在启动时加载特定设备树文件,从而让嵌入式系统镜像使用该设备树。
一般地,编译完任一个基础镜像后,在~/deyaio/dey4.0/workspace/ccmp25/tmp/work/ccmp25_dvk-dey-linux/linux-dey/6.1-r0/build/arch/arm64/boot/dts/digi中存放的是编译的结果。 而源码则位于:~/deyaio/dey4.0/workspace/ccmp25/tmp/work-shared/ccmp25-dvk/kernel-source/arch/arm64/boot/dts/digi
建议使用DEY AIO来进行系统开发,这部分包括了自定义的文件系统和自用板子设备树的实现。
在DEY AIO项目中,我们可以通过链接文件的方式,来把设备树项目用git的方式管理起来。比如,我们的deyaio目录是在~/deyaio,而我们开发的目录是~/github/dev/ccmp25_plc_dt,这里的ccmp25_plc_dt下的设备树文件用链接方式把设备树文件映射到DEY项目中。
第一步,利用DEY AIO工具编译一个基础镜像,比如core-image-base
第二步,创建git项目,将SmartIOMux导出的设备树文件重命名,比如ccmp257plc.dts,提交一份初始值:
git clone https://github.com/peyoot/ccmp25_dt.git 利用vscode之类编辑器远程创建或修改相关的设备树文件,比如命名为ccmp25-plc.dts,并定时保存工作
第三步:链接文件到digi的dts源码目录,并在Makefile里添加该设备树
cd tmp/work-shared/ccmp25-dvk/kernel-source/arch/arm64/boot/dts/digi ln -s ~/mygit/github/ccmp25_dt/ccmp25-plc.dts nano Makefile
在编译目标中插入ccmp25-plc.dtb
ccmp25-dtbs := ccmp25-dvk.dtb \ ccmp25-plc.dtb \ _ov_board_e55rb-i-mw346-c-mipi-dsi_ccmp25-dvk.dtbo \ _ov_board_g101evn010-lvds_ccmp25-dvk.dtbo \
第四步:回到项目文件夹编译
cd ../../../../../../../../.. 如果之前session已经发退出,可重新source一下 source dey-setup-environment bitbake -c devshell virtual/kernel 查一下文件是否在列 ls arch/arm64/boot/dts/digi/ 然后编译 make dtbs 如果出错,有语法错误,及时修复再编译,直到编译成功 检查dtb是否已经生成 ls /home/rtu/deyaio/dey4.0/workspace/ccmp25/tmp/work/ccmp25_dvk-dey-linux/linux-dey/6.1-r0/build/arch/arm64/boot/dts/digi/ 目录内会有和设备树源码同文件名的dtb文件,就是我们编译好的设备树文件。
第五步:测试设备树文件 首先要把它拷贝出来,因为目录都比较深,所以可以用deyaio的publish.sh脚本,快速拷贝相关文件到release目录内。
第六步:编译boot.txt和install_linux_fw_sd.txt,在启动时加载自定义的设备树。 一般地,在meta-digi/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp2和meta-digi-arm/recipes-bsp/u-boot/u-boot-dey/ccmp25-dvk下有uboot安装镜像的脚本,启动时加载的设备树文件一般由fdt_file定义,所以只需调整install_linux_fw_sd.txt,在bootcmd里加上fdt_file的定义,即可实现卡刷脚本来实现加载自定义的设备树文件。
以前记得,更高级的用法,应该是在efuse里设置board_name里定义,这对正式量产的板子是有用的,比如这已经成型的plc pcba,不过我们仍可以只简单地刷install_plc_fw_sd来实现,如果不想用install_linux_fw_sd的话,这就意味着,我们需要创建install_plc_fw_sd.txt链接文件,并添加它的编译。
cp tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/install_linux_fw_sd.txt ~/mygit/github/ccmp25-plc/install_plc_fw_sd.txt nano ~/mygit/github/ccmp25-plc/install_plc_fw_sd.txt 加上:BOOT_SCRIPTS += “install_plc_fw_sd.scr:install_plc_fw_sd.scr” 链接回编译目录:ln -s cp tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/git/configs/ccmp25-dvk_defconfig ~/mygit/github/ccmp25-plc/configs/ccmp25-dvk_defconfig nano ~/mygit/github/ccmp25-plc/configs/ccmp15-dvk_defconfig 改为CONFIG_DEFAULT_FDT_FILE=“ccmp25-dvk.dtb” 再链接回编译目录:ln -s
最后编译:bitbake u-boot-dey (是不是要加变量,待考证)