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

相关推荐
comedate1 天前
Windows / Linux GPU 虚拟内存布局差异与 CUDA 越界访问行为
linux·windows·mmu·cuda 越界访问
暴力求解1 天前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
JoyCong19981 天前
ToDesk个人版、专业版、游戏版、设计版、性能版、团队版权益介绍
大数据·运维·游戏·远程工作·远程操作
ltl1 天前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju1 天前
编译与调试完全指南—第17章 总结
linux
ltl1 天前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
Elastic 中国社区官方博客1 天前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
我不会插花弄玉1 天前
9.进程间通信(上)【由浅入深-Linux】
linux·共享内存·进程通信
80s7771 天前
动态ip和静态ip有什么区别
服务器·网络·tcp/ip
鲁邦通物联网1 天前
出海物联网设备的全球化网络接入与合规脱敏架构:基于 Node-RED 与 C++ 零拷贝的边缘系统设计
网络·物联网·系统架构·边缘计算·边缘计算网关·5g数采·工业级边缘计算网关