学习安装“buildroot”,通过配置构建根文件系统,编译生成rootfs.tar和rootfs.ext4,以及通过nfs下载测试。
1、了解学习目的:
1)、获取“buildroot”安装包;
2)、使用“buildroot”构建根文件系统;
3)、rootfs.tar和rootfs.ext4文件路径:
/home/zgq/linux/buildroot/buildroot-2020.02.6/output/images
nfs挂载路径:/home/zgq/linux/nfs/rootfs
挂载时,需要先删除rootfs目录下的所有文件和文件夹,然后将rootfs.tar
拷贝“/home/zgq/linux/nfs/rootfs”,再使用“tar -vxf rootfs.tar”解压得到nfs目录下的rootfs,我们就可以通过nfs将文件下载到开发板测试。
4)、设置开发板密码和取消开发板密码
buildroot不仅集成了busybox,而且还集成了各种常见的第三方库和软件。
2、查找我们已经安装的交叉编译工具链的路径
打开终端
输入“cd /usr/local/arm/回车”
输入“ls回车”
输入“cd gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/回车”
输入“ls回车”
输入“cd arm-none-linux-gnueabihf/回车”
输入“pwd回车”查询路径
记录交叉编译工具的路径:
/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf
关闭打开的终端。
3、获取“buildroot”源码
文件路径:“程序源码\07、Buildroot源码/buildroot-2020.02.6.tar.bz2”。
1)、打开终端
输入“ls 回车”
输入“cd linux/回车”,切换到“linux”目录下
输入“ls 回车”,例举“linux”目录下的所有文件和文件夹
输入“mkdir buildroot回车”,创建“buildroot”目录
输入“ls 回车”,例举“linux”目录下的所有文件和文件夹
2)、使用“FileZilla”将“buildroot-2020.02.6.tar.bz2”拷贝到“buildroot”目录。
3)、输入“cd buildroot/回车”,切换到“buildroot”目录下
输入“ls 回车”,例举“buildroot”目录下的所有文件和文件夹
输入“tar -vxjf buildroot-2020.02.6.tar.bz2回车”,解压
4)、输入“ls 回车”,例举“buildroot”目录下的所有文件和文件夹
输入“cd buildroot-2020.02.6/回车”,切换到“buildroot-2020.02.6”目录
输入“ls 回车”,例举“buildroot-2020.02.6”目录下的所有文件和文件夹
“buildroot-2020.02.6”目录下的文件和文件夹就是我们需要的源码包。
4、配置Target options选项
1)、输入“make menuconfig回车”,打开“buildroot的图形化配置界面”
如果出现错误,则重新启动虚拟机。
2)、按“回车键”,移动向下光标至“Target Architecture”,得到下图:
3)、按“回车键”,准备修改架构“Target Architecture”,得到下图:
4)、移动“向下光标键”至“ARM(little endian)”,按下“回车键”表示“选中”,并返回到“Target Architecture”,见下图:
5)、移动“向下光标键”至“Target Binary Format(ELF)”,见下图:
6)、按“回车键”,准备修改“ELF”,得到下图:
7)、按“回车键”,返回到“Target Binary Format”
移动“向下光标键”至“Target Architecture Variant”,见下图:
8)、按“回车键”,准备修改CPU架构“Target Architecture Variant”,得到下图:
9)、移动“向下光标键”至“cortex-A7”,按下“回车键”表示“选中”,并返回到“Target Architecture Variant”,见下图:
10)、移动“向下光标键”至“Target ABI”,见下图:
11)、按“回车键”,准备修改CPU架构“Target ABI”,得到下图:
12)、移动“向下光标键”至“EABIhf ”,CPU支持硬件浮点数,按下“回车键”表示“选中”,并返回到“Target ABI (EABIhf)”,见下图:
13)、移动“向下光标键”至“Floating point strategy”,见下图:
14)、按“回车键”,准备修改浮点策略“Floating point strategy”,移动“向下光标键”至“NEON/VFPv4 ”,见下图:
15)、按下“回车键”表示“选中”,并返回到“Floating point strategy”,见下图:
16)、移动“向下光标键”至“ARM instruction set”,见下图:
17)、按“回车键”,准备修改浮点策略“ARM instruction set”,移动“向下光标键”至“ARM”,见下图:
18)、按下“回车键”表示“选中”,并返回到“ARM instruction set”,见下图:
5、配置Toolchain(工具链)
1)、按两次“ESC键”,移动向下光标键至“Toolchain”,见下图:
2)、按“回车键”,准备修改“Toolchain”,移动“向下光标键”至“Toolchain type”,见下图:
3)、按“回车键”,准备修改“Toolchain type”,移动“向下光标键”至扩展工具链“External toolchain”,见下图:
4)、按下“回车键”表示“选中”,并返回到“Toolchain type”,见下图:
5)、移动“向下光标键”至“Toolchain (Arm ARM 2019.12)”,见下图:
6)、按“回车键”,准备修改“Toolchain (Arm ARM 2019.12)”,移动“向下光标键”至客户工具链“Custom toolchain”,见下图:
7)、按下“回车键”表示“选中”,并返回到“Toolchain (Custom toolchain) ”,见下图:
8)、移动“向下光标键”至工具链下载原点“Toolchain origin”,见下图:
9)、按“回车键”,准备修改“Toolchain origin”,移动“向下光标键”至预装工具链“Pre-installed toolchain”,见下图:
10)、按下“回车键”表示“选中”,并返回到“Toolchain origin”,见下图:
11)、移动“向下光标键”至工具链下载原点“Toolchain path”,见下图:
12)、按“回车键”,
13)、输入内容如下:
/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf
见下图:
14)、移动“向下光标键”至“Ok”,按“O”键退出,见下图:
15)、移动“向下光标键”至“Toolchain prefix”,见下图:
16)、按“回车键”,得到下图:
17)、将“$(ARCH)-linux”修改为“$(ARCH)-none-linux-gnueabihf”
18)、移动“向下光标键”至“Ok”,按“O”键退出,见下图:
19)、移动“向下光标键”至“External toolchain kernel headers series”,“gcc version”不用管,见下图:
20)、按“回车键”,移动“向下光标键”至“4.20.x”,见下图:
得到下图:
21)、按“回车键”选中,得到下图:
22)、移动“向下光标键”至“External toolchain C library”,见下图:
23)、按“回车键”,移动“向下光标键”至“glibc/eglibc”,见下图:
24)、按“回车键”选中,得到下图:
25)、移动“向下光标键”至“Toolchain has SSP support?”,按“Y”,见下图:
26)、移动“向下光标键”至“Toolchain has SSP strong support?”,按“Y”,见下图:
27)、移动“向下光标键”至“Toolchain has RPC support?”,按“Y”,见下图:
28)、移动“向下光标键”至“Toolchain has C++ support?”,按“Y”,见下图:
29)、移动“向下光标键”至“Toolchain has OpenMP support?”支持多核,按“Y”,见下图:
30)、移动“向下光标键”至“Enable MMU support”,按“Y”,见下图:
至此,交叉编译器配置完成了。
6、配置System configuration(系统配置)
1)、按两次“ESC键”,移动向下光标键至“System configuration”,见下图:
2)、按“回车键”选中,得到下图:
3)、移动“向下光标键”至“System hostname”,见下图:
4)、按“回车键”,得到下图:
5)、将开发板的名字“buildroot”修改“ATK-stm32mp1”,见下图:
6)、移动“向下光标键”至“Ok”,按“O”保存,得到下图:
7)、移动“向下光标键”至“System banner”,见下图:
8)、按“回车键”,得到下图:
9)、将欢迎语“Welcome to Buildroot”修改为“Welcome to alientek STM32MP157”,见下图:
10)、移动“TAB键”至“Ok”,按“O”保存,得到下图:
11)、移动“向下光标键”至“Passwords encoding”,不用修改,见下图:
12)、移动“向下光标键”至“Init system”,不用修改,使用“BusyBox”,见下图:
13)、移动“向下光标键”至“/dev management”,见下图:
14)、按“回车键”,移动向下光标键至“Dynamic using devtmpfs + mdev”,得到下图:
15)、按“回车键”,得到下图:
16)、使用buildroot配置和取消密码
①、设置密码
移动“向下光标键”至“Enable Root login with password”,按“Y”,移动向下光标键至“Root password”设置开发板启动密码为“123456”,见下图:
②、取消密码
移动“向下光标键”至“Enable Root login with password”,按“Y”,移动向下光标键至“Root password”,见下图:
按“回车键”进入设置,使用“BACKSPACE键”删除密码,再按“回车键”退出配置,这样就可以取消密码配置了。
注意:不能把光标移到“Ok”上按“O”键退出,这样做,builtroot会认为你输入了密码。
7、配置Filesystem images(文件系统镜像)
1)、按两次“ESC键”,移动向下光标键至“Filesystem images”,得到下图:
2)、按“回车键”,移动向下光标键至“ext2/3/4 root filesystem”,按“Y”,得到下图:
3)、移动“向下光标键”至“ext2/3/4 variant”,得到下图:
4)、按“回车键”,移动向下光标键至“ext4”,得到下图:
5)、按“回车键”,得到下图:
6)、移动“向下光标键”至“exact size”,得到下图:
按“回车键”,得到下图:
7)、设置为1G,按“TAB键”至“Ok”,再按“O”保存。
8、禁止编译Linux内核和uboot
1)、按两次“ESC键”,移动光标键至“Kernel”,见下图:
2)、按“回车键”,按“N”,见下图:
3)、按两次“ESC键”,得到下图:
9、禁止编译Uboot
1)、移动光标至“Bootloaders”,得到下图:
2)、按“回车键”,移动向下光标键至“U-Boot”,按“N”,见下图:
3)、按两次“ESC键”,得到下图:
10、配置Target packages
1)、移动“向上光标键”至“Target packages”
2)、按“回车键”,移动向下光标键至“System tools”,见下图:
3)、按“回车键”,移动向下光标键至“kmod”,按“Y”,见下图:
4)、按“ESC键”,直至出现下面的界面
5)、按“Y”,先保存
11、备份“buildroot配置”
文件路径“/zgq/linux/buildroot/buildroot-2020.02.6/configs/stm32mp1_atk_defconfig”
1)、再次输入“make menuconfig回车”
2)、移动向右光标键至“Save”,按回车键,得到下图:
3)、将“/zgq/linux/buildroot/buildroot-2020.02.6/.config”修改为
“./configs/stm32mp1_atk_defconfig”,见下图:
4)、移动向下光标键至“Ok”,按“O”保存;
我们将配置项命名为“stm32mp1_atk_defconfig”,以后要重新配置buildroot的话就可以直接输入“make stm32mp1_atk_defconfig回车”,显示“configuration written to /home/zgq/linux/buildroot/buildroot-2020.02.6/.config”,表示用“stm32mp1_atk_defconfig”覆盖“.config”,再次输入“make menuconfig回车”,就可以继续配置了。
5)、输入“ls”,查看“buildroot-2020.02.6”目录下的所有文件和文件夹
输入“cd configs/回车”,切换到“configs”目录
输入“ls stm*回车”,查看“configs”目录下的所有文件和文件夹
发现保存的文件“stm32mp1_atk_defconfig”
11、编译“buildroot”
1)、输入“cd ..”返回到“buildroot-2020.02.6”目录
输入“ls”,查看“buildroot-2020.02.6”目录下的所有文件和文件夹
输入“make -j8”,编译“buildroot”,-j8表示采用8线程编译
注意:
如果我们是第1次安装“buildroot”,则使用“sudo make -j8”编译“buildroot”,否则会告诉我们没有权限,不知到为什么会这样?重新安装,就可用“make -j8”。
2)、查看编译结果:
输入“ls”,查看“buildroot-2020.02.6”目录下的所有文件和文件夹
输入“cd output/”切换到“output”目录
输入“ls”,查看“output”目录下的所有文件和文件夹
输入“cd images/”切换到“images”目录
输入“ls”,查看“images”目录下的所有文件和文件夹
3)、打开第2个终端
输入“ls”
输入“cd linux/”,切换到“linux”目录
输入“ls”
输入“cd nfs/”,切换到“nfs”目录
输入“ls回车”
输入“cd rootfs回车”,切换到“rootfs”目录
输入“ls回车”
输入“sudo rm * -rf回车”,删除“rootfs”目录下所有的文件和文件夹,前面已经做了备份
输入“ls回车”
输入“cd ..回车”,返回到“nfs”目录
输入“ls回车”
4)、回到第1个打开的终端
输入“cp rootfs.tar /home/zgq/linux/nfs/rootfs回车”
将“/home/zgq/linux/buildroot/buildroot-2020.02.6/output/images”目录下的“rootfs.tar”拷贝到“/home/zgq/linux/nfs/rootfs”目录中
5)、回到第2个打开的终端
输入“cd rootfs/回车”
输入“ls回车”
输入“tar -vxf rootfs.tar”,解压
6)、输入“ls回车”
输入“rm rootfs.tar回车”,删除压缩包
输入“ls回车”
得到buildroot生成的根文件系统。
12、编译buildroot生成的根文件系统。
从网络启动测试
1)、设置密码运行结果:
mmcblk1: p1 p2 p3
stm32-dwmac 5800a000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IP-Config: Complete:
device=eth0, hwaddr=00:04:9f:04:d2:36, ipaddr=192.168.2.178, mask=255.255.255.0, gw=192.168.2.1
host=192.168.2.178, domain=, nis-domain=(none)
bootserver=192.168.2.180, rootserver=192.168.2.180, rootpath=
ALSA device list:
No soundcards found.
VFS: Mounted root (nfs filesystem) on device 0:16.
devtmpfs: mounted
Freeing unused kernel memory: 1024K
Run /sbin/init as init process
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Saving random seed: OK
Starting network: ip: RTNETLINK answers: File exists
FAIL
Welcome to zgq STM32MP157
ATK-stm32mp1 login:
输入“root回车”
输入密码“123456回车”
输入“cd /”,切换到根目录
输入“ls”,可以执行了
2)、取消密码运行结果:
mmcblk0: p1
dwmac4: Master AXI performs any burst length
stm32-dwmac 5800a000.ethernet eth0: No Safety Features support found
stm32-dwmac 5800a000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
stm32-dwmac 5800a000.ethernet eth0: registered PTP clock
stm32-dwmac 5800a000.ethernet eth0: configuring for phy/rgmii-id link mode
mmc1: new high speed MMC card at address 0001
mmcblk1: mmc1:0001 8GTF4R 7.28 GiB
mmcblk1boot0: mmc1:0001 8GTF4R partition 1 4.00 MiB
mmcblk1boot1: mmc1:0001 8GTF4R partition 2 4.00 MiB
mmcblk1rpmb: mmc1:0001 8GTF4R partition 3 512 KiB, chardev (242:0)
mmcblk1: p1 p2 p3
stm32-dwmac 5800a000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IP-Config: Complete:
device=eth0, hwaddr=00:04:9f:04:d2:36, ipaddr=192.168.2.178, mask=255.255.255.0, gw=192.168.2.1
host=192.168.2.178, domain=, nis-domain=(none)
bootserver=192.168.2.180, rootserver=192.168.2.180, rootpath=
ALSA device list:
No soundcards found.
VFS: Mounted root (nfs filesystem) on device 0:16.
devtmpfs: mounted
Freeing unused kernel memory: 1024K
Run /sbin/init as init process
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Initializing random number generator: OK
Saving random seed: OK
Starting network: ip: RTNETLINK answers: File exists
FAIL
输入“root回车”
输入“cd /”,切换到根目录
输入“ls”,可以执行了
还有个问题要解决:
“modprobe: can't change directory to '/lib/modules': No such file or directory”