vmware17安装ubuntu2204版本qemu运行armv8处理器uboot运行调试的一些工作
- 首先说一下安装vmware17,官网已经不提供安装包下载了,大家自己找一下资源吧。
- 安装好vmware17和ubuntu2204后,ubuntu桌面右键默认是没有新建文本文件这个菜单的,我们需要在 主目录 的 模板 这个文件夹里通过命令行touch创建 文本文件.txt 这个文件即可。
- 虚拟机和主机之间没法直接复制粘贴文件和文本,我们需要命令行,sudo apt install open-vm-tools-desktop -y 即可。这个open-vm-tools-desktop是开源社区自己维护的新的vm tool工具,比vmware自己菜单栏手动安装那个tool功能还要好。
- 关于下载uboot,安装编译器和qemu,分别给出命令行如下:
sudo apt-get update sudo apt-get install git build-essential qemu-system-arm libssl-dev sudo apt-get install gcc-aarch64-linux-gnu
build-essential和libssl-dev是编译U-Boot所需的开发工具。qemu-system-arm提供了针对ARM架构的QEMU全系统模拟。gcc-aarch64-linux-gnu是针对ARMv8(AArch64)架构的交叉编译器。
我们需要获取U-Boot源码并针对ARMv8平台进行编译 git clone https://github.com/u-boot/u-boot.git (如果网速太慢,就自己去这个网站手动下载压缩包自己解压放到主目录 的 u-boot 这个名即可) cd u-boot
指定我们使用ARM64的交叉编译工具链 export CROSS_COMPILE=aarch64-linux-gnu-
择配置文件:U-Boot为不同的硬件平台提供了预设的配置文件。对于在QEMU上模拟ARMv8,我们使用
make qemu_arm64_defconfig
开始编译:这个过程可能会花费几分钟,具体取决于你的电脑性能
make -j$(nproc)
这个过程可能会报错找不到系统一些头文件和工具啥的,我们直接安装好所有这些,执行如下:
sudo apt install bison flex build-essential pkg-config libglib2.0-dev libpixman-1-dev
这个命令会安装:
flex:一个经常与 Bison 配合使用的词法分析器生成器。
build-essential:包含 GCC、G++、make 等基本的编译工具集合。
pkg-config:帮助查找库文件位置的工具。
libglib2.0-dev 和 libpixman-1-dev:编译 QEMU 时可能需要的重要开发库。
再次进行编译,就能成功啦!
make -j$(nproc)

我们可以使用QEMU来加载并运行刚刚编译好的U-Boot了:
emu-system-aarch64 -machine virt -cpu cortex-a57 -m 512M -nographic -bios u-boot.bin
参数解释:
-machine virt:指定模拟的机器类型为QEMU的通用ARM虚拟平台("virt")。-cpu cortex-a57:指定模拟的CPU为ARMv8架构的Cortex-A57。你也可以尝试其他ARMv8 CPU如cortex-a53或cortex-a72。-m 512M:为虚拟机分配512MB的内存。-nographic:这个选项会以无图形界面模式启动,并将串口输出直接打印到当前终端。这对于在终端中直接与U-Boot交互非常方便。-bios u-boot.bin:指定U-Boot镜像文件作为BIOS加载。
如果一切顺利,你将在终端看到U-Boot的启动日志,并最终进入U-Boot的命令行提示符(通常是 =>)。

在U-Boot命令行中,你可以尝试一些基础命令来验证环境:
help:查看所有可用的命令。bdinfo:显示开发板信息。printenv:打印环境变量。version:显示U-Boot版本。
输入 reset 命令可以重新启动系统。
要退出QEMU,通常可以先按下 Ctrl+A,然后释放再按 X 键。
进行gdb单步调试u-boot,如下:
# 终端1:启动 QEMU
qemu-system-aarch64 -machine virt -cpu cortex-a57 -m 512M -nographic \
-bios u-boot.bin -S -s
-S:在启动时暂停 CPU,等待 GDB 的 continue 命令-s:在端口 1234 开启 GDB 调试服务器
# 终端2:启动 GDB 调试
gdb-multiarch u-boot
# 在 GDB 中执行:
(gdb) target remote :1234
(gdb) break _start
(gdb) continue
(gdb) stepi # 单步执行汇编指令
(gdb) info registers
(gdb) break board_init_f
(gdb) continue
(gdb) next # 在 C 代码中单步执行

