在第一章中,我们理解了

M33
领航的硬件逻辑。
现在,我们要搭建一套工业级的开发环境。
对于
STM32MP257
宿主机环境准备
推荐使用Ubuntu
22.04
内核和文件系统非常耗空间)。
1.安装基础构建工具
sudo
双架构编译器安装
这是异构开发的核心:我们需要两套不同的编译器。
1.M33
架构),我们使用arm-none-eabi-gcc。
#
GNU
架构),我们使用aarch64-linux-gnu-gcc。
sudo
apt-get
g++-aarch64-linux-gnu
/>#
提供了两套关键资源:
STM32CubeMP2
M33
库、示例代码和底层驱动。
OpenSTLinux
A35
侧的交叉编译环境、内核源码和文件系统。
实战操作:从
官网下载en.stm32cubemp2-v1-1-0.zip(版本随时间更新),解压至~/STM32MP257_Project/Drivers/。
/>2.4
库以及你写的main.c。
在你的工程根目录下创建Makefile,核心逻辑如下:
#
编译器设置
-I../Drivers/CMSIS/Device/ST/STM32MP2xx/Include
\
/>-I../Drivers/STM32MP2xx_HAL_Driver/Inc
#
编译选项
跑起来的终极秘籍。
STM32MP2
ROM
不识别裸的.bin文件。
它要求文件头部必须有一个STM32
Image
提供的STM32ImageAdd.py脚本或STM32CubeProgrammer命令行工具来生成带头的镜像。
命令示例:
#
生成符合
0x0E000000
-a:镜像加载到内存的起始地址。
-e:/>
2.6
Deploy:如何将固件部署到开发板?
在开发板还没跑
Linux
之前,我们主要通过以下两种方式部署:
STM32CubeProgrammer
(USB/UART):将拨码开关拨至000
(Recovery
卡手工部署:如果你已经有一张现成的
OpenSTLinux
启动卡,你可以使用
dd命令将M33
的固件写入对应的
fsbl1或fsbl2分区。
/>
2.7
Tips)
问题:编译报
Interrupthandler找不到。
解决:检查汇编启动文件
.s中的向量表命名是否与代码中的
EXTI_IRQHandler一致。
问题:
arm-none-eabi-gcc找不到。解决:确保你执行了
exportPATH=$PATH:/opt/gcc-arm-none-eabi/bin,或者将其写入
~/.bashrc。
/>
总结:到这一步,你已经拥有了一个完全自主可控的开发环境。
你可以编译出带签名的
M33
固件,并知道如何将它送入开发板。


