亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 初步探討ARM調(diào)試技術(shù) [打印本頁]

作者: zfyang_china    時(shí)間: 2010-01-29 11:29
標(biāo)題: 初步探討ARM調(diào)試技術(shù)
在bootloader的深入學(xué)習(xí)中,深感調(diào)試的重要性。毛德操書中曾提過,在軟件開發(fā)的“生命周期”中,程序調(diào)試(debug)以及調(diào)試手段
的重要性是“怎么強(qiáng)調(diào)也不為過”的。誠然,尤其是在bootloader這樣的底層軟件開發(fā)中,調(diào)試能起到的作用就更為突出了。下面進(jìn)行具體分析。
一、最簡單的調(diào)試方法---狀態(tài)燈
   
一般地,在ARM開發(fā)板上總會(huì)留幾個(gè)Led燈,在開發(fā)bootloader或者學(xué)習(xí)不帶OS的程序編寫時(shí),就要充分利用這幾個(gè)Led燈了。也就是說,把
Led燈作為狀態(tài)燈。如果有n個(gè)可以自由支配的Led燈,那么可以表達(dá)2^n個(gè)狀態(tài)。比如,現(xiàn)在的EDUKIT-III實(shí)驗(yàn)箱上,有四個(gè)led,有
GPF[7:4]來控制,低電平點(diǎn)亮,高電平熄滅,電路就不必畫了,最簡單的部分。在寫led燈的驅(qū)動(dòng)時(shí),不妨采用查表法,把led的狀態(tài)做成一個(gè)表,這
樣在表達(dá)的時(shí)候要方便的多。這部分實(shí)驗(yàn)在前面已經(jīng)做過,ARM匯編和C版本都有,不再詳述。下面主要談幾點(diǎn)方法:
    ·把流程按照功能分為幾塊,在每塊的結(jié)束放一個(gè)狀態(tài)燈。這樣通過狀態(tài)燈可以顯示到了第幾個(gè)功能塊,一般要逐塊測試,放狀態(tài)燈后,加個(gè)死循環(huán)。
    ·利用條件判斷語句來進(jìn)行邏輯測試。比如有一個(gè)寄存器狀態(tài),假設(shè)為register1,正常應(yīng)該是value1,那么就可以如下判斷:
               
               
               
if (register1 == value1) {
        led_state1; /* 設(shè)置燈狀態(tài)1 */
} else {
        led_state2; /* 設(shè)置燈狀態(tài)2 */
}
while (1) {
        ;
}
還有很多其他方法,不過核心還是靠自己的邏輯分析。
二、打印信息,輔助調(diào)試
   
這種方法在PC的程序調(diào)試中也比較常用。比如熟悉的printf,在Linux內(nèi)核的printk,不過這些都是打印到終端上。在嵌入式系統(tǒng)中則一般是沒
有終端的,特別是在bootloader階段,就是“裸機(jī)”啊。不過可以借助于這種思想,利用串口來實(shí)現(xiàn)打印信息(當(dāng)然,得有串口支持了,F(xiàn)在ARM一般
都會(huì)有UART外設(shè),而且很常用的手段就是把一個(gè)rs232串口作為debug口)。在bootloader階段,可以利用狀態(tài)燈法先簡單的實(shí)現(xiàn)一個(gè)串口
驅(qū)動(dòng)程序,可以采用簡單的實(shí)現(xiàn)方式,只實(shí)現(xiàn)查詢發(fā)送就可以了。這樣,就可以需要了解的信息,通過debug口來輸出到相應(yīng)的串口調(diào)試助手上。根據(jù)這些信
息,來確定程序問題所在,從而盡快排除故障。
    這種方式就是串口作為底層來實(shí)現(xiàn)的printf,在ARM中應(yīng)用比較廣泛。在C語言中,可以通過一個(gè)調(diào)試開關(guān)開控制發(fā)行版/調(diào)試版,如下所示:
#define DEBUG
//#undef DEBUG
#ifdef DEBUG
    uart_printf("debug info\n");
#endif
三 現(xiàn)代調(diào)試技術(shù)
   
