操作系统实践 0 | xv6入门与配置

本系列基于MIT为操作系统本科生高级课程开发的简易类UNIX操作系统xv6,本文为前期平台搭建与准备。

一、平台

  • Linux系统,首推Ubuntu 18.04及以上版本,内核版本不要太老旧。WSL也可以。
  • qemu虚拟机工具包。
  • make工具。
  • gcc编译器。
  • xv6-rev9

你可以通过你自己的方式安装除了xv6之外的平台,或者根据接下来内容来安装。

二、工具下载

使用以下代码进行工具下载。

env.sh

bash 复制代码
sudo apt update && sudo apt upgrade
sudo apt install make gcc cmake gdb

三、安装

1、qemu

安装qemu虚拟机工具需要你安装了python,这里推荐直接安装Anaconda/Miniconda来使用base虚拟环境安装以下库:

bash 复制代码
pip install sphinx numpy

安装完成后,到qemu官网下载安装压缩包安装(直接使用以下脚本):

bash 复制代码
VERSION="10.2.0"
wget https://download.qemu.org/qemu-${VERSION}.tar.xz
tar xf qemu-${VERSION}.tar.xz
./configure --disable-kvm --disable-werror --prefix=/usr/local
make -j$(nproc)
sudo make install

安装完成后,输入 qemu-x86_64 --version 得到以下输出即可验证qemu安装成功:

qemu-x86_64 version 10.2.0

Copyright (c) 2003-2025 Fabrice Bellard and the QEMU Project developers

2、xv6

xv6分为两个版本,分别是原始版本和RISC-V版本。

原始版本

xv6-rev9是原始版本的一个tag,进入原始版本的仓库,注意到下面的Releases,点进去

红色框里框住的部分,从Releases切换到Tags,然后进入绿色框里的版本。

复制压缩包的链接,然后wget下载,此处下载tar.gz格式的。解压缩,进入目录:

bash 复制代码
tar -zxvf xv6-rev9.tar.gz
cd xv6-public-xv6-rev9

之后在目录下执行以下命令即可完成内核编译并进入qemu虚拟机:

bash 复制代码
make
make qemu

# 可选项
# make qemu-gdb # 启动gdb调试
# make qemu-nox # 常见的qemu启动

这里需要提醒一点(非常重要 ),高版本的gcc编译器会将make过程中的Werror识别成错误而非警告,进而导致内核编译失败,所以你需要进入目录下的Makefile文件,把所有的 -Werror 字段都删掉。在这之后再运行上面的命令就可以了。当然如果你使用的低版本gcc那当我没说。

启动成功后可以看到以下输出(使用make qemu)

dd if=/dev/zero of=xv6.img count=10000

10000+0 records in

10000+0 records out

5120000 bytes (5.1 MB, 4.9 MiB) copied, 0.018037 s, 284 MB/s

dd if=bootblock of=xv6.img conv=notrunc

1+0 records in

1+0 records out

512 bytes copied, 0.000300446 s, 1.7 MB/s

dd if=kernel of=xv6.img seek=1 conv=notrunc

390+1 records in

390+1 records out

199832 bytes (200 kB, 195 KiB) copied, 0.00135198 s, 148 MB/s

qemu-system-i386 -serial mon:stdio -drive file=fs.img,index=1,media=disk,format=raw -drive file=xv6.img,index=0,media=disk,format=raw -smp 4 -m 512

VNC server running on 127.0.0.1:5900

xv6...

cpu0: starting

sb: size 1000 nblocks 941 ninodes 200 nlog 30 logstart 2 inodestart 32 bmap start 58

init: starting sh

$

RISC-V版本

参见OS实验xv6 6.S081 开坑

Appendices

1、作者的配置

  • 系统:Linux 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun 5 18:30:46 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
  • 版本:Ubuntu 24.04
  • 虚拟环境:Miniconda3
  • qemu:10.2.0
  • make:4.3
  • gcc:13.3.0
  • cmake:3.28.3
  • gdb:15.0.50.20240403

2、参考文献

《操作系统原型------xv6分析与实验》作者:罗秋明 2021年7月第一版

相关推荐
白云偷星子1 小时前
RHCSA笔记4
运维
怀旧,1 小时前
【Linux系统编程】17. 进程间通信(下)
linux·运维·microsoft
czxyvX1 小时前
011-Linux进程控制
linux
DeeplyMind2 小时前
第27章 常见问题与解决方案
运维·docker·容器
_OP_CHEN2 小时前
【Linux系统编程】(三十六)深挖信号保存机制:未决、阻塞与信号集的底层实现全解析
linux·运维·操作系统·进程·c/c++·信号·信号保存
catoop2 小时前
Nginx 解决 upstream sent too big header 错误
运维·nginx
laplace01232 小时前
第二章 字符串和文本 下
服务器·数据库·python·mysql·agent
IvanCodes2 小时前
六、Linux核心服务与包管理
linux
ayaya_mana2 小时前
Linux一键部署Docker与镜像加速配置
linux·运维·docker