项目仓库:https://github.com/AkiraZheng/BenOS_ARM.git
一、安装QEMU环境
在Ubuntu 20.04
LTS上安装定制的QEMU环境,需要两个文件openocd-benos_1.0-3_amd64.deb
,qemu-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
|
此时就能生成一个名为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 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 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) x/x $pc
|
退出: