機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
用U-BOOT構(gòu)建嵌入式系統(tǒng)的引導(dǎo)裝載程序
用U-BOOT構(gòu)建嵌入式系統(tǒng)的引導(dǎo)裝載程序
 更新時間:2008-8-18 14:46:15  點擊數(shù):64
【字體: 字體顏色

  ## Checking Image at 0xc100000 ...
  Image Name: Linux-2.4.20
  Created: 2004-07-02 22:10:11 UTC
  Image Type: ARM Linux Kernel Image (gzip compressed)
  Data Size: 550196 Bytes = 537 kB = 0 MB
  Load Address: 0xc0008000
  Entry Point: 0xc0008000
  Verifying Checksum ... OK
  Uncompressing Kernel Image ……… OK

  ◆ 單任務(wù)軟件運行環(huán)境。U-BOOT可以動態(tài)加載和運行獨立的應(yīng)用程序,這些獨立的應(yīng)用程序可以利用U-BOOT控制臺的I/O函數(shù)、內(nèi)存申請和中斷服務(wù)等。這些應(yīng)用程序還可以在沒有操作系統(tǒng)的情況下運行,是測試硬件系統(tǒng)很好的工具。
  ◆ 監(jiān)控(minitor)命令集:讀寫I/O,內(nèi)存,寄存器、內(nèi)存、外設(shè)測試功能等 
  ◆ 腳本語言支持(類似BASH腳本)。利用U-BOOT中的autoscr命令,可以在U-BOOT中運行“腳本”。首先在文本文件中輸入需要執(zhí)行的命令,然后用tools/mkimage封裝,然后下載到開發(fā)板上,用autoscr執(zhí)行就可以了。

 、  編輯如下的腳本example.script。
  echo
  echo Network Configuration:
  echo ----------------------
  echo Target:
  printenv ipaddr hostname
  echo
  echo Server:
  printenv serverip rootpath
  echo

  ②  用tools/mkimage對腳本進行封裝。
  # mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n "autoscr example script" -d example.script /tftpboot/example.img
  Image Name: autoscr example script
  Created: Wes Sep 8 01:15:02 2004
  Image Type: ARM Linux Script (uncompressed)
  Data Size: 157 Bytes = 0.15 kB = 0.00 MB
  Load Address: 0x00000000
  Entry Point: 0x00000000
  Contents:
  Image 0: 149 Bytes = 0 kB = 0 MB

 、  在U-BOOT中加載并執(zhí)行這個腳本。
  WT-ARM9# tftp 100000 /tftpboot/example.img
  ARP broadcast 1
  TFTP from server 10.0.0.2; our IP address is 10.0.0.99
  Filename '/tftpboot/TQM860L/example.img'.
  Load address: 0x100000
  Loading: #
  done
  Bytes transferred = 221 (dd hex)
  WT-ARM9# autoscr 100000
  ## Executing script at 00100000
  Network Configuration:
  ----------------------
  Target:
  ipaddr=10.0.0.99
  hostname=arm
  Server:
  serverip=10.0.0.2
  rootpath=/nfsroot
  WT-ARM9#

  ◆ 支持WatchDog、LCD logo和狀態(tài)指示功能等。如果系統(tǒng)支持splash screen,U-BOOT啟動時,會把這個圖像顯示到LCD上,給用戶更友好的感覺。
  ◆ 支持MTD和文件系統(tǒng)。U-BOOT作為一種強大的BootLoader,它不僅支持MTD,而且可以在MTD基礎(chǔ)上實現(xiàn)多種文件系統(tǒng),比如cramfs、fat和jffs2等。
  ◆ 支持中斷。由于傳統(tǒng)的BootLoader都分為stage1和stage2,所以在stage2中添加中斷處理服務(wù)十分困難,比如BLOB;而U-BOOT是把兩個部分放到了一起,所以添加中斷服務(wù)程序就很方便。
  ◆ 詳細的開發(fā)文檔。由于大多數(shù)BootLoader都是開源項目,所以文檔都不是很充分。U-BOOT的維護人員意識到了這個問題,充分記錄了開發(fā)文檔,所以它的移植要比BLOB等缺少文檔的BootLoader方便。

