操作系统实践 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 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
奔跑的架构师2 小时前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
迷途呀2 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
闲云自留地2 小时前
动手玩 Nova:Hypervisor、主机聚合、可用分区、虚拟机生命周期实操
运维·架构·openstack
赴生-2 小时前
Liunx 操作系统 进程概念(上)
linux
跨境数据猎手2 小时前
参考pandabuy淘宝代购与集运系统架构设计
系统架构·团队开发
binqian2 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌3 小时前
Shell编程——if条件语句
linux·运维·shell
和裕3 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
Dawn-bit3 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发