江雪+鐘逸+邵晨龍+曹子鈺+李洋

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