蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88
全部博文(311)
分类: 嵌入式
2009-12-03 18:01:30
gdb_port 3333 interface ft2232 jtag_speed 0 ft2232_vid_pid 0x1457 0x5118 ft2232_layout "jtagkey_prototype_v1" reset_config trst_and_srst jtag_device 4 0x1 0xf 0xe daemon_startup attach target arm920t little reset_run 0 arm920t arm7_9 fast_memory_access enable working_area 0 0x200000 0x4000 backup #flash bank cfi 0 0x100000 2 2 0 #debug_level 3 nand device s3c2440 0 run_and_halt_time 0 5000 ft2232_device_desc "USB<=>JTAG&RS232 A" |
D:\workspace\openjtag>openocd-ftd2xx Open On-Chip Debugger (2008-06-19 19:00) svn: 717 URL: Info: options.c:50 configuration_output_handler(): jtag_speed: 0, 0 Info: options.c:50 configuration_output_handler(): Open On-Chip Debugger (200 8-06-19 19:00) svn: 717 Info: options.c:50 configuration_output_handler(): fast memory access is enab led Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x0032409d (Manufa cturer: 0x04e, Part: 0x0324, Version: 0x0) |
Open On-Chip Debugger > |
Open On-Chip Debugger > poll target state: running > mdw 0x0 target not halted Failure examining memory > halt target state: halted target halted in ARM state due to debug request, current mode: Undefined cpsr: 0xa00000db pc: 0x00000260 MMU: disabled, D-Cache: disabled, I-Cache: disabled > mdw 0x0 0x00000000: ea00000b > mww 0x0 0x12345678 > mdw 0x0 0x00000000: 12345678 > armv4_5 reg r0: 000000d4 r0: 000000d4 r0: 000000d4 r0: 000000d4 r0: 000000d4 r0: 000000d4 r1: 33f000d4 r1: 33f000d4 r1: 33f000d4 r1: 33f000d4 r1: 33f000d4 r1: 33f000d4 r2: 00000330 r2: 00000330 r2: 00000330 r2: 00000330 r2: 00000330 r2: 00000330 r3: 000000d3 r3: 000000d3 r3: 000000d3 r3: 000000d3 r3: 000000d3 r3: 000000d3 r4: e0411000 r4: e0411000 r4: e0411000 r4: e0411000 r4: e0411000 r4: e0411000 r5: 4e00000c r5: 4e00000c r5: 4e00000c r5: 4e00000c r5: 4e00000c r5: 4e00000c r6: 4e000020 r6: 4e000020 r6: 4e000020 r6: 4e000020 r6: 4e000020 r6: 4e000020 r7: 33f01200 r7: 33f01200 r7: 33f01200 r7: 33f01200 r7: 33f01200 r7: 33f01200 r8: 00020000 r8_fiq: 6df3be5a r8: 00020000 r8: 00020000 r8: 00020000 r8: 00020000 r9: f6feafff r9_fiq: 3bf0cfff r9: f6feafff r9: f6feafff r9: f6feafff r9: f6feafff r10: 000000c8 r10_fiq: bbb536ff r10: 000000c8 r10: 000000c8 r10: 000000c8 r10: 000000c8 r11: 00000000 r11_fiq: dfffdf29 r11: 00000000 r11: 00000000 r11: 00000000 r11: 00000000 r12: ea00000b r12_fiq: e6ff736b r12: ea00000b r12: ea00000b r12: ea00000b r12: ea00000b r13_usr: ff4decfb r13_fiq: 77e71bff r13_irq: febfffff r13_svc: 33deffe4 r13 _abt: 497fb6fd r13_und: 33defffc lr_usr: e7fff7df lr_fiq: f7dffb9e lr_irq: ffdff7ef lr_svc: 000005d4 lr _abt: dff0eedf lr_und: 000005d4 pc: 00000260 pc: 00000260 pc: 00000260 pc: 00000260 pc: 00000260 pc: 00000260 cpsr: a00000db spsr_fiq: 80000010 spsr_irq: 00000032 spsr_svc: f00000ff spsr _abt: 00000013 spsr_und: 800000d3 > |
D:\workspace\openjtag\leds>make arm-elf-gcc -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding -c -o crt0.o crt0.S arm-elf-gcc -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding -c -o leds.o leds.c arm-elf-ld -Tleds.lds crt0.o leds.o -o leds_elf arm-elf-objcopy -O binary -S leds_elf leds.bin arm-elf-objdump -D -m arm leds_elf > leds.dis |
> load_image leds\leds_elf 172 byte written at address 0x00000000 downloaded 172 byte in 0.000000s > resume 0x0 > halt target state: halted target halted in ARM state due to debug request, current mode: Undefined cpsr: 0x200000db pc: 0x00000038 MMU: disabled, D-Cache: disabled, I-Cache: disabled |
load_image 把编译后的文件elf 文件,根据文件头的信息,放入0x0地址,resume 0x0,从0x0地址执行程序,这时板上的leds会以走马灯的形式执行运行,halt 将程序暂停。
如果是bin文件(即没有ELF头)则要指定装载地址,用如下命令
load_image leds\leds.bin 0x0
注意本程序执行前提是CPU处于halted状态,并且MMU和D-Cache被禁止(这样程序才能直接操作物理地址),手动关掉MMU和D-Cache的方法,可以通过设置ARM的状态寄存器来完成。在ARM9系列采用如下命令 arm920t cp15 2 0
openocd调试命令
一个调试器必须要有常用的调试功能,才能调出复杂程序。如设断点,单步运行,查看变量值等。openocd 有常用的调试功能。调试时,需要被调试程序要有调试信息,即编译时需要-g参数。
用机器地址来操作断点,是比较麻烦的事情,一般开发需要是源码级的断点,即在源码里设断点。并能单步调试。这时就需要命令行的arm-elf-gdb,更加界面友好的Eclipse 来操作。
opencd 下载u-boot。
当CPU上电时,只有4K的内部内存供程序使用。但是如果要运行更大一点复杂程序。则需要外部的更大的SDRAM来支持了。外部的SDRAM要正常工作,必须要软件来设置相关寄存器。必须要先运行一小段程序先来初始化(包括SDRAM的初始化)。这个程序都是放在0x0地址上,大部分嵌入式CPU,会把这个地址映射到Nor Flash 上。这样CPU可以从Nor Flash 空间直接运行初始化程序。但这样有时比较麻烦,因为意味着你要首先把程序烧录到Nor Flash上,当程序有调整时,又要重复这样操作,费时也增加Flash 的损耗。
因此在S3C24X0还有一种选择,可以利用CPU自动初始化的4K空间。这样这个小程序直接下载这个段空间初始化SDRAM后,更大程序就可以运行了。
openjtag 提供了一个现成的init.bin,里面包含SDRAM初始化代码。当Nor Flash 启动模式时,内部内存被映射成 0x40000000,这样用下列命令来初始化
halt |
如果是Nand Flash 启动模式
halt |
halt load_image u-boot\u-boot.bin 0x33f80000 resume |
chinaunix网友2010-08-20 21:04:53
楼主这篇文章是Windows 下OpenJtag+OpenOCD+Eclipse 集成环境安装,可是始终没有看到如何在eclipse下配置,能否给讲解一下?谢谢