|
|
|
@ -2,10 +2,9 @@
|
|
|
|
|
|
|
|
|
|
### 目录
|
|
|
|
|
- [2.1 实验环境安装](#environments)
|
|
|
|
|
- [2.1.1 头歌平台](#subsec_educoder)
|
|
|
|
|
- [2.1.2 Windows环境(WSL)](#subsec_windows)
|
|
|
|
|
- [2.1.3 Ubuntu操作系统环境](#subsec_ubuntu)
|
|
|
|
|
- [2.1.4 openEuler操作系统环境](#subsec_openeuler)
|
|
|
|
|
- [2.1.1 安装操作系统环境](#subsec_osenvironments)
|
|
|
|
|
- [2.1.2 安装执行支撑软件](#subsec_softwarepackages)
|
|
|
|
|
- [2.1.3 头歌平台](#subsec_educoder)
|
|
|
|
|
- [2.2 riscv-pke(实验)代码的获取](#preparecode)
|
|
|
|
|
- [2.3 PKE实验构成](#pke_experiemnts)
|
|
|
|
|
|
|
|
|
@ -13,61 +12,74 @@
|
|
|
|
|
|
|
|
|
|
## 2.1 实验环境安装
|
|
|
|
|
|
|
|
|
|
<a name="subsec_educoder"></a>
|
|
|
|
|
|
|
|
|
|
### 2.1.1 头歌平台
|
|
|
|
|
|
|
|
|
|
为支撑《操作系统原理》课程的教学,PKE系列实验在[头歌平台(educoder.net)](https://www.educoder.net/)上进行了部署。
|
|
|
|
|
<a name="subsec_osenvironments"></a>
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_1.png" alt="educoder_step1" style="zoom:80%;" />
|
|
|
|
|
### 2.1.1 安装操作系统环境
|
|
|
|
|
|
|
|
|
|
读者可以在头歌平台的主页上,通过选择左上角的“实践课程”入口,然后在搜索框中输入“基于RISCV的操作系统实验”找到PKE实验对应的实践课程:
|
|
|
|
|
安装即将编译、构建(build)和执行riscv-pke的环境,我们给出以下3种选择:
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_2.png" alt="educoder_step2" style="zoom:80%;" />
|
|
|
|
|
**方案一:Windows Subversion Linux(WSL)**
|
|
|
|
|
|
|
|
|
|
进入课程后,可以先阅读课程实验说明,翻到课程下的实验后就可以通过点击“开始实战”来进入实验了。
|
|
|
|
|
如果读者的工作环境是Windows10的专业版,可采用WSL(Windows Subversion Linux)+MobaXterm的组合来搭建PKE的实验环境。在Windows10专业版上配置该环境的说明,可以参考[这里](https://zhuanlan.zhihu.com/p/81769058)。关于WSL,**应尽量使用WSL1不要升级到WSL2**,因为如果代码存放的位置在/mnt目录下,WSL1中运行编译、构建的速度比WSL2快很多(参考[这里](https://github.com/microsoft/WSL/issues/4197))。
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_3.png" alt="educoder_step3" style="zoom:80%;" />
|
|
|
|
|
需要说明的是,PKE实验并不需要中文字体、图形界面或者JAVA的支持,所以读者在安装WSL的过程中无须安装于汉化相关的包,也无需安装xfce、JDK等。只需要安装WSL的基础环境后,再按照[下一节](#subsec_ubuntu)的说明继续完成rsicv-pke开发环境的安装。
|
|
|
|
|
|
|
|
|
|
进入实战后,会看到如下的界面:
|
|
|
|
|
**方案二:Ubuntu或者其他Linux发行版**
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_4.png" alt="educoder_step4" style="zoom:80%;" />
|
|
|
|
|
读者可以采用VMware、VirtualBox等软件,在客户机中安装客户机,再在客户机中安装执行支撑软件来构建实验环境。客户机的选择我们推荐采用Ubuntu 16.04LTS(x86_64)或更高版本的Ubuntu发行版(如18.04LTS、20.04LTS或更高)操作系统,或者**华为openEuler操作系统**。我们未在其他系统(如arch,RHEL等)上做过测试,但理论上只要将实验中所涉及到的安装包替换成其他系统中的等效软件包,就可完成同样效果。
|
|
|
|
|
|
|
|
|
|
以上界面中,左侧显示的是实验的任务描述以及参考文献链接。右侧是做实验要用到(修改)的源代码文件,在右侧界面的顶端,有一个“命令行”标签,点击进入后可进入命令行模式;顶端的右侧的文件夹图标点击后会出现整个文件目录树,读者可以通过目录树选择要阅读的文件;最后,在右下角有个“评测”按钮,读者可以在完成实验后点击该按钮对自己的实验结果进行评测。
|
|
|
|
|
**方案三:头歌实验平台**
|
|
|
|
|
|
|
|
|
|
**实际上,读者看到的这个界面背后是一个Linux docker虚拟机,在该虚拟机中已经安装好了实验所需要的环境**。包括各种开发工具包、RISC-V交叉编译器等;而评测按钮按下后,会触发虚拟机中的构建(build)脚本,该脚本会自动对代码树进行构建、执行给定的用户程序(如lab1_1中的user/app_helloworld)、最后根据输出的内容对实验结果的正确性进行判断。
|
|
|
|
|
我们在EduCoder实验平台(网址:https://www.educoder.net )上创建了riscv-pke的同步实验课程,课程的终端环境(docker虚拟机)中已完成实验所需软件工具的安装,所以如果读者是在头歌平台上选择的本课程,则可跳过本节的实验环境搭建过程以及执行支撑软件的安装过程,直接进入通过终端(命令行)进入实验环境,头歌实验平台的使用方法见[2.1.3节](#subsec_educoder)。
|
|
|
|
|
|
|
|
|
|
**然而,由于在头歌平台上的课程,每个实验都对应了一个独立的代码仓库,所以从一个实验到另一个实验的切换无法通过`git merge`命令实现对上一个实验的实验结果的继承**。学生在进行实验切换时,需要将之前实验的代码手动地贴入下一个实验的对应文件中。这一点,我们在课程的“课程须知”中做了说明。一个比较好的方法,是采用类似Notepad++这样类型的软件,记录每个实验的答案(包括答案所在的文件),并在切换到下一个实验时,将答案拷贝粘贴到对应文件。
|
|
|
|
|
|
|
|
|
|
考虑到头歌平台的用户身份(主要有老师和学生)的不同,以及老师开课和学生选课的过程的不同,头歌平台给出了[教师使用手册](pictures/EduCoder平台(教师)使用手册v5.0.0_20200924.pdf)和[学生使用手册](pictures/EduCoder平台(学生)使用手册v5.0.0_20200924.pdf)。**简单来说,为了将头歌平台上的PKE实验课程应用到《操作系统原理》课程教学,教师需要在头歌平台上建立一个教学课堂,并在该教学课堂中选用“基于RISCV的操作系统实验”课程,将该实验课程中的实验有选择性的导入到所建立的教学课堂中,并最后吧所建立的教学课堂的邀请码发给学生**。对于学生而言,只需要用老师所给的邀请码在头歌平台上加入教学课堂即可。以上过程都可以通过头歌主页右上侧的“+”符号(将鼠标移动到该符号上)对应的弹出菜单中选择即可。
|
|
|
|
|
|
|
|
|
|
“基于RISCV的操作系统实验”课程的设计,充分考虑到了实验的模块化以及学制安排的问题。课程共设计了15个实验,其中包含9个基础实验和6个挑战实验(随着时间推移,这个列表可能会进一步增加),实验间的关联见[PKE实验的组成](#pke_experiemnts)。**教师开设教学课堂的时候,可以根据学生的水平、教学预期按需选择不同的实验内容,分期分批地给学生安排实验任务**。
|
|
|
|
|
<a name="subsec_softwarepackages"></a>
|
|
|
|
|
|
|
|
|
|
<a name="subsec_windows"></a>
|
|
|
|
|
### 2.1.2 安装执行支撑软件
|
|
|
|
|
|
|
|
|
|
### 2.1.2 Windows环境(WSL)
|
|
|
|
|
riscv-pke的源代码的编译(compile)、构建(build)需要专门的risc-v交叉编译器,所构建的代理内核(及应用)的执行也需要专门的risc-v虚拟机(spike)的支持。这一节将介绍这些支撑软件的安装过程,需要说明的是,该安装过程适合操作系统环境(见[2.1.1节](#subsec_osenvironments))为**WSL**,或者**Ubuntu发行版**的情况。对于头歌实验平台,则无需对执行支撑软件进行任何安装。
|
|
|
|
|
|
|
|
|
|
如果读者的工作环境是Windows10的专业版,可采用WSL(Windows Subversion Linux)+MobaXterm的组合来搭建PKE的实验环境。在Windows10专业版上配置该环境的说明,可以参考[这里](https://zhuanlan.zhihu.com/p/81769058)。关于WSL,应尽量使用WSL1不要升级到WSL2,因为如果代码存放的位置在/mnt目录下,WSL1中运行编译、构建的速度比WSL2[快很多](https://github.com/microsoft/WSL/issues/4197)。
|
|
|
|
|
PKE实验涉及到的执行支撑软件有:
|
|
|
|
|
|
|
|
|
|
需要说明的是,PKE实验并不需要中文字体、图形界面或者JAVA的支持,所以读者在安装WSL的过程中无须安装于汉化相关的包,也无需安装xfce、JDK等。只需要安装WSL的基础环境后,再按照[下一节](#subsec_ubuntu)的说明继续完成PKE开发环境的安装。
|
|
|
|
|
- RISC-V交叉编译器(及附带的主机编译器、构造工具等);
|
|
|
|
|
- spike模拟器;
|
|
|
|
|
|
|
|
|
|
以下分别介绍这些执行支撑软件的安装过程,我们给出以下三种方案:
|
|
|
|
|
|
|
|
|
|
**方案一:下载自包含交叉编译器+执行环境**
|
|
|
|
|
|
|
|
|
|
<a name="subsec_ubuntu"></a>
|
|
|
|
|
● 第一步,安装依赖库
|
|
|
|
|
|
|
|
|
|
### 2.1.3 Ubuntu操作系统环境
|
|
|
|
|
RISC-V交叉编译器的执行仍然需要一些本地支撑软件包,可使用以下命令安装:
|
|
|
|
|
|
|
|
|
|
实验环境我们推荐采用Ubuntu 16.04LTS或18.04LTS(x86_64)操作系统,以及WSL中的相应版本。我们未在其他系统(如arch,RHEL等)上做过测试,但理论上只要将实验中所涉及到的安装包替换成其他系统中的等效软件包,就可完成同样效果。另外,我们在EduCoder实验平台(网址:https://www.educoder.net )上创建了本书的同步课程,课程的终端环境中已完成实验所需软件工具的安装,所以如果读者是在EduCoder平台上选择的本课程,则可跳过本节的实验环境搭建过程,直接进入通过终端(命令行)进入实验环境。
|
|
|
|
|
`$ sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev device-tree-compiler`
|
|
|
|
|
|
|
|
|
|
PKE实验涉及到的工具软件有:
|
|
|
|
|
● 第二步,下载自包含交叉编译器+执行环境
|
|
|
|
|
|
|
|
|
|
- RISC-V交叉编译器(及附带的主机编译器、构造工具等);
|
|
|
|
|
- spike模拟器;
|
|
|
|
|
到[这里](./resources/riscv64-elf-gcc-20210923.tgz)下载自包含交叉编译器+执行环境的tgz包(感谢张杰老师为大家制作),采用以下命令解开tgz包:
|
|
|
|
|
|
|
|
|
|
$ tar xf riscv64-elf-gcc-20210923.tgz
|
|
|
|
|
|
|
|
|
|
解压完成后,将在当前目录产生名为**riscv64-elf-gcc**的目录,**该目录下包含RISC-V交叉编译器以及spike模拟器**。
|
|
|
|
|
|
|
|
|
|
● 第三步,设置环境变量
|
|
|
|
|
|
|
|
|
|
`$ export RISCV=$PWD/riscv64-elf-gcc`
|
|
|
|
|
|
|
|
|
|
`$ export PATH=$PATH:$RISCV/bin`
|
|
|
|
|
|
|
|
|
|
以上命令设置了RISCV环境变量,指向在第二步中的tgz包展开目录,并且将交叉编译器的可执行文件所在的目录加入到了系统路径中。这样,我们就可以在riscv-pke的工作目录调用RISC-V交叉编译器所包含的工具软件了。
|
|
|
|
|
|
|
|
|
|
**建议读者将以上两个export命令,加入到`~/.bashrc`,`~/.profile`或 `/etc/profile`文件的末尾(注意替换$PWD环境变量)**。这样,每次重新启动(并打开终端程序)后,系统会自动设置这两个环境变量,而不用每次都要手动输入以上命令。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以下分别介绍这两个部分的安装过程。对于新安装的Ubuntu操作系统,**我们强烈建议读者在新装环境中完整构建(build)RISC-V交叉编译器,以及spike模拟器**。(对于熟练用户)为了避免耗时且耗资源的构建(build)过程,一个可能的方案是从https://toolchains.bootlin.com 下载,**但是要注意一些依赖包(如GCC)的版本号**。如果强调环境的可移植性,可以考虑在虚拟机中安装完整系统和环境,之后将虚拟机进行克隆和迁移。
|
|
|
|
|
|
|
|
|
|
#### RISC-V交叉编译器
|
|
|
|
|
**方案二:完整自行构建交叉编译器和执行环境**
|
|
|
|
|
|
|
|
|
|
对于新安装的Ubuntu操作系统,我们强烈建议读者在新装环境中完整构建(build)RISC-V交叉编译器,以及spike模拟器。如果强调环境的可移植性,可以考虑在虚拟机中安装完整系统和环境,之后将虚拟机进行克隆和迁移。
|
|
|
|
|
|
|
|
|
|
RISC-V交叉编译器是与Linux自带的GCC编译器类似的一套工具软件集合,不同的是,x86_64平台上Linux自带的GCC编译器会将源代码编译、链接成为适合在x86_64平台上运行的二进制代码(称为native code),而RISC-V交叉编译器则会将源代码编译、链接成为在RISC-V平台上运行的代码。后者(RISC-V交叉编译器生成的二进制代码)是无法在x86_64平台(即x86_64架构的Ubuntu环境下)直接运行的,它的运行需要模拟器(我们采用的spike)的支持。
|
|
|
|
|
|
|
|
|
@ -115,7 +127,7 @@ RISC-V交叉编译器的构建需要一些本地支撑软件包,可使用以
|
|
|
|
|
|
|
|
|
|
**建议读者将以上两个export命令,加入到`~/.bashrc`,`~/.profile`或 `/etc/profile`文件的末尾**。这样,每次重新启动(并打开终端程序)后,系统会自动设置这两个环境变量,而不用每次都要手动输入以上命令。
|
|
|
|
|
|
|
|
|
|
#### spike模拟器
|
|
|
|
|
● 第五步,安装spike模拟器
|
|
|
|
|
|
|
|
|
|
接下来,安装spkie模拟器。首先取得spike的源代码,有两个途径:一个是从github代码仓库中获取:
|
|
|
|
|
|
|
|
|
@ -137,11 +149,35 @@ RISC-V交叉编译器的构建需要一些本地支撑软件包,可使用以
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a name="subsec_openeuler"></a>
|
|
|
|
|
<a name="subsec_educoder"></a>
|
|
|
|
|
|
|
|
|
|
### 2.1.3 头歌平台
|
|
|
|
|
|
|
|
|
|
为支撑《操作系统原理》课程的教学,PKE系列实验在[头歌平台(educoder.net)](https://www.educoder.net/)上进行了部署。
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_1.png" alt="educoder_step1" style="zoom:80%;" />
|
|
|
|
|
|
|
|
|
|
读者可以在头歌平台的主页上,通过选择左上角的“实践课程”入口,然后在搜索框中输入“基于RISCV的操作系统实验”找到PKE实验对应的实践课程:
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_2.png" alt="educoder_step2" style="zoom:80%;" />
|
|
|
|
|
|
|
|
|
|
### 2.1.4 openEuler操作系统
|
|
|
|
|
进入课程后,可以先阅读课程实验说明,翻到课程下的实验后就可以通过点击“开始实战”来进入实验了。
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_3.png" alt="educoder_step3" style="zoom:80%;" />
|
|
|
|
|
|
|
|
|
|
PKE实验将提供基于华为openEuler操作系统的开发方法,*具体的华为云使用方法待续*,但在openEuler操作系统环境中的交叉编译器安装方法,以及其他环节都可参考[2.1.3 Ubuntu环境](#subsec_ubuntu)的命令进行。
|
|
|
|
|
进入实战后,会看到如下的界面:
|
|
|
|
|
|
|
|
|
|
<img src="pictures/educoder_4.png" alt="educoder_step4" style="zoom:80%;" />
|
|
|
|
|
|
|
|
|
|
以上界面中,左侧显示的是实验的任务描述以及参考文献链接。右侧是做实验要用到(修改)的源代码文件,在右侧界面的顶端,有一个“命令行”标签,点击进入后可进入命令行模式;顶端的右侧的文件夹图标点击后会出现整个文件目录树,读者可以通过目录树选择要阅读的文件;最后,在右下角有个“评测”按钮,读者可以在完成实验后点击该按钮对自己的实验结果进行评测。
|
|
|
|
|
|
|
|
|
|
**实际上,读者看到的这个界面背后是一个Linux docker虚拟机,在该虚拟机中已经安装好了实验所需要的环境**。包括各种开发工具包、RISC-V交叉编译器等;而评测按钮按下后,会触发虚拟机中的构建(build)脚本,该脚本会自动对代码树进行构建、执行给定的用户程序(如lab1_1中的user/app_helloworld)、最后根据输出的内容对实验结果的正确性进行判断。
|
|
|
|
|
|
|
|
|
|
**然而,由于在头歌平台上的课程,每个实验都对应了一个独立的代码仓库,所以从一个实验到另一个实验的切换无法通过`git merge`命令实现对上一个实验的实验结果的继承**。学生在进行实验切换时,需要将之前实验的代码手动地贴入下一个实验的对应文件中。这一点,我们在课程的“课程须知”中做了说明。一个比较好的方法,是采用类似Notepad++这样类型的软件,记录每个实验的答案(包括答案所在的文件),并在切换到下一个实验时,将答案拷贝粘贴到对应文件。
|
|
|
|
|
|
|
|
|
|
考虑到头歌平台的用户身份(主要有老师和学生)的不同,以及老师开课和学生选课的过程的不同,头歌平台给出了[教师使用手册](pictures/EduCoder平台(教师)使用手册v5.0.0_20200924.pdf)和[学生使用手册](pictures/EduCoder平台(学生)使用手册v5.0.0_20200924.pdf)。**简单来说,为了将头歌平台上的PKE实验课程应用到《操作系统原理》课程教学,教师需要在头歌平台上建立一个教学课堂,并在该教学课堂中选用“基于RISCV的操作系统实验”课程,将该实验课程中的实验有选择性的导入到所建立的教学课堂中,并最后吧所建立的教学课堂的邀请码发给学生**。对于学生而言,只需要用老师所给的邀请码在头歌平台上加入教学课堂即可。以上过程都可以通过头歌主页右上侧的“+”符号(将鼠标移动到该符号上)对应的弹出菜单中选择即可。
|
|
|
|
|
|
|
|
|
|
“基于RISCV的操作系统实验”课程的设计,充分考虑到了实验的模块化以及学制安排的问题。课程共设计了15个实验,其中包含9个基础实验和6个挑战实验(随着时间推移,这个列表可能会进一步增加),实验间的关联见[PKE实验的组成](#pke_experiemnts)。**教师开设教学课堂的时候,可以根据学生的水平、教学预期按需选择不同的实验内容,分期分批地给学生安排实验任务**。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -149,7 +185,7 @@ PKE实验将提供基于华为openEuler操作系统的开发方法,*具体的
|
|
|
|
|
|
|
|
|
|
## 2.2 riscv-pke(实验)代码的获取
|
|
|
|
|
|
|
|
|
|
以下讨论,我们假设读者是使用的Ubuntu/openEuler操作系统,且已按照[2.1.2](#subsec_ubuntu)的说明安装了需要的工具软件。对于头歌平台而言,代码已经部署到实验环境,读者可以通过头歌网站界面或者界面上的“命令行”选项看到实验代码,所以头歌平台用户无须考虑代码获取环节。
|
|
|
|
|
以下讨论,我们假设读者是使用的Ubuntu/openEuler操作系统,且已按照[2.1.2](#subsec_softwarepackages)的说明安装了需要的工具软件。对于头歌平台而言,代码已经部署到实验环境,读者可以通过头歌网站界面或者界面上的“命令行”选项看到实验代码,所以头歌平台用户无须考虑代码获取环节。
|
|
|
|
|
|
|
|
|
|
#### 代码获取
|
|
|
|
|
|
|
|
|
|