操作系统实践 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月第一版

相关推荐
七歌杜金房14 小时前
我终于又有了自己的 Linux 电脑
linux·debian·mac
SkyWalking中文站21 小时前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
tntxia2 天前
linux curl命令详解_curl详解
linux
扛枪的书生2 天前
Linux 网络管理器用法速查
linux
SkyWalking中文站2 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
顺风尿一寸2 天前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
雪梨酱QAQ2 天前
Kubeneters HA Cluster部署
运维
江华森2 天前
Spring Cloud 微服务全栈实战:从 Eureka 到 Docker Compose 一文贯通
运维
江华森2 天前
Matplotlib 数据绘图基础入门
运维
XIAOHEZIcode2 天前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行