江雪+鐘逸+邵晨龍+曹子鈺+李洋
摘要:本文簡(jiǎn)述了EJTAG的相關(guān)基礎(chǔ)概念,探究了使用EJTAG對(duì)操作系統(tǒng)內(nèi)核進(jìn)行調(diào)試的可行性。
關(guān)鍵詞:EJTAG;內(nèi)核調(diào)試
1 前言
在gdb里調(diào)試普通應(yīng)用程序時(shí),執(zhí)行r命令,程序才會(huì)運(yùn)行起來。而直到程序遇到事先設(shè)置的斷點(diǎn),它才會(huì)停下。然而,對(duì)操作系統(tǒng)內(nèi)核調(diào)試卻不能遵循這個(gè)流程,因?yàn)橄到y(tǒng)啟動(dòng)后,內(nèi)核就已經(jīng)在運(yùn)行了。本文簡(jiǎn)述了EJTAG的相關(guān)基礎(chǔ)概念,探究了使用EJTAG對(duì)操作系統(tǒng)內(nèi)核進(jìn)行調(diào)試的可行性。
2 EJTAG介紹
EJTAG(Enhanced Joint Test Action Group)是MIPS公司根據(jù)IEEE 1149.1協(xié)議的基本構(gòu)造和功能擴(kuò)展而制定的規(guī)范,是一個(gè)硬件/軟件子系統(tǒng),在處理器內(nèi)部實(shí)現(xiàn)了一套基于硬件的調(diào)試特性,用于支持片上調(diào)試。
EJTAG由ARM的JTAG發(fā)展而來,而JTAG的設(shè)計(jì),原意便是對(duì)制作好的CPU進(jìn)行測(cè)試。因此,它“夠底層”,能夠在不依賴于上層操作系統(tǒng)的前提下,直接對(duì)CPU進(jìn)行操作,令CPU執(zhí)行指定的機(jī)器碼指令。而能夠控制CPU執(zhí)行特定指令,理論就可以讓電腦執(zhí)行任意操作,當(dāng)然也就可以讀寫寄存器,讀寫內(nèi)存,設(shè)置斷點(diǎn)。
3 調(diào)試模式
要想讓內(nèi)核停止下來,只有使用EJTAG進(jìn)入調(diào)試模式。調(diào)試模式下,內(nèi)核停止運(yùn)行,系統(tǒng)可供EJTAG觀察和調(diào)試,類似于gdb調(diào)試應(yīng)用程序時(shí)進(jìn)入斷點(diǎn)的情況。
要想使用EJTAG進(jìn)入調(diào)試模式,比較常見的方式有這么幾種:CPU執(zhí)行SDBBP指令、EJTAG斷點(diǎn)寄存器置位、單步調(diào)試等。這里讓正在運(yùn)轉(zhuǎn)的內(nèi)核進(jìn)入調(diào)試模式,一般采用將EJTAG斷點(diǎn)寄存器置位的辦法。
其實(shí)在gdb中,也可以通過信號(hào)使程序暫停運(yùn)行以供調(diào)試。而較為成熟的IDE,一般也都提供了調(diào)試時(shí)暫停的功能,比如開源跨平臺(tái)的Eclipse。
總之,調(diào)試模式是一種程序停止運(yùn)行的狀態(tài)。在調(diào)試模式這一時(shí)間停止的狀態(tài)下,才能對(duì)內(nèi)核進(jìn)行各種狀態(tài)的觀察,才能控制內(nèi)核的運(yùn)行情況。本文中的EJTAG調(diào)試均是在調(diào)試模式下完成的。
4 邊界掃描
邊界掃描是EJTAG調(diào)試中一個(gè)很重要的概念,其特點(diǎn)是在待測(cè)試芯片的每個(gè)引腳上添加一個(gè)移位寄存器,由于移位寄存器在芯片的邊界上,所以被稱作是邊界掃描寄存器(Boundary-Scan Register Cell)。
正常工作的時(shí)候,這些移位寄存器是透明的,并不會(huì)對(duì)芯片的輸入輸出造成任何影響;而在調(diào)試的時(shí)候,配合TAP狀態(tài)機(jī)的各種狀態(tài),移位寄存器可起到直接控制引腳的輸入輸出。簡(jiǎn)單的說,Capture-DR/Capture-IR狀態(tài)和Update-DR/Update-IR狀態(tài),可以將引腳上的數(shù)據(jù)捕獲到移位寄存器,或是從移位寄存器更新引腳上的數(shù)據(jù)。而在Shift-DR/Shift-IR狀態(tài)下,這些移位寄存器可以通過TDI和TDO進(jìn)行數(shù)值的移位輸入輸出,從而設(shè)置或是讀取芯片各引腳的電平。
5 TAP原理
對(duì)邊界掃描鏈的控制主要是通過TAP(Test Access Port)控制器來完成的。EJTAG標(biāo)準(zhǔn)中定義了TAP控制器,可以使EJTAG通過狀態(tài)機(jī)實(shí)現(xiàn)相對(duì)比較復(fù)雜的功能。通過給TMS引腳輸入不同的信號(hào),即可讓TAP控制器進(jìn)入不同的狀態(tài),實(shí)現(xiàn)特定的功能。
TAP控制器的狀態(tài)轉(zhuǎn)化圖如圖1所示??梢钥吹綀D中有許多以DR和IR為后綴的狀態(tài),這些狀態(tài)表示當(dāng)前正對(duì)數(shù)據(jù)寄存器(Data Register)或指令寄存器(Instruction Register)進(jìn)行操作。由于這兩類狀態(tài)的原理類似,只是面向的操作對(duì)象不同,因此下面對(duì)狀態(tài)轉(zhuǎn)換圖中的重要狀態(tài)進(jìn)行介紹時(shí),若狀態(tài)以DR/IR為后綴,僅以數(shù)據(jù)寄存器(Data Register)為例來進(jìn)行描述。
簡(jiǎn)單的說來,操作TAP控制器一般是如下流程(以Run-Test/Idle起,Run-Test/Idle止為例):先通過設(shè)置TMS進(jìn)入Shift-IR狀態(tài)(TMS依次輸入1100即可,下同),設(shè)置五位的IR寄存器來選擇指令;然后經(jīng)過Update-IR返回Run-Test/Idle。再之后進(jìn)入Shift-DR來設(shè)置DR寄存器來設(shè)置剛剛所選指令的值,最后經(jīng)過Upadate-IR返回Run-Test/Idle。比如,在Shift-IR狀態(tài)下,TDI輸入01010,可選中EJTAG控制寄存器;隨后在Shift-DR狀態(tài)下,TDI即可設(shè)置EJTAG控制寄存器的值。
6 小結(jié)
本文講述了EJTAG的基礎(chǔ)知識(shí),并逐步講述了設(shè)置EJTAG控制寄存器的方式。按照此種思路,能夠?qū)崿F(xiàn)系統(tǒng)內(nèi)核的指令集調(diào)試乃至源碼級(jí)調(diào)試,驗(yàn)證了EJTAG調(diào)試系統(tǒng)內(nèi)核的可行性。
參考文獻(xiàn)
[1]中國科學(xué)院計(jì)算技術(shù)研究所,龍芯3A處理器用戶手冊(cè)之多核處理器架構(gòu)、寄存器描述與系統(tǒng)軟件編程指南
[2]中國科學(xué)院計(jì)算技術(shù)研究所,龍芯3A處理器用戶手冊(cè)之GS464 處理器核
[3]金輝,華斯亮,張鐵軍等.基于JTAG標(biāo)準(zhǔn)的處理器片上調(diào)試的分析和實(shí)現(xiàn).微電子學(xué)與計(jì)算機(jī),2007,24(6):116-119,122.DOI:10.3969/j.issn.1000-7180.2007.06.034
[4]劉旭偉.FPGA可配置端口電路的設(shè)計(jì),西安電子科技大學(xué),2008
[5]OPEN-JTAG開發(fā)小組,ARM JTAG調(diào)試原理
[6]韓青.多核調(diào)試新方法探討.電子產(chǎn)品世界,2007,(12):114-115.DOI: 10.3969/j.issn.1005-5517.2007.12.019
[7]吳疆,田金蘭與張素琴,面向多目標(biāo)機(jī)的交叉調(diào)試器的研究與設(shè)計(jì).清華大學(xué)學(xué)報(bào)(自然科學(xué)版),2003.43(1):第101-104頁endprint