STM32MP157 buildroot-2022.02.5构建根文件系统


移植参考开发板为100ASK_STM32MP157_V11。

  1. STM32MP157 tf-a2.6 optee3.16 u-boot2021.10 linux5.15移植
  2. STM32MP157启动流程
  3. STM32MP157 tf-a2.6移植
  4. STM32MP157 optee3.16移植
  5. STM32MP157 u-boot2021.10移植
  6. STM32MP157 linux5.15移植
  7. 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