Xv6学习小记(一)——编译与运行

本文首发于我的个人博客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,执行。如图:

三核

猜你喜欢

转载自blog.csdn.net/u011630228/article/details/80368307
今日推荐