4.实验环境搭建指南(自行部署版)
为什么推荐自行部署?
自行搭建环境不仅能加深对 Linux、工具链的理解,更能培养问题排查能力—— 这些都是操作系统学习的核心技能。动手试试,收获会远超预期 :)
部署实验平台所需工具
对于本课程的实验平台搭建,我们需要用到几个工具:
- WSL2
如果你的电脑安装的是Windows 10或Windows 11,推荐使用WSL2(Windows Subsystem for Linux 2)来搭建Linux环境。WSL2不仅能够在Windows系统中高效运行Linux内核,而且相比于WSL1具有更好的性能和完全的Linux系统调用兼容性。WSL2支持运行主流的Linux发行版(如Ubuntu、Debian等),并能够直接访问Windows的文件系统,可以通过Windows自带的文件资源管理器,像操作Windows的文件那样操作WSL上的文件,并且可以在WSL和Windows之间直接进行文件拖拽。通过WSL2可以避免使用虚拟机,占用的系统资源更少,操作也更加便捷。
如何安装WSL并使用WSL进行开发?请参阅官方文档WSL文档。
- VirtualBox虚拟机
如果你的电脑装的是Windows系统,那么你也可以选择能运行Linux系统的虚拟机。VirtualBox是一款开源虚拟机软件,相对VMWare等其他虚拟机来说,速度稍慢,灵活性较差,但免费!
- Linux发行版
Linux发行版是由Linux内核、GNU工具、附加软件和软件包管理器组成的操作系统。所谓“发行”,是由某些机构“发行”了Linux内核以及所有必要的软件及实用程序,使其可以作为一个操作系统使用。主流的Linux发行版有Ubuntu、Debian、Fedora、Centos等,国产Linux发行版有openEuler、Deepin等。
- RISC-V工具链
包括一系列交叉编译的工具,如gcc、binutils、glibc等,用于把源码编译成机器码。
- QEMU模拟器
用于在X86架构的电脑上模拟RISC-V架构的CPU。在实验中,我们将通过QEMU模拟器观察xv6的运行过程。QEMU通过模拟取指、译码、执行等步骤来仿真RISC-V处理器的操作。回想我们在《计算机设计与实践》的CPU实验,是不是有似曾相识的感觉: )
注意事项
请确保你的计算机已经安装有ubuntu、Centos或Debian等其他Linux发行版。如果你使用的是Windows系统,推荐利用WSL2来安装并运行Linux环境,或者通过虚拟机来安装Linux。下面的XV6环境配置安装指导以Ubuntu系统为例。若你计划安装其他Linux系统,请参考详细的XV6环境安装指南: https://pdos.csail.mit.edu/6.S081/2020/tools.html。
1 手动部署实验环境¶
1.1 安装基础依赖与工具链¶
-
下载工具包
访问链接下载 binutils-gdb.zip: https://file.cs-lab.top/s/xcAKpIRmnrFUOPe
并将binutils-gdb.zip上传到Linux环境中。
-
更新软件源,确保后续安装的工具为最新版本
sudo apt-get update -
安装基础开发工具
包含git、编译工具、调试工具、QEMU模拟器、RISC-V交叉编译链
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu -
安装编译binutils-gdb依赖包:
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev python3-dev -
解压工具包并进入目录(*通配符匹配带哈希值的长目录名)
# 以工具包在~/Downloads为例,若路径不同请替换 unzip ~/Downloads/binutils-gdb.zip -d ~/ cd ~/binutils-gdb* -
创建并进入编译目录(避免污染源码):
mkdir build && cd build -
配置编译选项:
- --target:指定目标架构为RISC-V 64位
- --prefix:指定安装路径为/usr/local
- --with-python:关联Python3支持
../configure --target=riscv64-unknown-elf --prefix=/usr/local --with-python=/usr/bin/python3 -
编译与安装(耗时约 5-10 分钟,-j4表示 4 核并行编译):
make -j4 sudo make install -
安装 RISC-V 架构交叉编译 GCC
sudo apt-get update sudo apt-get install gcc-riscv64-unknown-elf
1.2 运行XV6实验¶
-
进入用户主目录
cd ~ -
克隆实验仓库
git clone https://gitee.com/ftutorials/xv6-oslab24-hitsz.git -
进入实验目录并切换分支:
cd xv6-oslab24-hitsz git checkout util -
输入
make qemu启动XV6:make qemu -
启动成功标志
终端输出最后显示以下内容,即表示 XV6 启动成功:
init: starting sh $ -
退出 XV6 方法
务必按以下步骤退出,避免进程残留:
- 先按
Ctrl + a - 松开后立即按
x
- 先按
2. Docker 容器化部署(快速上手方案)¶
Docker 通过容器打包完整环境,无需手动配置依赖,适合追求效率或环境配置遇到困难的学生。
Docker 是一个开源的平台,旨在简化应用程序的开发、测试和部署。它使用容器化技术,将应用程序及其依赖环境打包到一个标准化的单元(称为容器)中,从而确保应用程序可以在任何地方一致运行,无论是开发环境、测试环境还是生产环境。
如果想更深入学习Docker,可以看Docker——从入门到实践。
2.1 Docker的关键概念¶
- 镜像 (Image) :镜像是Docker容器的只读模板。它包含应用程序所需的所有文件、依赖库、配置等。开发者可以基于现有的镜像创建新的镜像。
- 容器 (Container) :容器是从镜像创建的运行实例。每个容器都是独立的,彼此之间隔离,可以拥有自己的文件系统、进程、网络等。容器轻量且启动迅速。
- Dockerfile :Dockerfile 是一个包含一系列指令的文本文件,定义了如何构建一个镜像。通过Dockerfile,开发者可以描述应用程序及其依赖项的构建步骤。
- Docker Hub :这是一个在线仓库,用于存储和共享Docker镜像。开发者可以从Docker Hub下载公共镜像,也可以上传自己创建的镜像。
2.2 Docker的优点¶
- 跨平台兼容 :容器中的应用程序不依赖于主机的操作系统环境,可以跨平台运行。
- 高效资源利用 :容器比虚拟机更轻量,启动速度更快,能够高效利用系统资源。
- 易于管理和部署 :Docker可以将应用程序及其依赖打包在一起,简化了部署过程,减少了环境配置问题。
2.3 通过Docker启动xv6¶
以下是一个基本的步骤指南,帮助你在Linux环境下使用Docker来构建和运行xv6的Docker容器。
2.3.1 Docker安装¶
首先,确保你的Linux系统上安装了Docker。你可以通过访问Docker的官方网站或使用包管理器来安装Docker。
参考官网安装指南。
2.3.2 启动xv6¶
获取xv6-oslab24-hitsz实验包,详见XV6实验框架代码。
我们在 xv6-oslab24-hitsz 目录下配好了 Dockerfile,只需要在 Linux 命令行中进入该目录:
- 使用
git checkout util切换到util分支。 - 使用
su命令进入 root 用户。 - 使用
make build_docker构建 docker 镜像(仅需构建一次)。 - 使用
make docker启动容器进入 bash 终端。 - 使用
make qemu命令启动 xv6。
