STM32MP157 buildroot-2022.02.5构建根文件系统
移植参考开发板为100ASK_STM32MP157_V11。
- STM32MP157 tf-a2.6 optee3.16 u-boot2021.10 linux5.15移植
- STM32MP157启动流程
- STM32MP157 tf-a2.6移植
- STM32MP157 optee3.16移植
- STM32MP157 u-boot2021.10移植
- STM32MP157 linux5.15移植
- STM32MP157 buildroot-2022.02.5构建根文件系统
1. 源码获取
到Buildroot官网下载最新的长期支持版本,这里下载buildroot-2022.02.5。

2. 源码解压
在sources/arm-ostl-linux-gnueabi目录下新建一个buildroot目录,将源码拷入进行解压。
$ mkdir buildroot
#将源码拷入
$ cd buildroot/
$ tar -xvf buildroot-2022.02.5.tar.xz
3. 配置并编译
3.1 配置
进入源码目录,执行make menuconfig进行配置。
$ cd buildroot-2022.02.5/
$ make O="$PWD/../build" menuconfig
$ cd ../build
$ make menuconfig

配置Target options,如下图。

配置Toolchain,如下图。C库选择glibc,GCC版本选择11.x,选择支持C++。

配置 System configuration,如下图。设置hostname和欢迎语,使能密码但不设置(可以设置自己的密码)。

配置Filesystem images,如下图。设置ext4根文件系统,并设置根文件系统的大小。

添加第三方包SSH和FTP,Target packages —> Networking applications —> 选择openssh和vsftpd。

