题图:使用Termux-qemu在小米平板5上模拟运行Archlinux

前几天看操作系统上的进程 (最小 Linux; fork, execve 和 exit) [南京大学2022操作系统-P11]大为震撼,但是其只介绍到了qemu启动内核和加载initramfs,对于一个Linux发行版的启动过程来说只是走完了从bootloader出来的第一步,而这篇文章就决定补完这一过程,从livecd开始安装并模拟运行Archlinux。

本文的运行环境基于ArchLinux,如果在Windows应用本文请按需修改命令行参数。

理论上本文对于其他Linux发行版也适用。

Part0 前置知识

一个正常的Linux发行版如何启动

操作系统上的进程 (最小 Linux; fork, execve 和 exit) [南京大学2022操作系统-P11]

下载qemu和Archlinux live cd

download qemu

清华开源镜像站/archlinux-2022.03.01-x86_64.iso

Part1 从镜像启动并安装系统

运行以下命令

qemu-img create -f qcow2 rootfs.qcow2 64G #生成根目录磁盘文件(qcow2格式,动态增长,最大64G)
mkdir boot #创建/boot,用于存放内核以及initramfs
qemu-system-x86_64 -nic user \
    -cdrom ./archlinux-2022.03.01-x86_64.iso \
    -virtfs local,path=./boot,mount_tag=boot,security_model=mapped,id=boot,fmode=644,dmode=775 \ 
    -hda rootfs.qcow2 \
    -smp 4 -m 1024 -accel kvm #4个核心,1024M内存,启用kvm加速可按需修改

回车进入livecd的archlinux

挂载根目录,格式化以及boot目录

mkfs.ext4 /dev/sda
mount /dev/hda /mnt
mkdir /mnt/boot
mount -t 9p boot /mnt/boot

然后按照archwiki/installation guide#installation上面安装,注意可以不安装linux-firmware软件包以及任何的bootloader,国内用户请先按照清华大学开源镜像站/Arch Linux 软件仓库镜像使用帮助切换清华软件源加速安装,也可以在/etc/pacman.conf取消ParallelDownload = 5前的注释启用并行下载。

安装完毕后运行poweroff关闭虚拟机

Part2 启动系统

运行以下命令,如果你使用的不是来自linux软件包的内核,请相应修改kernelinitrd参数后的值。

qemu-system-x86_64 -nic user \
    -kernel boot/vmlinuz-linux \
    -initrd boot/initramfs-linux.img \
    -append "quiet acpi=force root=/dev/sda rw loglevel=3" \
    -virtfs local,path=boot,mount_tag=boot,security_model=mapped,id=boot,fmode=644,dmode=775 \
    -hda rootfs.qcow2 \
    -smp 4 -m 1024 -accel kvm #同上

现在这个系统就算可用了。

Part3 到安卓Termux上运行

安装qemu-system-x86-64软件包,把上述工作目录的内容全部拷贝到Termux上,运行以下指令。

为了方便这里开了为了ssh的端口映射。直接ssh -p 8122 root@127.0.0.1就可以访问。

就是题图的效果了。

qemu-system-x86_64 -nic user \
	-net nic,model=e1000 \
	-net user,hostfwd=tcp::8122-:22 \
    -nographic -serial mon:stdio \
    -kernel boot/vmlinuz-linux \
    -initrd boot/initramfs-linux.img \
    -append "console=ttyS0 quiet acpi=force root=/dev/sda rw loglevel=3" \
    -virtfs local,path=boot,mount_tag=boot,security_model=mapped,id=boot,fmode=644,dmode=775 \
    -hda rootfs.qcow2 \
    -smp 1 -m 1024

没有必要开启多核心,qemu的软件模拟实现好像不能很好的利用本地机器的多核。

sysbench的单核心算质数性能大概是台式机的4%。