这是本文档旧的修订版!
自定义设备树的实现
本文尚在完善中… —
一般设备树的编译是通过内核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目录内。
未完待续…
原始linux下的安装是在这里,我们仅需参考:
do_install:prepend:ccmp2() { if [ -d "${B}/arch/${ARCH}/boot/dts/digi" ]; then for dtbf in ${KERNEL_DEVICETREE}; do install -m 0644 "${B}/arch/${ARCH}/boot/dts/digi/${dtbf}" "${B}/arch/${ARCH}/boot/dts/" done fi }