采用ROM監控器的調試技巧分析

發(fā)布時(shí)間:2010-9-13 14:00    發(fā)布者:techshare
關(guān)鍵詞: ROM , 調試技巧 , 監控器
開(kāi)放源代碼ROM監控器RedBoot的功能特點(diǎn)以及配置方法,它可以提供一種下載調試環(huán)境,且體積非常小巧。RedBoot也稱(chēng)作紅帽(Red Hat)嵌入式調試引導程序,是一種用于嵌入式系統的獨立開(kāi)放源代碼引導/裝載器,任何人都可以從互聯(lián)網(wǎng)上下載具有紅帽eCos公共許可證的RedBoot源代碼。雖然RedBoot使用的是源于eCos實(shí)時(shí)操作系統(RTOS)的軟件模塊,并且常用于嵌入式Linux系統,但它與這兩種操作系統完全無(wú)關(guān),RedBoot能夠用于任何操作系統或RTOS,甚至沒(méi)有操作系統也行。

RedBoot自帶一個(gè)GDB“存根進(jìn)程(stub)”,可提供目標端通信軟件,允許用戶(hù)通過(guò)標準GDB協(xié)議命令進(jìn)行遠端調試,這樣設計師就能利用RedBoot與運行GNU調試器的主機通過(guò)串口或網(wǎng)絡(luò )連接起來(lái)調試設計的嵌入式軟件。RedBoot支持多種處理器架構和硬件平臺,包括ARM、日立SHx、MIPS、PowerPC、SPARC以及x86等。

結構配置

RedBoot可以在多種不同配置下運行,但一般都是從目標平臺的閃存引導區或引導ROM啟動(dòng)。RedBoot設計為系統上電啟動(dòng),能提供完整的處理器初始化和設備設置,使設計人員能夠迅速開(kāi)始與系統通信。

RedBoot可設為用串口或以太網(wǎng)口(通過(guò)Telnet)進(jìn)行通信,當從某個(gè)端口收到第一條命令后,那么隨后所有的RedBoot通信都將從那個(gè)端口進(jìn)行,直到系統重新啟動(dòng)。

利用以太網(wǎng)口與RedBoot通信時(shí),一定要清楚目標平臺是如何得到其IP地址的。設置目標平臺IP地址有兩種方法,分別是動(dòng)態(tài)法和靜態(tài)法。在靜態(tài)方式下,目標平臺的IP地址在編譯RedBoot映像前設置(后文還會(huì )詳細討論這方面內容),也可通過(guò)串口命令設置。

RedBoot還可以采用BOOTP協(xié)議動(dòng)態(tài)分配IP地址,BOOTP協(xié)議是目前許多網(wǎng)絡(luò )廣泛支持的動(dòng)態(tài)主機配置協(xié)議(DHCP)的一個(gè)子集,與靜態(tài)法一樣,可在編譯時(shí)或通過(guò)串口命令,使目標平臺使用動(dòng)態(tài)網(wǎng)絡(luò )配置。當然,為了取得IP地址,目標設備必須連到能夠訪(fǎng)問(wèn)BOOTP或DHCP服務(wù)器的網(wǎng)絡(luò )上。

當裝載的應用軟件本身需要IP地址時(shí),切記RedBoot映像不能使用動(dòng)態(tài)IP地址,否則會(huì )在以太網(wǎng)端口的IP地址配置中引起沖突,從而造成與RedBoot或應用軟件通信錯誤。在這種情況下,最好給不在動(dòng)態(tài)網(wǎng)絡(luò )配置協(xié)議范圍內的RedBoot設置靜態(tài)IP地址。

RedBoot還能根據與BOOTP響應一起收到的配置信息,用一般文件傳輸協(xié)議(TFTP)自動(dòng)下載應用軟件代碼,此時(shí)在主機上同樣需要TFTP服務(wù)器以提供軟件映像訪(fǎng)問(wèn)。

命令行語(yǔ)句

RedBoot通過(guò)命令行接口(CLI)輸入命令,在最小模式下,RedBoot命令行接口建立在目標平臺硬件串口上,當有多個(gè)串口時(shí),RedBoot可以用其中任何一個(gè)建立通信。RedBoot還能利用Telnet協(xié)議在以太網(wǎng)端口建立CLI(默認情況下RedBoot將端口9000用于Telnet,不過(guò)可以用下面講到的fconfig命令改變端口號)。

CLI輸出的RedBoot初始化信息如圖1所示,這些信息提供了有關(guān)RedBoot映像的信息,包括映像建立日期、目標硬件平臺以及可供RedBoot使用的資源等。當顯示出提示符:RedBoot> 后,就表明CLI已經(jīng)準備好,用戶(hù)可以開(kāi)始輸入命令。



圖1CLI輸出的RedBoot初始化信息

