qemu-基础篇——arm 裸机调试环境搭建(二)


裸机篇系列文章主要用于熟悉 arm 汇编及处理器结构

env

本系列使用 mcimx6ul-evk

测试代码

.global _start

_start:
    ldr r0, =0X020C4068   /* CCM_CCGR0 */
    ldr r1, =0XFFFFFFFF
    str r1, [r0]

    ldr r0, =0X020C406C  /* CCM_CCGR1 */
    str r1, [r0]

    ldr r0, =0X020C4070  /* CCM_CCGR2 */
    str r1, [r0]

    ldr r0, =0X020C4074  /* CCM_CCGR3 */
    str r1, [r0]

    ldr r0, =0X020C4078  /* CCM_CCGR4 */
    str r1, [r0]

    ldr r0, =0X020C407C  /* CCM_CCGR5 */
    str r1, [r0]

    ldr r0, =0X020C4080  /* CCM_CCGR6 */
    str r1, [r0]

    ldr r0, =0X020E0068  /* IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 */
    ldr r1, =0X5
    str r1,[r0]

    ldr r0, =0X020E02F4  /* IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 */
    ldr r1, =0X10B0
    str r1,[r0]

    ldr r0, =0X0209C000 /* GPIO1_DR */
    ldr r1, =0
    str r1,[r0]

loop:
    b loop

makefile

test.bin:test.s
	arm-none-linux-gnueabihf-gcc -g -c test.s -o test.o
	arm-none-linux-gnueabihf-ld -Ttext 0x80000000 test.o -o test.elf
	arm-none-linux-gnueabihf-objcopy -O binary -S -g test.elf test.bin
	arm-none-linux-gnueabihf-objdump -D test.elf > test.dis
clean:
	rm -rf *.o test.bin test.elf test.dis
  • mcimx6ul-evk 0x80000000-0xFFFFFFFF 2048MB 空间为 DDR 地址,所以将程序链接到 0x80000000
  • 通过-Ttext 选项,可以指定链接地址

运行 qemu

qemu-system-arm -machine mcimx6ul-evk -kernel test.elf -S -s

-s :监听在 gdb 1234 端口
-S :表示启动后就挂起,等待 gdb 连接
-kernel 指定启用的内核镜像

调试 qemu

安装调试器

sudp apt-get install gdb-multiarch 

启动调试器

gdb-multiarch --tui test.elf 
  • target remote localhost:1234

连接到刚才启动的 qemu 进程上,然后开始调试,注意qemu此时会断点在启动阶段,必须要用gdb的continue(c)命令使其继续执行

GDB 常用命令

  • continue/c 程序继续运行,到下一断点处暂停
  • run/r 运行
  • step/c 单步运行
  • info reg 查看寄存器
  • break/b + 标号/行号 设置端点
  • info break/b 查看端点

猜你喜欢

转载自blog.csdn.net/tyustli/article/details/130461358