開(kāi)放源代碼ROM監(jiān)控器RedBoot的功能特點(diǎn)以及配置方法,它可以提供一種下載調(diào)試環(huán)境,且體積非常小巧。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è)備必須連到能夠訪(fǎng)問(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ù)器以提供軟件映像訪(fǎng)問(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)始輸入命令。
圖1CLI輸出的RedBoot初始化信息
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)試等。
圖2 用fconfig命令查詢(xún)
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,比如增加自己的命令或與它的接口。
重建RedBoot映像的第一步是建立主機(jī)開(kāi)發(fā)環(huán)境,建立RedBoot映像的工具要能運(yùn)行在Windows或Linux主機(jī)平臺(tái)上。主機(jī)開(kāi)發(fā)工具包括GNU二進(jìn)制應(yīng)用程序(常稱(chēng)為binutils)、C/C++編譯器和調(diào)試器。安裝完GNU工具后,接著就是確定配置工具,用戶(hù)可以采用圖形化配置工具或命令行工具配置建立RedBoot映像。本文重點(diǎn)講述圖形化配置工具。
配置工具允許進(jìn)行源代碼級(jí)設(shè)置,從而確保RedBoot映像是專(zhuān)為各個(gè)用戶(hù)應(yīng)用而開(kāi)發(fā)的,整個(gè)源代碼知識(shí)庫(kù)和配置工具用元件定義語(yǔ)言(CDL)描述庫(kù)中的元件及建立軟件映像規(guī)則。配置工具利用先前設(shè)立的GNU工具建立適合特定處理器結(jié)構(gòu)的RedBoot映像,有關(guān)配置工具的更多信息可以從網(wǎng)上得到,也可以從幫助菜單中獲得。
下面的例子使用的是configtool-2.08-setup.exe,它是目前最新版配置工具,在安裝之前最好閱讀一下readme.txt文件,一起下載的changes.txt文件則列出了不同版本的變動(dòng)情況。接下來(lái)就是下載RedBoot源代碼,RedBoot源代碼包含在匿名CVS庫(kù)中,可以用免費(fèi)的客戶(hù)軟件訪(fǎng)問(wèn)。連上庫(kù)以后,最好將包括eCos文件在內(nèi)的所有源代碼都下載,因?yàn)镽edBoot會(huì)使用設(shè)備驅(qū)動(dòng)器之類(lèi)的eCos源文件。在確定建立自己RedBoot映像所需所有文件后,可以刪掉其它不必要文件。RedBoot軟件結(jié)構(gòu)主要軟件模塊方框圖如圖3所示。
圖3 主要軟件模塊方框圖
RedBoot軟件結(jié)構(gòu)采用分層方法,這樣可以裝入新的功能和軟件組件,RedBoot的基礎(chǔ)是eCos硬件抽象層(HAL)和設(shè)備驅(qū)動(dòng)器。
讓我們看一下RedBoot的源代碼目錄結(jié)構(gòu)。從匿名CVS庫(kù)中下載的源代碼文件都放在packages子目錄下,這個(gè)主目錄下面是redboot子目錄,里面存放全部RedBoot文件。由于所有文件都是從匿名CVS庫(kù)下載的,因此都位于current子目錄下。在redboot子目錄下有個(gè)名為ChangeLog的文件,它記錄了RedBoot源文件的所有修改情況。
配置工具能夠非常方便地用圖形化方式配置RedBoot映像建立所必需的組件,通過(guò)選中或不選中某個(gè)特定組件選擇框,可以激活或去除相應(yīng)的配置選項(xiàng),設(shè)置值可在窗口右邊的方格中加入。
創(chuàng)建新RedBoot配置有兩種方法。第一種方法是在配置工具的Build菜單下選擇模板,這時(shí)會(huì)彈出模板對(duì)話(huà)框,然后從中選擇硬件平臺(tái)和模板數(shù)據(jù)包,這里我們的模板數(shù)據(jù)包選擇redboot。這種方法為建立默認(rèn)配置RedBoot映像提供了一個(gè)基本方式,選擇菜單Build->Packages,在彈出的Packages對(duì)話(huà)框中可以添加或刪除其它數(shù)據(jù)包。
第二種創(chuàng)建RedBoot新配置的方法是導(dǎo)入eCos最小配置文件(.ecm)。RedBoot支持的每個(gè)硬件平臺(tái)都包含這樣的最小配置文件,這些配置文件一般位于硬件抽象層目錄hal下對(duì)應(yīng)于每個(gè)結(jié)構(gòu)的misc子目錄中。
最小配置文件包含特定硬件平臺(tái)基本配置信息,將.ecm文件作為出發(fā)點(diǎn),我們就有了作為基礎(chǔ)的硬件平臺(tái)工作配置文件,可改變配置選項(xiàng)支持RedBoot映像所需要的任何修改。
最小配置文件同樣使用CDL。圖4是一個(gè)eCos最小配置文件實(shí)例,源自redboot_ROM.ecm文件,適合那些采用PowerPC的Motorola MBX開(kāi)發(fā)板。從圖中可以看到,.ecm文件列出了cdl_configuration命令的數(shù)據(jù)包清單,需要包含在RedBoot配置中。cdl_option命令用來(lái)為特定選項(xiàng)設(shè)置選項(xiàng)值。
圖4 eCos最小配置文件實(shí)例
大多數(shù)支持平臺(tái)都包含一個(gè)可以導(dǎo)入的ROM和RAM RedBoot.ecm文件作為配置起點(diǎn),ROM和RAM表明RedBoot映像在目標(biāo)硬件上的存放位置。一般情況下,RAM配置在最初調(diào)試硬件時(shí)使用,而ROM配置則在映像調(diào)試完成后準(zhǔn)備存放進(jìn)閃存時(shí)使用。RAM映像還可用于更新駐留閃存的RedBoot映像。i386 PC目標(biāo)平臺(tái)還包含了一個(gè)RedBoot FLOPPY配置文件,可供軟盤(pán)啟動(dòng)RedBoot時(shí)使用。
為了導(dǎo)入最小配置文件,需要選擇配置工具菜單中的File->Import命令,然后瀏覽相應(yīng)的.ecm文件并選中,配置工具利用.ecm文件裝載相應(yīng)數(shù)據(jù)包并設(shè)置對(duì)應(yīng)選項(xiàng)。如果發(fā)生因配置選項(xiàng)設(shè)置引起的沖突,配置工具會(huì)顯示一個(gè)沖突解決對(duì)話(huà)框,選擇繼續(xù)按鈕就可解決該沖突。
由于RedBoot還依賴(lài)其它軟件模塊如HAL,因此并不是所有的配置選項(xiàng)都包含在RedBoot ROM監(jiān)控?cái)?shù)據(jù)包內(nèi)。在eCos HAL包中就有底層硬件配置選項(xiàng),其它可能需要配置的數(shù)據(jù)包還有設(shè)備驅(qū)動(dòng)器,例如在包括網(wǎng)絡(luò)支持的平臺(tái)上,以太網(wǎng)設(shè)備驅(qū)動(dòng)器選項(xiàng)就包含在通用以太網(wǎng)支持包內(nèi)。
如果想要網(wǎng)絡(luò)通信,還需要建立RedBoot網(wǎng)絡(luò)配置選項(xiàng),這樣可以設(shè)定目標(biāo)硬件的默認(rèn)IP地址,或BOOTP初始化期間使用的配置。
完成RedBoot配置后,最好把最小配置文件保存下來(lái),這一步可以通過(guò)選擇File->Export并輸入文件名完成。
創(chuàng)建RedBoot映像
接下來(lái)需要保存當(dāng)前的配置。為了將當(dāng)前配置保存為eCos當(dāng)前配置文件(.ecc),需要選擇File菜單中的Save As命令,不妨把文件存為redboot_rom.ecc。這步操作將生成正在創(chuàng)建的RedBoot映像的工作目錄結(jié)構(gòu),所有目錄都將以剛才創(chuàng)建的.ecc文件名開(kāi)頭。在本例中,目錄名以redboot開(kāi)始。
正確設(shè)置好配置以后,下面就可以開(kāi)始創(chuàng)建RedBoot映像了。為了執(zhí)行創(chuàng)建過(guò)程,需要采用Build->Library命令,此時(shí)配置工具輸出窗口將顯示相關(guān)創(chuàng)建信息。創(chuàng)建過(guò)程完成后,生成的RedBoot映像存放在redboot_install\bin子目錄中,本例中新的RedBoot映像取名為redboot_rom.bin。
更新目標(biāo)平臺(tái)
將RedBoot映像裝進(jìn)非易失性存儲(chǔ)器根據(jù)目標(biāo)不同有很多方法,一般情況下,映像必須用軟件編進(jìn)閃存或用設(shè)備編程器編入ROM。
RedBoot映像裝入閃存后,就可以直接執(zhí)行缺陷修正或增加功能等映像更新任務(wù),此時(shí)需要已有的閃存RedBoot映像和新建立的從RAM運(yùn)行的RedBoot映像的支持。
首先從閃存啟動(dòng)目標(biāo)平臺(tái)并運(yùn)行舊的RedBoot映像,由于這里采用了閃存映像系統(tǒng)命令將新的RedBoot映像編入閃存,因此需要執(zhí)行 :RedBoot> fis init ,命令初始化fis系統(tǒng)。該命令用于初始化閃存,使新的映像能用fis命令下載。映像系統(tǒng)初始化完成后,可以用 :RedBoot> fis list ,命令查看閃存中的映像。此時(shí)會(huì)得到類(lèi)似于圖5的輸出,根據(jù)實(shí)際使用的硬件平臺(tái)而顯示不同的地址、長(zhǎng)度和入口地點(diǎn),同時(shí)還能看到RedBoot映像名,該映像名代表的是目前正在閃存中運(yùn)行的RedBoot映像。
圖5 閃存輸出圖
接著用上述同樣的步驟創(chuàng)建一個(gè)RedBoot RAM映像redboot_ram.bin。為了建立從RAM運(yùn)行的映像,需要確保啟動(dòng)類(lèi)型(CYG_HAL_STARTUP)配置選項(xiàng)設(shè)為RAM。因?yàn)橛布脚_(tái)包括ROM和RAM最小配置文件,因此導(dǎo)入并建立RAM配置并不困難,重要的是要記住將RAM和ROM映像存放到不同的工作目錄中。
下一步用駐留在閃存中的原有RedBoot映像將新的redboot_ram.bin載入到RAM中,這步操作的命令是:
RedBoot> load redboot_ram.bin
載入命令的執(zhí)行有好幾種方法,如把映像從主機(jī)發(fā)送到目標(biāo)硬件的TFTP,具體哪種方法取決于用戶(hù)實(shí)際可用資源情況,fis load命令還能用來(lái)通過(guò)閃存映像存儲(chǔ)系統(tǒng)裝載和存儲(chǔ)redboot_ram.bin映像。
我們用go命令執(zhí)行剛載入RAM中的RedBoot映像。RedBoot映像從RAM執(zhí)行后會(huì)產(chǎn)生新的類(lèi)似于圖1的初始化消息,要注意這時(shí)是從RAM執(zhí)行RedBoot映像的。
接著用與上面相同的步驟裝載新創(chuàng)建的ROM RedBoot映像,裝載redboot_rom.bin映像的命令是:
RedBoot> load redboot_rom.bin -b
命令行中的ram_addr指RAM中的位置(不同的平臺(tái)有不同的值),這里臨時(shí)存放著即將編入閃存的redboot_rom.bin映像。
現(xiàn)在就可以用fis命令將新映像寫(xiě)進(jìn)閃存了。某些平臺(tái)可以支持閃存的鎖定和解鎖,如果用戶(hù)能夠解鎖閃存,那么用戶(hù)需要輸入的第一條fis命令是:
RedBoot> fis unlock -l
這里flash_addr是需解鎖的閃存地址,本例中這項(xiàng)參數(shù)對(duì)應(yīng)的是fis list命令中RedBoot映像名稱(chēng)的閃存地址,從fis list命令中還能得到長(zhǎng)度。如果平臺(tái)不支持閃存鎖定,那么用戶(hù)可以跳過(guò)這一步。
隨后可以用命令:RedBoot> fis create RedBoot -f -b -l -s ,將RAM中的RedBoot新映像寫(xiě)入閃存中。其中flash_addr是RedBoot新映像寫(xiě)入閃存的位置,如fis list命令所示,ram_addr是redboot_ROM.bin文件載入RAM存儲(chǔ)器的位置。flash_len同樣出現(xiàn)在fis list命令中,代表RedBoot閃存映像的長(zhǎng)度,data_len則是將被寫(xiě)進(jìn)閃存的redboot_rom.bin文件的長(zhǎng)度。
在繼續(xù)下面的操作之前,fis create命令會(huì)詢(xún)問(wèn)用戶(hù)是否愿意替換現(xiàn)有名為RedBoot的映像,如果回答“是”則將把新的映像裝入閃存。下一步,如果硬件平臺(tái)允許鎖定閃存,那么就可以用:RedBoot> fis lock -f -l ,命令完成閃存鎖定。上面討論的針對(duì)所支持平臺(tái)實(shí)際存儲(chǔ)位置在RedBoot文檔中有詳細(xì)說(shuō)明。最后重新啟動(dòng)硬件就可以啟用剛才寫(xiě)進(jìn)閃存的RedBoot新映像了。
發(fā)展前景
目前新版RedBoot正計(jì)劃與eCos v.2同時(shí)推出,新版RedBoot增強(qiáng)功能包括DHCP客戶(hù)機(jī)、嵌入式web服務(wù)器、USB調(diào)試和IDE驅(qū)動(dòng)支持。
即使沒(méi)有這些功能改善,RedBoot ROM監(jiān)控器也能提供一種低成本而且容易使用的硬件調(diào)試與測(cè)試方法。由于RedBoot是開(kāi)放式源代碼,因此用戶(hù)能夠定制RedBoot以滿(mǎn)足項(xiàng)目開(kāi)發(fā)和測(cè)試階段遇到的所有特殊需求。RedBoot對(duì)GDB的支持甚至可以讓用戶(hù)不再需要昂貴的硬件調(diào)試工具。
責(zé)任編輯:gt
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7033瀏覽量
124799 -
代碼
+關(guān)注
關(guān)注
30文章
4883瀏覽量
70100 -
監(jiān)控器
+關(guān)注
關(guān)注
1文章
318瀏覽量
27234
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論