在我们目前用到的芯片平台中,大多数的根文件系统是采用EXT4的方式制作和挂载的,下面进行说明。
一、制作根文件系统
可以使用buildroot或者debootstrap的方式先构建根文件系统所需的组件。由于buildroot方式我们用得比较多,也比较熟悉,这里说明一下用debootstrap的方式,如下:
1、从网站上下载所需的ubuntu的根文件系统包
sudo debootstrap --arch armhf --foreign xenial xenial http://mirrors.ustc.edu.cn/ubuntu-ports/
cp /usr/bin/qemu-arm-static xenial/usr/bin/
chroot xenial/ /debootstrap/debootstrap --second-stage
chroot xenial/ /bin/bash
2、制作EXT4的文件系统
make_ext4fs -s -l 2000M rootfs.ext4 xenial/
制作好的rootfs.ext4即可在BSP包中使用,并最终在终端上挂载了。
3、raw ext4文件的手动制作方式,即先制作文件格式,再往内填充数据
1)创建临时文件夹
mkdir -p rootfs_tmp
2)制作一个2GB的ext4空白文件:
dd if=/dev/zero of=rootfs.ext4 bs=1024 count=2097152
3)将新建的rootfs.ext4文件格式化为ext4格式
sudo mkfs.ext4 rootfs.ext4
4)将rootfs.ext4文件挂载到前面我们新建的临时目录rootfs_tmp
sudo mount -o loop rootfs.ext4 ./rootfs_tmp
5)往rootfs_tmp中填充文件
cd ./rootfs_tmp
cp -avrf ../busybox_rootfs/* ./
6)卸载挂载的rootfs.ext4文件,即完成ext4文件系统的制作
sudo umount ./rootfs_tmp
二、手动挂载根文件系统
第一步中我们制作出来的ext4根文件系统,在服务器上还不能直接挂载,因为它是sparse image,挂载的话是需要raw image的。
sparse image是一种需要多少空间就分配多少的镜像(虚拟机的磁盘镜像文件就是这种镜像,虽然安装系统时候指定了磁盘大小,但占用的磁盘空间并没有那么大,而是随里面的文件大小增大而变大)。 raw ext4 image,即raw image,使用file可以看到它是一个完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载。
sparse image和raw image互转
simg2img rootfs.sparse rootfs.sparse2raw
img2simg rootfs.ext4 rootfs.ext42sparse
sparse image:
test@server:~/work$ file rootfs.ext4
rootfs.ext4: Android sparse image, version: 1.0, Total of 131072 4096-byte output blocks in 3990 input chunks.
sparse image 转为 raw image
test@server:~/work$ simg2img rootfs.ext4 rootfs.raw
ram image:
test@server:~/work$ file rootfs.raw
rootfs.raw: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
手动挂载ext4根文件系统
sudo mount -t ext4 -o loop rootfs.raw rootfs/