嵌入式LINUX系統(tǒng)的靜/動(dòng)態(tài)集成調(diào)試模式
現(xiàn)有的嵌入式LINUX系統(tǒng)開發(fā)過程中,所有的工程師都疲憊于使用兩種不同的調(diào)試模式分別調(diào)試系統(tǒng)的內(nèi)核和應(yīng)用程序。首先通過一個(gè)JTAG調(diào)試工具來配置和啟動(dòng)LINUX系統(tǒng);嵌入式LINUX系統(tǒng)正常運(yùn)行起來后,就要通過GDB來繼續(xù)調(diào)試工作。
LAUTERBACH公司綜合了上述兩種傳統(tǒng)調(diào)試技術(shù)特長提供了一種新的LINUX調(diào)試技術(shù)。
本文以ARM架構(gòu)上的LINUX系統(tǒng)開發(fā)為例,詳細(xì)介紹和對(duì)比這三種不同的調(diào)試模式的實(shí)現(xiàn)和應(yīng)用。
靜態(tài)調(diào)試模式
通過JTAG調(diào)試接口進(jìn)行軟件調(diào)試的工具一般都只能工作在靜態(tài)調(diào)試模式下,處理器和整個(gè)系統(tǒng)都必須被同時(shí)掛起。然后調(diào)試工具通過JTAG接口把處理器和目標(biāo)系統(tǒng)的當(dāng)前狀態(tài)獲取并顯示出來(如圖1所示)。
靜態(tài)調(diào)試模式具有如下的優(yōu)點(diǎn):
● 靜態(tài)調(diào)試模式唯一的環(huán)境需求就是目標(biāo)系統(tǒng)必須支持JTAG調(diào)試標(biāo)準(zhǔn),該調(diào)試模式最大的優(yōu)點(diǎn)就是可以支持從復(fù)位向量表開始調(diào)試;
● 只要調(diào)試工具支持LINUX和MMU調(diào)試,就可以實(shí)現(xiàn)對(duì)LINUX內(nèi)核及進(jìn)程越界等問題的調(diào)試;
● 如果軟件異常,隨時(shí)可以掛起處理器,查看當(dāng)前錯(cuò)誤代碼及系統(tǒng)狀態(tài);
● 因?yàn)樘幚砥魈幱趻炱馉顟B(tài),內(nèi)核和其它進(jìn)程都不會(huì)再對(duì)系統(tǒng)造成任何的干擾。
然而靜態(tài)調(diào)試模式也有其不足之處,一旦處理器被掛起,所有的通信接口進(jìn)程同時(shí)被終止。造成的結(jié)果就是所有通過Ethernet、Bluetooth或者CAN等接口和處理器進(jìn)行通信的外部設(shè)備, 都會(huì)因?yàn)榈却憫?yīng)超時(shí)而中斷連接。因此通過靜態(tài)模式進(jìn)行調(diào)試時(shí),即使你只調(diào)試其中的一個(gè)進(jìn)程或函數(shù),也有可能改變整個(gè)系統(tǒng)的狀態(tài)和配置;接下來再繼續(xù)運(yùn)行和調(diào)試程序,就無法保證系統(tǒng)的完整性和連續(xù)性,所以后續(xù)的調(diào)試可能就沒有任何意義。
動(dòng)態(tài)調(diào)試模式
GDB 調(diào)試模式是嵌入式LINUX系統(tǒng)的通用的動(dòng)態(tài)調(diào)試模式。 在該模式下,可以實(shí)現(xiàn)只對(duì)當(dāng)前進(jìn)程掛起,系統(tǒng)的內(nèi)核和其它的所有進(jìn)程都繼續(xù)處于運(yùn)行狀態(tài)。
然而GDB是一個(gè)純粹的軟件調(diào)試工具,同時(shí)需要下面的軟件環(huán)境才可以實(shí)現(xiàn):
● 目標(biāo)系統(tǒng)上要有活動(dòng)的GDB Server LINUX進(jìn)程
● 主機(jī)端要有相應(yīng)的調(diào)試軟件,例如TRACE32(如圖2所示)
TRACE32與GDB Server通過RS232或者Ethernet接口進(jìn)行通信,收集當(dāng)前被掛起的進(jìn)程的狀態(tài)信息。但是要實(shí)現(xiàn)動(dòng)態(tài)調(diào)試模式,還必須建立在如下兩個(gè)條件都成立的基礎(chǔ)之上:
● 目標(biāo)系統(tǒng)已經(jīng)被完全正確的初始化并正確啟動(dòng)
● GDB Server 永遠(yuǎn)處于活動(dòng)狀態(tài)——即通信接口已經(jīng)正確運(yùn)行,處理器或GDB Server不會(huì)被其它程序錯(cuò)誤的掛起
綜上所述,兩種調(diào)試模式都有各自的優(yōu)點(diǎn)和不足,靜態(tài)調(diào)試模式比較容易實(shí)現(xiàn),操作也比較簡單,但是無法保證系統(tǒng)的連續(xù)和完整性;動(dòng)態(tài)調(diào)試模式環(huán)境需求比較復(fù)雜。因此,LAUTERBACH提供了可以實(shí)現(xiàn)上述兩種調(diào)試模式的調(diào)試工具,在完全克服了各自的缺陷的同時(shí)充分發(fā)揮了各自的優(yōu)勢(shì),實(shí)現(xiàn)了嵌入式LINUX調(diào)試技術(shù)的飛躍。
集成的靜態(tài)和動(dòng)態(tài)調(diào)試模式
針對(duì)嵌入式LINUX系統(tǒng),支持集成的靜態(tài)和動(dòng)態(tài)調(diào)試模式的TRACE32調(diào)試工具工作原理如下(如圖3所示):
1. TRACE32調(diào)試工具通過JTAG接口進(jìn)入靜態(tài)調(diào)試模式。在靜態(tài)模式下首先完成對(duì)目標(biāo)系統(tǒng)的硬件和動(dòng)態(tài)調(diào)試模式(GDB)的環(huán)境配置。
2. 如果目標(biāo)系統(tǒng)初始化和啟動(dòng)程序是調(diào)試重點(diǎn),就使用靜態(tài)調(diào)試模式進(jìn)行調(diào)試。
3. 目標(biāo)系統(tǒng)正確啟動(dòng)完成后,TRACE32可以切換為動(dòng)態(tài)調(diào)試模式,從而實(shí)現(xiàn)對(duì)應(yīng)用程序的動(dòng)態(tài)調(diào)試。
4.如果在動(dòng)態(tài)調(diào)試過程中,需要對(duì)系統(tǒng)重新做新的配置和初始化。TRACE32也支持隨時(shí)再把系統(tǒng)切換到靜態(tài)調(diào)試模式。
同時(shí),由于集成的靜態(tài)和動(dòng)態(tài)調(diào)試模式的實(shí)現(xiàn),下面的許多新屬性也被添加到動(dòng)態(tài)調(diào)試模式里。
● 對(duì)于基于ARM架構(gòu)的處理器,可以以調(diào)試通信通道(DCC)為動(dòng)態(tài)調(diào)試模式的信息通信接口。這樣只需要一個(gè)JTAG接口就可以支持集成的靜態(tài)和動(dòng)態(tài)調(diào)試模式。
● 對(duì)兩個(gè)或多個(gè)進(jìn)程進(jìn)行同時(shí)調(diào)試。
將DCC作為通信接口
在ARM的架構(gòu)下,JTAG接口中已經(jīng)包含DCC通信接口。當(dāng)應(yīng)用程序在目標(biāo)處理器上運(yùn)行時(shí),從原理上講通過DCC實(shí)現(xiàn)如下兩個(gè)模塊間信息通信是完全可行的。
● 主機(jī)端的調(diào)試軟件
● 目標(biāo)系統(tǒng)上的任何應(yīng)用程序—通過GDB Server
因此,如果TRACE32 采用DCC 作為和GDB Server 通信的接口,就不再需要額外的通信接口來實(shí)現(xiàn)對(duì)動(dòng)態(tài)調(diào)試模式的支持(如圖4所示)。
多個(gè)進(jìn)程同時(shí)調(diào)試
在實(shí)際的調(diào)試過程中,經(jīng) 常需要對(duì)多個(gè)進(jìn)程進(jìn)行同時(shí)的調(diào)試。為了實(shí)現(xiàn)該屬性,LAUTERBACH為動(dòng)態(tài)調(diào)試模式提供了T32Server模塊。如果T32Server作為一個(gè)LINUX的進(jìn)程從終端窗口中被啟動(dòng),就可以實(shí)現(xiàn)如下的命令和操作:
● 啟動(dòng)進(jìn)程(TASK.RUN)
● 選擇運(yùn)行進(jìn)程(TASK.SELECT)
● 停止進(jìn)程(TASK.KILL)
當(dāng)一個(gè)進(jìn)程被啟動(dòng)并選中后,T32Server就會(huì)給每個(gè)進(jìn)程分配一個(gè)獨(dú)立的GDB Server(如圖5所示),再配合上面的三條TASK操作命令就可以實(shí)現(xiàn)多個(gè)進(jìn)程的同時(shí)調(diào)式。用戶可以通過命令(TASK.LIST)查看當(dāng)前的進(jìn)程信息。
評(píng)論