这是哈工大计算机科学与技术学院李治军老师的操作系统课程实验环境
我们使用docker 来构建oslab的可运行环境,在wsl2上测试通过,欢迎大家在更多的环境上测试该docker image。<( ̄︶ ̄)↗[GO!]>>
获取oslab的docker image有两种方法,分别是本地构建和从dockerhub直接拉取我们构建好的镜像,两种方法都是可行的,本地构建可以给你更多的自由度,从dockerhub 直接拉取也很方便快捷,下面步骤二选一即可:
- 从Dockerfile中执行构建, 我们默认你已经安装好docker,无论通过docker desktop 或者在linux主机上
docker build -t lxn_oslab:1.0 .
- 从dockerhub中直接拉取我们构建好的镜像(已经提供支持) dockerhub:lxn1234/oslab
docker pull lxn1234/oslab:1.2
Dockerfile 的构建参考林夕` 大佬的环境配置方法,感谢大佬写的文档
- 首先,我们需要在主机上执行
xhost +
- 通过
ifconfig
获取主机的IP地址,记为host_ip
- 将
host_ip
填入文件run_oslab.sh 中
# Run the OSLab programs
docker run --rm -it --network=host --name oslab \
--env="DISPLAY=<host_ip>:0.0" \
在容器里面更新 DISPLAY
这个环境变量也很方便,只需要执行export
即可
export DISPLAY=<host_ip>:0.0
# 查看该环境变量
export |grep "DISPLAY"
- 运行oslab容器
./run_oslab.sh
- 安装Xlaunch,(在windows 上使用docker desktop 需要Xlaunch 可视化容器里面的GUI窗口)
下载安装Xluanch,使用默认配置启动xlaunch即可
linux 环境下不需要安装这个Xlaunch,在容器里面使用
export DISPLAY=<host_ip>:0.0
即可
- 我们可以通过一个
x11-apps
的小插件,来测试容器中的窗口转发, 以下操作我们在容器中进行
apt-get install -y x11-apps
xeyes
如果出现两只眼睛的窗口,则说明容器内部的窗口转发配置成功
- 解压并编译oslab
tar -zxvf hit-oslab.tar.gz -C /root/
cd oslab/linux-0.11
make all -j 2
编译成功
- 运行oslab操作系统
cd oslab
./run
将会出现操作系统加载窗口
由于本实验环境使用WSL2 的Ubuntu20.04 + dockerdesktop,WSL2 中linux kernel在Microsoft 官方的设置下没有打开操作系统对 minix 文件系统的支持,所有需要为WSL2重新编译 linux kernel。看起来很复杂,别担心,只需要下面几个步骤就可以解决问题
参考链接: Microsoft/WSL2-linux-kernel WSL2中linux内核替换
可以使用任何linux分发版为WSL2 编译linux kernel,本次测试使用WSL2 ubuntu 20.04
- 下载WSL2 linux kernel,通过-b拉取对应的分支
git clone -b linux-msft-wsl-5.15.y git@github.com:microsoft/WSL2-Linux-Kernel.git
- 安装编译依赖
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev cpio
- 使用WSL2内核配置构建内核:
编辑
Microsoft/config-wsl
文件,设置操作系统支持minix 文件系统
CONFIG_MINIX_FS=y
CONFIG_LOCALVERSION="-microsoft-lxn-20240919-WSL2"
config-wsl 可以修改linux kernel 的模块支持,例如 设置这个参数 CONFIG_MINIX_FS=y 可以使得操作系统内核支持 minix 文件系统,同时 设置 CONFIG_LOCALVERSION 可以设置操作系统内核uname 显示的系统信息
编译linux kernel
make KCONFIG_CONFIG=Microsoft/config-wsl -j 4
-
编译完成会生成linux kernel为arch/x86/boot/bzImage,将该Linux kernel 拷贝到C:\Windows\System32\lxss\tools路径下 , 重命名为wsl2-linux-kernel-5-15
-
设置WSL2的.wslconfig文件,指定自定义内核启动 .wslconfig文件路径为:
C:\Users\<用户名>\.wslconfig
为配置文件添加kernel内容
[wsl2]
kernel=C:\\Windows\\System32\\lxss\\tools\\wsl2-linux-kernel-5-15
完整的.wslconfig文件如下:
[wsl2]
kernel=C:\\Windows\\System32\\lxss\\tools\\wsl2-linux-kernel-5-15
networkingMode=mirrored #bridged | mirrored
#vmSwitch=WSLBridge
ipv6=true
[experimental]
autoProxy=true
- 重启WSL2,在powershell执行
wsl.exe --shutdown
wsl.exe
- 接下来在启动linux分发版,就可以查看内核信息
uname -a