制作根文件系统
文章目录
准备工作
Bbusybox 提供了一系列可以直接运行的小程序集合,因此将 busybox 编译后的产物作为 rootfs 的工具再好不过了。这里需要说明的是,交叉编译器要和处理器架构一致。而且要以静态链接的方式进行链接,不然要将相应的动态库拷进系统中, 具体位置在 setting 菜单里。编译过程:
wget https://busybox.net/downloads/busybox-1.32.0.tar.bz2
tar xvf busybox-1.32.0.tar.bz2
cd busybox-1.32.0
make menuconfig
编译并安装:
make -j8 && make install
在 busybox 目录下会生成一个 _install 目录,主要包含一些可执行文件。
rootfs
创建镜像,并格式化为 ext4 文件系统,然后挂载:
dd if=/dev/zero of=rootfs.img bs=1M count=1024
mkfs.ext4 -m 0 -O none -F rootfs.img
sudo mount -o loop rootfs.img rootfs
将上一步生成的 _install 目录下的文件拷贝到 rootfs.
sudo cp Busybox目录/_install/* rootfs/ -raf
在 rootfs 中新建 linux 的根目录树:
mkdir dev etc lib var proc tmp home root mnt sys
拷贝 busybox 的配置目录:
cp busybox目录/examples/bootfloppy/etc/* rootfs/etc -r
修改 profile 文件内容:
# /etc/profile: system-wide .profile file for the Bourne shells
PATH=/bin:/sbin:/usr/bin:/usr/sbin #可执行程序 环境变量
export LD_LIBRARY_PATH=/lib:/usr/lib #动态链接库 环境变量
/bin/hostname mypc
USER="`id -un`"
LOGNAME=$USER
HOSTNAME='/bin/hostname'
PS1='[\u@\h \W]# ' #显示主机名、当前路径等信息:
修改 initab 文件内容:
::sysinit:/etc/init.d/rcS
tty0::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
修改 fstab 内容如下 :
proc /proc proc defaults 0 0
none /var ramfs defaults 0 0
none /sys sysfs default 0 0
none /dev/pts devpts default 0 0
tmpfs /dev/shm tmpfs defaults 0 0
/dev目录中添加必要设备:
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
卸载镜像
sudo umount rootfs
用 lkvmtools 启动虚拟机:
./lkvm run --kernel ../linux-5.8.9/arch/x86/boot/bzImage --disk ../rootfs.img
最终结果如下:
结束语
从上面的结果来看,比较符合预期。但是还不太好用。后面将开始探索如何使用 lkvmtools hack Linux 内核。
kvm 系列
00 : kvmtool 启动 linux 内核