arm蛋疼汇编 part6--写程序怎能不调试 eclipse cdt zylincdt openocd gdb 调试
2010-11-27 23:52
471 查看
step1:安装eclipse cdt 这个google search 一大堆 archlinux 下 yaourt 直接 搞定
step2:在线安装安装eclipse zylincdt插件 eclipse下 Help==>install new software==>work with: zylincdt - http://www.zylin.com/zylincdt 剩下的google search一堆
step3:安装openocd yaourt搞定最新版 配置文件如下:
[leftover-crazy@leftover-crazy ~]$ vim .openocd/openocd.cfg
# # 100ASK OpenJTAG # # http://www.100ask.net # interface ft2232 ft2232_device_desc "USB<=>JTAG&RS232 A" ft2232_layout jtagkey ft2232_vid_pid 0x1457 0x5118 # Target configuration for the Samsung 2440 system on chip # Tested on a S3C2440 Evaluation board by keesj # Processor : ARM920Tid(wb) rev 0 (v4l) # Info: JTAG tap: s3c2440.cpu tap/device found: 0x0032409d (Manufacturer: 0x04e, Part: 0x0324, Version: 0x0) if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { set _CHIPNAME s3c2440 } if { [info exists ENDIAN] } { set _ENDIAN $ENDIAN } else { # this defaults to a bigendian set _ENDIAN little } if { [info exists CPUTAPID ] } { set _CPUTAPID $CPUTAPID } else { # force an error till we get a good number set _CPUTAPID 0x0032409d } #jtag scan chain jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0x0f -expected-id $_CPUTAPID set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME arm920t -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm920t $_TARGETNAME configure -work-area-phys 0x200000 -work-area-size 0x4000 -work-area-backup 1 #reset configuration jtag_nsrst_delay 100 jtag_ntrst_delay 100 reset_config trst_and_srst jtag_khz 12000 #gdb_breakpoint_override hard arm7_9 dcc_downloads enable arm7_9 fast_memory_access enable nand device 0 s3c2440 0
step4: crosstool-ng 编译交叉工具链 生成如下工具:
arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-addr2line arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-addr2name.awk arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-ar arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-as arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-c++ arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-cc arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-c++filt arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-cpp arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-ct-ng.config arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-g++ arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gcc arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gcc-4.3.2 arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gccbug arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gcj arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gcov arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gdb arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gdbtui arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gfortran arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-gprof arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-jcf-dump arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-ld arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-ldd arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-nm arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-objcopy arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-objdump arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-populate arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-ranlib arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-readelf arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-run arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-size arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-sstrip arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-strings arm/arm-2440-linux-gnueabi/bin/arm-2440-linux-gnueabi-strip
此步骤也是google search 呵呵
step5:新建empty makefile工程 以下截图说明:
FILE==>c project 选择makefile project ==》empty project==》选择other toolchain 并填写工程名称
next==>next==>finish
test project 右键 properties ==》Settings 修改如下:
discovery option 修改如下:
接着就可以新建代码文件以及makefile了简单实例如下:
makefile:all: test.S arm-2440-linux-gnueabi-as -g test.S -o test.o arm-2440-linux-gnueabi-ld -Ttext=0x0 test.o -o test_elf arm-2440-linux-gnueabi-objdump -d -m arm test_elf > test_elf.dis arm-2440-linux-gnueabi-objcopy -I elf32-littlearm test_elf -O binary test.bin clean: rm -f test.o test_elf test_elf.dis test.bin
test.S:
main: @压栈操作 nop nop ldr sp, =2000 mov ip, sp sub sp, sp, #12 str lr, [sp] @str r14, [sp] str ip, [sp, #4] @ str r12, [sp, #4] str fp, [sp, #8] @ str r11. [ip, #8] sub fp, ip, #4 @函数调用 ldr r0, =hello @取hello标签地址给R0 既参数一的地址 @arm汇编参数传递通过 @R0传递第一个参数 @R1传递第二个参数 @R2传递第三个参数 @R3传递第四个参数 @如果有多于四个参数的传递需要使用堆栈 @sub sp,sp,#4 @mov lr, pc @ldr pc, show @出栈操作 ldr lr, [fp, #-8] ldr ip, [fp, #-4] ldr fp, [fp, #0] mov sp, ip @函数返回 mov pc,lr show: .word 0x33f9303c hello: .asciz "hello Uboot part2! /n"
接着取消选中project下的 Build Automaticlly
build project 执行make all clean project 执行make clean
step6:openocd 配合gdb调试工程配置
选择
下的debug configurations 双击zylin embedded debug(native)设置如下:
以下仅修改gdb工具:断点入口可以指定任意lable
接着修改启动时的初始命令 monitor开头的是相对于openocd的 其余为gdb的 代码如下:(参照图片修改)
target remote 127.0.0.1:3333 monitor arm920t cp15 2 0 monitor arm7_9 dbgrq enable monitor halt load break main continue
接着点击apply即可
启动openpcd 可以在external tool configurations 设置 也可以直接命令行启动
点击
下的external tool configurations 设置如下两步:
step7:以上已经完成了所有的配置 下次用到时直接copy project 做相应的简易修改即可
下面是调试过程: 1启动openocd下拉选择openocd 调试过程中openocd在未停止状态下 只需启动一次
2开始调试
下拉选择 test default
调试界面如下 剩下的和调试其它程序无差别了 google search 呵呵
收工 有够蛋疼的 嘿嘿
相关文章推荐
- gdb+gdbserver方式进行ARM程序调试
- gdb的简单使用和gdb+gdbserver方式进行ARM程序调试
- 如何使用arm-eabi-gdb调试android c/c++程序
- gdb+gdbserver的方式进行ARM程序调试
- 编译arm-linux-gdb和远程调试arm板程序
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 编译arm-linux-gdb和远程调试arm板程序
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- ARM汇编程序AXD调试出现00000000 [0xe7ff0010] dci 0xe7ff0010 ; ? undefined 00000004 [0xe800e800] stmd
- gdb+gdbserver调试arm-linux程序
- arm蛋疼汇编 part4--接着hello uboot part2!
- 使用 gdb 对程序进行汇编级调试
- 编译arm-linux-gdb和远程调试arm板程序
- gdb+gdbserver的方式进行ARM程序调试
- gdbserver 调试ARM 上的程序出现“ waitpid:Function not implemented ”问题的解决
- ARM下(2410)的程序调试:gdb
- 如何使用arm-eabi-gdb调试android c/c++程序
- GDB+GdbServer: ARM程序调试
- arm蛋疼汇编part 1
- gdb+gdbserver调试arm-linux程序