裸机篇系列文章主要用于熟悉 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
ARCH ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabihf-
test.bin:test.s
$(CROSS_COMPILE)gcc -g -c test.s -o test.o
$(CROSS_COMPILE)ld -Ttext 0x80000000 test.o -o test.elf
$(CROSS_COMPILE)objcopy -O binary -S -g test.elf test.bin
$(CROSS_COMPILE)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
启动调试器文章来源:https://www.toymoban.com/news/detail-811426.html
gdb-multiarch --tui test.elf
- target remote localhost:1234
连接到刚才启动的 qemu 进程上,然后开始调试,注意qemu此时会断点在启动阶段,必须要用gdb的continue(c)命令使其继续执行文章来源地址https://www.toymoban.com/news/detail-811426.html
GDB 常用命令
- continue/c 程序继续运行,到下一断点处暂停
- run/r 运行
- step/c 单步运行
- info reg 查看寄存器
- break/b + 标号/行号 设置端点
- info break/b 查看端点
到了这里,关于qemu-基础篇——arm 裸机调试环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!