3.1 编译
保存上面的配置,最好将配置另存一个文件防止丢失配置(我的配置已保存在configs/stm32mp157d_100ask_defconfig中),执行命令编译。我们配置了buildroot的编译器,所以不要设置我们自己的编译器,否则不加管理源权限编译不过。这个过程比较漫长,可以自己寻求一些快的方法。
$ make -j12
4. 下载验证
4.1 下载
拷贝rootfs.ext4到烧写目录,选择一个烧写脚本进行烧写。
$ cp -f images/rootfs.ext4 ../../FIP_artifacts/
#EMMC烧写脚本FlashLayout_emmc_stm32mp157d-100ask-trusted.tsv
#Opt Id Name Type IP Offset Binary
- 0x01 fsbl-boot Binary none 0x0 arm-trusted-firmware/tf-a-stm32mp157d-100ask-usb.stm32
- 0x03 fip-boot FIP none 0x0 fip/fip-stm32mp157d-100ask-trusted.bin
P 0x04 fsbl1 Binary mmc1 boot1 arm-trusted-firmware/tf-a-stm32mp157d-100ask-emmc.stm32
P 0x05 fsbl2 Binary mmc1 boot2 arm-trusted-firmware/tf-a-stm32mp157d-100ask-emmc.stm32
P 0x06 metadata1 Binary mmc1 0x00080000 arm-trusted-firmware/metadata.bin
P 0x07 metadata2 Binary mmc1 0x00100000 arm-trusted-firmware/metadata.bin
P 0x08 fip-a FIP mmc1 0x00180000 fip/fip-stm32mp157d-100ask-trusted.bin
PED 0x09 fip-b FIP mmc1 0x00580000 none
PED 0x0A u-boot-env Binary mmc1 0x00980000 none
P 0x10 bootfs System mmc1 0x00A00000 bootfs.ext4
P 0x11 rootfs FileSystem mmc1 0x01A00000 rootfs.ext4
#EMMC烧写脚本FlashLayout_emmc_stm32mp157d-100ask-optee.tsv
#Opt Id Name Type IP Offset Binary
- 0x01 fsbl-boot Binary none 0x0 arm-trusted-firmware/tf-a-stm32mp157d-100ask-usb.stm32
- 0x03 fip-boot FIP none 0x0 fip/fip-stm32mp157d-100ask-optee.bin
P 0x04 fsbl1 Binary mmc1 boot1 arm-trusted-firmware/tf-a-stm32mp157d-100ask-emmc.stm32
P 0x05 fsbl2 Binary mmc1 boot2 arm-trusted-firmware/tf-a-stm32mp157d-100ask-emmc.stm32
P 0x06 metadata1 Binary mmc1 0x00080000 arm-trusted-firmware/metadata.bin
P 0x07 metadata2 Binary mmc1 0x00100000 arm-trusted-firmware/metadata.bin
P 0x08 fip-a FIP mmc1 0x00180000 fip/fip-stm32mp157d-100ask-optee.bin
PED 0x09 fip-b FIP mmc1 0x00580000 none
PED 0x0A u-boot-env Binary mmc1 0x00980000 none
P 0x10 bootfs System mmc1 0x00A00000 bootfs.ext4
P 0x11 rootfs FileSystem mmc1 0x01A00000 rootfs.ext4
#SD卡烧写脚本FlashLayout_sdcard_stm32mp157d-100ask-trusted.tsv
#Opt Id Name Type IP Offset Binary
- 0x01 fsbl-boot Binary none 0x0 arm-trusted-firmware/tf-a-stm32mp157d-100ask-usb.stm32
- 0x03 fip-boot FIP none 0x0 fip/fip-stm32mp157d-100ask-trusted.bin
P 0x04 fsbl1 Binary mmc0 0x00004400 arm-trusted-firmware/tf-a-stm32mp157d-100ask-sdcard.stm32
P 0x05 fsbl2 Binary mmc0 0x00044400 arm-trusted-firmware/tf-a-stm32mp157d-100ask-sdcard.stm32
P 0x06 metadata1 Binary mmc0 0x00084400 arm-trusted-firmware/metadata.bin
P 0x07 metadata2 Binary mmc0 0x000C4400 arm-trusted-firmware/metadata.bin
P 0x08 fip-a FIP mmc0 0x00104400 fip/fip-stm32mp157d-100ask-trusted.bin
PED 0x09 fip-b FIP mmc0 0x00504400 none
PED 0x0A u-boot-env Binary mmc0 0x00904400 none
P 0x10 bootfs System mmc0 0x00984400 bootfs.ext4
P 0x11 rootfs FileSystem mmc0 0x01984400 rootfs.ext4
#SD卡烧写脚本FlashLayout_sdcard_stm32mp157d-100ask-optee.tsv
#Opt Id Name Type IP Offset Binary
- 0x01 fsbl-boot Binary none 0x0 arm-trusted-firmware/tf-a-stm32mp157d-100ask-usb.stm32
- 0x03 fip-boot FIP none 0x0 fip/fip-stm32mp157d-100ask-optee.bin
P 0x04 fsbl1 Binary mmc0 0x00004400 arm-trusted-firmware/tf-a-stm32mp157d-100ask-sdcard.stm32
P 0x05 fsbl2 Binary mmc0 0x00044400 arm-trusted-firmware/tf-a-stm32mp157d-100ask-sdcard.stm32
P 0x06 metadata1 Binary mmc0 0x00084400 arm-trusted-firmware/metadata.bin
P 0x07 metadata2 Binary mmc0 0x000C4400 arm-trusted-firmware/metadata.bin
P 0x08 fip-a FIP mmc0 0x00104400 fip/fip-stm32mp157d-100ask-optee.bin
PED 0x09 fip-b FIP mmc0 0x00504400 none
PED 0x0A u-boot-env Binary mmc0 0x00904400 none
P 0x11 rootfs FileSystem mmc0 0x01984400 rootfs.ext4
4.2 验证
重启开发板进入U-Boot命令行,设置如下环境变量,saveenv保存,并重启。
#EMMC设置
setenv bootcmd 'ext4load mmc 1:6 c2000000 uImage; ext4load mmc 1:6 c4000000 stm32mp157d-100ask.dtb; bootm c2000000 - c4000000'
setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p7 rootwait rw'
#SD卡设置
setenv bootcmd 'ext4load mmc 0:8 c2000000 uImage; ext4load mmc 0:8 c4000000 stm32mp157d-100ask.dtb; bootm c2000000 - c4000000'
setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk0p9 rootwait rw'
设置网络,在# vi /etc/network/interfaces文件中添加网络配置,保存并退出,reboot重启开发板。
# interface file auto-generated by buildroot
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
ping服务器,网络正常。

设置SSH,打开# vi /etc/ssh/sshd_config文件进行如下配置,并reboot重启。
#设置允许root登录和空密码登录
PermitRootLogin yes
PermitEmptyPasswords yes
成功登录开发板SSH,SFTP访问正常。

5. 总结
我们只是利用Buildroot构建了跟文件系统,Buildroot还可以添加Linux内核和U-Boot以及自己的代码,可以构建整个BSP工程,并且最终生成生产镜像文件。这些代码只启动板子,其他功能问题并没有解决。
学习笔记仅供参考,欢迎指正错误,如有侵权请及时联系。移植源码获取:
git clone https://github.com/Sonboy97/arm-ostl-linux-gnueabi.git
版本:9ae04fa8dbea4c984243179d1faa6e39cd18d2dd