1 需要的软件工具
- arm-none-eabi-gdb
- J-LINK GDB Server
arm-none-eabi-gdb这个工具在安装交叉编译工具链时一起安装了,我的如图:
J-LINK GDB Server这个工具是安装J-LINK调试器驱动时一起安装的,我的如图:
调试原理,如图:
这种调试属于远程调试,J-LINK GDB Server通过J-LINK调试器连接着开发板,arm-none-eabi-gdb通过远程连接指令target remote localhost:2331连接到 J-LINK GDB Server服务器。我们在调试程序时,只需要在arm-none-eabi-gdb中输入一些简单的GDB调试指令,就可以好像本地调试程序一样了。
2 准备调试用的脚本
# tiny6410_config
# connect to the J-Link gdb server
target remote localhost:2331
# Set JTAG speed to 30 kHz
monitor endian little
monitor speed 30
# Reset the target
monitor reset
monitor sleep 10
#
# CPU core initialization (to be done by user)
#
# Set the processor mode
monitor reg cpsr = 0xd3
#config MMU
#flush v3/v4 cache
monitor cp15 7, 7, 0, 0 = 0x0
#/* flush v4 TLB */
monitor cp15 8, 7, 0, 0 = 0x0
#disable MMU stuff and caches
monitor cp15 1, 0, 0, 0 =0x1002
#Peri port setup
monitor cp15 15, 2, 0, 4 = 0x70000013
#disable watchdog
monitor MemU32 0x7e004000 = 0x00000000
monitor sleep 10
#disable interrupt
monitor MemU32 0x71200014 = 0x00000000
monitor MemU32 0x71300014 = 0x00000000
monitor MemU32 0x7120000C = 0x00000000
monitor MemU32 0x7130000C = 0x00000000
monitor MemU32 0x71200F00 = 0x00000000
monitor MemU32 0x71300F00 = 0x00000000
#set clock
monitor MemU32 0x7e00f900 = 0x0000801e
monitor MemU32 0x7e00f000 = 0x0000ffff
monitor MemU32 0x7e00f004 = 0x0000ffff
monitor MemU32 0x7e00f020 = 0x01043310
monitor MemU32 0x7e00f00C = 0xc2150601
monitor MemU32 0x7e00f010 = 0xc2150601
monitor MemU32 0x7e00f024 = 0x00000003
monitor MemU32 0x7e00f014 = 0x00200102
monitor MemU32 0x7e00f018 = 0x00000000
monitor MemU32 0x7e00f01C = 0x14000007
#config sdram
monitor MemU32 0x7e00f120 = 0x00000008
monitor MemU32 0x7e001004 = 0x00000004
monitor MemU32 0x7e001010 = 0x0000040f
monitor MemU32 0x7e001014 = 0x00000006
monitor MemU32 0x7e001018 = 0x00000001
monitor MemU32 0x7e00101c = 0x00000002
monitor MemU32 0x7e001020 = 0x00000006
monitor MemU32 0x7e001024 = 0x0000000a
monitor MemU32 0x7e001028 = 0x0000000c
monitor MemU32 0x7e00102c = 0x0000018f
monitor MemU32 0x7e001030 = 0x0000000c
monitor MemU32 0x7e001034 = 0x00000002
monitor MemU32 0x7e001038 = 0x00000002
monitor MemU32 0x7e00103c = 0x00000002
monitor MemU32 0x7e001040 = 0x00000002
monitor MemU32 0x7e001044 = 0x00000013
monitor MemU32 0x7e001048 = 0x00000013
monitor MemU32 0x7e00100C = 0x00010012
monitor MemU32 0x7e00104C = 0x00000b45
monitor MemU32 0x7e001200 = 0x000150f8
monitor MemU32 0x7e001304 = 0x00000000
monitor MemU32 0x7e001008 = 0x000c0000
monitor MemU32 0x7e001008 = 0x00000000
monitor MemU32 0x7e001008 = 0x00040000
monitor MemU32 0x7e001008 = 0x00040000
monitor MemU32 0x7e001008 = 0x000a0000
monitor MemU32 0x7e001008 = 0x00080032
monitor MemU32 0x7e001004 = 0x00000000
# Setup GDB for faster downloads
#set remote memory-write-packet-size 1024
#set remote memory-write-packet-size 4096
#set remote memory-write-packet-size fixed
monitor speed 12000
break _start
load
这个脚本用于初始化开发板,使其能够用于调试。
3 简单的调试过程
下面以调试LED程序为例。
1)将开发板通过J-LINK调试器连接到电脑
2)打开J-Link GDB Server软件,如果J-LINK驱动安装正确,软件会检测出开发板的存在,如图
3)使用如下命令,运行arm-none-eabi-gdb软件
-x init-6410:表示执行调试脚本
*.elf:需要做调试时,在编译时加上-g选项,这样.elf文件就会带有调试信息,用于GDB调试。
运行上面的命令后,出现如图所示的,就说明arm-noneeabi-gdb与J-Link GDB Server连接成功。
4)接下来就可以使用GDB指令进行程序的调试了
调试时,可以看到开发板上LED灯的变化。这样就可以通过调试,了解程序运行时的逻辑是否符合本来设计的逻辑。