差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
digi:arm-embedded:ccmp2:customdt [2024/10/17 21:48] robindigi:arm-embedded:ccmp2:customdt [2025/03/11 16:54] (当前版本) robin
行 22: 行 22:
 <code> <code>
 git clone https://github.com/peyoot/ccmp25_dt.git git clone https://github.com/peyoot/ccmp25_dt.git
-cd ccmp25_dt +利用vscode之类编辑器远程创建修改相关的设备树文件,比如命名为ccmp25-plc.dts,并定时保存工作
-nano ccmp257plc.dts  +
-复制上传smartIOmux的设备树文件内容+
 </code> </code>
  
-然后在ccmp257plc.dts上做更改,并定时保存工作+第三步:链接文件到digi的dts源码目录,并在Makefile里添加该设备树 
 +<code> 
 +cd tmp/work-shared/ccmp25-dvk/kernel-source/arch/arm64/boot/dts/digi 
 +ln -s ~/mygit/github/ccmp25_dt/ccmp25-plc.dts  
 +nano Makefile 
 +</code> 
 +在编译目标中插入ccmp25-plc.dtb 
 +<code> 
 +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 \ 
 +</code>
  
-步:链接文件digidts源码目录+步:回到项目文件夹编译 
 +<code> 
 +cd ../../../../../../../../.. 
 +如果之前session已经发退出,可重新source一下 
 +source dey-setup-environment 
 +bitbake -c devshell virtual/kernel 
 +查一下文件是否在列 
 +ls arch/arm64/boot/dts/digi
 +然后编译 
 +make clean dtbs 
 +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文件,就是我们编译好的设备树文件。 
 +</code>
  
-未完待续...+第五步:测试设备树文件 
 +首先要把它拷贝出来,因为目录都比较深,所以可以用deyaio的publish.sh脚本,快速拷贝相关文件到release目录内。
  
 +单独测试设备树,可以重新以可读写的方式mount一下linux分区
 +<code>
 +mount -o remount,rw /mnt/linux 
 +再把设备树拷入到内核分区中
 +</code>
  
  
 +第六步:编译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里,以便boot.scr脚本根据板子来选择设备树。这对正式量产的板子是有用的。不过调试阶段,最简单的方法就是更改默认要加载的设备树,并创建install_plc_fw_sd.txt链接文件,并添加它的编译。这样卡刷包里有了区别开发板卡刷的脚本,并且应用了我们自己的设备树。
  
 +DEY AIO为节约空间应用了空享缓存的机制,同一个版本可以加快不同项目的编译,当我们对源码有一些修改时,可能需要删除掉共享状态的缓存,以便更改的源码并正确应用,这一般是用:bitbake -c cleansstate your-package来实现。
 +<code>
 +bitbake -c cleansstate u-boot-dey
 +</code>
  
-原始linux下的安装是在这里,我们仅需参考+<code> 
 +mkdir -p ~/mygit/github/ccmp25_dt/uboot/configs 
 +cp tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/install_linux_fw_sd.txt ~/mygit/github/ccmp25_dt/uboot/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/uboot/configs/ccmp25-dvk_defconfig
 +nano ~/mygit/github/ccmp25-plc/uboot/configs/ccmp15-dvk_defconfig
 +改为CONFIG_DEFAULT_FDT_FILE="ccmp25-dvk.dtb"
 +再链接回编译目录:ln -s
 +</code>
 +
 +最后编译,应该用bitbakey -C compile u-boot-dey来实现。
 +
 +===uboot设备树的编译===
 +
 +===反查设备树===
 +
 +$ fiptool unpack <fip-file> --out <out-folder>
 +Then decompile the extracted hw-config.bin (U-boot device tree)
 +$ dtc -I dtb -O dts -o uboot.dts hw-config.bin
 +Finally inspect the DTS file
 +$ less uboot.dts
 +
 +
 +
 +
 +
 +下面改用在meta-digi或meta-custom内实现。
 +
 +====meta-digi中修改或创建uboot的安装脚本====
 +在另一个章节会尝用自己的layer来创建uboot的安装脚本,这涉及到对yocto配方的理解和掌握,初学者并不容易。
 +但对meta-digi的修改则容易很多,只需要有办法管理git和repo源的变更,在upstream更新或是重建项目时,能很快重新应用相关的改动。本章节记叙这一最常见的用法。
 +
 +1、repo下meta-digi版本变动和管理
 +deyaio在初始化项目时,已经为meta-digi指定了版本,我们进入meta-digi源码目录时,可以用git branch -a来查询可用的分支,此时一般是这样的:
 <code> <code>
-do_install:prepend:ccmp2() { +robin@dev-all-in-one-ubuntu:~/deyaio/dey4.0/sources/meta-digi$ git branch -a 
-    if [ -d "${B}/arch/${ARCH}/boot/dts/digi" ]; then +(no branch
-        for dtbf in ${KERNEL_DEVICETREE}; do +  remotes/digi/gatesgarth 
-            install -m 0644 "${B}/arch/${ARCH}/boot/dts/digi/${dtbf}" "${B}/arch/${ARCH}/boot/dts/+  remotes/digi/jethro 
-        done +  remotes/digi/kirkstone 
-    fi +  remotes/digi/kirkstone_ccmp2-cc91-beta 
-}+  remotes/digi/morty 
 +  remotes/digi/rocko 
 +  remotes/digi/thud 
 +  remotes/digi/zeus 
 +  remotes/m/main -> digi/kirkstone
 </code> </code>
 +由于是通过repo初始化项目,因此当前本地文件本没有使用任一分支,而是由repo init和repo sync拉取源码时的分离头指针。可以用git show或git log -1来查得相关远程分支和哈希值。
 +
 +我们可以直接检出或切换本地分支来做修改或开发,以便不影响远程分支的情况下保留自己的工作内容。
 +
 +<code>
 +git checkout -b dev
 +进行修改操作后,我们可以放入自己的fork出的meta-digi分支下管理,如果涉及到多个layer的变动,也可以在上一级目录里建一个git,把各种变更都放在一个库中管理起来。
 +
 +任何时候,我们想恢复项目和官方源同步时,我们可以到deyaio目录下,用git reflog配合git reset --hard + git clean -df 即可
 +用这个方法可以快速在本地修改版本和官方源之间切换。
 +
 +</code>
 +
 +
 +====meta-custom中添加uboot的脚本并编译====
 +首先,创建一个meta-custom的分支dev,把我们要的东西放在上面,并入正式版本前,先测试:
 +在deyaio中,到deyaio/dey4.0/meta-cutom下,用下面命令检出并切换这个测试分支:
 +<code>
 +git remote -v
 +git fetch peyoot dev
 +git checkout dev
 +</code>
 +
 +
 +
 +
 +
 +
 +
 +