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