文章目录

准备工作

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 内核