0 背景
有一个很厉害的师兄针对我们实验室的需求设计了一块控制板,以beaglebone为基础,由于更改了一些底层的硬件,所以重新定制编译的内核,并预先烧写到了板子的flash中。现在需要安装ubuntu的文件系统,以使用ROS的相关功能函数库。前一段时间我在beaglebone官网下载了其提供的预编译好的根文件系统,修改挂载设置fstab文件后顺利启动,但是不能支持图形界面,不知是内核支持的原因还是文件系统的原因。前面琢磨了如何编译适用于ARM架构的内核(编译适用于ARM的linux内核并进行QEMU仿真),为了今后在需要时按自己的意愿修改文件系统,最近两天一直在研究如何定制自己的根文件系统,参考了几篇经验帖,结合自己的实践,特记录于此。
图1 Ubuntu rootfs定制流程
1 获得ubuntu基本裸系统
1.1 利用debootstrap工具
参考ubuntu提供的网站https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap
由于我要跨平台运行,所以不能简单地进行本机编译,在网上查询专门有一个模拟不同机器架构的软件qemu,而在ubuntu中对其支持良好。所以首先在PC主机ubuntu系统中安装qemu模拟器:
sudo apt-get install qemu-user-static
然后就可以利用下面的命令获得一个基本的ubuntu裸文件系统:
sudoqemu-debootstrap --arch armhf --variant=minbase --verbose trusty /mnt/rootfs/
生成的minbase文件系统大小为123M。
manqemu-debootstrap可以看到其原理:
The qemu-debootstrap wrapper calls debootstrap(8) making use of the --foreign and --second-stage options, and copies the appropriate qemu-user-static(1) binary into place inorder to install cross-architecture chroots. In order for it to work seamlessly, the binfmt-support