差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
digi:arm-embedded:uboot:ccmp-uboot [2024/11/03 23:05] robindigi:arm-embedded:uboot:ccmp-uboot [2024/11/05 23:18] (当前版本) robin
行 24: 行 24:
 </code> </code>
 其中解包op-tee镜像出来的得到的nt-fw.bin是uboot不带设备树的文件。 其中解包op-tee镜像出来的得到的nt-fw.bin是uboot不带设备树的文件。
 +====修改内核设备树====
 +内核设备树是从uboot启动进入系统时加载的设备树,它和uboot时的可以不一样。一般地,自定义的板子,linux也要同样改好ccmp25-plc.dts和相关的makefile,然后在local.conf里加上这句:
 +<code>
 +KERNEL_DEVICETREE += "ccmp25-plc.dtb"
 +</code>
 +
 +在devshell里直接编译
 +<code>
 +bitbake -c devshell linux-dey
 +</code>
 +应用改动,然后make dtbs,编译出本地修改的相关的设备树ccmp25-plc.dtb
 =====修改U-Boot 源码===== =====修改U-Boot 源码=====
 +在工作区域修改U-Boot,首先要编译一个,以便拉取源码到工作区域。要清空之前的编译结果:
 +<code>
 +bitbake -c cleansstate tf-a-stm32mp
 +bitbake -c cleanall tf-a-stm32mp
 +bitbake -c cleansstate u-boot-dey
 +bitbake -c cleanall u-boot-dey
 +</code>
 +一般不需要对u-boot-dey清除工作,除非源码区乱了。如果清空后,要先用bitbake u-boot-dey编译出一个来。
 对U-Boot的修改,和内核的修改一样,需要在git目录中,以ccmp25为例,是tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/下的git目录。其中包括: 对U-Boot的修改,和内核的修改一样,需要在git目录中,以ccmp25为例,是tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/下的git目录。其中包括:
 <code> <code>
行 31: 行 50:
 tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/git/arch/arm/dts/ccmp25-dvk-u-boot.dtsi  如果修改发生在dtsi中,也要一并修改 tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/git/arch/arm/dts/ccmp25-dvk-u-boot.dtsi  如果修改发生在dtsi中,也要一并修改
 tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/git/arch/arm/dts/Makefile  添加要编译的自定义设备树 tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/git/arch/arm/dts/Makefile  添加要编译的自定义设备树
 +修改uboot时,上面这些文件需要修改,最好是在目录外新建个git项目,把修改的文件以链接文件的形式链接进来,这样也方便检查是否被覆盖
 </code> </code>
-如果您使用bitbake -C compile u-boot-dey,这会生成uboot的二进制和相关的设备树,用bitbake u-boot-dey并没有什么+如果不是Arm Trusted Fimware,一般是用bitbake -C compile u-boot-dey,这会生成uboot的二进制和相关的设备树,用bitbake u-boot-dey只会用缓存,所以要用它,也无需用:bitbake u-boot-dey -f -c do_deploy  
 +, 以下是非安全功能的UBoot编译结果和部署的地方。
 <code> <code>
  
-其备树在:tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/build/ccmp25-dvk_defconfig/arch/arm/dts/+备树在:tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/build/ccmp25-dvk_defconfig/arch/arm/dts/
 U-Boot在:tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/image U-Boot在:tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/image
 U-Boot也在:tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/  U-Boot也在:tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/ 
 并且启动脚本也是在tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/ 并且启动脚本也是在tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/
 </code> </code>
-如果想要确保部署:bitbake u-boot-dey -f -c do_deploy +但对于CCMP系列带安全功能支持的核心板来说,UBoot和设备树是被打包在FIP镜像中,事实上,如果深究uboot的配方,会发现deploy阶段,是把设备树和不带设备树的uboot拷到deploy-u-boot-dey/uboot目录下。所以,这两个文件才是启动的关键文件:
- +
-事实上,如果深究uboot的配方,会发现deploy阶段,是把设备树和不带设备树的uboot拷到deploy-u-boot-dey/uboot目录下。所以,这两个文件才是启动的关键文件:+
 <code> <code>
 tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/u-boot-ccmp25-dvk.dtb   tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/u-boot-ccmp25-dvk.dtb  
 tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/u-boot-nodtb.bin tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/u-boot-nodtb.bin
 </code> </code>
-所以,用自己的设备树替代注意,我们用默认的uboot的设备树名: +如果在内核中使用自己的设备树比如ccmp25-plc.dtb在uboot中大可没必要,其实uboot也有自己的设备树,它放在uboot源码目录下的arch/arm/dts下。我们虽然可以在这个目录下添加自定义的设备树名,但打包的配方是tf-a-stm32mp,不更改配方的情况下,最好用默认的uboot的设备树名
-<code> +
-cp tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/build/ccmp25-dvk_defconfig/arch/arm/dts/ccmp25-dvk.dtb tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/deploy-u-boot-dey/u-boot/u-boot-ccmp25-dvk.dtb+
  
 +以在~/mygit/github/ccmp25-plc项目为例,其目录结构如下:
 +{{:digi:arm-embedded:uboot:pasted:20241105-100701.png |}}
 +
 +其中,根目录下的是内核的设备树,而uboot的设备树在uboot-dts中,配置文件在uboot/configs/ccmp25-dvk_defconfig。假定我们这在个git目录上修改了设备树源码,进入到git目录,移除之前旧的,用链接到这个源码库的文件替代,如:
 +<code>
 +cd tmp/work/ccmp25_dvk-dey-linux/u-boot-dey/2022.10-r0/git
 +mv configs/ccmp25-dvk_defconfig ~/temp/
 +cp ~/mygit/github/ccmp25-plc/uboot/configs/ccmp25-dvk_defconfig configs/ccmp25-dvk_defconfig
 +mv arch/arm/dts/ccmp25-dvk-u-boot.dtsi ~/temp/
 +mv arch/arm/dts/ccmp25-dvk.dts ~/temp/
 +mv arch/arm/dts/Makefile ~/temp
 +ln -s ~/mygit/github/ccmp25_dt/uboot-dts/ccmp25-plc.dts arch/arm/dts/ccmp25-plc.dts
 +cp ~/mygit/github/ccmp25_dt/uboot-dts/ccmp25-plc.dts arch/arm/dts/ccmp25-dvk.dts
 +cp ~/mygit/github/ccmp25_dt/uboot-dts/ccmp25-dvk-u-boot.dtsi arch/arm/dts/ccmp25-dvk-u-boot.dtsi
 +cp ~/mygit/github/ccmp25_dt/uboot-dts/Makefile
 +在上面操作中,我们原本用链接文件(即修改版的uboot)替代了,并且ccmp25-dvk.dts也和新增加的ccmp25-plc.dts链接到同一个修改版的uboot所用的设备树。注意,默认的设备树dts和dtsi不可用链接文件,改为cp拷贝进去则可以。
 +复查一下,确保文件正确
 +ls -la arch/arm/dts/ccm*
 +</code>
 +编译前也可检查一下编译目录下的内容,以便知道更新情况
 +<code>
 +ls -la ../deploy-u-boot-dey
 +ls -la ../deploy-u-boot-dey/u-boot
 +ls -la ../build/ccmp25-dvk_defconfig/arch/arm/dts/cc*
 +</code>
 +注意,此时我们用bitbake -C compile u-boot-dey,会发现原来的build/ccmp25-dvk_defconfigs/arch/arm/dts/下的ccmp25-dvk.dtb日期没变,但新的ccmp25-plc.dtb倒也确实生成了。另外deploy-u-boot-dey目录下的文件也是新日期,我们反编译检查一下deploy-u-boot-dey/u-boot/u-boot-ccmp25-dvk.dtb
 +<code>
 +cp deploy-u-boot-dey/u-boot/u-boot-ccmp25-dvk.dtb ~/temp
 +cd ~/temp
 +dtc -I dtb -O dts -o uboot.dts u-boot-ccmp25-dvk.dtb
 +cat uboot.dts |grep dummy
 +</code>
 +我们在自己修改的uboot的设备树中加入了dummy节点,而这里没有,说明修改版没有应用上。如果不想深究,可以用编译出来的ccmp25-plc.dtb来替代所有的ccmp25-dvk.dtb
 +<code>
 +cp build/ccmp25-dvk_defconfig/arch/arm/dts/ccmp25-plc.dtb build/ccmp25-dvk_defconfig/arch/arm/dts/ccmp25-dvk.dtb
 +cp build/ccmp25-dvk_defconfig/arch/arm/dts/ccmp25-plc.dtb deploy-u-boot-dey/u-boot/u-boot-ccmp25-dvk.dtb
 +bitbake tf-a-stm32mp
 +</code>
 +再测试一下:
 +<code>
 +cp tmp/deploy/images/ccmp25-dvk/fip/fip-ccmp25-dvk-optee.bin ~/test/
 +fiptool unpack ~/test/fip-ccmp25-dvk-optee.bin
 +dtc -I dtb -O dts -o uboot.dts hw-config.bin
 </code> </code>
-linux也同样改好ccmp25-plc.dts和相关的makefile,然后在local.conf里加上这句:KERNEL_DEVICETREE += "ccmp25-plc.dtb" 
-编译出相关的ccmp25-plc.dtb 
  
-接着编译+验证无误后,再bitbake core-image-base编译出所有镜像,最后更新
 <code> <code>
-bitbake core-image-base+update fip-a tftp fip-ccmp25-dvk-optee.bin
 </code> </code>
 +
 +
 =====修改U-Boot设备树===== =====修改U-Boot设备树=====
 修改源代码,在添加不同设备树的场景并不适用。并且git目录在bitbake -c cleansstate或cleanall时,都会被清空。因此,直正的修改需要发生在DEY的源码区,也就是sources里。 修改源代码,在添加不同设备树的场景并不适用。并且git目录在bitbake -c cleansstate或cleanall时,都会被清空。因此,直正的修改需要发生在DEY的源码区,也就是sources里。