武汉市网站建设_网站建设公司_营销型网站_seo优化
2025/12/26 10:54:27 网站建设 项目流程

QEMU模拟ARM裸机实验

一、概述

  • Ubuntu上安装QEMU
  • Ubuntu上安装GNU交叉编译GCC工具链
  • 编写简单汇编源代码,编译链接生成可执行文件,生成ARM裸机可执行二进制文件
  • 启动QEMU模拟ARM裸机执行二进制文件

二、QEMU安装

  • 系统环境: Ubuntu22.04
  • QEMU版本: 10.2.0
  • QEMU源码下载地址: https://www.qemu.org/download/#source

下载源码

wget https://download.qemu.org/qemu-10.2.0-rc4.tar.xz
tar xvJf qemu-10.2.0-rc4.tar.xz
cd qemu-10.2.0-rc4

指定安装目录

./configure --prefix /usr/local/bin/

编译

make -j4

安装

make install

配置环境变量

vim ~/.bashrcexport PATH=$PATH:/usr/local/bin/source ~/.bashrc

检查安装

qemu-system-arm --version
QEMU emulator version 10.1.94
Copyright (c) 2003-2025 Fabrice Bellard and the QEMU Project developers

三、GNU交叉编译GCC安装

  • 系统环境: Ubuntu22.04
  • ARM GCC版本: 15.2
  • ARM GCC下载地址: https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

下载工具

wget https://developer.arm.com/-/media/Files/downloads/gnu/15.2.rel1/binrel/arm-gnu-toolchain-15.2.rel1-x86_64-arm-none-eabi.tar.xz

选择存放路径

sudo mkdir -p /usr/local/arm-none-gnu-toolchain
tar xvjf arm-gnu-toolchain-15.2.rel1-x86_64-arm-none-eabi.tar.xz -C /usr/local/arm-none-gnu-toolchain

配置环境变量

vim ~/.bashrcexport PATH=$PATH:/usr/local/arm-none-gnu-toolchain/arm-gnu-toolchain-15.2.rel1-x86_64-arm-none-eabi/binsource ~/.bashrc

检查安装

arm-none-eabi-gcc --version
arm-none-eabi-gcc (Arm GNU Toolchain 15.2.Rel1 (Build arm-15.86)) 15.2.1 20251203
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

四、简单汇编程序

1 源代码

编写汇编源代码文件1.s

.text.global _start_start: mov r0, #10mov r1, #32add r2, r0, r1sub r3, r1, r0mov r4, #0loop:   b loop.end

2 汇编

arm-none-eabi-as -g -mcpu=arm9e -o 1.o 1.s
  • -mcpu : 指定目标cpu系列,用于限制使用对应指令集
    • ARM9E 是 ARM9 系列的一类CPU类别
      • 基于 ARMv5TE 架构
      • 增加 增强 DSP 指令(E)
      • 支持 ARM + Thumb 指令
      • CPU 型号:ARM926EJ-S、ARM946E-S 等属于 ARM9E 系列

3 链接

arm-none-eabi-ld -Ttext=0x00 -o 1.elf 1.o
  • -Ttext : 指定 .text 段在物理内存的起始地址

4 格式转换

arm-none-eabi-objcopy -O binary 1.elf 1.bin
  • -O binary : 输出格式为二进制

五、QEMU模拟CPU执行程序

sudo qemu-system-arm \ -M none \ -cpu arm926 \ -nographic \ -device loader,file=1.bin,addr=0x00 \ -m 128 \ -S -s
  • -M none : 不选择开发板,仅模拟CPU和RAM
  • -cpu arm926 : 选择模拟CPU模型
    • QEMU 会模拟 ARM926EJ-S 这一款 ARM 内核
  • -nographic : 无图形化界面,使用终端
  • -device loader,file=1.bin,addr=0x00 :
    • -device : 选择使用设备
      • loader : 一种虚拟设备,用于把任意二进制文件直接加载到模拟RAM
      • file : 指定二进制文件路径
      • addr : 指定加载到RAM地址
  • -m 128 : 分配可用RAM大小
    • 默认单位 MB(兆字节)
  • -S : 上电后暂停
  • -s : 开启GDB远程调试端口(tcp:1234)
    • 等价于 -gdb tcp::1234

六、GDB调试

启动GDB调试工具,打开待调试可执行文件

arm-none-eabi-gdb 1.elf

连接QEMU中gdb调试服务

(gdb) target remote:1234
  • QEMU 执行的实际上是 内存里的 bin,GDB 用 ELF 提供符号解析,桥接地址和源代码

查看寄存器状态

(gdb) info registers

单步执行

(gdb) stepi

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

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

立即咨询