2  對U-BOOT-1.1.0的修改

  為了使U-BOOT-1.1.0支持新的開發(fā)板,一種簡便的做法是在U-BOOT已經(jīng)支持的開發(fā)板中選擇一種接近的進行修改。由于U-BOOT-1.10不支持ARM-922T內(nèi)核,所以選擇基于ARM-920T內(nèi)核的smdk2400為模板。相關(guān)的源代碼在board/smdk2400/下。

2.1  支持ARM-922T內(nèi)核的代碼修改

修改以下代碼,使U-BOOT支持arm-922t內(nèi)核。

 、  在include/目錄下新建文件arm922t.h,內(nèi)容如下:

  #ifndef __ARM922T_H__
  #define __ARM922T_H__
  #endif

 、  在include/目錄下新建文件wt-arm9.h,該文件描述了ARM922T中Timer、UART等寄存器的結(jié)構(gòu)及若干宏定義。具體內(nèi)容要參考相關(guān)處理器手冊。

  ③  在cpu/目錄下新建目錄arm922t,將目錄arm920t下的內(nèi)容復(fù)制后,參考手冊分別修改cpu.c、interrupts.c和serial.c,其它文件不修改。

2.2  開發(fā)板的支持

  建立自己開發(fā)板的目錄和相關(guān)文件。

 、  在include/configs目錄中添加頭文件lh7a400.h。這個文件是lh7a400開發(fā)板的配置文件,它包括開發(fā)板的CPU、系統(tǒng)時鐘、RAM、Flash系統(tǒng)及其它相關(guān)的配置信息。其格式可參考include/configs/smdk2400.h。

 、  在board/目錄下新建wt-arm9目錄,創(chuàng)建如下文件:flash.c、lhmemsetup.c、wt- arm9.c、Makefile和u-boot.lds。

  ◆ flash.c。U-BOOT 讀、寫和刪除Flash設(shè)備的源代碼文件。由于不同開發(fā)板中Flash存儲器的種類各不相同,所以,修改flash.c時需參考相應(yīng)的Flash芯片手冊。它包括如下幾個函數(shù):

  unsigned long flash_init (void ),Flash初始化;
  void flash_print_info (flash_info_t *info),打印Flash信息;
  int flash_erase (flash_info_t *info, int s_first, int s_last),Flash擦除;
  volatile static int write_dword (flash_info_t *info, ulong dest, ulong data),Flash寫入;
  int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt),從內(nèi)存復(fù)制數(shù)據(jù)。

  ◆ lhmemsetup.c。初始化時鐘、SMC控制器和SDRAM控制器。
  ◆ wt-arm9.c。設(shè)置各種總線時鐘,打開數(shù)據(jù)Cache和指令Cache,并設(shè)置相關(guān)內(nèi)存參數(shù)。
  ◆ Makefile。直接拷貝board/smdk2400/Makefile,作如下修改:
OBJS := wt-arm9.o flash.o lhmemsetup.o
  ◆ u-boot.lds。設(shè)置U-BOOT中各個目標(biāo)文件的連接地址,直接拷貝 board/smdk2400/u-boot.lds,作如下修改:

  .text
  {
  cpu/arm922t/start.o (.text)
    *(.text)
  }

2.3  添加網(wǎng)口設(shè)備控制程序

  在drivers/目錄中添加網(wǎng)口設(shè)備控制程序dm9000.c 和dm9000.h,其中dm9000.c 主要包括以下函數(shù):

  int eth_init (bd_t *bd),初始化網(wǎng)絡(luò)設(shè)備;
  void eth_halt (void),關(guān)閉網(wǎng)絡(luò)設(shè)備;
  int eth_send (volatile void *packet,int len),發(fā)送數(shù)據(jù)包;
  int eth_rx (void) 接收數(shù)據(jù)包。
  用中斷方式處理數(shù)據(jù)包的收發(fā),因此還定義了另外兩個函數(shù):
  void InitInterrupt (void) ,中斷初始化;
  void dm9000_irq (void) ,中斷處理。
  以上兩個函數(shù)在cpu/arm922t/interrupts.c中被調(diào)用,最后在drivers/Makefile中加入dm9000.o。

