rootfs是linux的根文件系统,我们看到的 /目录及其中一些重要的子目录,比如/etc ,/lib,/sbin等等就是rootfs提供的,没有rootfs,linux就没法运行。
制作rootfs有两种方式:
1)通过buildroot制作rootfs(比较方便,建议用这种方式)
2)通过busybox制作rootfs(需要手动改很多地方,比较麻烦)。
----------------------------------------第一种方式 buildroot制作rootfs----------------------------------
1)下载buildroot并编译
root@linux:~#wget https://buildroot.org/downloads/buildroot-2020.02.8.tar.gz
root@linux:~#tar zxvf buildroot-2020.02.8.tar.gz && cd buildroot-2020.02.8
root@linux:~#export ARCH=x86_64
root@linux:~#export FORCE_UNSAFE_CONFIGURE=1
root@linux:~#make menuconfig
Toolchain --->
# 编译一些package会用到,比如f2fstools
[*] Enable WCHAR support
System configuration --->
# 系统启动后,密码为空,回车登录shell
[*] Enable root login with password
( ) Root password
# 设置eth0接口为DHCP,如果不设置,qemu启动kernel镜像后,需要手动配置网络
(eth0) Network interface to configure through DHCP
Target packages --->
Filesystem and flash utilities --->
# 格式化f2fs用到
[*] f2fs-tools
Filesystem images --->
[ ] ext2/3/4 root filesystem
# 设置rootfs的文件系统类型
[*] f2fs root filesystem
root@linux:~#make
编译时间较长,编译完成后,output/images目录中生成rootfs.f2fs文件,将该文件拷贝到内核源码目录即可,如下:
root@linux:/home/gsf/linux-5.10.3# ls| grep f2fs
rootfs.f2fs
2)一些注意的地方
修改buildroot-2020.02.8/package目录下的package源码后,重新编译时,需要删除output/build/目录中对应的package,否则编译出来的rootfs.f2fs镜像不会包含改动。
-------------------------------------------第二种方式 busybox制作rootfs--------------------------------------
1)编译_install目录
root@linux:/home/gsf/busybox-1.33.0# export ARCH=arm
root@linux:/home/gsf/busybox-1.33.0# export CROSS_COMPILE=arm-linux-guneabi-
root@linux:/home/gsf/busybox-1.33.0# make menuconfig
Settings --> Build Options --> [*] Build static binary (no shared libs)。
若编译成动态库库,需要将宿主机/bin、/sbin目录中的动态库文件拷贝到_install目录中。
root@linux:/home/gsf/busybox-1.33.0# make install
编译完成后,会在当前目录中生成_install目录,将其拷贝到linux源码根目录。
2)制作rootfs用到的文件
a)将busybox的提供的example中的etc目录拷贝到_install中,,并稍作修改。
root@linux:/home/gsf/debug/kernel/linux-5.10.3# cp ../busybox-1.33.0/examples/bootfloppy/etc ./_install/ -R
修改1:./_install/etc/inittab tty2::askfirst:-/bin/sh ---------> ::askfirst:-/bin/sh 修改2:./_install/etc/fstab 增加下面3行 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 修改3:./_install/etc/ini.d增加2行,注意顺序,改成下面的样子 #! /bin/sh mkdir /proc /sys /tmp /bin/mount -a mdev -s |
b) 在_install目录中创建系统必须的目录
root@linux:/home/gsf/debug/kernel/linux-5.10.3/_install# mkdir dev mnt
c)在dev目录创建设备节点:
mknod console c 5 1
mknod null c 1 1
3)一些注意的地方
编译内核的时候,需要做以下设置:
make menuconfig
General setup --> Initial RAM filesystem and RAM disk (initramfs/initrd) support --> Initramfs source file(s)填入: _install
结语:
rootfs编译成功后,接着再编译kernel img,配合qeumu就可以运行kernel img了。
kernel的编译参考下一篇文章:ubuntu20.04 搭建kernel调试环境第三篇--kernel编译及运行_在qemu中运行f2fs-CSDN博客