系统移植-STM32MP1_Buildroot根文件系统移植

张开发
2026/4/10 9:45:11 15 分钟阅读

分享文章

系统移植-STM32MP1_Buildroot根文件系统移植
文章目录**说明说明**1 buildroot简介及获取源码1.1 简介1.2 源码获取2 buildroot构建根文件系统2.1 解压2.2 配置buildroot2.2.1 配置Target options2.2.2 配置Toolchain2.2.3 配置System configuration2.2.4 配置Filesystem images2.2.5 配置禁止编译Linux内核和uboot2.2.6 配置Target packages2.2.6.1 使能内核模块相关命令2.2.6.2 使能VSFTPD服务2.2.6.3 使能SSH2.2.7 备份配置项2.2.8 buildroot初步编译2.2.9 配置busybox2.2.10 编译busybox2.2.11 重新编译buildroot2.3 修改生成根文件系统2.3.1 创建自启动文件2.3.2 修改终端显示2.4 网络加载2.4.1 准备加载文件2.4.2 根文件系统运行2.4.3 uboot设置根文件系统网络加载3 buildroot根文件系统测试3.1 depmod命令测试3.2 vsftpd测试3.2.1 vsftpd配置3.3 sshd测试3.3.1 sshd配置4 烧写根文件系统到EMMC中4.1 rootfs.ext4文件制作4.2 根文件系统烧录4.2.1 文件准备4.2.2 使用USB烧写rootfs.ext44.3 根文件系统运行4.4 uboot设置根文件系统从EMMC启动说明说明教程过程中用到的文件资源链接1 buildroot简介及获取源码1.1 简介Buildroot 是一个开源的嵌入式Linux系统构建工具旨在简化嵌入式系统的开发流程。它通过自动化的方式生成交叉编译工具链、根文件系统、Linux内核镜像以及引导程序适用于资源受限的平台和快速开发需求。1.2 源码获取可以在官网下载文件点击DOWNLOAD下载最新源码包点击上图中下方红框可以下载历史版本。在历史版本中找到buildroot-2020.02.6.tar.bz2并下载下载完成后传输至Ubuntu中。2 buildroot构建根文件系统2.1 解压tar-vxjfbuildroot-2020.02.6.tar.bz22.2 配置buildrootcdbuildroot-2020.02.6makemenuconfig2.2.1 配置Target options此配置项用于配置目标开发板的信息此项配置好的信息如下2.2.2 配置Toolchain此配置项用于配置交叉编译工具链即交叉编译器。此项配置好的信息如下Toolchain下比较重要的选项如下所示Toolchain设置为Custom toolchain表示使用用户自己的交叉编译器Toolchain origin设置为Pre-installedtoolchain表示使用预装的交叉编译器Toolchainpath设置自己安装的交叉编译器绝对路径buildroot要用到Toolchain prefix设置交叉编译器前缀要根据自己实际所使用的交叉编译器来设置比如我们使用的是arm-none-linux-gnueabihf-gcc因此前缀就是$(ARCH)-none-linux-gnueabihf其中ARCH前面已经设置为了armExternal toolchain kernel headers series:设置的是交叉编译器所对应的linux内核版本号gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf所对应的linux内核版本号为4.20因此这里需要设置为4.20.x一定要根据自己所使用的交叉编译器来设置否则编译的时候会报版本不一致的错误。2.2.3 配置System configuration此配置项用于配置系统信息比如开发板名字、欢迎语、用户名、密码等。需要配置的项目和其对应的内容如下2.2.4 配置Filesystem images此配置项用于配置生成的根文件系统的格式配置如下2.2.5 配置禁止编译Linux内核和ubootbuildroot不仅仅能构建根文件系统也可以编译linux内核和uboot。当配置buildroot使能linux内核和uboot以后buildroot就会自动下载最新的linux内核和uboot源码并编译。中间可能因为版本等问题会出现问题所以不使用buildroot提供的linux内核和uboot编译。linux内核禁止配置如下uboot禁止配置如下2.2.6 配置Target packages此配置项用于要选择的第三方库和软件。可以根据自己需求进行配置。2.2.6.1 使能内核模块相关命令- Target packages - System tools - [*] kmod //使能内核模块相关命令2.2.6.2 使能VSFTPD服务- Target packages - Networking applications - [*] vsftpd //使能 vsftpd2.2.6.3 使能SSH- Target packages - Networking applications - [*] openssh //使能 openssh2.2.7 备份配置项cdbuildroot-2020.02.6cp.config ./configs/stm32mp1_da_defconfig2.2.8 buildroot初步编译cdbuildroot-2020.02.6make-j82.2.9 配置busyboxbuildroot中busybox的源码在buildroot-2020.02.6/output/build/busybox-1.31.1中。makebusybox-menuconfig参考系统移植-STM32MP1_BusyBox移植配置buildroot下的busybox。2.2.10 编译busyboxcdbuildroot-2020.02.6makeshow-targets# 列出所有配置了的目标软件包makebusybox# 需要重新编译 busybox 的话可以使用如下命令makebusybox-rebuild# busybox 编译完成之后buildroot 需要重新编译2.2.11 重新编译buildrootcdbuildroot-2020.02.6make-j8buildroot在make之后会在buildroot-2020.02.6/output/images/目录下直接生成多种格式的rootfs。如图所示还需要修改一些文件信息所有使用rootfs.tar文件解压到nfs/RootFS目录中(初次需要将nfs/RootFS清空)。2.3 修改生成根文件系统cdbuildroot-2020.02.6/output/images/cprootfs.tar /home/alientek/linux/nfs/RootFS-f# /home/alientek/linux/nfs 为nfs服务器目录cd/home/alientek/linux/nfs/RootFStar-vxfrootfs.tarrmrootfs.tar如下所示2.3.1 创建自启动文件buildroot构建的根文件系统中不需要直接在/etc/init.d/rcS中添加自启动命令了默认情况下buildroot构建的根文件系统中rcS文件内容如下所示#!/bin/sh# Start all init scripts in /etc/init.d# executing them in numerical order.#foriin/etc/init.d/S??*;do# Ignore dangling symlinks (if any).[!-f$i]continuecase$iin*.sh)# Source shell script for speed.(trap- INT QUIT TSTPsetstart.$i);;*)# No sh extension, so fork subprocess.$istart;;esacdonercS默认会在/etc/init.d目录下查找所有以S开头的脚本然后一次执行这些脚本在/etc/init.d文件夹下创建一个Sautorun的脚本cd/etc/init.d/sudotouchSautorunsudochmod777Sautorun在Sautorun文件中添加如下内容#!/bin/shmount-tdebugfs none /sys/kernel/debug# 使能 sysfs debug目录2.3.2 修改终端显示cd/etc/profile.d/sudotouchmyprofile.shsudochmod777myprofile.sh在myprofile.sh文件中添加如下内容#!/bin/shPS1[\u\h]:\w$ exportPS12.4 网络加载2.4.1 准备加载文件通过USB_OTG将Linux内核移植阶段的da_image烧录至开发板。2.4.2 根文件系统运行打开MobaXterm软件设置好与开发板连接的串口波特率选择115200。设置开发板拨码开关为010也就是从EMMC启动然后复位开发板在串口中观察启动过程。2.4.3 uboot设置根文件系统网络加载关于bootargs参数设置可以在Linux内核源码目录中Documentation/filesystems/nfs/nfsroot.txt查看详细配置。setenv bootargsconsolettySTM0,115200 root/dev/nfs nfsroot192.168.10.101:/home/alientek/linux/nfs/RootFS,prototcp rw ip192.168.10.102:192.168.10.101:192.168.10.1:255.255.255.0::eth0:offsaveenv boot3 buildroot根文件系统测试3.1 depmod命令测试根文件系统启动时报一个错误使用如下命令解决mkdir/lib/modules/5.4.31-pcd/lib/modules/5.4.31/ depmoddepmod命令会在/lib/modules/5.4.31/目录下生成modules.alias、modules.dep、modules.symbols这几个文件不需要用户操作系统会自己使用这三个文件。3.2 vsftpd测试3.2.1 vsftpd配置打开/etc/vsftpd.conf文件将下述两行前的#去除local_enableYES write_enableYES使用如下命令修改/etc/vsftpd.conf的所有用户及所属用户组chownroot:root /etc/vsftpd.conf使用如下命令添加一个用户来完成FTP登录adduser da重启开发板使用FileZilla工具连接开发板成功如下图所示3.3 sshd测试3.3.1 sshd配置chownroot:root /var/empty重启开发板重启后在Ubuntu中使用ssh usernameIP address格式测试sshd。比如在Ubuntu中终端执行ssh da192.168.10.102。如图所示也可以使用其他支持SSH的工具进行测试。4 烧写根文件系统到EMMC中4.1 rootfs.ext4文件制作# 第一步(仅初次使用)在家目录中选择合适位置创建 rootfs 文件夹并进入mkdirrootfscdrootfs# 第二步(仅初次使用)将生成的 uImage 和 stm32mp157d-da.dtb 文件拷贝到 rootfs 文件夹目录中# 第三步(仅初次使用)新建 ext4 格式磁盘# of为名称bs为块大小count为块数量所以 rootfs.ext4 文件大小为1024MB,如果空间不够则调整 countddif/dev/zeroofrootfs.ext4bs1Mcount1024# -L rootfs 为卷名使用 mkfs.ext4 将 rootfs.ext4 文件格式化为 ext4 格式且指定卷名为 rootfsmkfs.ext4-Lrootfs rootfs.ext4# 第四步将系统镜像拷贝到 ext4 磁盘中sudomkdir/mnt/rootfs# (仅初次使用)sudomountrootfs.ext4 /mnt/rootfs/sudocp/home/alientek/linux/nfs/RootFS/* /mnt/rootfs/-drf# 其中 /home/alientek/linux/nfs/RootFS/ 为根文件系统路径# 第五步卸载 /mnt/rootfssudoumount/mnt/rootfs4.2 根文件系统烧录4.2.1 文件准备将制作好的的rootfs.ext4、bootfs.ext4、tf-a-stm32mp157d-da-trusted.stm32和tf-a-stm32mp157d-da-serialboot.stm32、u-boot.stm32文件其中bootfs.ext4、u-boot.stm32、tf-a-stm32mp157d-da-trusted.stm32和tf-a-stm32mp157d-da-serialboot.stm32使用已经编译好的统一放入文件夹中例如da-images文件夹。在da-images文件夹中添加da.tsv文件文件内容如下所示#Opt Id Name Type Device Offset Binary - 0x01 fsbl1-boot Binary none 0x0 tf-a-stm32mp157d-da-serialboot.stm32 - 0x03 ssbl-boot Binary none 0x0 u-boot.stm32 P 0x04 fsbl1 Binary mmc1 boot1 tf-a-stm32mp157d-da-trusted.stm32 P 0x05 fsbl2 Binary mmc1 boot2 tf-a-stm32mp157d-da-trusted.stm32 P 0x06 ssbl Binary mmc1 0x00080000 u-boot.stm32 P 0x21 boot System mmc1 0x00280000 bootfs.ext4 P 0x22 rootfs FileSystem mmc1 0x04280000 rootfs.ext4文件内容格式要严格遵循下图tsv语法要求只能用TAB键不能用空格以#开头为注释。最终da-images文件夹中的内容如下4.2.2 使用USB烧写rootfs.ext4通过USBType-C线将开发板的USB_OTG和USB_TTL连接到电脑上。设置开发板拨码开关设置为000也就是从USB启动然后复位开发板。打开STM32CubeProgrammer选择USB连接方式Port选择USB1。USB设置好以后点击右上角的“Connect”来连接开发板连接成功以后左下角的log区域就会输出一些信息右侧中间的数据区域也会显示开发板默认的分区情况右下角会显示目标板信息如图所示STM32CubeProgrammer要使用FlashLayout文件来烧写系统也就是da-images文件夹下的da.tsv。点击界面上的Open File打开da.tsv如下图所示根文件系统较大烧写时间相对于之前的烧写时间略长烧写完成后会有如下提示4.3 根文件系统运行打开MobaXterm软件设置好与开发板连接的串口波特率选择115200。设置开发板拨码开关为010也就是从EMMC启动然后复位开发板在串口中观察启动过程。4.4 uboot设置根文件系统从EMMC启动setenv bootargsconsolettySTM0,115200 root/dev/mmcblk1p3 rootwait rwsaveenv boot

更多文章