本文首发于我的个人博客QIMING.INFO,转载请带上链接及署名。
说明
- Xv6是一个Intel x86平台下的类Unix教学操作系统,最新源码获取地址为https://github.com/mit-pdos/xv6-public
- 运行xv6可以用qemu和bochs,本文介绍在Ubuntu系统下用qemu运行的方式。
- 本文包括qemu的安装步骤、编译并运行Xv6的步骤、Xv6编译生成物的说明以及使用不同CPU数量运行Xv6系统的方法。
安装qemu
直接使用apt-get
安装即可,即输入:
sudo apt-get install qemu
然后输入qemu-system-i386
,如果弹出qemu即表明安装成功:
编译xv6
解压下载好的xv6-master.zip文件
进入解压好的xv6-master目录下,并输入make
命令进行编译
编译结束后可能会出现以下错误
这是因为static_assert重定义了,到xv6的解压文件下找到mkfs.c,注释掉这句代码,保存然后重新make一下即可。如图:
编译成功后如下图所示
用qemu运行xv6
在xv6-master目录中找到并打开Makefile文件;
在“QEMU=
”后面填写qemu-system-i386
,并删掉前面的“#”;
完成后应如下图所示:
进入xv6-master目录下,并输入make qemu
,如下图
Xv6运行成功。
注:如果输入
make qemu
后出现以下错误
说明qemu在Makefile中未配置正确,检查是否删掉QEMU前的“#”,重新执行第2步。
也可以通过在命令行中输入qemu命令的方式来运行xv6系统。
事实上,输入make qemu
等价于输入“qemu-system-i386 -serial mon:stdio -hdb fs.img xv6.img -smp 2 -m 512
”
qemu-system-i386
即表示在x86平台下运行
-hdb
命令是系统要加载的第二个镜像文件
-hda
是第一个,可省略不写
-smp
是选择要用几个核来执行此系统
-m
是指给此系统分配的内存大小
如图:
编译生成物的说明
xv6系统编译成功后,主要生成了xv6.img和fs.img这两个img文件。
根据Makefile 84-87行
xv6.img: bootblock kernel fs.img
dd if=/dev/zero of=xv6.img count=10000
dd if=bootblock of=xv6.img conv=notrunc
dd if=kernel of=xv6.img seek=1 conv=notrunc
可以看出,bootblock和kernel都被加入到了xv6.img中,即xv6.img包含启动块和内核文件。
根据Makefile 159-177行
UPROGS=\
_cat\
_echo\
_forktest\
_grep\
_init\
_kill\
_ln\
_ls\
_mkdir\
_rm\
_sh\
_stressfs\
_usertests\
_wc\
_zombie\
fs.img: mkfs README $(UPROGS)
./mkfs fs.img README $(UPROGS)
可以看出fs.img包含了Unix系统的一些常用命令,故而猜测xv6.img和fs.img一起运行可以使xv6系统使用这些Unix命令。
用不同CPU数量启动xv6
单核
在命令行中输入
qemu-system-i386 –serial mon:stdio –hdbfs.imga.img –smp 1 –m 512
(上文说过,smp命令即可指定CPU个数,故个数为1即为单核)
输入后执行,如图所示:
双核
将smp的1改为2,执行。如图: