差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
digi:arm-embedded:ccmp2:customdt [2024/10/17 21:48] – robin | digi:arm-embedded:ccmp2:customdt [2025/03/11 16:54] (当前版本) – robin | ||
---|---|---|---|
行 22: | 行 22: | ||
< | < | ||
git clone https:// | git clone https:// | ||
- | cd ccmp25_dt | + | 利用vscode之类编辑器远程创建或修改相关的设备树文件,比如命名为ccmp25-plc.dts,并定时保存工作 |
- | nano ccmp257plc.dts | + | |
- | 复制或上传smartIOmux的设备树文件内容 | + | |
</ | </ | ||
- | 然后在ccmp257plc.dts上做更改,并定时保存工作 | + | 第三步:链接文件到digi的dts源码目录,并在Makefile里添加该设备树 |
+ | < | ||
+ | cd tmp/ | ||
+ | ln -s ~/ | ||
+ | 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 \ | ||
+ | </ | ||
- | 第三步:链接文件到digi的dts源码目录 | + | 第四步:回到项目文件夹编译 |
+ | < | ||
+ | cd ../ | ||
+ | 如果之前session已经发退出,可重新source一下 | ||
+ | source dey-setup-environment | ||
+ | bitbake -c devshell virtual/ | ||
+ | 查一下文件是否在列 | ||
+ | ls arch/ | ||
+ | 然后编译 | ||
+ | make clean dtbs | ||
+ | make dtbs | ||
+ | 如果出错,有语法错误,及时修复再编译, | ||
+ | 检查dtb是否已经生成 | ||
+ | ls / | ||
+ | 目录内会有和设备树源码同文件名的dtb文件,就是我们编译好的设备树文件。 | ||
+ | </ | ||
- | 未完待续... | + | 第五步:测试设备树文件 |
+ | 首先要把它拷贝出来,因为目录都比较深,所以可以用deyaio的publish.sh脚本,快速拷贝相关文件到release目录内。 | ||
+ | 单独测试设备树,可以重新以可读写的方式mount一下linux分区 | ||
+ | < | ||
+ | mount -o remount,rw / | ||
+ | 再把设备树拷入到内核分区中 | ||
+ | </ | ||
+ | 第六步:编译boot.txt和install_linux_fw_sd.txt,在启动时加载自定义的设备树。 | ||
+ | 一般地,在meta-digi/ | ||
+ | 更高级的用法,应该是在efuse里设置board_name里, | ||
+ | DEY AIO为节约空间应用了空享缓存的机制,同一个版本可以加快不同项目的编译,当我们对源码有一些修改时,可能需要删除掉共享状态的缓存,以便更改的源码并正确应用,这一般是用:bitbake -c cleansstate your-package来实现。 | ||
+ | < | ||
+ | bitbake -c cleansstate u-boot-dey | ||
+ | </ | ||
- | 原始linux下的安装是在这里,我们仅需参考: | + | < |
+ | mkdir -p ~/ | ||
+ | cp tmp/ | ||
+ | 加上:BOOT_SCRIPTS += " | ||
+ | 链接回编译目录:ln -s | ||
+ | cp tmp/ | ||
+ | nano ~/ | ||
+ | 改为CONFIG_DEFAULT_FDT_FILE=" | ||
+ | 再链接回编译目录:ln -s | ||
+ | </ | ||
+ | |||
+ | 最后编译,应该用bitbakey -C compile u-boot-dey来实现。 | ||
+ | |||
+ | ===uboot设备树的编译=== | ||
+ | |||
+ | ===反查设备树=== | ||
+ | |||
+ | $ fiptool unpack < | ||
+ | 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来查询可用的分支,此时一般是这样的: | ||
< | < | ||
- | do_install:prepend: | + | robin@dev-all-in-one-ubuntu:~/ |
- | if [ -d "${B}/arch/${ARCH}/boot/dts/digi" ]; then | + | * (no branch) |
- | for dtbf in ${KERNEL_DEVICETREE}; | + | |
- | install | + | remotes/digi/jethro |
- | done | + | remotes/digi/kirkstone |
- | fi | + | |
- | } | + | remotes/digi/morty |
+ | remotes/digi/rocko | ||
+ | remotes/digi/thud | ||
+ | remotes/digi/zeus | ||
+ | remotes/m/main -> digi/kirkstone | ||
</ | </ | ||
+ | 由于是通过repo初始化项目,因此当前本地文件本没有使用任一分支,而是由repo init和repo sync拉取源码时的分离头指针。可以用git show或git log -1来查得相关远程分支和哈希值。 | ||
+ | |||
+ | 我们可以直接检出或切换本地分支来做修改或开发,以便不影响远程分支的情况下保留自己的工作内容。 | ||
+ | |||
+ | < | ||
+ | git checkout -b dev | ||
+ | 进行修改操作后,我们可以放入自己的fork出的meta-digi分支下管理,如果涉及到多个layer的变动,也可以在上一级目录里建一个git,把各种变更都放在一个库中管理起来。 | ||
+ | |||
+ | 任何时候,我们想恢复项目和官方源同步时,我们可以到deyaio目录下,用git reflog配合git reset --hard + git clean -df 即可 | ||
+ | 用这个方法可以快速在本地修改版本和官方源之间切换。 | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ====meta-custom中添加uboot的脚本并编译==== | ||
+ | 首先,创建一个meta-custom的分支dev,把我们要的东西放在上面,并入正式版本前,先测试: | ||
+ | 在deyaio中,到deyaio/ | ||
+ | < | ||
+ | git remote -v | ||
+ | git fetch peyoot dev | ||
+ | git checkout dev | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ |