我的硬件平台是MP135,我现在想给它增加一个串口UART8,于是我打算修改设备树。
但是在使用SDK的时候我遇到了些问题。
按照官方的`how to do.txt`,我编译了u-boot,在deploy文件夹下生成了如下内容:
```bash
~/workspace/STM32/stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-v2022.10-stm32mp-r1-r0/deploy$ ls
debug u-boot-stm32mp157c-ed1.dtb
u-boot-nodtb-stm32mp13.bin u-boot-stm32mp157c-ev1.dtb
u-boot-nodtb-stm32mp15.bin u-boot-stm32mp157d-dk1.dtb
u-boot-stm32mp135f-dk.dtb u-boot-stm32mp157d-ev1.dtb
u-boot-stm32mp157a-dk1.dtb u-boot-stm32mp157f-dk2.dtb
u-boot-stm32mp157a-ev1.dtb u-boot-stm32mp157f-ed1.dtb
u-boot-stm32mp157c-dk2.dtb u-boot-stm32mp157f-ev1.dtb
按照官方教程,我应该把这些文件拷贝到StarterPackage的flp文件夹下。这让我感到困惑,因为我在StarterPackage上面并没有看见类似的文件,而是:
~/workspace/STM32/IMAGE/stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/images/stm32mp1/fip$ ls
#in starter package
fip-stm32mp135f-dk-optee.bin fip-stm32mp157d-dk1-optee.bin
fip-stm32mp157a-dk1-optee.bin fip-stm32mp157d-ev1-optee.bin
fip-stm32mp157a-ev1-optee.bin fip-stm32mp157f-dk2-optee.bin
fip-stm32mp157c-dk2-optee.bin fip-stm32mp157f-ed1-optee.bin
fip-stm32mp157c-ed1-optee.bin fip-stm32mp157f-ev1-optee.bin
fip-stm32mp157c-ev1-optee.bin
而当我编译optee的时候,deploy文件夹下出现的是这些东西:
~/workspace/STM32/stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sources/arm-ostl-linux-gnueabi/optee-os-stm32mp-3.19.0-stm32mp-r1-r0/deploy$ ls
debug tee-pageable_v2-stm32mp157d-dk1.bin
tee-header_v2-stm32mp157a-dk1.bin tee-pageable_v2-stm32mp157d-ev1.bin
tee-header_v2-stm32mp157a-ev1.bin tee-pageable_v2-stm32mp157f-dk2.bin
tee-header_v2-stm32mp157c-dk2.bin tee-pageable_v2-stm32mp157f-ed1.bin
tee-header_v2-stm32mp157c-ed1.bin tee-pageable_v2-stm32mp157f-ev1.bin
tee-header_v2-stm32mp157c-ev1.bin tee-pager_v2-stm32mp157a-dk1.bin
tee-header_v2-stm32mp157d-dk1.bin tee-pager_v2-stm32mp157a-ev1.bin
tee-header_v2-stm32mp157d-ev1.bin tee-pager_v2-stm32mp157c-dk2.bin
tee-header_v2-stm32mp157f-dk2.bin tee-pager_v2-stm32mp157c-ed1.bin
tee-header_v2-stm32mp157f-ed1.bin tee-pager_v2-stm32mp157c-ev1.bin
tee-header_v2-stm32mp157f-ev1.bin tee-pager_v2-stm32mp157d-dk1.bin
tee-pageable_v2-stm32mp157a-dk1.bin tee-pager_v2-stm32mp157d-ev1.bin
tee-pageable_v2-stm32mp157a-ev1.bin tee-pager_v2-stm32mp157f-dk2.bin
tee-pageable_v2-stm32mp157c-dk2.bin tee-pager_v2-stm32mp157f-ed1.bin
tee-pageable_v2-stm32mp157c-ed1.bin tee-pager_v2-stm32mp157f-ev1.bin
tee-pageable_v2-stm32mp157c-ev1.bin
我并不知道这些文件应该放置在哪里。
对于上述情况,我提出几个问题:
- 增加串口是否需要修改Linux 内核?
我不知道为什么只是增加一个串口要这么麻烦
- 如何使用CubeMX生成的设备树编译镜像?
请不要给我推官网的教程链接。官网相关的教程我都看了,并没有一个完整叙述了从CubeMX设备树到生成镜像的教程。
- source code编译生成的文件如何添加到Starter Package内?
如上述,SDK生成的文件与StarterPackage的文件并不能很好地配合起来。
希望能得到您的解答!
|
首先要理清STM32MP13平台的启动流程。Boot chain overview - stm32mpu (stmicroelectronics.cn) 简单说就是
MPU ROM Code-> TF-A BL2 -> OP-TEE -> U-Boot -> Linux
. 其中 FIP 打包 OP-TEE 和 U-Boot,由TF-A BL2加载到DDR中。启动流程可以简化为MPU ROM Code -> TF-A BL2 -> FIP -> Linux
。如果要增加串口
UART8
首先要在OP-TEE设备树中配置UART8
时钟。然后重新编译OP-TEE,并更新 FIP中的OP-TEE部分。因为要在Linux中使用UART8
,下一步仅需在Linux的设备树中使能UART8
外设即可。这一步设备树的配置都可以在STM32CubeMX中完成。如下图以STM32MP135F-DK为例:现在回答你的第二个问题。
如何基于新的设备树生成新的FIP包。此处仅更新STM32MP135F-DK的OP-TEE部分。
进入到optee-os-stm32mp-3.19.0-stm32mp-r1文件夹
source <SDK 5.0>
将新生成的设备树覆盖默认的 core/arch/arm/dts/stm32mp135f-dk.dts
export FIP_DEPLOYDIR_ROOT=../../FIP_artifacts/
make -f ../Makefile.sdk FIP_CONFIG=optee CFG_EMBED_DTB_SOURCE_FILE=stm32mp135f-dk DEPLOYDIR=../../FIP_artifacts/optee/ fip
如何更新FIP可以参考wiki How to manually update bootloaders - stm32mpu (stmicroelectronics.cn)
如何更新生成新的 Linux 设备树 可以参考Wiki https://wiki.stmicroelectronics.cn/stm32mpu/wiki/How_to_compile_the_device_tree_with_the_Developer_Package#Updating_the_kernel_device_tree
更新完成后重启系统: