采用ROM監控器的調試技巧分析
RedBoot也稱作紅帽(Red Hat)嵌入式調試引導程序,是一種用于嵌入式系統的獨立開放源代碼引導/裝載器,任何人都可以從互聯網上下載具有紅帽eCos公共許可證的RedBoot源代碼。
雖然RedBoot使用的是源于eCos實時操作系統(RTOS)的軟件模塊,并且常用于嵌入式Linux系統,但它與這兩種操作系統完全無關,RedBoot能夠用于任何操作系統或RTOS,甚至沒有操作系統也行。
RedBoot自帶一個GDB“存根進程(stub)”,可提供目標端通信軟件,允許用戶通過標準GDB協議命令進行遠端調試,這樣設計師就能利用RedBoot與運行GNU調試器的主機通過串口或網絡連接起來調試設計的嵌入式軟件。RedBoot支持多種處理器架構和硬件平臺,包括 ARM、日立SHx、MIPS、PowerPC、SPARC以及x86等。
結構配置
RedBoot可以在多種不同配置下運行,但一般都是從目標平臺的閃存引導區或引導ROM啟動。RedBoot設計為系統上電啟動,能提供完整的處理器初始化和設備設置,使設計人員能夠迅速開始與系統通信。
RedBoot可設為用串口或以太網口(通過Telnet)進行通信,當從某個端口收到第一條命令后,那么隨后所有的RedBoot通信都將從那個端口進行,直到系統重新啟動。
利用以太網口與RedBoot通信時,一定要清楚目標平臺是如何得到其IP地址的。設置目標平臺IP地址有兩種方法,分別是動態法和靜態法。在靜態方式下,目標平臺的IP地址在編譯RedBoot映像前設置(后文還會詳細討論這方面內容),也可通過串口命令設置。
RedBoot還可以采用BOOTP協議動態分配IP地址,BOOTP協議是目前許多網絡廣泛支持的動態主機配置協議(DHCP)的一個子集,與靜態法一樣,可在編譯時或通過串口命令,使目標平臺使用動態網絡配置。當然,為了取得IP地址,目標設備必須連到能夠訪問BOOTP或DHCP服務器的網絡上。
當裝載的應用軟件本身需要IP地址時,切記RedBoot映像不能使用動態IP地址,否則會在以太網端口的IP地址配置中引起沖突,從而造成與RedBoot或應用軟件通信錯誤。在這種情況下,最好給不在動態網絡配置協議范圍內的RedBoot設置靜態IP地址。
RedBoot還能根據與BOOTP響應一起收到的配置信息,用一般文件傳輸協議(TFTP)自動下載應用軟件代碼,此時在主機上同樣需要TFTP服務器以提供軟件映像訪問。
命令行語句
RedBoot通過命令行接口(CLI)輸入命令,在最小模式下,RedBoot命令行接口建立在目標平臺硬件串口上,當有多個串口時,RedBoot可以用其中任何一個建立通信。RedBoot還能利用Telnet協議在以太網端口建立CLI(默認情況下RedBoot將端口 9000用于Telnet,不過可以用下面講到的fconfig命令改變端口號)。
CLI輸出的RedBoot初始化信息如圖1所示,這些信息提供了有關RedBoot映像的信息,包括映像建立日期、目標硬件平臺以及可供RedBoot使用的資源等。當顯示出提示符
RedBoot>
后,就表明CLI已經準備好,用戶可以開始輸入命令。
RedBoot命令的基本格式是:
命令 [-選項1] [-選項2 參數值] 操作符
命令格式中的選項1和選項2代表可以加到某些命令中的可選參數,用于指示一些特定動作或附加信息,在選項2中還包括一個數值。操作符定義了某些特殊命令所需的附加信息。命令也可以縮寫成最短的無歧義字符串,如dump、dum、du和d都是dump命令的有效寫法。
RedBoot用load命令下載應用軟件映像,映像可以用TFTP協議、X/Y調制解調器協議或直接從目標硬件下載。映像成功下載到目標平臺后,就可以用go命令運行軟件。
在RedBoot提示符下可鍵入help命令顯示所有可用命令列表,并不是所有命令都能用于各種RedBoot映像,命令是否可用取決于目標平臺的資源狀況,例如有些命令就不適合用于沒有閃存的硬件平臺。
首字符是“$”的命令代表執行后會在RedBoot映像中調用GDB stub,一旦進入GDB模式,RedBoot就會一直保持這種模式直到系統重新啟動。
有幾條RedBoot命令需要在這里重點提一下。首先是閃存映像系統(fis)命令,當硬件平臺上配有閃存時,RedBoot提供fis命令作為基本文件系統,這些命令主要用來管理文件系統映像。
另一個有用的命令是基于閃存的配置和控制命令fconfig。圖2給出了用fconfig命令查詢的輸出信息,從中可以看出,配置命令可以設置RedBoot啟動順序。啟動配置包括是否在初始化期間運行引導腳本、是否用BOOTP協議獲取IP地址以及是否用GDB telnet端口進行調試等。
RedBoot也支持引導腳本,因此允許用戶在上電過程完成后執行所需命令。在產品測試階段采用RedBoot裝載應用軟件映像時引導腳本很有好處,用戶還可以設置超時參數,在引導腳本執行前按下Ctrl+C中斷執行。引導腳本可用fconfig命令進行設置。
構建RedBoot
能夠自己重新構建RedBoot對用戶來說非常重要,因為隨時都可能需要進行代碼更新和缺陷更正;如果用戶希望定制RedBoot,那么也需要重建RedBoot,比如增加自己的命令或與它的接口。
評論