文章目录
- 一、U-boot源码适配
- (一)执行make stm32mp15_trusted_defconfig命令进行配置,生成.config文件
- (二)执行make menuconfig命令,对u-boot源码进行重新配置
- 1. 对u-boot源码进行配置,移除pmic驱动代码的编译
- 2. 修改u-boot源码使用的默认的设备树文件
- 3. 修改u-boot的命令行的提示符
- 4. 移除开机3A电流检测
- (三)执行make -j4 all重新编译u-boot源码
- 二、TF-A(ATF)移植
- (一)概念
- (二)分析TF-A源码
- 1. 目录下文件的作用
- 2. 分析README.HOW_TO.txt
- 1. 配置交叉编译器
- 2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
- 3. 编译TF-A源码
- 4. 部署TF-A镜像文件到开发板中
- (三)对TF-A源码进行配置和编译
- 1. 修改Makefile.sdk文件,配置交叉编译器
- 2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
- 3. 根据DK1板子的设备树文件拷贝生成FSMP1A板子的设备树文件
- 4. 修改设备树文件
- 5. 编译tf-A源码,生成对应的镜像文件
- (四)烧录到TF卡中
- 1. 拷贝u-boot.stm32和tf-a-stm32mp157a-fsmp1a-trusted.stm32镜像文件到sdtools目录下
- 2. 将tf卡插到读卡器上,然后将读卡器插到电脑的USB口,将读卡器被ubuntu系统识别
- 3. 查看TF卡是否被ubuntu系统识别
- 4. 执行./sdtools.sh脚本文件,烧写trusted版本的镜像文件
- 5. 将tf卡重新插到开发板中,设置开发板的启动方式为TF卡启动
- 6. 重新上电后,可以正常进入u-boot
一、U-boot源码适配
(一)执行make stm32mp15_trusted_defconfig命令进行配置,生成.config文件
此命令会生成一个trusted版本的默认配置文件
(二)执行make menuconfig命令,对u-boot源码进行重新配置
1. 对u-boot源码进行配置,移除pmic驱动代码的编译
- 删除i24节点、cpu节点、port
具体参见basic版本 - 更改配置文件
Device Drivers --->Power ---> [ ] Enable support for STMicroelectronics STPMIC1 PMIC|--> 去掉*
2. 修改u-boot源码使用的默认的设备树文件
Device Tree Control ---> (stm32mp157a-fsmp1a) Default Device Tree for DT control |---> 回车进入编辑界面,修改设备树文件的名字
3. 修改u-boot的命令行的提示符
Command line interface --->(FSMP1A>>> ) Shell prompt
4. 移除开机3A电流检测
Command line interface --->Device access commands ---> [ ] adc - Access Analog to Digital Converters info and data Device Drivers ---> [ ] Enable ADC drivers using Driver Model
(三)执行make -j4 all重新编译u-boot源码
编译成功之后,在u-boot源码目录下生成u-boot.stm32镜像文件,
二、TF-A(ATF)移植
(一)概念
TF-A是ARM公司专门为ARM-v8编写的一套提供安全服务的开源软件,ST公司对TF-A源码进行适配,使其支持ARM-v7架构的Cortex-A7核,提供安全服务。
TF-A软件用来引导trusted版本的u-boot启动。
(二)分析TF-A源码
1. 目录下文件的作用
├── 0001-st-update-v2.2-r2.0.0.patch ---> 补丁文件├── 0002-st-update-v2.2-r2.1.0.patch ---> 补丁文件├── Makefile.sdk ---> 工程配置和编译├── README.HOW_TO.txt ---> 帮助文档├── series ---> 存储补丁文件的信息└── tf-a-stm32mp-2.2.r2-r0.tar.gz ---> TF-A源码压缩包
2. 分析README.HOW_TO.txt
1. 配置交叉编译器
CROSS_COMPILE=arm-ostl-linux-gnueabi-
2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
对压缩包进行解压缩
`$> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz`
进入到TF-A源码目录下
`$> cd tf-a-stm32mp-2.2.r2`
对TF-A源码进行打补丁
`$> for p in `ls -1 ../*.patch`; do patch -p1 < $p; done `
- 补充:
ls -1
会列出目录下所有文件核目录的名字,且每个文件或目录占一行
ls -l
列出文件核文件夹的详细信息
3. 编译TF-A源码
编译TF-A源码
$> make -f $PWD/../Makefile.sdk all指定配置编译TF-A源码
$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157c-ev1 TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all编译成功之后,TF-A源码编译生成的镜像文件在以下目录中
#> ../build/*/tf-a-*.stm32
4. 部署TF-A镜像文件到开发板中
dd if=<tf-a binary> of=/dev/<device partition> bs=1M conv=fdatasync
-
dd
命令:读取、转换并输出数据 -
if=<tf-a binary>
: if 是 input file 的缩写,这里指定了输入文件的路径。 -
of=/dev/<device partition>
: of 是 output file 的缩写,这里指定了输出文件的路径。dd 命令将会把输入文件的内容写入到这个设备分区中。 -
bs=1M
: bs 是 block size 的缩写,这里指定了每次读写操作的块大小为 1MB。dd 命令将会以 1MB 的块为单位来复制数据,这可以提高数据传输的效率。 -
conv=fdatasync: conv
选项用于指定转换选项,fdatasync 是其中之一。
fdatasync 会确保在写入操作完成后,数据会被同步到磁盘上,但是不会同步文件的元数据。这通常用于提高性能,因为它减少了需要同步到磁盘的数据量。
(三)对TF-A源码进行配置和编译
1. 修改Makefile.sdk文件,配置交叉编译器
修改为下面内容:
2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
对压缩包进行解压缩$> tar -vxf tf-a-stm32mp-2.2.r2-r0.tar.gz
进入到TF-A源码目录下$> cd tf-a-stm32mp-2.2.r2对TF-A源码进行打补丁$> for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
3. 根据DK1板子的设备树文件拷贝生成FSMP1A板子的设备树文件
- 使用ls fdts/stm32mp15dk 命令查看DK1板子的设备树文件
- 根据DK1板子的设备树文件拷贝生成FSMP1A板子的设备树文件
cp fdts/stm32mp157a-dk1.dts fdts/stm32mp157a-fsmp1a.dts
cp fdts/stm32mp15xx-dkx.dtsi fdts/stm32mp15xx-fsmp1x.dtsi
- 修改fdts/stm32mp157a-fsmp1a.dts设备树文件
将以下内容:
13 #include "stm32mp15xx-dkx.dtsi"14 #include <dt-bindings/soc/st,stm32-etzpc.h>15 16 / {17 model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";18 compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
修改为:
13 #include "stm32mp15xx-fsmp1x.dtsi"14 #include <dt-bindings/soc/st,stm32-etzpc.h>15 16 / {17 model = "STMicroelectronics STM32MP157A-FSMP1A Discovery Board";18 compatible = "st,stm32mp157a-fsmp1a", "st,stm32mp157";
4. 修改设备树文件
- 修改fdts/stm32mp15xx-fsmp1x.dtsi文件,将i2c4, cpu0, cpu1节点删除
- 修改fdts/stm32mp15xx-fsmp1x.dtsi文件,添加固定电源的设备树节点信息
5. 编译tf-A源码,生成对应的镜像文件
make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all
(四)烧录到TF卡中
1. 拷贝u-boot.stm32和tf-a-stm32mp157a-fsmp1a-trusted.stm32镜像文件到sdtools目录下
以自己的路径为准
cp u-boot-2021.07/u-boot.stm32 ~/sdtools
cp tf-a-stm32mp-2.2.r2/build/trusted/tf-a-stm32mp157a-fsmp1a-trusted.stm32 ~/sdtools