Bootloader在AT91RM9200系統中的實現
這個OrgDef數組給出了Flash中的段的信息。在函數flash_identification(flash_info_t * info)中修改打印的信息,flash_init(void)和 flash_print_info(flash_info_t * info)中的變量要相應的修改,最后 flash_erase()中的身份判斷部分相應的修改(如果只支持一種Flash芯片的話可以去掉)。
按照本系統硬件情況,關鍵是Flash的驅動部分的修改。由于Bootloader是為了引導操作系統,如本文的第2部分分析完成最基本的硬件的初始化即可,所以在實際移植中經常需要做的一般如上文所述。
接下來在Linux下進行編譯,設置環境變量PATH為交叉編譯器的路徑所在目錄,如:
PATH=$PATH:/usr/local/arm/2.95/bin
在代碼的頂層目錄下執行以下命令:
make distclean
make at91rm9200dk_config
make
編譯成功可以得到得到三個文件:u-boot,u-boot.bin,u-boot.srec。其中boot包含有很多調試信息,可以被很多調試程序讀,開發者也可以用readelf、objdump等命令來查看里面包含的段地址等信息。u-boot.bin文件是ARM可以直接執行的二進制的文件。u-boot.srec是 MotololarMT srec格式的文件。
按照1.2中介紹的方法燒寫U-boot到Flash芯片,設置跳線,使BMS引腳為低電平,CPU從外部啟動,從超級終端顯示U-boot的啟動信息。
3.3 調試
調試過程中遇到的問題可能是移植的問題,也有可能是硬件的問題,需要開發者做出判斷。仔細的閱讀U-boot的源代碼,對于了解硬件環境,進行調試有很大好處。同時代碼有一些用于調試的條件編譯,用dbg ()、debug()等函數輸出調試信息,開發者可以通過這些調試信息輸出函數得到編譯以得到相關部分的調試信息。
編譯通過之后將u-boot.bin載入SDRAM中運行,分別試驗erase,cp,printenv,saveenv等命令檢測對Flash的操作,使用tftp命令以檢測網口下載功能,然后裝載操作系統內核,完成以上的任務則移植成功。經過以上步驟移植的U-Boot已經在本人開發的ARM板上順利的引導Linux操作系統。
4 總結
本文是筆者結合AT91RM9200的開發經驗,首先介紹了該處理器的特點,探討了利用GNU開發bootloader的一般方法和步驟,最后詳細地分析了U-boot在嵌入式系統上的移植。基于其他的CPU的嵌入式平臺上的Bootloader的移植與此相似,希望本文能對嵌入式開發人員有借鑒意義。 AT91RM9200是適合于工業控制、汽車電子、醫療器械等領域的一款基于ARM920T核的高性能芯片,屬于當前比較高端的RISC處理器。文章首先分析了AT91RM9200芯片引導的特點,然后在基于AT91RM9200的嵌入式系統上實現Bootloader(操作系統的引導裝載程序)的方法,特別是通過對移植U-boot的方法和常見問題的詳細介紹。
本文作者創新點:闡明了在基于RISC芯片(ARM、MIPS,PPC等)的系統開發中實現bootloader的方法,為廣大的嵌入式開發人員提供了一個參考。
參考文獻:
[1] 朱義君 楊育紅 趙凱 段志英,AT91系列ARM微控制器體系結構與開發實例[M],北京航空航天大學出版社,2005
[2] Atmel Corporation, ARM920TTM Based Microcontroller AT91RM9200,2004
[3] Wookey, Chris Rutter, Jeff Sutherl, Paul Webb, The GNU Toolchain for ARM Targets HOWTO.
[4] The DENX U-BOOT and Linux Guide (DULG), http://www.denx.de/twiki/bim/view/DULG/Mannual
[5] 萬永波 張根寶 田澤 楊峰,基于ARM的嵌入式系統Bootloader啟動流程分析, 微計算機信息, 2005年,第21卷11-2期,90頁
評論