|
|
|
@ -2,7 +2,7 @@
|
|
|
|
|
|
|
|
|
|
### 2.1 实验环境搭建
|
|
|
|
|
|
|
|
|
|
实验环境我们推荐采用Ubuntu 16.04LTS或18.04LTS(x86_64)操作系统,我们未在其他系统(如arch,RHEL等)上做过测试,但理论上只要将实验中所涉及到的安装包替换成其他系统中的等效软件包,就可完成同样效果。另外,我们在EduCoder实验平台(网址:https://www.educoder.net)上创建了本书的同步课程,课程的终端环境中已完成实验所需软件工具的安装,所以如果读者是在EduCoder平台上选择的本课程,则可跳过本节的实验环境搭建过程,直接进入通过终端(命令行)进入实验环境。
|
|
|
|
|
实验环境我们推荐采用Ubuntu 16.04LTS或18.04LTS(x86_64)操作系统,我们未在其他系统(如arch,RHEL等)上做过测试,但理论上只要将实验中所涉及到的安装包替换成其他系统中的等效软件包,就可完成同样效果。另外,我们在EduCoder实验平台(网址:https://www.educoder.net )上创建了本书的同步课程,课程的终端环境中已完成实验所需软件工具的安装,所以如果读者是在EduCoder平台上选择的本课程,则可跳过本节的实验环境搭建过程,直接进入通过终端(命令行)进入实验环境。
|
|
|
|
|
|
|
|
|
|
PKE实验涉及到的软件工具有:RISC-V交叉编译器、spike模拟器,以及PKE源代码三个部分。假设读者拥有了Ubuntu 16.04LTS或18.04LTS(x86_64)操作系统的环境,以下分别介绍这三个部分的安装以及安装后的检验过程。需要说明的是,为了避免耗时耗资源的构建(build)过程,一个可能的方案是将RISC-V交叉编译器以及spike模拟器的安装目录打包,拷贝到新的环境中使用。然而不幸的是,RISC-V交叉编译器的版本与host上的GCC版本有一定的关联关系。例如,以我们的经验,如果host上的GCC的版本是7.5.0,它支持的RISC-V交叉编译器版本就是9.2.0;但是,如果host上的GCC版本是较低版本(如5.4.0),则其对应的RISC-V交叉编译器版本就会是8.1.0。在采用高版本的GCC(例如7.5.0)环境下,使用低版本的RISC-V交叉编译器(如8.1.0),会导致一些未知问题,如程序执行时的挂起等。所以,**我们强烈建议读者在新装环境中完整构建(build)RISC-V交叉编译器,以及spike模拟器**。如果强调环境的可移植性,可以考虑在虚拟机中安装完整系统和环境,之后将虚拟机进行克隆和迁移。
|
|
|
|
|
|
|
|
|
@ -302,7 +302,7 @@ ELF的全称为Executable and Linkable Format,是一种可执行二进制文
|
|
|
|
|
|
|
|
|
|
在这里,我们仅仅之需要简单的了解一下ELF文件的基本组成原理,以便之后能够很好的理解内核可执行文件以及其它的一些ELF文件加载到内存的过程。首先,ELF文件可以分为这样几个部分:ELF文件头、程序头表(program header table)、节头表(section header table)和文件内容。而其中文件内容部分又可以分为这样的几个节:.text节、.rodata节、.stab节、.stabstr节、.data节、.bss节、.comment节。如果我们把ELF文件看做是一个连续顺序存放的数据块,则下图可以表明这样的一个文件的结构。
|
|
|
|
|
|
|
|
|
|
<img src="pictures/fig2_1.png" alt="fig2_1" style="zoom:67%;" />
|
|
|
|
|
<img src="pictures/fig2_1.png" alt="fig2_1" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
图2.1 ELF文件结构
|
|
|
|
|
|
|
|
|
|