Ubuntu下搭建ARM汇编在线调试环境

要学习ARM的汇编,需要实际查看相关寄存器和存储器的内容,为此我选择了JLink+JLinkGDBServer+arm-linux-gdb/insight的方案调试汇编程序.

        ubuntu14.04下安装JLink方面的软件还算顺利,安装gdb前端insight时就苦了,make后出现错误,解决不了.后来换了最新的insight-6.8-1a,配置后make,好了一点,不需要像网上一样修改makefile等,但一样会提示错误,好像是说没有安装x11库什么的,安装x11时用源码方式安装,太多依赖文件行不通,,后来用apt-get的方式安装也提示很多依赖文件没有安装.更新源后也不行.后来ubuntu系统提示更新,更新完后重启居然可以通过X11这一关了,但又提示error: No termcap library found.找了一下方法:

apt-cache search ncurses

apt-get install libncurses5-dev  

主要注意几个点:

    1.libx11-dev  libncurses5-dev  libc6-dev这些是需要预先安装

    2.修改/gdb/gdbtk/libaray/targetselection.itb,查找1000,将其修改为2331;

    3../configure --target=arm-linux -prefix=/opt/arm_insight --disable-werror

    禁止警告错误很重要,不然提示很多错误。总算成功build出arm-linux-gdb 和arm-linux-insight来了.

出来后问题又来了:怎么用JLink调试?

        打开JLinkGDBServer和insight后发现insight的端口为1000不能修改,网上很多方法,我这修改了GDBServer :JLinkGDBServer -port 1000 连接上后我直接按insight里面的指令单步按钮,发现显示"Select function name to disassemble",反正不能像VC那样看着界面运行,我按下"Ctrl + N"弹出命令行形式输入"ni"发现显示"0x30001174 in ??()"这样奇怪的字符,说明还不能在线仿真.后来我下载了官方的UM08005_JLinkGDBServer.pdf手册(点击打开)发现需要download后才能在线仿真调试,单步调试可以看到LED灯亮度的变化.但还不清楚怎么将手册里的脚本与insight联系起来.按照文档可以写出这样的GDB脚本:

define initfun
    monitor endian little            #little endian.
    monitor reset                    #reset  
    monitor reg cpsr = 0xd3          #cpsr register.
    monitor speed 1000               #Speed 1000kHz.
    monitor MemU32 0x53000000 = 0    #disable watchdog

    load /home/default/Desktop/init/led_off_elf 0x30000000

 end

define bootfun
        target remote $arg0:$arg1    #arg0 = ip,arg1=port
        initfun
end

        开发板启动选择Nand Flash,打开GDBServer,shell上输入"arm-linux-gdb -x  /home/default/Desktop/gdbinit  -ex "bootfun 127.0.0.1 1000"  /home/default/Desktop/init/led_off_elf":"其中测试程序init是点亮两个LED灯.

.text
.global _start
_start:
	LDR    R0,=0x56000010
	MOV    R1,#0x00015400
	STR    R1,[R0]
	LDR    R0,=0x56000014
	MOV    R1,#0xdf
	STR    R1,[R0]
MAIN_LOOP:
	B      MAIN_LOOP

Makefile是:

led_off.bin : led_off.S
	/usr/gcc-arm-none-eabi-4_7-2013q3/bin/arm-none-eabi-gcc -g -c -o led_off.o led_off.S
	/usr/gcc-arm-none-eabi-4_7-2013q3/bin/arm-none-eabi-ld -Ttext 0x0000000 -g led_off.o -o led_off_elf
	/usr/gcc-arm-none-eabi-4_7-2013q3/bin/arm-none-eabi-objcopy -O binary -S led_off_elf led_off.bin
clean:
	rm -f  led_off.bin led_off_elf *.o

   发现能简单初始化,并烧写到了0x30000000上,可以先设置断点譬如"b 4",然后"c"运行到断点处,"ni"指令单步运行.在insight这些操作比较简单,譬如,下断点直接用图形界面点击即可,下载的话鼠标点击run->download即可下载,但还没搞清楚下载到什么地址去,因为我把启动开关拨到NOR Flash上时不能调试,拨到Nand Flash上download后按下"ni"却可以单步了.gdb的运用还不熟练(GDB在线文档),mini2440的SDRAM地址空间配置,link汇编时指定的地址,insight默认download的地址等等问题还需要进一步学习了解.



你可能感兴趣的:(ARM)