4. 添加定制内容到Buildroot源码¶
Buildroot源码用于构建根文件系统,那么是否在构建过程中就将我们添加或者修改的内容添加或覆盖到构建出来的根文件系统?而不需要用户每次都手动添加定制内容, 通过Buildroot的overlay机制就可以很方便实现这一功能。
在Buildroot中,overlay(覆盖层)是一种机制,允许在Buildroot生成的根文件系统基础上添加、修改或删除文件和目录。 这为用户提供了一种灵活的方式来定制根文件系统,而无需直接修改Buildroot自带的配置和源码。
下面将介绍如何创建自己overlay目录,实现定制内容。
4.1. 创建overlay目录结构¶
Buildroot源码的overlay目录存放在buildroot源码/board/xxx厂商/xxx型号/overlay目录,对于NXP的芯片来说则是buildroot源码/board/freescale/xxx型号/overlay目录。
我们在buildroot源码/board/freescale/目录下创建一个名为imx6ullfire的文件夹,用于区分我们的板卡型号,再在imx6ullfire文件夹创建overlay文件夹用于存放我们的定制内容。
以buildroot-2021.02.3版本源码为例,执行以下命令创建文件夹:
1 | mkdir -p buildroot-2021.02.3/board/freescale/imx6ullfire/overlay
|
4.2. 添加定制内容¶
以修改根文件系统的/etc/profile文件为例,profile文件用于配置系统环境变量,在Buildroot系统中终端默认是没有主机名、当前路径和用户显示的,通过修改profile文件可以添加显示。
/etc/profile文件修改后的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
if [ "$PS1" ]; then
if [ "`id -u`" -eq 0 ]; then
export PS1='\u@\h:\w# '
else
export PS1='\u@\h:\w$ '
fi
fi
export EDITOR='/bin/vi'
# Source configuration files from /etc/profile.d
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
|
第5行:u代表当前登录用户的用户名,@分隔用户名和主机名,h代表当前主机名,:分隔主机名和当前工作目录,w前用户的工作目录的完整路径,#表示当前用户是超级用户root。
第7行:与第5行一样,只是$代表普通用户。
在buildroot-2021.02.3/board/freescale/imx6ullfire/overlay目录下创建etc/profile文件并将以上内容添加:
1 2 3 4 5 | #创建etc目录
mkdir -p buildroot-2021.02.3/board/freescale/imx6ullfire/overlay/etc
#添加profile文件
vi buildroot-2021.02.3/board/freescale/imx6ullfire/overlay/etc/profile
|
overlay/对应根文件系统的根目录/,overlay/目录下的文件都会添加、覆盖到根文件系统的根目录/,因此overlay/etc/profile最终会覆盖根文件系统的/etc/profile。
4.3. 配置Buildroot使用overlay¶
在Buildroot根目录执行以下命令,打开界面:
1 2 3 4 5 | #加载自己的配置文件
make imx6ullfire_defconfig
#打开界面
make menuconfig
|
在菜单中找到System configuration -> Root filesystem overlay directories,或者在图像界面输入”/”,打开搜索框,输入BR2_ROOTFS_OVERLAY的配置项可以快速找到对应位置。
添加overlay的路径如下:
1 | $(TOPDIR)/board/freescale/imx6ullfire/overlay
|
其中$(TOPDIR) 表示Buildroot的根目录,后面的则是定制目录路径。
修改完成后如下图所示:

修改完成后保存退出,生成精简配置文件,然后重新编译文件系统:
1 2 3 4 5 | #保存退出后生成精简配置文件,默认会覆盖imx6ullfire_defconfig
make savedefconfig
#编译
make -j16
|
编译生成的根文件系统位于output/images/rootfs.tar,参考“根文件系统的烧录”章节,烧录到板卡,启动系统后,连接终端如果前缀变为 root@buildroot:~#
即修改成功。