AkiraZheng's Time.

ARM64结构与编程:QEMU_BenOS环境搭建

Word count: 544Reading time: 2 min
2025/09/14

项目仓库:https://github.com/AkiraZheng/BenOS_ARM.git

一、安装QEMU环境

在Ubuntu 20.04 LTS上安装定制的QEMU环境,需要两个文件openocd-benos_1.0-3_amd64.debqemu-system-arm-pi4_4.1.50-3_without_GIC_amd64.deb

把两个 .deb 文件放在同一目录,然后

1
2
3
4
5
6
7
sudo apt update

sudo dpkg -i *.deb # 先装包
sudo apt-get install -f # 自动补依赖

sudo apt install gcc-aarch64-linux-gnu
sudo apt install gdb-multiarch

二、代码仓配置

armv8_trainning.git-20240318.tar.xz代码解压到ubuntu中

1
2
3
4
5
6
sudo mkdir BenOS_code
sudo mv ./armv8_trainning.git-20240318.tar.xz ./BenOS_code/
sudo chmod 777 -R ./BenOS_code
cd ./BenOS_code
tar -Jxf armv8_trainning.git-20240318.tar.xz
git log --oneline

在工作目录下载实验参考代码的git repo:

1
2
3
4
5
cd /home/akira/BenOS_Learn/BenOS_code/
mkdir code
git clone ssh://akira@ubuntu/home/akira/BenOS_Learn/BenOS_code/armv8_trainning.git

# git diff 3262911^ f280813 # 查看某一次提交所修改的代码,跟旧代码相比较

此时就能生成一个名为armv8_trainning的目录,里面有代码

代码下有两个分支:

  • main:是完整的代码,仅供参考
  • my_labs:是BenOS的空骨架,在这里完成实验

我们切换到my_labs分支进行实验:

1
2
3
git branch my_lab
git checkout my_lab
git reset 3262911 --hard

当需要提交代码时,可以提交到

1
ssh://akira@ubuntu/home/akira/BenOS_Learn/BenOS_code/armv8_trainning.git

三、QEMU运行BenOS

lab01的实验中打印一个hello world

1
2
make
make run

代码运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
akira@ubuntu:~/BenOS_Learn/BenOS_code/code/armv8_trainning/lab01$ make
mkdir -p build
aarch64-linux-gnu-gcc -DCONFIG_BOARD_PI4B -g -Wall -nostdlib -nostdinc -Iinclude -MMD -c src/pl_uart.c -o build/pl_uart_c.o
mkdir -p build
aarch64-linux-gnu-gcc -DCONFIG_BOARD_PI4B -g -Wall -nostdlib -nostdinc -Iinclude -MMD -c src/kernel.c -o build/kernel_c.o
aarch64-linux-gnu-gcc -g -Iinclude -MMD -c src/mm.S -o build/mm_s.o
aarch64-linux-gnu-gcc -g -Iinclude -MMD -c src/boot.S -o build/boot_s.o
aarch64-linux-gnu-ld -T src/linker.ld -o build/benos.elf build/pl_uart_c.o build/kernel_c.o build/mm_s.o build/boot_s.o
aarch64-linux-gnu-objcopy build/benos.elf -O binary benos.bin
akira@ubuntu:~/BenOS_Learn/BenOS_code/code/armv8_trainning/lab01$ make run
qemu-system-aarch64 -machine raspi4 -nographic -kernel benos.bin
Welcome BenOS!

Ctrl-A 松手后再按 X 退出

然后尝试用QEMU+GDB进行调试。

在一个终端中输入以下命令,启动qemu的gdb调试环境

1
make debug

在另一个终端中输入

1
2
3
4
5
6
7
8
9

gdb-multiarch --tui ./build/benos.elf
(gdb) target remote localhost:1234
(gdb) b _start
(gdb) c
(gdb) layout regs # 查看寄存器
(gdb) s # 运行下一条指令
# (gdb) n # 跳过当前函数
(gdb) x/x $pc # 查看当前pc地址的值

退出:

1
(gdb) q
CATALOG
  1. 一、安装QEMU环境
  2. 二、代码仓配置
  3. 三、QEMU运行BenOS