STM32MP157C-DK2学习记录
一、准备Ubuntu环境
(已完成)
二、制作交叉编译链工具
使用crosstool工具制作适配于cortex-A7的交叉编译工具
(已完成)
三、准备STM32MP1工具包
- STM32Cube-Programmer——通过USB给STM32MP157下载编译好的内核
- STM32MP1DEV下载地址——官方Linux内核源码开发包
- fiptool工具
- stm32wrapper4dbg工具下载地址
- 。。。
四、Linux系统搭建——TF-a部分
- 进入tf-a源码文件,给文件打patch
for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
- 使用上级目录的Makefile.sdk进行编译
使用文本打开上级目录的Makefile.sdk,修改交叉编译工具
CROSS_COMPILE=arm-cortexa7-linux-(自己的交叉编译工具)
修改fiptool-stm32 改为fiptool(自己下载)
make编译
make -f ../Makefile.sdk all
- 编译得到待处理文件
1.deploy/tf-a-stm32mp157c-dk2-usb.stm32
2.deploy/tf-a-stm32mp157c-dk2-sdcard.stm32
3.deploy/metadata.bin
4.bl32/tf-a-bl32-stm32mp15.bin(u-boot备用)
5.bl32/stm32mp157c-dk2-bl32.dtb(u-boot备用)
6.fwconfig/stm32mp157c-dk2-fw-config-trusted.dtb(u-boot备用)
五、Linux系统搭建——U-boot部分
- 进入u-boot源码,给文件打patch
for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
- 进入makefile文件,修改交叉编译工具
CROSS_COMPILE ?= arm-cortexa7-linux-(自己的交叉编译工具)
- 手动编译u-boot
设定outfile目录
export KBUILD_OUTPUT=./output/files/
配置启动版本:
make stm32mp15_basic_defconfig
make stm32mp15_trusted_defconfig
配置编译DK2板设备树
make DEVICE_TREE=stm32mp157c-dk2 all
- 编译过程中可能会报错,缺什么就安装什么
- 编译得到待处理文件
1. u-boot.dtb
2. u-boot-nodtb.bin - 使用fiptool工具进行打包
fiptool create --tos-fw tf-a-bl32-stm32mp15.bin --nt-fw u-boot-nodtb.bin --fw-config stm32mp157c-dk2-fw-config-trusted.dtb --hw-config u-boot.dtb --tos-fw-config stm32mp157c-dk2-bl32.dtb fip.bin
获得文件 fip.bin
官方参考(仅供参考)
How to configure TF-A FIP
六、Linux系统搭建——kernel部分
- 进入kernel源码文件,打patch,声明交叉编译工具
for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
export CROSS_COMPILE=arm-cortexa7-linux-
- 创建build目录:
mkdir -p ../build
- 生成默认配置文件.config:
make ARCH=arm O="$PWD/../build" multi_v7_defconfig fragment*.config
- 编译内核
make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040 O="$PWD/../build"
- 编译模块
make ARCH=arm modules O="$PWD/../build"
- 。。。
七、下载代码,启动Linux
- 准备**.tsv**文件(从官方镜像copy)
- 加载自己编译好的文件
注:第一二行作用:先通过usb下载bootloader程序启动stm32mp1,启动后将接下来的代码下载到sd卡中。当修改stm32mp157的启动模式后(从sd卡启动)程序从fsbl1开始run