調(diào)試的基礎(chǔ)是檢測,而檢測有“無損(non-intrusive)”和“無損(intrusive)”之分。理想的檢測手段應(yīng)該是不使被測對象的狀態(tài)(包
括時(shí)序)因此而造成任何改變,否則測到的數(shù)據(jù)就不準(zhǔn)確了?墒,嚴(yán)格意義上的無損檢測不可能實(shí)現(xiàn),因此實(shí)際上是“測不準(zhǔn)”的。人們所能做到的只是盡量減少
對被測對象的狀態(tài)改變,將誤差減少到可以接受的程度。這還是比較容易理解的。不過原來看ARM資料的時(shí)候,調(diào)試手段一大堆,但是都沒有深刻的印象,以致于
以前還一直在懷疑,為什么下載的jflash-s3c2410,不能通過仿真器下載呢?現(xiàn)在想想,其實(shí)對于什么是調(diào)試器,什么是仿真器,調(diào)試的模型是什么
都是非常模糊的,所以下決心首先從概念上理解調(diào)試模型。之后隨著技術(shù)深入,可以逐步深入理解調(diào)試技術(shù)。
    現(xiàn)代調(diào)試技術(shù)大致可以歸為指令級仿真調(diào)試和硬件仿真調(diào)試兩種。
1 指令級仿真調(diào)試
   
我想這個(gè)比較容易理解。指令集仿真調(diào)試屬于純軟件仿真,比如ARM公司的ARMulator。因?yàn)橛械臅r(shí)候嵌入式軟件的開發(fā)需要在目標(biāo)系統(tǒng)(硬件)并不存
在的條件下進(jìn)行,所以需要這種通過軟件來模擬目標(biāo)系統(tǒng)的CPU,F(xiàn)在有個(gè)開源項(xiàng)目skyeye,也是這樣一個(gè)指令級仿真調(diào)試工具。這一系列的軟件以數(shù)據(jù)結(jié)
構(gòu)來模擬目標(biāo)機(jī)CPU中各個(gè)寄存器和其他資源,以及目標(biāo)系統(tǒng)的有關(guān)資源(比如內(nèi)存等),并且通過軟件模擬,即逐條指令地解釋執(zhí)行目標(biāo)機(jī)可執(zhí)行映象中的程
序。例如,“mov r1,
#0”,就代表往寄存器r1的數(shù)據(jù)結(jié)構(gòu)中寫0,如此。模擬執(zhí)行的速度當(dāng)然慢一些,但是可以驗(yàn)證邏輯,在某些條件下是一種重要的手段。
2 硬件仿真調(diào)試
    這才是探討的重頭戲。在這里,就要從歷史的角度去看一下了。
   
從前的時(shí)候,元器件的面積和pcb的面積普遍較大,pcb板的層數(shù)較少,并且元器件只是安裝于pcb的一面,也就是單面板。這樣調(diào)試并不困難,加工工藝不
復(fù)雜。pcb的加工制造者可以專門為具體的pcb配套制造用于測試的模板。模板上有許多觸針,將pcb板和配套的測試模板疊在一起,模板上的觸針正好與
pcb“焊接面”許多監(jiān)測點(diǎn)接觸,從而可以監(jiān)測pcb板上各點(diǎn)的邏輯電平及其變化。另一方面,pcb板的“元件面”也可以方便的將示波器或邏輯分析儀的探
針連接到元器件的引線上。還有,當(dāng)時(shí)的許多芯片,像cpu一類的大規(guī)模芯片,都不是直接焊接在pcb上,而是采用芯片插座。這樣就可以作出特殊插頭,冒充
芯片插到其插座,而用外部的儀器來“仿真”這種芯片(通常是cpu)在整個(gè)目標(biāo)系統(tǒng)中的作用和運(yùn)行,就是“在線仿真ICE(In-Circuit
Emulation)”。無論對于軟件還是硬件,ICE在當(dāng)時(shí)都是一種非常有效的開發(fā)/調(diào)試手段。我在本科時(shí)用的51單片機(jī),但是就是采用ICE,記得有
個(gè)仿真頭,插到插座上。ICE還有一種方式,就是使用真實(shí)的cpu芯片,可以用特制的插頭騎到芯片背上,以監(jiān)測芯片的各條引線上的邏輯電平。
    可以隨著pcb板和元器件的面積越來越小,pcb板層數(shù)也越來越多,特別是“表面貼焊”式芯片的出現(xiàn)打破了元件面和焊接面的劃分,并且直接將芯片的引線焊接(而不是穿透),在pcb上,以前的那些手段都用不上了。
   
