☰
《ARM64体系架构与编程》实践-搭建qume环境
2026/10/24 2:28:54 网站建设 项目流程

ARM64体系架构与编程实践

  • QEMU的作用
  • 如何安装QEMU
    • 1.下载安装工具和环境
  • 实验2-2:GDB调试

现在在学习ARM64体系架构与编程,记录一下学习过程,防止遗忘。
主机:ubuntu20.04
教材:《ARM64体系架构与编程》

QEMU的作用

QEMU 是一款开源的机器模拟器和虚拟化工具。简单说,它能让你在电脑上模拟出另一台完整的电脑,用来运行不同的操作系统,甚至模拟出与你的电脑 CPU 架构完全不同的设备(比如在 x86 电脑上模拟 ARM 环境)。
他主要有两个用途:

  1. 系统模拟:这是最常用的功能。它能在你的电脑上虚拟出一台完整的电脑(包含虚拟 CPU、内存、硬盘等),用来安装和运行Windows、Linux 等各种系统。如果配合硬件加速(如 Linux 下的 KVM),虚拟机性能可以接近原生速度。
  2. 用户模式模拟:可以运行那些为其他 CPU 架构编译的程序。比如,在 x86 电脑上直接运行一个为 ARM 架构编译的 Linux 程序。

目前是使用QEMU模拟一个树莓派4B开发板,提供一个等效的软件模拟环境。
ubuntu是一个完整的 Linux 发行版。
qemu它是一个运行在操作系统之上的应用程序。它的作用是“扮演”另一台电脑,比如模拟出一颗 ARM64 处理器和树莓派的硬件。

最底层:你的 Windows 电脑。 中间层:VMware 虚拟机,里面运行着 Ubuntu。这是你的工作台。 上层:在 Ubuntu 里,你运行 QEMU。QEMU 模拟出一台“虚拟树莓派”。 最上层:在 QEMU 模拟的树莓派里,运行你编译的 BenOS 或 Linux 内核。

除了用双系统,在可以在windos上安装一个虚拟机,再使用书中提供的镜像包就可快速搭建开发环境。

如何安装QEMU

我是在双系统ubuntu20.04上安装。

1.下载安装工具和环境

1.这个命令是安装一套完整 ARM64 开发启动套件

sudo apt-get install qemu-system-arm libncurses5-dev gcc-aarch64-linux-gnu build-essential git bison flex libssl-dev

2.下载书中提供的BenOS的实验代码:

gitclone https://gitee.com/benshushu/arm64_programming_practice.git

3.进入实验2-1的开发目录:

cdarm64_programming_practice/chapter_2/lab01_hello_benos/BenOS

进入后执行 ls,你应该能看到 Makefile、src 等文件,这才是真正可以编译的 BenOS 代码。

4.编译:

make

5.make之后会生成benos.bin可执行文件,然后运行:

qemu-system-aarch64-machineraspi4-nographic-kernelbenos.bin

这时肯定会报错:因为提示类似 unsupported machine type 或找不到 raspi4,说明你装的官方 QEMU 版本不支持树莓派 4B。根据书中说明,Ubuntu 20.04 自带的 QEMU 4.2 需要打补丁并重新编译才能模拟树莓派 4B,作者提供的配套虚拟机镜像里才包含这个定制版 QEMU。

但是书中也提供了补丁包:

  1. qemu-system-arm-pi4_4.1.50-3_without_GIC_amd64.deb 这是定制版 QEMU,用于模拟树莓派 4B。社区记录明确指出,搭建 QEMU 环境需要的就是这个包(以及 OpenOCD)。without_GIC
    表示它支持树莓派 4 的 Legacy 中断控制器版本,是实验 2-1、2-2 起步阶段应该先装的版本。
  2. openocd-benos_1.0-3_amd64.deb OpenOCD 调试工具。实验 2-3(使用 J-Link 调试)会用到它,但你现在做实验 2-1/2-2 暂时用不到。可以先装着备用,或者等做到相关实验时再装。
  3. qemu-system-arm-pi4_4.2.50-3_with_GIC_amd64.deb 这是带 GIC(通用中断控制器)支持的版本。根据资料,两个 QEMU 包不要同时安装,应该先装 without_GIC
    版本,等做到中断相关实验时,再根据课程讲解切换到 with_GIC 版本。你现在还在第二章,远没到中断,所以先别装这个。

6.卸载并清除掉官方版的 qemu-system-arm

sudoapt-getpurge qemu-system-arm

7.重新安装定制版QEMU:

sudodpkg-iqemu-system-arm-pi4_4.1.50-3_without_GIC_amd64.deb

8.验证安装是否成功

qemu-system-aarch64-machinehelp|grepraspi4

如果命令输出了 raspi4,就说明定制版 QEMU 已经成功安装并可以使用了。

9.回到2-1实验路径,

cd~/arm64_programming_practice/chapter_2/lab01_hello_benos/BenOS

10.运行

makerun

这条命令会调用 Makefile 里封装好的 QEMU 启动命令,等价于:

qemu-system-aarch64-machineraspi4-nographic-kernelbenos.bin

如果定制版 QEMU 安装成功,终端里应该直接输出:

Welcome BenOS!

到这一步实验2-1就完成了。
ctrl+A,X退出QEMU

aarch64-linux-gnu-gcc ldr_basic.S-oldr_basic--staticqemu-aarch64 ./ldr_basic

实验2-2:GDB调试

1.安装GDB

sudoaptinstallgdb-multiarch

整个调试过程需要打开两个终端,一个用来运行QEMU(作为被调试的“目标机”),另一个用来运行GDB(作为调试器)。
2.在终端1中,以调试模式启动QEMU

qemu-system-aarch64-machineraspi4-nographic-kernelbenos.elf-S-s

benos.elf文件在build文件夹内。

  • -S:让QEMU在启动时暂停,等待GDB发出“继续”的指令,否则BenOS会直接跑完,你来不及调试。
  • -s:这是一个简写,等价于 -gdb tcp::1234,意思是在本地的1234端口开启一个GDB调试服务器。

3.打开一个新的终端,同样进入BenOS的实验目录,然后启动GDB并加载 benos.elf:

gdb-multiarch--tuibenos.elf

(–tui 选项会开启一个简易的文本用户界面,能同时显示源码/汇编窗口和命令窗口,对调试很有帮助。)

4.进入GDB界面后,它会提示符 (gdb)。现在,输入以下命令来连接刚才启动的QEMU:

target remote localhost:1234

5.开始调试:
连接成功后,你就可以像调试普通程序一样操作了。一个典型的流程是:

设置断点:在BenOS的入口 _start 处设置一个断点。

b _start

继续运行:让程序从暂停处继续执行,它会停在刚才设置的断点处。

c

此时,GDB的代码窗口会高亮显示停在 _start 处的代码。终端1里原本卡住的QEMU也会开始输出,但会立刻停在断点位置。

单步执行:从断点处开始,逐条指令执行。你可以使用 s (step) 进入函数,或 n (next) 单步跳过函数调用。

s

每执行一步,GDB窗口的代码指示器会移动,终端1里QEMU的串口输出也会相应地一个字符一个字符地打印出 “Welcome BenOS!” 的内容,你可以直观地看到程序是如何一步一步执行的。

查看寄存器:随时可以查看当前所有寄存器的值。

info registers

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询