Buildroot |自定义overlayfs
Buildroot规范了整个嵌入式系统构建,从系统配置、软件包选择、到打包成img形式。但是这些步骤都有一定的“官方”的味道,如果我们想要在每次构建的时候加上我们自定义的脚本或者配置文件,难道是要在img构建出来后再一个一个拷贝吗?不是的,overlayfs就是解决这样的问题。
overlayfs,覆盖的根文件系统。允许我们在某个目录另外自定义一个根文件下系统,在构建目标文件系统后但尚未打包img前,自动帮我们把里面的内容拷贝到目标文件系,如果有重复的文件,就会覆盖原本的内容。
overlayfs的使用场景
- 有零散的经常使用的文件需要打包到根文件系统
- buildroot的定义软件版本不适合系统,需要我们自定义版本
使用overlayfs
这个例子将我另外编译的qt库通过buildroot提供的overlayfs自动打包进img。
1.创建overlayfs文件夹
官方推荐的overlayfs文件夹是如此格式:board///rootfs-overlay
创建overlayfs文件夹:fs-overlay是我模仿rk的命名,usr/lib是按照一般的根文件系统的库路径
sudo mkdir -p board/myboard/alphal-imx6ull/fs-overlay/usr/lib
2.拷贝自定义文件
sudo cp -rf ~/Desktop/mystuff/arm-qt/ ./board/myboard/alphal-imx6ull/fs-overlay/usr/lib
3.使能overlayfs功能
这一步让buildroot知道需要把哪个overlayfs拷贝进目标文件系统
BR2_ROOTFS_OVERLAY(在System configuratio菜单中)是用来指定overlayfs的目录,这里把上面的fs-overlay路径写上。注意.git / .svn /.hg等版本控制的隐藏文件会被排除。
sudo make menuconfig
可以使用空格将多个目录加入
4.构建系统
sudo make
5.检查img是否包含自定义内容
最后的img文件在output/image下生成rootfs.ext2
justice@justice-virtual-machine:~/Desktop/buildroot-2022.11.1/output/images$ ls
mnt rootfs.ext2 rootfs.ext4 rootfs.tar rootfs.tar.gz
justice@justice-virtual-machine:~/Desktop/buildroot-2022.11.1/output/images$ sudo mount -o loop rootfs.ext2 mnt/
justice@justice-virtual-machine:~/Desktop/buildroot-2022.11.1/output/images$ cd mnt/
justice@justice-virtual-machine:~/Desktop/buildroot-2022.11.1/output/images/mnt$ ls usr/lib
alsa-lib libext2fs.so libiperf.so.0 libncurses.so.6.1 libstdc++.so
arm-qt libext2fs.so.2 libiperf.so.0.0.0 libpanel.so libstdc++.so.6
libblkid.so libext2fs.so.2.4 libmagic.so libpanel.so.6 libstdc++.so.6.0.29
libcom_err.so libform.so libmagic.so.1 libpanel.so.6.1 libstdc++.so.6.0.29-gdb.py
libcom_err.so.2 libform.so.6 libmagic.so.1.0.0 libreadline.so libuuid.so
libcom_err.so.2.1 libform.so.6.1 libmenu.so libreadline.so.8 os-release
libcurses.so libhistory.so libmenu.so.6 libreadline.so.8.1 terminfo
libe2p.so libhistory.so.8 libmenu.so.6.1 libss.so tslib
libe2p.so.2 libhistory.so.8.1 libncurses.so libss.so.2
libe2p.so.2.3 libiperf.so libncurses.so.6 libss.so.2.0
justice@justice-virtual-machine:~/Desktop/buildroot-2022.11.1/output/images$ sudo umount mnt
可以看到我overlayfs的内容arm-qt已经在目标img中。
关注公众号:justice与初中生小许