RedBoot命令的基本格式是:

命令 [-選項1] [-選項2 參數值] 操作符

命令格式中的選項1和選項2代表可以加到某些命令中的可選參數,用于指示一些特定動(dòng)作或附加信息,在選項2中還包括一個(gè)數值。操作符定義了某些特殊命令所需的附加信息。命令也可以縮寫(xiě)成最短的無(wú)歧義字符串,如dump、dum、du和d都是dump命令的有效寫(xiě)法。

RedBoot用load命令下載應用軟件映像,映像可以用TFTP協(xié)議、X/Y調制解調器協(xié)議或直接從目標硬件下載。映像成功下載到目標平臺后,就可以用go命令運行軟件。

在RedBoot提示符下可鍵入help命令顯示所有可用命令列表,并不是所有命令都能用于各種RedBoot映像,命令是否可用取決于目標平臺的資源狀況,例如有些命令就不適合用于沒(méi)有閃存的硬件平臺。

首字符是“$”的命令代表執行后會(huì )在RedBoot映像中調用GDB stub,一旦進(jìn)入GDB模式,RedBoot就會(huì )一直保持這種模式直到系統重新啟動(dòng)。

有幾條RedBoot命令需要在這里重點(diǎn)提一下。首先是閃存映像系統(fis)命令,當硬件平臺上配有閃存時(shí),RedBoot提供fis命令作為基本文件系統,這些命令主要用來(lái)管理文件系統映像。

另一個(gè)有用的命令是基于閃存的配置和控制命令fconfig。圖2給出了用fconfig命令查詢(xún)的輸出信息,從中可以看出,配置命令可以設置RedBoot啟動(dòng)順序。啟動(dòng)配置包括是否在初始化期間運行引導腳本、是否用BOOTP協(xié)議獲取IP地址以及是否用GDB telnet端口進(jìn)行調試等。  



圖2 用fconfig命令查詢(xún)

RedBoot也支持引導腳本,因此允許用戶(hù)在上電過(guò)程完成后執行所需命令。在產(chǎn)品測試階段采用RedBoot裝載應用軟件映像時(shí)引導腳本很有好處,用戶(hù)還可以設置超時(shí)參數,在引導腳本執行前按下Ctrl+C中斷執行。引導腳本可用fconfig命令進(jìn)行設置。

構建RedBoot  

能夠自己重新構建RedBoot對用戶(hù)來(lái)說(shuō)非常重要,因為隨時(shí)都可能需要進(jìn)行代碼更新和缺陷更正;如果用戶(hù)希望定制RedBoot,那么也需要重建RedBoot,比如增加自己的命令或與它的接口。


重建RedBoot映像的第一步是建立主機開(kāi)發(fā)環(huán)境,建立RedBoot映像的工具要能運行在Windows或Linux主機平臺上。主機開(kāi)發(fā)工具包括GNU二進(jìn)制應用程序(常稱(chēng)為binutils)、C/C++編譯器和調試器。安裝完GNU工具后,接著(zhù)就是確定配置工具,用戶(hù)可以采用圖形化配置工具或命令行工具配置建立RedBoot映像。本文重點(diǎn)講述圖形化配置工具。

配置工具允許進(jìn)行源代碼級設置,從而確保RedBoot映像是專(zhuān)為各個(gè)用戶(hù)應用而開(kāi)發(fā)的,整個(gè)源代碼知識庫和配置工具用元件定義語(yǔ)言(CDL)描述庫中的元件及建立軟件映像規則。配置工具利用先前設立的GNU工具建立適合特定處理器結構的RedBoot映像,有關(guān)配置工具的更多信息可以從網(wǎng)上得到,也可以從幫助菜單中獲得。

下面的例子使用的是configtool-2.08-setup.exe,它是目前最新版配置工具,在安裝之前最好閱讀一下readme.txt文件,一起下載的changes.txt文件則列出了不同版本的變動(dòng)情況。接下來(lái)就是下載RedBoot源代碼,RedBoot源代碼包含在匿名CVS庫中,可以用免費的客戶(hù)軟件訪(fǎng)問(wèn)。連上庫以后,最好將包括eCos文件在內的所有源代碼都下載,因為RedBoot會(huì )使用設備驅動(dòng)器之類(lèi)的eCos源文件。在確定建立自己RedBoot映像所需所有文件后,可以刪掉其它不必要文件。RedBoot軟件結構主要軟件模塊方框圖如圖3所示。



圖3 主要軟件模塊方框圖  

RedBoot軟件結構采用分層方法,這樣可以裝入新的功能和軟件組件,RedBoot的基礎是eCos硬件抽象層(HAL)和設備驅動(dòng)器。

