- 論壇徽章:
- 0
|
[color="#0001FF"]關(guān)于OpenOCD的安裝和配置(以mini2440+OpenJTAG為例)
前幾天買了一個(gè)OpenJTAG,準(zhǔn)備用于U-boot的調(diào)試和開發(fā)。之后學(xué)習(xí)了一下
《Eclipse,OpenOCD,OpenJTAG 嵌入式開發(fā)教程》
(以下簡(jiǎn)稱教程)。首先要學(xué)習(xí)的是使用OpenJTAG調(diào)試的基本原理,這個(gè)在教程的[color="#0001FF"]“1.2 嵌入式軟件的交叉開發(fā)系統(tǒng)”中有很好的介紹,大家一定要看一下。之后的關(guān)鍵是如何配置OpenOCD,使其可以認(rèn)出你開發(fā)板上的芯片和flash。在教程中介紹的是使用他們編譯好的0.1.0版本的OpenOCD和已經(jīng)寫好的openocd.cfg配置文件。但是作為一個(gè)嵌入式Linux學(xué)習(xí)者,我們要知道這些東西這么用,也得知道這些東西是怎么來的吧。如果以后換了一個(gè)硬件平臺(tái)還是得自己配置。所以借此機(jī)會(huì),我通過上網(wǎng)查閱資料,稍微研究了一下OpenOCD的安裝配置。在這里我介紹一下我在調(diào)試mini2440上的安裝配置情況。
[/url]
一、安裝 如果你使用的是ubuntu系統(tǒng),可以通過新立德直接安裝openocd。這樣會(huì)自動(dòng)安裝依賴的軟件(其中關(guān)鍵的是libftdi).安裝好的版本是OpenOCD-0.2.0和libftdi-0.13。這種方法最簡(jiǎn)單省事,但也有局限性,[color="#FF0102"]不同版本的openocd的配置文件會(huì)有差異,并不通用。如果你想要使用最新的openocd,那就得自己下載安裝了。 (0)下載最新版
[url=http://www.intra2net.com/en/developer/libftdi/download.php]libftdi
,這是OpenJTAG使用的
FT2232D
芯片的底層驅(qū)動(dòng)庫(kù)。(如果提示無法找到某些頭文件,就用新立德安裝就好了。需要先安裝[color="#FF0102"]libusb-dev[color="#000102"]) 下載解包后只要:./configure; make; sudo make install 就好了。 當(dāng)然,你也可以通過
git的方式
下載源代碼。 如果你也想安裝ftdi-eeprom(燒寫FT2232所連接的e2prom的工具),可用同樣的方法下載安裝。(必須安裝[color="#FF0102"]libconfuse-dev)
[color="#0001FF"]以下兩種方式選一種: (1)下載最新版openocd [color="#FF0102"](最新開發(fā)版,想做小白鼠的使用) 在你想要保存openocd的目錄下執(zhí)行:git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd
這樣就會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)openocd的目錄,并將代碼下載于此。
(2)進(jìn)入openocd的目錄,執(zhí)行:./bootstrap[color="#0000CC"]./configure [color="#FF0102"]--enable-maintainer-mode[color="#0000CC"] --enable-ft2232_libftdimakesudo make install
我編譯安裝完后的版本是:tekkaman@MAGI:~/developer/OpenJTAG/openocd/openocd$ openocd -vOpen On-Chip Debugger 0.4.0-dev-00093-g2b1bd97 (2009-11-08-13:24)$URL$For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.html
(1)
下載
最新穩(wěn)定版openocd [color="#FF0102"](最新穩(wěn)定版,想穩(wěn)定的使用) (2)解壓并進(jìn)入openocd的目錄,執(zhí)行:[color="#0000CC"]./configure [color="#FF0102"]--enable-maintainer-mode[color="#0000CC"] --enable-ft2232_libftdimakesudo make install
我編譯安裝完后的版本是:
tekkaman@MAGI:~/桌面/openocd_cfg$ openocd -v
Open On-Chip Debugger 0.3.0 (2009-11-08-13:52)
$URL$
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
二、配置 當(dāng)你在某個(gè)目錄執(zhí)行openocd的時(shí)候,openocd會(huì)自動(dòng)查找當(dāng)前文件夾下的[color="#0001FF"]openocd.cfg配置文件,如果你在啟動(dòng)時(shí)加了 [color="#0001FF"]-f 的參數(shù),那么openocd會(huì)使用你指定的配置文件。 配置文件是至關(guān)重要的,直接關(guān)系到OpenOCD是否可以通過OpenJTAG認(rèn)到你的開發(fā)板和flash芯片。[color="#FF0102"]詳細(xì)的講解最好是看
[color="#FF0102"]OpenOCD的用戶指南
[color="#FF0102"]或者
[color="#FF0102"]在線參考手冊(cè)
[color="#FF0102"]。現(xiàn)在我[color="#FF0102"]簡(jiǎn)要介紹一下配置文件的結(jié)構(gòu)。 配置文件所要配置的命令主要分為以下五個(gè)部分: 1、Daemon (守護(hù)):主要是配置openocd對(duì)外的通訊所使用的本地TCP/IP端口,如gdb、telnet所使用的端口,我的配置如下
telnet_port 4444tcl_port 6666#-------------------------------------------------------------------------# GDB Setup#-------------------------------------------------------------------------gdb_port 3333gdb_breakpoint_override hard gdb_memory_map enablegdb_flash_program enable
2、interface(接口):也就是openocd所操作的連接開發(fā)板的調(diào)試器,我使用的是OpenJTAG,配置如下:
interface ft2232ft2232_vid_pid 0x1457 0x5118ft2232_layout "jtagkey_prototype_v1"ft2232_device_desc "USBJTAG&RS232"
如果你使用的是并口或別的調(diào)試器,你可以看看在/usr/share/openocd/scripts/interface目錄中是否有合適您的文件。 3、target(目標(biāo)):可以理解為被調(diào)試的目標(biāo)CPU,我的mini2440的target是S3C2440,而被支持的CPU你可以在/usr/share/openocd/scripts/target找到。我個(gè)人認(rèn)為只應(yīng)該針對(duì)的是CPU核心,比如S3C2440的核心是ARM920T,所以同系列的CPU只要將S3C2440的配置稍加改動(dòng)即可。我的配置如下:
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 newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0x0f-expected-id $_CPUTAPIDtarget create mini2440 arm920t -endian $_ENDIAN -chain-position $_CHIPNAME.cpu -variant arm920tmini2440 configure -work-area-virt 0 -work-area-phys 0x200000-work-area-size 0x4000 -work-area-backup 1
#reset configuration
reset_config trst_and_srst
4、board(主板):指的是目標(biāo)板上的配置,其實(shí)主要是針對(duì)板子上的Flash和PLD等可通過JTAG編程的設(shè)備配置的。針對(duì)mini2440,我的配置是:
# Flash# 1MBx16 NOR Flashflash bank cfi 0x0 0x200000 2 2 mini2440 jedec_probe# NAND nand device s3c2440 mini2440
配置好了這個(gè),[color="#0001FF"]就可以通過Openocd來讀寫nand flash了。[color="#FF0102"]但是SST的Nor flash 似乎還不支持燒寫。
5、其他:還有一些JTAG口設(shè)置等等,請(qǐng)參考
OpenOCD的用戶指南
。
以下是我的可用的openocd.cfg[color="#FF0102"](針對(duì)openocd-0.3.0+OpenJTAG+mini2440):
![]()
文件:openocd.cfg.tar.gz
大小:0KB
下載:
下載
[color="#0001FF"]
在教程中介紹的燒寫u-boot到flash的方法是現(xiàn)將他們的u-boot現(xiàn)導(dǎo)入內(nèi)存,并啟動(dòng)。使用u-boot去燒寫u-boot,這種方法是最快最好的方法。但是現(xiàn)在的openocd可以直接燒寫nand flash[color="#0001FF"](前提是你在配置文件中配置正確)。步驟如下:(1)啟動(dòng)openocd,并通過telnet登錄。(2)讓openocd探測(cè)板上的nand flash。(3)利用nand命令擦除、再寫入。具體命令:在一個(gè)shell中啟動(dòng)tekkaman@MAGI:~/桌面/openocd_cfg$ sudo openocd Open On-Chip Debugger 0.3.0 (2009-11-08-13:52)$URL$For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.htmlforce hard breakpointsjtag_nsrst_delay: 100jtag_ntrst_delay: 100 TargetName Type Endian TapName State -- ------------------ ---------- ------ ------------------------------ 0* mini2440 arm920t little s3c2440.cpu unknown12000 kHztrst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drainInfo : clock speed 6000 kHzInfo : JTAG tap: s3c2440.cpu tap/device found: 0x0032409d (mfg:0x04e, part: 0x0324, ver: 0x0)Info : Embedded ICE version 2
在另一shell中:tekkaman@MAGI:~/桌面/openocd_cfg$ telnet localhost 4444Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.[color="#000102"]Open On-Chip Debugger[color="#0000CC"]> pollbackground polling: onTAP: s3c2440.cpu (enabled)[color="#FF0102"]target state: haltedtarget halted in ARM state due to breakpoint, current mode:Supervisorcpsr: 0x400000d3 pc: 0x0105daf4MMU: disabled, D-Cache: disabled, I-Cache: disabled[color="#0000CC"]> nand probe 0NAND flash device 'NAND 128MiB 3,3V 8-bit' found> nand erase 0 0 0x60000 [color="#FF0102"]#注釋:擦除大小必須是0x20000(block size)的整數(shù)倍s3c2440_read_block_data: reading data: 0x91a89e8, 0xbfea3d6a, 6erased blocks 0 to 3 on NAND flash device #0 'NAND 128MiB 3,3V 8-bit'> nand write 0 u-boot.bin 0wrote file u-boot.bin to NAND flash 0 up to offset 0x00043800 in 287.407043s
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u1/34474/showart_2089040.html |
|