题图:使用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
清华开源镜像站/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
软件包的内核,请相应修改kernel
和initrd
参数后的值。
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%。