在到后來,“集成電路級”向“集成系統(tǒng)級”發(fā)展,現(xiàn)在的芯片大多是SoC,原有的測試手段就更用不上了。這些芯片設(shè)計(jì)者都是重點(diǎn)考慮的問題。專業(yè)上成為
DFT(design-for-test,可測試性設(shè)計(jì)),也就是在設(shè)計(jì)一款SoC,必須要考慮它的可測試性能。另外,為什么要在對資源要求比較苛刻的情
況下,把調(diào)試電路集成到SoC中,看似矛盾,實(shí)際上,SoC集成調(diào)試電路已經(jīng)成了普遍的共識(shí):只有這樣,才能減少調(diào)試成本,方便開發(fā)者進(jìn)行調(diào)試,從而吸引
開發(fā)者選擇使用SoC。如果沒有良好的調(diào)試手段,我想很少有開發(fā)者會(huì)選擇使用的。好了,現(xiàn)在介紹調(diào)試檢測技術(shù),F(xiàn)在比較成熟的技術(shù)有如下四種:
    ·Ad-hoc test
    ·Scan-based test
    ·Build-in-self test
    ·Boundary-scan test
    因?yàn)椴皇菍I(yè)研究這個(gè)方向,對這四個(gè)測試技術(shù)的區(qū)別也沒大有必要深究,F(xiàn)在重點(diǎn)來看第四種技術(shù),Bounary-scan
test,即邊界掃描技術(shù)。ARM普遍采用了邊界掃描技術(shù),協(xié)議標(biāo)準(zhǔn)為IEEE
1149.1,簡介原來的文章也談到過了,就不必多說了。關(guān)于JTAG,它的作用主要有如下兩個(gè)方面:
   
·映象的下載。嵌入式系統(tǒng)軟件的開發(fā),在Host上完成目標(biāo)映象之后,要在“裸機(jī)”上實(shí)現(xiàn)第一個(gè)程序的“自舉”下載固化到flash中,就需要通過
JTAG接口下載。當(dāng)然,完成bootloader之后,也可以采用JTAG接口下載,另外也可以采用USB或者TFTP下載。后續(xù)的下載方式就多了。但
是現(xiàn)在看來,“自舉”下載方式還是比較單一的,ARM一般還得依賴于JTAG接口下載bootloader。
   
·軟件(以及硬件)的調(diào)試。更重要的是,目標(biāo)系統(tǒng)的調(diào)試也要在宿主機(jī)的控制/輔助下進(jìn)行,而JTAG接口為宿主機(jī)與目標(biāo)系統(tǒng)之間的通信、控制提供了重要的
手段!镜切枰⒁獾氖,這并不是絕對的。通信手段倒是還可以借助于網(wǎng)絡(luò)實(shí)現(xiàn),調(diào)試也可以通過gdb遠(yuǎn)程串口調(diào)試。這里的意思是,它是當(dāng)前采用的調(diào)試的
一種重要的手段!
    現(xiàn)在可以分析基于JTAG技術(shù)的ARM Debug Architecture。下面給出一個(gè)結(jié)構(gòu)圖:
    ·Debug Host
    ·    Protocol converter
    ·        Debug Target
    也就是ARM Debug Architecture分為三層,這也可以認(rèn)為是一個(gè)完整的調(diào)試系統(tǒng)。當(dāng)然這是理論上的劃分,在實(shí)際實(shí)現(xiàn)中也可以在形式上有所變通。下面先解釋一下這三層結(jié)構(gòu)。
    ·Debug Host
    Host computer running ARM or third party toolkit.
    這是調(diào)試系統(tǒng)的Host前端。也就是我們常見到的IDE的debugger,比如ARM提供的ADW(ARM Debugger
for Windows,相應(yīng)的unix版本為ADU,即ARM Debugger for
Unix)。它所提供的功能是提供一個(gè)良好的圖形交互界面,使用戶可以方便的進(jìn)行調(diào)試操作,也可以完成下載等。另外,它實(shí)際上完成調(diào)試命令的驅(qū)動(dòng)部分。
ARM制定了一個(gè)協(xié)議,就是ADP(Angel Debug
Protocol),這是一個(gè)比較復(fù)雜的協(xié)議,分為三層,主要就是保證可靠穩(wěn)定的與目標(biāo)機(jī)進(jìn)行通信。
    · Protocol converter
    for example, multi-ICE。
    這部分完成host端協(xié)議到j(luò)tag協(xié)議的轉(zhuǎn)換。轉(zhuǎn)換過程是雙向的。這個(gè)在這里也不太容易說,可以通過后面仿真器來進(jìn)行分析。
    ·debug target
    development system containing an ARM7TDMI processor
    也就是你的目標(biāo)SoC。
    有了這個(gè)模型作為基礎(chǔ),就可以對現(xiàn)有的調(diào)試工具進(jìn)行一個(gè)大體的分析了。在這里,仿真器又可以稱為調(diào)試代理,它充當(dāng)了protocol converter的角色。
    ·第一層次 簡易JTAG小板
    市場上有不少提供簡易JTAG小板,大多只是具備下載功能。其中,debug