讓我們看一下RedBoot的源代碼目錄結構。從匿名CVS庫中下載的源代碼文件都放在packages子目錄下,這個(gè)主目錄下面是redboot子目錄,里面存放全部RedBoot文件。由于所有文件都是從匿名CVS庫下載的,因此都位于current子目錄下。在redboot子目錄下有個(gè)名為ChangeLog的文件,它記錄了RedBoot源文件的所有修改情況。

配置工具能夠非常方便地用圖形化方式配置RedBoot映像建立所必需的組件,通過(guò)選中或不選中某個(gè)特定組件選擇框,可以激活或去除相應的配置選項,設置值可在窗口右邊的方格中加入。

創(chuàng )建新RedBoot配置有兩種方法。第一種方法是在配置工具的Build菜單下選擇模板,這時(shí)會(huì )彈出模板對話(huà)框,然后從中選擇硬件平臺和模板數據包,這里我們的模板數據包選擇redboot。這種方法為建立默認配置RedBoot映像提供了一個(gè)基本方式,選擇菜單Build->Packages,在彈出的Packages對話(huà)框中可以添加或刪除其它數據包。

第二種創(chuàng )建RedBoot新配置的方法是導入eCos最小配置文件(.ecm)。RedBoot支持的每個(gè)硬件平臺都包含這樣的最小配置文件,這些配置文件一般位于硬件抽象層目錄hal下對應于每個(gè)結構的misc子目錄中。

最小配置文件包含特定硬件平臺基本配置信息,將.ecm文件作為出發(fā)點(diǎn),我們就有了作為基礎的硬件平臺工作配置文件,可改變配置選項支持RedBoot映像所需要的任何修改。

最小配置文件同樣使用CDL。圖4是一個(gè)eCos最小配置文件實(shí)例,源自redboot_ROM.ecm文件,適合那些采用PowerPC的Motorola MBX開(kāi)發(fā)板。從圖中可以看到,.ecm文件列出了cdl_configuration命令的數據包清單,需要包含在RedBoot配置中。cdl_option命令用來(lái)為特定選項設置選項值。



圖4 eCos最小配置文件實(shí)例

大多數支持平臺都包含一個(gè)可以導入的ROM和RAM RedBoot.ecm文件作為配置起點(diǎn),ROM和RAM表明RedBoot映像在目標硬件上的存放位置。一般情況下,RAM配置在最初調試硬件時(shí)使用,而ROM配置則在映像調試完成后準備存放進(jìn)閃存時(shí)使用。RAM映像還可用于更新駐留閃存的RedBoot映像。i386 PC目標平臺還包含了一個(gè)RedBoot FLOPPY配置文件,可供軟盤(pán)啟動(dòng)RedBoot時(shí)使用。  

為了導入最小配置文件,需要選擇配置工具菜單中的File->Import命令,然后瀏覽相應的.ecm文件并選中,配置工具利用.ecm文件裝載相應數據包并設置對應選項。如果發(fā)生因配置選項設置引起的沖突,配置工具會(huì )顯示一個(gè)沖突解決對話(huà)框,選擇繼續按鈕就可解決該沖突。

由于RedBoot還依賴(lài)其它軟件模塊如HAL,因此并不是所有的配置選項都包含在RedBoot ROM監控數據包內。在eCos HAL包中就有底層硬件配置選項,其它可能需要配置的數據包還有設備驅動(dòng)器,例如在包括網(wǎng)絡(luò )支持的平臺上,以太網(wǎng)設備驅動(dòng)器選項就包含在通用以太網(wǎng)支持包內。

如果想要網(wǎng)絡(luò )通信,還需要建立RedBoot網(wǎng)絡(luò )配置選項,這樣可以設定目標硬件的默認IP地址,或BOOTP初始化期間使用的配置。

完成RedBoot配置后,最好把最小配置文件保存下來(lái),這一步可以通過(guò)選擇File->Export并輸入文件名完成。

創(chuàng )建RedBoot映像

接下來(lái)需要保存當前的配置。為了將當前配置保存為eCos當前配置文件(.ecc),需要選擇File菜單中的Save As命令,不妨把文件存為redboot_rom.ecc。這步操作將生成正在創(chuàng )建的RedBoot映像的工作目錄結構,所有目錄都將以剛才創(chuàng )建的.ecc文件名開(kāi)頭。在本例中,目錄名以redboot開(kāi)始。

正確設置好配置以后,下面就可以開(kāi)始創(chuàng )建RedBoot映像了。為了執行創(chuàng )建過(guò)程,需要采用Build->Library命令,此時(shí)配置工具輸出窗口將顯示相關(guān)創(chuàng )建信息。創(chuàng )建過(guò)程完成后,生成的RedBoot映像存放在redboot_install\bin子目錄中,本例中新的RedBoot映像取名為redboot_rom.bin。

更新目標平臺

