购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

本书约定

为了帮助读者更好地阅读本书以及完成本书的实验,我们对本书一些术语、实验环境做了一些约定。

1.ARMv8与ARM64术语

本书介绍ARMv8/v9系列的体系结构方面的内容,书中提到的ARMv8体系结构指的是运行在AArch64状态的ARMv8-A处理器体系结构,ARMv9体系结构指的是ARMv9-A处理器体系结构。

本书提到的ARM64体系结构指的是运行在AArch64状态的处理器体系结构,本书混用了ARM64和AArch64这两个术语。本书不介绍AArch32状态的处理器体系结构。

2.实现案例

本书基于Linux内核以及小型OS(BenOS)进行讲解。Linux内核采用Linux 5.0版本。本书大部分实验以BenOS为基础,使读者从最简单的裸机程序不断进行扩展,最终完成一个具有内存管理、进程调度、系统调用等现代操作基本功能的小操作系统,从而学习和掌握ARM64体系结构的相关知识。在实验的设计过程中参考了Linux内核等开源代码的实现,在此对开源社区表示感谢。

3.实验环境

本书推荐的实验环境如下。

●主机硬件平台:Intel x86_64处理器兼容主机。

●主机操作系统:Ubuntu Linux 20.04。本书推荐使用Ubuntu Linux。当然,读者也可以使用其他Linux发行版。另外,读者也可以在Windows平台上使用VMware Player或者VirtualBox等虚拟机安装Linux发行版。

●GCC版本:9.3(aarch64-linux-gnu-gcc)。

●QEMU版本:4.2

●GDB版本:gdb-multiarch或者aarch64-linux-gnu-gdb。

读者在安装完Ubuntu Linux 20.04系统后可以通过如下命令来安装本书需要的软件包。

$ sudo apt update -y
$ sudo apt install net-tools libncurses5-dev libssl-dev build-essential openssl qemu-system-arm libncurses5-dev gcc-aarch64-linux-gnu git bison flex bc vim universal-ctags cscope cmake python3-dev gdb-multiarch

我们基于VMware映像搭建了全套开发环境,读者可以通过“奔跑吧Linux社区”微信公众号来获取下载地址。使用本书配套的VMware映像可以减少配置开发环境带来的麻烦。

4.实验平台

本书的所有实验都可以在如下两个实验平台上完成。

1)树莓派4B实验平台

实验中使用的设备如下。

● 树莓派4B开发板。

● MicroSD卡。

● USB MicroSD读卡器。

● USB转串口线。

● J-Link EDU仿真器。

我们可以使用真实的树莓派开发板或者使用QEMU模拟器来模拟树莓派,读者可以根据实际情况来选择。

2)QEMU + ARM64实验平台

我们基于QEMU + ARM64实现了一个简易的Linux/ARM64系统,本书部分实验(例如第22章和第23章的实验)可以基于此系统来完成。它有如下新特性。

● 支持ARM64体系结构。

● 支持Linux 5.0内核。

● 支持Debian根文件系统。

要下载本书配套的QEMU+ARM64实验平台的仓库,请访问GitHub网站,搜索“running linuxkernel/runninglinuxkernel-5.0”。

5.关于实验参考代码和配套资料

本书为了节省篇幅,大部分实验只列出了实验目的和实验要求,希望读者能独立完成实验。

本书提供部分实验的参考代码,在GitHub网站,搜索“runninglinuxkernel/arm64 programming practice”即可找到。

本书有如下的配套资料。

● 部分实验参考代码。

● 实验平台VMware/VirtualBox映像。

● 配套视频课程。

读者可以通过微信公众号“奔跑吧Linux社区”获取下载地址。

6.芯片资料

本书在编写过程中参考了 ARM 公司的大量芯片手册和技术资料以及与 GNU 工具链相关的文档。下面是本书涉及的技术手册,这些技术手册都是公开发布的,读者可以在ARM官网以及GNU官网上下载。

●《ARM Architecture Reference Manual, ARMv8, for ARMv8-A architecture profile, v8.6》:ARMv8.6体系结构开发手册,这是ARMv8体系结构权威的官方手册。

●《ARM Cortex-A Series Programmer’s Guide for ARMv8-A, version 1.0》:ARMv8-A体系结构开发者参考手册。

●《Cortex-A72 MPCore Processor Technical Reference Manual》:Cortex-A72处理器核心技术手册。

●《Using the GNU Compiler Collection, v9.3》:GCC官方手册。

●《Using AS, the GNU Assembler, v2.34》:汇编器AS官方手册。

●《Using LD, the GNU Linker, v2.34》:链接器LD官方手册。

●《BCM2711 ARM Peripherals, v3》:树莓派4B上与BCM2711芯片外设相关的手册。

●《ARM Generic Interrupt Controller Architecture Specification, v2》:GIC-V2体系结构手册。

●《CoreLink GIC-400 Generic Interrupt Controller Technical Reference Manual》:GIC-400手册。

●《Arm Architecture Reference Manual Supplement, the Scalable Vector Extension》:SVE开发手册。

●《Arm A64 Instruction Set Architecture Armv9, for Armv9-A Architecture Profile》:ARMv9指令手册,包含SVE/SVE2指令说明。

●《Arm Architecture Reference Manual Supplement Armv9, for Armv9-A Architecture Profile》:ARMv9体系结构开发手册。

7.指令的大小写

ARM64指令集允许使用大写形式或者小写形式来书写汇编代码,在ARM官方的芯片手册中默认采用大写形式,而GNU AS汇编器默认使用小写形式,如Linux内核的汇编代码。本书的示例代码采用小写形式,正文说明采用大写形式。 pkgaKsAgYOjoU82dPk6D+nqF1M3L1noWmGN/iAH7wMwwp+noWzqG7MN7YwPLYVIL

点击中间区域
呼出菜单
上一章
目录
下一章
×