2.4  修改Makefile

  在u-boot-1.1.0/Makefile中加入

  lh7a400_config : unconfig @./mkconfig $(@:_config=) arm arm922t wt-arm9

  其中“arm”是CPU的種類, arm922t 是ARM CPU對應(yīng)的代碼目錄,wt-arm9是自己開發(fā)板對應(yīng)的目錄。

  交叉編譯器安裝在/opt/arm/3.3/bin/目錄下,所以把CROSS_COMPILE設(shè)置成相應(yīng)的路徑:

  export CROSS_COMPILE = /opt/arm/3.3/bin/arm-elf-

2.5  生成目標(biāo)文件

  先運行make clean,
  [zeng@localhost u-boot-1.1.0]$make clean
  然后運行make lh7a400_config,
  [zeng@localhost u-boot-1.1.0]$ make lh7a400_config
  Configuring for lh7a400 board...
  再運行make,
  [zeng@localhost u-boot-1.1.0]$make
  之后會生成三個文件:
  u-boot——ELF格式的文件,可以被大多數(shù)Debug程序識別;
  u-boot.bin——二進制bin文件,純粹的U-BOOT二進制執(zhí)行代碼,不保存ELF格式和調(diào)試信息。這個文件一般用于燒錄到用戶開發(fā)板中;
  u-boot.srec——Motorola S-Record格式,可以通過串行口下載到開發(fā)板中。

2.6  測試

  通過JTAG口將u-boot.bin燒寫到Flash的零地址,復(fù)位后執(zhí)行u-boot。若運行正常,會從串口返回如下信息:

  U-Boot 1.1.0 (Aug 21 2004 ?18:44:37)
  U-BooT code: C3F80000 -> C3FA51A0 BSS: -> C3FA96EC
  IRQ Stack: c3f1ff7c
  FIQ Stack: c3f1ef7c
  RAM Configuration:
  Bank #0: c0000000 8 MB
  Bank #1: c1000000 8 MB
  ……
  Flash: 32 MB
  In: serial
  Out: serial
  Err: serial
  WT-ARM9 #

  輸入help得到所有命令列表,help command 列出該命令的功能。緊接著測試Flash和網(wǎng)卡,如果都正常工作的話,表明移植U-BOOT的工作基本完成,可以接著調(diào)試內(nèi)核和文件系統(tǒng)。

結(jié)語

  BootLoader是操作系統(tǒng)和硬件的樞紐,它為操作系統(tǒng)內(nèi)核的啟動提供了必要的條件和參數(shù)。在移植過程中,開發(fā)人員除了要掌握BootLoader的結(jié)構(gòu)和工作流程外,還要對相關(guān)硬件有一定的了解。目前,筆者移植的U-BOOT已經(jīng)能夠穩(wěn)定地運行在開發(fā)板上,而且可以通過Flash和網(wǎng)絡(luò)加載內(nèi)核和文件系統(tǒng),為后續(xù)開發(fā),特別是驅(qū)動程序的開發(fā)奠定了良好的基礎(chǔ)。

參考文獻

1  杜春雷. ARM體系結(jié)構(gòu)與編程. 北京:清華大學(xué)出版社,2003
2  LH7A400 Universal SOC Advance User’s Guide: SHARP Inc,2002
3  Karim Yaghmour. Building Embedded Linux System. O’Reilly, 2004

  • 上一篇: 低功耗FPGA時代的來臨——訪QuickLogic公司邏輯產(chǎn)品總監(jiān)Brian Faith先生
  • 下一篇: 機會與變數(shù)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1