host可以是jflash-s3c2410這樣的工具,它實(shí)際上就是用軟件實(shí)現(xiàn)JTAG時(shí)序,完成“串并”和“并串”轉(zhuǎn)換。即把目標(biāo)JTAG向量中的每
個(gè)字節(jié)都逐位地轉(zhuǎn)換成JTAG接口各條引線上的串行的波形,或者反過來。而jtag小板,只是完成一個(gè)基本的電平轉(zhuǎn)換電路,最差的只有幾個(gè)電路,普通的就
是一個(gè)74HC244做驅(qū)動(dòng)。簡單的說,就是:host(jflash-s3c2410等)--> 并口 --> jtag小板
--> SoC
JTAG接口。這樣完成了下載功能。如果在host端軟件增強(qiáng),可以完成一些調(diào)試功能。相對而言,這樣技術(shù)是用純軟件去實(shí)現(xiàn)JTAG時(shí)序,效率比較低。市
場上的wiggle、H-jtag、2410jtag等都是如此,只是在對應(yīng)的引腳設(shè)置和host軟件上有所不同。
    ·第二層次 cpld/fpga實(shí)現(xiàn)jtag狀態(tài)機(jī)
    用軟件模擬jtag時(shí)序效率低,那么可以通過cpld等可編程器件實(shí)現(xiàn)jtag時(shí)序,那么host的軟件只要簡單的寫字節(jié)就可以了。這樣,效率就高的多了。
    ·第三層次 mcu+cpld/fpga實(shí)現(xiàn)基于以太網(wǎng)/USB的仿真器
    其中,mcu用來實(shí)現(xiàn)tcp/ip協(xié)議,完成host調(diào)試協(xié)議的解析,cpld/fpga實(shí)現(xiàn)jtag狀態(tài)機(jī)。這種組合方式的效率又遠(yuǎn)遠(yuǎn)高于第二層次。現(xiàn)在的realview就是采用這種方案,原有的ads系列則不提供更新了。
   
我把使用的powerICE拆開看了一下,發(fā)現(xiàn)里面核心芯片就是cpld。由此可見,這個(gè)簡化版的仿真器也只是第二層次的產(chǎn)品,硬件實(shí)現(xiàn)jtag時(shí)
序,host IDE進(jìn)行調(diào)試協(xié)議處理。原來的jflash-s3c2410不能夠使用就很明顯了,不同層次,也不會(huì)兼容。
    如果要深入研究,可以參考:
    ·IEEE 1149.1協(xié)議
    ·《嵌入式系統(tǒng)--采用公開源代碼和StrongARM/XScale處理器》
    ·OpenJTAG論壇
    ·ARM7TDMI Datasheet
---------------------------------------
幾個(gè)名詞:
spp: standard parallel protocol 標(biāo)準(zhǔn)并口協(xié)議
epp: enhanced parallel protocol 增強(qiáng)并口協(xié)議
dft: design for test  可測試性設(shè)計(jì)
tap: test access port 測試訪問口
tdi: test data input  測試數(shù)據(jù)輸入
tdo: test data output 測試數(shù)據(jù)輸出
tms: test mode select 測試模式選擇
tck: test clock  測試時(shí)鐘
trst: test reset  測試復(fù)位
wdm: win32 driver model win32驅(qū)動(dòng)模型
isp: in system programming 在系統(tǒng)編程
isc: in system config  在系統(tǒng)配置
adp: angel debug protocol 調(diào)試代理協(xié)議
rsp: remote serial protocol gdb的遠(yuǎn)程串行協(xié)議
rdi: remote debug interface ARM的遠(yuǎn)程調(diào)試接口

本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u3/92500/showart_2163894.html
作者: tsyj2007    時(shí)間: 2010-03-23 21:32
不懂ARM,學(xué)習(xí)了,,,,




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2