环境配置¶
我们参考了MIT的xv6、Harvard的OS161和Linux等设计了ucore OS实验,所有OS实验需在Linux下运行。
准备工作¶
环境准备:x86-64架构的Docker运行环境。
因为LoongArch32的环境配置比较复杂,尤其是它的QEMU需要补充大量依赖,因此助教为了节省同学们的工作量打包了一个Docker镜像,它封装了所有运行我们的uCore实验所需的环境,并已发布到Docker Hub.
这里推荐使用Windows的同学使用WSL2或Linux虚拟机安装Docker,使用Linux的同学直接安装即可,使用macOS(含Apple Silicon)的同学使用Linux虚拟机安装Docker。
常见Linux发行版安装Docker方法可参考清华镜像站上的教程。
Note
使用WSL2+Ubuntu 22.04的同学请注意:
如果遇到Docker Daemon没有启动,也许是iptables-legacy没有安装,可以执行以下命令解决:
sudo apt install iptables
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo service docker start
另外,WSL1不支持Docker,没有条件安装WSL2的同学建议使用虚拟机。
对于使用的电脑非x86-64架构的同学¶
如果同学们使用非x86-64架构的计算机进行实验,例如使用ARM架构的Apple Silicon的Mac甚至是树莓派,可以使用虚拟机安装一个自己指令集架构的Linux发行版(对于ARM推荐Debian,作为Ubuntu的上游软件支持较丰富),然后执行以下命令安装qemu-user模拟x86-64环境,就可以在Linux中运行x86架构的二进制程序了:
sudo apt install qemu-user qemu-user-static binfmt-support gcc-x86-64-linux-gnu binutils-x86-64-linux-gnu binutils-x86-64-linux-gnu-dbg build-essential
之后的操作与x86-64的Linux完全相同。
配置Docker(可选)¶
-
配置镜像站
对于许多同学的网络环境而言可能从Docker Hub官方下载较慢,这里推荐将Docker Hub改为南京大学镜像站(目前教育网内唯一Docker Hub镜像),配置方法在此。
-
配置Docker组的用户权限
如果同学们想要在Linux中不通过root用户(sudo)就能直接访问Docker,以及在运行于用户权限的VSCode中直接使用Docker,可以将自己的用户加入Docker创建的组中,操作如下:
sudo usermod -aG docker $USER newgrp docker
之后重启电脑即可全局生效,否则每次打开终端需要使用
newgrp docker
才能使权限生效。
下载Docker镜像并创建实验环境容器¶
-
下载
chenyy/la32r-env
镜像:在终端执行以下命令:
docker pull chenyy/la32r-env
-
基于
chenyy/la32r-env
创建la32r-docker
容器docker run -dit \ --name la32r-docker \ --user=$(id -u $USER):$(id -g $USER) \ --net=host \ --workdir="/home/$USER" \ --volume="/home:/home" \ --volume="/root:/root" \ --volume="/mnt:/mnt" \ --volume="/etc/group:/etc/group:ro" \ --volume="/etc/passwd:/etc/passwd:ro" \ --volume="/etc/shadow:/etc/shadow:ro" \ --volume="/etc/sudoers.d:/etc/sudoers.d:ro" \ -e LANG=en_US.UTF-8 \ -e LANGUAGE=en_US.UTF-8 \ -e LC_ALL=en_US.UTF-8 \ chenyy/la32r-env
这里我们对Docker进行了一些配置,简单说就是将整个/home目录在主机与Docker容器之间共享,从而Docker能够直接访问用户文件。同时将用户与组权限进行同步,方便在Docker中直接访问对应的文件。
-
启动
la32r-docker
容器docker start la32r-docker
-
进入
la32r-docker
的Shelldocker exec -it la32r-docker /bin/zsh
配置VSCode(可选)¶
同学们可以在VSCode的插件中搜索Docker,并通过该插件连接到容器中完成操作。
这样我们可以直接在VSCode的插件中找到对应Docker,可以进行Attach Shell或Attch VSCode。方便我们后续在Host端的VSCode完成代码编写,并在Docker中使用对应环境完成编译与调试。
实验中可能使用的软件¶
编辑器¶
这里我们推荐使用Visual Studio Code作为编辑器,原因是它可以很方便地使用Docker插件方便我们对LoongArch32的运行环境进行操作。
git¶
在本次实验中,我们采用Git作为版本控制工具,这样我们可以很方便地记录我们每次的修改,并在遇到问题的时候还原回自己的先前修改的版本。