您的位置:首页 > 编程语言 > Java开发

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 呵呵





收工 有够蛋疼的 嘿嘿

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: