官术网_书友最值得收藏!

本書約定

為了幫助讀者更好地閱讀本書、完成本書的實驗,我們對本書的術語、實驗環境做了一些約定。

1.RISC-V與RV64術語

目前RISC-V體系結構主要包括RV32以及RV64,即32位體系結構以及64位體系結構。本書重點介紹與RV64相關的內容。除了在寄存器位寬、地址映射模式等方面有區別,RV32和RV64還有其他方面的細微差異,不過本書不會詳細介紹它們之間的區別。要了解關于RV32的內容,請讀者自行閱讀RISC-V官方手冊。

RISC-V體系結構手冊使用哈特(Hart)來描述一個處理器硬件線程,這個術語類似于x86體系結構定義的超線中央程(Simultaneous Multi-Threading,SMT)以及ARMv8體系結構定義的處理機(Processing Element,PE)。不過截至2022年,還沒有商用的RISC-V處理器實現超線中央程技術,因此,本書對哈特和中央處理器(Central Processing Unit,CPU)這兩個概念不做嚴格區分,繼續沿用CPU這個通用的概念來描述一個處理器執行單元或者硬件線程(如果硬件實現了SMT)。

2.實現案例

本書基于Linux內核以及小型操作系統(BenOS)進行講解。Linux內核采用Linux 5.15。本書大部分實驗以BenOS為基礎,讀者可從最簡單的裸機程序不斷進行擴展,最終完成一個具有內存管理、進程調度、系統調用等基本功能的小型操作系統,從而學習和掌握RV64體系結構的相關知識。我們在實驗的設計過程中參考了Linux內核等開源代碼的實現,在此對開源社區表示感謝。

3.實驗環境

本書推薦的實驗環境如下。

主機硬件平臺:Intel x86-64處理器兼容主機。

主機操作系統:Ubuntu Linux 20.04[1]

GCC版本:9(riscv64-linux-gnu-gcc)。

QEMU版本:4.2.1。

GDB版本:gdb-multiarch。


[1]推薦讀者使用我們提供的VMware/VirtualBox鏡像。

讀者在安裝完Ubuntu Linux 20.04系統后,可通過如下命令安裝本書需要的軟件包。

$ sudo apt update -y
$ sudo apt install net-tools libncurses5-dev libssl-dev build-essential openssl qemu-
  system-misc libncurses5-dev gcc-riscv64-linux-gnu git bison flex bc vim universal-
    ctags cscope gdb-multiarch libsdl2-dev libreadline-dev

我們基于VMware/VirtualBox鏡像搭建了全套開發環境,讀者可以通過“奔跑吧Linux社區”微信公眾號獲取“全套開發環境”的下載地址。使用本書配套的VMware/VirtualBox鏡像可以減少配置開發環境帶來的麻煩。

4.實驗平臺

讀者無須額外購買開發板,推薦在如下兩個免費的模擬器實驗平臺上完成本書所有實驗。

QEMU。

香山模擬器NEMU[2]


[2]有部分實驗還沒在NEMU上實現,不過可以在QEMU上完成。

5.實驗參考代碼和配套資料下載

為了節省篇幅,本書大部分實驗只列出了實驗目的和實驗要求,希望讀者能獨立完成實驗。

在GitHub網站搜索“runninglinuxkernel/riscv_ programming_ practice”即可找到本書大部分實驗的參考代碼以及示例代碼。

本書有如下配套資料。

大部分實驗的參考代碼以及示例代碼。

VMware/VirtualBox鏡像,內置了實驗環境。

免費教學視頻。

讀者可以通過關注微信公眾號“奔跑吧Linux社區”,輸入“risc-v”獲取配套資料的下載地址。

6.芯片資料

作者在編寫本書的過程中參考了RISC-V官方的技術資料以及與 GNU 工具鏈相關的文檔。下面是涉及的技術手冊,這些技術手冊都是公開發布的,讀者可以在RISC-V基金會官網、SiFive官網以及GNU官網上下載。

The RISC-V Instruction Set Manual Volume I: Unprivileged ISA, Document Version 20191213:RISC-V指令集手冊。

The RISC-V Instruction Set Manual Volume II: Privileged Architecture, Document Version 20211203:RISC-V體系結構手冊。

SiFive FU740-C000 Manual, v1p6:SiFive公司的FU740處理器內核技術手冊。

Using the GNU Compiler Collection, v9.3:GCC官方手冊。

Using as, the GNU Assembler, v2.34:匯編器(AS)官方手冊。

Using ld, the GNU Linker, v2.34:鏈接器(LD)官方手冊。

RISC-V“V”Vector Extension, Version 1.0:RVV手冊。

RISC-V Base Cache Management Operation ISA Extensions, Version 1.0:RISC-V高速緩存維護指令擴展手冊。

RISC-V Platform-Level Interrupt Controller Specification, Version 1.0:PLIC手冊。

RISC-V ABIs Specification, Version 0.01:RISC-V ABI接口手冊。

RISC-V Supervisor Binary Interface Specification, Version 1.0.0:RISC-V SBI手冊。

SiFive TileLink Specification, Version 1.8.1:TileLink總線手冊。

香山官方文檔:香山處理器手冊。

7.匯編代碼大小寫

RISC-V指令、寄存器的書寫方式約定如下。

關于RISC-V指令,在匯編代碼中用小寫,在正文中用大寫。

關于通用寄存器和系統寄存器,在匯編代碼和正文中都用小寫。若使用大寫形式書寫通用寄存器和系統寄存器,匯編器會報錯。

8.匯編代碼說明

在RISC-V匯編代碼中,本書有如下約定。

(xn):直接尋址模式,表示以xn寄存器的值為基地址進行尋址,在本書中簡稱為xn地址,示例如下。

ld x2, (x1)  //從x1地址中加載8字節數據到x2寄存器中
sd x2, (x1)  //把x2寄存器的值存儲到x1地址中

offset(xn):偏移尋址模式,表示以xn寄存器的值為基地址,然后偏移offset字節進行尋址。

ld x2, 8(x1)  //從x1+8地址中加載8字節數據到x2寄存器中
sd x2, 8(x1)  //把x2寄存器的值存儲到x1+8地址中
主站蜘蛛池模板: 清徐县| 镇沅| 尼勒克县| 青冈县| 禹城市| 古丈县| 尉氏县| 达拉特旗| 游戏| 兰州市| 丹棱县| 安丘市| 赣州市| 石台县| 酒泉市| 万载县| 沅陵县| 延长县| 昌邑市| 十堰市| 黄大仙区| 开封县| 东兴市| 晴隆县| 泾源县| 巴彦淖尔市| 浪卡子县| 朝阳县| 平远县| 随州市| 大关县| 民和| 石景山区| 阳新县| 郑州市| 永嘉县| 福州市| 汪清县| 友谊县| 本溪| 吉木乃县|