最近学习在Ubuntu虚拟机中利用QEMU搭建ARM64环境,其中一个重要的部分就是“制作根文件系统”,网络上有使用debootstrap和busybox制作根文件系统的方法,本篇博文记录这三者的区别
目录
1、debootstrap
debootstrap是debian/ubuntu下的一个工具,用来构建一套基本的系统(根文件系统)。生成的目录符合Linux文件系统标准(FHS),即包含了/boot、/etc、/bin、/usr等等目录,但它比发行版本的Linux体积小很多,当然功能也没那么强大,因此,只能说是“基本的系统”。、
2、febootstrap
fedora下(centos亦可用)有类似功能的工具:febootstrap。观察这两个工具名称,可以看到debootstrap使用debian前缀“de”,而febootstrap使用fedora前缀“fe”,bootstrap含义为“引导”,如果做过LFS的话,对它了解会比较多,而在编译gcc编译器时也有涉及到这个概念。不过debootstrap或febootstrap似乎没有表达出“引导”的意思。
3、busybox
制作根文件系统,在PC上最全面的莫过于LFS(linux form scratch,从头做一个linux系统),而嵌入式中,busybox是不二之选。当然,随着芯片的强大及一些linux发行版本的进化,也有桌面系统直接用于嵌入式领域中,比如ubuntu,就有支持硬件浮点的工具直接下载。
4、debootstrap与busybox的安装
4.1 debootstrap安装(亲测)
ubuntu默认没有安装debootstrap,安装十分简单,执行下列命令即可:
# sudo apt-get install debootstrap
使用debootstrap制作根文件系统会分成两个阶段。
debootstrap命令基本格式:
$ sudo debootstrap --arch [平台] [发行版本代号] [构建目录] [镜像地址]
1.在自己创建的工作目录下执行以下命令
$ sudo su
$ debootstrap --arch=arm64 --foreign buster linux_rootfs http://mirrors.ustc.edu.cn/debian/
- –arch:指定要制作文件系统的处理器体系结构,比如arm64
- buster::指定Debian的版本。buster是Debian 10系统。
- linux_rootfs:本地目录,最后制作好的文件系统会在此目录。本实验使用“linux_rootfs”目录作为根文件系统目录。
- –foreign:只执行引导的初始解包阶段,仅仅下载和解压
- http://mirrors.ustc.edu.cn/debian/: 国内debian镜像源地址
或者:
sudo debootstrap --arch i386 trusty /mnt
则构建x86(32位)平台ubuntu最新发行版14.04(代号为trusty)的基本系统,存放到/mnt目录下
2.安装软件包
因为主机跑在x86架构上,而我们要制作的文件系统是跑在ARM64上,因此可以使用qemu-aarche64-static来模拟成arm64环境的执行环境。
$sudo cp /usr/bin/qemu-aarch64-static ./linux_rootfs/usr/bin/
下面使用debootstrap命令进行软件包的安装和配置
$ sudo chroot linux_rootfs/ debootstrap/debootstrap --second-stage
使用chroot命令切换到刚才制作的根文件系统
4.2 busybox安装(未亲测)
1)首先准备下载一份Busybox源码:Busybox的官方源码下载路径为:
http://busybox.net/downloads/
假设我们使用的是busybox-1.28.1:
2)解压源码
tar xvf busybox-1.28.1.tar.bz2
3)进入源码目录
cd busybox-1.28.1
4)指定工具链
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
5)配置
make menuconfig 静态编译:
Settings --->
[*] Build static binary (no shared libs)
6)编译安装
make defconfig
make
make install
7)上面我们编译安装完成之后会在busybox源码目录的_install目录下生成必要的一些文件:
$ ls
bin linuxrc sbin usr