將RedBoot映像裝進(jìn)非易失性存儲器根據目標不同有很多方法,一般情況下,映像必須用軟件編進(jìn)閃存或用設備編程器編入ROM。

RedBoot映像裝入閃存后,就可以直接執行缺陷修正或增加功能等映像更新任務(wù),此時(shí)需要已有的閃存RedBoot映像和新建立的從RAM運行的RedBoot映像的支持。

首先從閃存啟動(dòng)目標平臺并運行舊的RedBoot映像,由于這里采用了閃存映像系統命令將新的RedBoot映像編入閃存,因此需要執行 :RedBoot> fis init ,命令初始化fis系統。該命令用于初始化閃存,使新的映像能用fis命令下載。映像系統初始化完成后,可以用 :RedBoot> fis list ,命令查看閃存中的映像。此時(shí)會(huì )得到類(lèi)似于圖5的輸出,根據實(shí)際使用的硬件平臺而顯示不同的地址、長(cháng)度和入口地點(diǎn),同時(shí)還能看到RedBoot映像名,該映像名代表的是目前正在閃存中運行的RedBoot映像。



圖5 閃存輸出圖

接著(zhù)用上述同樣的步驟創(chuàng )建一個(gè)RedBoot RAM映像redboot_ram.bin。為了建立從RAM運行的映像,需要確保啟動(dòng)類(lèi)型(CYG_HAL_STARTUP)配置選項設為RAM。因為硬件平臺包括ROM和RAM最小配置文件,因此導入并建立RAM配置并不困難,重要的是要記住將RAM和ROM映像存放到不同的工作目錄中。  

下一步用駐留在閃存中的原有RedBoot映像將新的redboot_ram.bin載入到RAM中,這步操作的命令是:

RedBoot> load redboot_ram.bin

載入命令的執行有好幾種方法,如把映像從主機發(fā)送到目標硬件的TFTP,具體哪種方法取決于用戶(hù)實(shí)際可用資源情況,fis load命令還能用來(lái)通過(guò)閃存映像存儲系統裝載和存儲redboot_ram.bin映像。

我們用go命令執行剛載入RAM中的RedBoot映像。RedBoot映像從RAM執行后會(huì )產(chǎn)生新的類(lèi)似于圖1的初始化消息,要注意這時(shí)是從RAM執行RedBoot映像的。

接著(zhù)用與上面相同的步驟裝載新創(chuàng )建的ROM RedBoot映像,裝載redboot_rom.bin映像的命令是:

RedBoot> load redboot_rom.bin -b

命令行中的ram_addr指RAM中的位置(不同的平臺有不同的值),這里臨時(shí)存放著(zhù)即將編入閃存的redboot_rom.bin映像。

現在就可以用fis命令將新映像寫(xiě)進(jìn)閃存了。某些平臺可以支持閃存的鎖定和解鎖,如果用戶(hù)能夠解鎖閃存,那么用戶(hù)需要輸入的第一條fis命令是:

RedBoot> fis unlock -l

這里flash_addr是需解鎖的閃存地址,本例中這項參數對應的是fis list命令中RedBoot映像名稱(chēng)的閃存地址,從fis list命令中還能得到長(cháng)度。如果平臺不支持閃存鎖定,那么用戶(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存儲器的位置。flash_len同樣出現在fis list命令中,代表RedBoot閃存映像的長(cháng)度,data_len則是將被寫(xiě)進(jìn)閃存的redboot_rom.bin文件的長(cháng)度。

在繼續下面的操作之前,fis create命令會(huì )詢(xún)問(wèn)用戶(hù)是否愿意替換現有名為RedBoot的映像,如果回答“是”則將把新的映像裝入閃存。下一步,如果硬件平臺允許鎖定閃存,那么就可以用:RedBoot> fis lock -f -l ,命令完成閃存鎖定。上面討論的針對所支持平臺實(shí)際存儲位置在RedBoot文檔中有詳細說(shuō)明。最后重新啟動(dòng)硬件就可以啟用剛才寫(xiě)進(jìn)閃存的RedBoot新映像了。

發(fā)展前景

目前新版RedBoot正計劃與eCos v.2同時(shí)推出,新版RedBoot增強功能包括DHCP客戶(hù)機、嵌入式web服務(wù)器、USB調試和IDE驅動(dòng)支持。

即使沒(méi)有這些功能改善,RedBoot ROM監控器也能提供一種低成本而且容易使用的硬件調試與測試方法。由于RedBoot是開(kāi)放式源代碼,因此用戶(hù)能夠定制RedBoot以滿(mǎn)足項目開(kāi)發(fā)和測試階段遇到的所有特殊需求。RedBoot對GDB的支持甚至可以讓用戶(hù)不再需要昂貴的硬件調試工具。
本文地址:http://selenalain.com/thread-26466-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页