笔记:使用buildroot构建根文件系统

简介

引用自维基百科:

Buildroot是一组Makefile和Patch文件,用来简化和自动化为嵌入式系统建造一个完整和可引导的Linux环境的过程,特别是在使用交叉编译来允许在单一的基于Linux的开发系统上为多个目标平台进行建造的时候。Buildroot可以自动建造所需要的交叉编译工具链,创建根文件系统,编译一个Linux内核映像,并为目标嵌入式系统生成引导装载器,它还可以进行这些独立步骤的任何组合。例如可以独立的使用已经安装好的交叉编译工具链,而只用Buildroot创建根文件系统。

之前用busybox构建根文件系统时,并不能达到完全自动化,即使配置、编译结束后,任然有一部分工作需要做,而有了buildroot这个更加强大的工具后,在经过配置、编译两个步骤后,一个可以直接烧录的根文件系统镜像就制作好了,除此之外,它还可以配置、编译内核、u-boot等超级多的第三方包。

构建过程

buildroot包下载

首先在官网下载buildroot工具包,下载链接:https://buildroot.org/
buildroot
可以看到有最新的稳定版和一个最新的长期支持版,选哪个都可以:
在这里插入图片描述

配置

和内核一样,都是通过menuconfig就可以进行配置,非常的直观,解压并配置,所有我没贴出来的项均使用了默认配置:

tar -xf buildroot-2021.11.tar.gz
cd buildroot-2021.11
make menuconfig

Target options配置项

此配置项需要根据自己的soc架构来进行配置,我这里是s5pv210的配置:

Target Architecture (ARM (little endian))  ---> # 大小端
Target Binary Format (ELF)  ---> # 目标二进制格式
Target Architecture Variant (cortex-A8)  ---> # soc架构
Target ABI (EABI)  ---> # 应用二进制接口,可根据使用的交叉编译工具链配置
Floating point strategy (Soft float)  ---> # 浮点支持
ARM instruction set (ARM)  ---> # 使用哪种指令集

Build options配置项

在这个配置项中,我将镜像下载源站全部改成了国内源,这样下载包的时候就非常快。

    Mirrors and Download locations  ---> # 镜像下载地址
    	()  Primary download site
    	(http://sources.buildroot.net) Backup download site
    	(https://mirror.bjtu.edu.cn/kernel/) Kernel.org mirror
    	(http://mirrors.nju.edu.cn/gnu/) GNU Software mirror
    	(https://luarocks.cn) LuaRocks mirror
    	(http://mirrors.nju.edu.cn/CPAN/) CPAN mirror (Perl packages)

Toolchain配置项

这里因为我本地已经下载了交叉编译工具链(https://releases.linaro.org/components/toolchain/binaries/),所以不让buildroot下载:

    Toolchain type (External toolchain)  ---> # 选择使用本地交叉编译工具链还是buildroot自己下载
    *** Toolchain External Options ***
    Toolchain (Custom toolchain)  --->
    Toolchain origin (Pre-installed toolchain)  --->
(/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi) Toolchain path # 指定工具链的路径,注意没有/bin/
($(ARCH)-linux-gnueabi) Toolchain prefix # 交叉编译器前缀
	External toolchain gcc version (7.x)  ---> # 交叉编译器版本
	External toolchain kernel headers series (4.10.x)  ---> # 这里在如果选得不对,在编译的时候会给出提示,到时候再修改即可;或者看帮助,在交叉编译工具链目录找linux/version.h文件可以得到
	External toolchain C library (glibc/eglibc)  ---> # 选择使用的C库
	[*] Toolchain has SSP support?
	[*]   Toolchain has SSP strong support?
	[*] Toolchain has RPC support?
	[*] Toolchain has C++ support?

这一步在编译时遇到了一个坑,不能使用apt-get install安装交叉编译工具链,不然会报一个重定位的错。

System configuration配置项

Root FS skeleton (default target skeleton)  --->
(buildroot) System hostname
(Welcome to Buildroot) System banner
    Passwords encoding (sha-256)  --->
    Init system (BusyBox)  --->
    /dev management (Dynamic using devtmpfs + mdev)  ---> # 与内核事件通知相关,一般选择使用的此选项
(system/device_table.txt) Path to the permission tables
[ ] support extended attributes in device tables
[ ] Use symlinks to /usr for /bin, /sbin and /lib
[*] Enable root login with password # 是否使能登录密码
()    Root password # 设置登录密码
    /bin/sh (busybox' default shell)  --->
[*] Run a getty (login prompt) after boot  --->

在使用nfs挂载制作好的根文件系统时,这里遇到了一个坑,我这里明明设置的没有登录密码,但进入系统后,一直重复让输入用户名和密码,而且怎么输都不对,就算是通过修改inittab文件进入了系统,也会发现很多目录没有访问权限,后面发现是因为主机nfs服务器的配置问题:

sudo vim /etc/exports
# 一定要增加no_root_squash选项,与root_squash对应
/srv/nfs  *(rw,sync,no_subtree_check,no_root_squash)
# 重启nfs服务
sudo systemctl restart nfs-kernel-server.service

Kernel配置项

我不编译内核,所以默认关闭。

Target packages配置项

此选项可使用默认配置,根据需求裁剪。

Filesystem images配置项

[*] ext2/3/4 root filesystem # 是否生成可烧录镜像
	ext2/3/4 variant (ext4)  ---> # 镜像格式

编译

这一步就很简单了,直接执行make即可,等待编译完成,查看生成的根文件系统镜像:

ls output/images/
rootfs.ext2  rootfs.ext4  rootfs.tar

至此,一个可用的根文件系统就构建完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值