在WIN11 23H2上搭建哈工大操作系统实验 Hit-oslab 环境指南
前言
本文为网易云课堂李治军老师操作系统系列课程实验的在Windows11 23H2中文家庭版上的本地环境搭建指南
如果网易云上的课程无法查看,也可以看 Bilibili 上的 操作系统哈尔滨工业大学李治军老师。
背景介绍
网易云课堂上这门课配套的实验环境是在蓝桥云课上的,它的在线环境虽然用起来非常方便,但是非会员环境只能保存一个小时,不适合较复杂的实验。所以我决定在本地搭建实验环境。由于Ubuntu 22.04 LTS 是64位系统,没有32位运行库,而且Linux 0.11 不能在gcc 4.x以上编译,因此会遇到了各种各样问题,好在网上有解决方案可以搜索借鉴,在此先表示感谢!后面会附上链接参考。
搭建环境
一、安装Ubuntu 22.04 LTS
1.在Windows环境中,按win+R,在打开的【运行】窗口中直接输入“optionalfeatures”按确定,打开【Windows 功能】对话框。选择适用于“Linux的Windows子系统”和“虚拟机平台”,按确定,然后重启系统。
2.在Windows中,点开始选Mircosoft store,在搜索框输入Ubuntu,选Ubuntu 22.04.3 LTS获取。等安装完成后,打开Ubuntu,在Ubuntu窗口中输入新的UNIX用户名,为了和实验环境一致,我就建了个shiyanlou的用户,其实可以随便起名。
二、准备工作
1.WSL libcuda.so.1 is not a symbolic link 的解决方法
sudo rm -f /usr/lib/wsl/lib/libcuda.so.1
sudo ln -s /usr/lib/wsl/lib/libcuda.so /usr/lib/wsl/lib/libcuda.so.1
sudo ldconfig
2.加载32位库,因为bochs模拟器和linux 0.11 是32位的
sudo dpkg --add-architecture i386
sudo apt update && sudo apt upgrade -y
sudo apt install lib32z1 libsm-dev:i386 libx11-6:i386 libxpm4:i386 libstdc++6:i386 -y
3.安装低版本gcc编译器(gcc-3.4),因为Linux-0.11不能在gcc 4.x以上版本编译
官方仓库:
将官方的仓库下载到本地,然后解压并安装gcc-3.4
cd
git clone https://github.com/hoverwinter/HIT-OSLab.git
cd HIT-OSLab/Resources/
sudo apt-get install binutils
tar zxvf gcc-3.4-ubuntu.tar.gz
cd gcc-3.4
sudo ./inst.sh amd64 # 32位的Ubuntu系统将amd64改为i386
4.安装运行gcc-3.4和bochs所需的其他依赖
sudo apt-get install bin86
sudo apt-get install build-essential
sudo apt-get install gcc-multilib
sudo apt-get install build-essential
5.设置gcc默认运行版本
先查看系统中安装的gcc版本
ls -l /usr/bin/gcc* -11
显示如下:
lrwxrwxrwx 1 root root 21 May 9 09:53 /usr/bin/gcc*
lrwxrwxrwx 1 root root 23 May 13 2023 /usr/bin/gcc-11 -> x86_64-linux-gnu-gcc-11*
-rwxr-xr-x 1 root root 91920 Oct 23 2008 /usr/bin/gcc-3.4*
lrwxrwxrwx 1 root root 9 Aug 5 2021 /usr/bin/gcc-ar -> gcc-ar-11*
lrwxrwxrwx 1 root root 26 May 13 2023 /usr/bin/gcc-ar-11 -> x86_64-linux-gnu-gcc-ar-11*
lrwxrwxrwx 1 root root 9 Aug 5 2021 /usr/bin/gcc-nm -> gcc-nm-11*
lrwxrwxrwx 1 root root 26 May 13 2023 /usr/bin/gcc-nm-11 -> x86_64-linux-gnu-gcc-nm-11*
lrwxrwxrwx 1 root root 13 Aug 5 2021 /usr/bin/gcc-ranlib -> gcc-ranlib-11*
lrwxrwxrwx 1 root root 30 May 13 2023 /usr/bin/gcc-ranlib-11 -> x86_64-linux-gnu-gcc-ranlib-11*
-rwxr-xr-x 1 root root 16020 Oct 23 2008 /usr/bin/gccbug-3.4*
说明系统中gcc-11和gcc-3.4新旧两个版本,需要设置优先级,优先级可按自己想法随意设置
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 30
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 70
切换gcc版本为3.4
sudo update-alternatives --config gcc
显示如下:
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-11 70 auto mode
1 /usr/bin/gcc-11 70 manual mode
2 /usr/bin/gcc-3.4 30 manual mode
Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/gcc-3.4 to provide /usr/bin/gcc (gcc) in manual mode
三、搭建OSLab环境
回到~/HIT-OSLab/Resources目录,解压hit-oslab-linux-20110823.tar.gz
cd ~/HIT-OSLab/Resources
tar zxvf hit-oslab-linux-20110823.tar.gz
cd oslab
四、编译内核
进入目录linux-0.11,并编译内核,出现sync提示即编译成功
cd linux-0.11/
make all
五、测试运行
返回目录oslab,运行run
cd ../oslab
./run
参考文献:
1、Oldlinux.org – Linux plinux - Early Linux Kernel Analysis and Comments
2、https://blog.csdn.net/sykongdl/article/details/126993644
3、如何修复 Ubuntu 上的“E Unable to locate package package_name”错误_e: unable to locate package tunctl-CSDN博客
4、WSL libcuda.so.1 is not a symbolic link 的解决方法 | ✨kiraの博客 (kira-96.github.io)
5、https://askubuntu.com/questions/815309/how-to-install-libsm6i386-on-14-04-lts-64bit