在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 用U-BOOT構建嵌入式系統(tǒng)的引導裝載程序

      用U-BOOT構建嵌入式系統(tǒng)的引導裝載程序

      作者: 時間:2006-04-20 來源:網絡 收藏
      摘要:BootLoader()是軟件開發(fā)的第一個環(huán)節(jié),它把操作和硬件平臺銜接在一起,對于的后續(xù)軟件開發(fā)十分重要,在整個開發(fā)中也占有相當大的比例。是當前比較流行、功能強大的BootLoader,可以支持多種體系結構。LH7A400是Sharp公司生產的一款基于ARM922T內核的32位RISC芯片,本文詳細介紹的功能、特點以及在LH7A400處理器上的移植過程。


      關鍵詞:BootLoader移植LH7A400ARM922T


      引言:

        本文以U-BOOT為例,介紹了如何在ARM9開發(fā)板上移植BootLoader的過程。LH7A400學習板是旋極公司推出的一款高性能開發(fā)板,其采用的處理器LH7A400是Sharp公司生產的一款基于ARM922T內核的32位RISC芯片。該芯片集成了高性能的32位RISC處理器核ARM922T(運算速度200MHz,總線速度100MHz),能使處理速度達到每秒220百萬條指令(MIPS),能耗為1.33mW/MIPS,可以在低電壓狀態(tài)下工作(核心1.8V,輸入/輸出3.3V),片內帶有鎖相回路(PLL)和低能耗核心。此外該芯片還包括:16KB高速緩存(Cache),存儲器管理單元(MMU),80KB靜態(tài)存儲器(SRAM),彩色液晶顯示控制器(LCD),直接存儲控制器(10通道DMA),異步串行口控制器(UART),同步串行口控制器(SSP),PCMCIA控制器,AC97聲音控制器,智能卡控制器,多媒體卡控制器,電池控制器,USB控制器和時鐘/供電管理器。值得一提的是,LH7A400是一款寬溫芯片,其工作溫度范圍為-40℃~+85℃(降低時鐘頻率),可廣泛應用于無線手持設備、智能電話、PDA、家庭娛樂控制器、PocketPC及各種工控設備。
      該學習板還包括如下硬件:由2片16位Flash(32MB)和2片16位的SDRAM(64M)構成32位寬的高速存儲器結構;10/100M自適應網絡芯片DM9000;Sharp3.5’TFTLCD彩屏;觸摸屏;USBHost/Device;CF卡插槽;全功能JTAG接口等。

      1U-BOOT簡介

        U-BOOT是由德國的工程師WolfgangDenk從8XXROM代碼發(fā)展而來的,它支持很多處理器,比如PowerPC、ARM、MIPS和x86。目前,U-BOOT源代碼在sourceforge網站的社區(qū)服務器中,Internet上有一群自由開發(fā)人員對其進行維護和開發(fā),它的項目主頁是http://sourceforge.net/projects/U-BOOT。U-BOOT的最新版本源代碼可以在Sourceforge的CVS服務器中匿名獲得。
      #cvs-d:pserver:[email protected]:/cvsroot/U-BOOTlogin
      #cvs-z6-d:pserver:[email protected]:/cvsroot/U-BOOTco-Pmodulename

      1.1U-BOOT源代碼目錄結構

      ◆board:和一些已有開發(fā)板有關的文件,比如Makefile和u-boot.lds等都和具體開發(fā)板的硬件和地址分配有關。
      ◆common:與體系結構無關的文件,實現各種命令的C文件。
      ◆cpu:CPU相關文件,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設置指令Cache和數據Cache等;interrupt.c設置系統(tǒng)的各種中斷和異常,比如快速中斷、開關中斷、時鐘中斷、軟件中斷、預取中止和未定義指令等;start.S是U-BOOT啟動時執(zhí)行的第一個文件,它主要是設置系統(tǒng)堆棧和工作方式,為進入C奠定基礎。
      ◆disk:disk驅動的分區(qū)處理代碼。
      ◆doc:文檔。
      ◆drivers:通用設備驅動,比如各種網卡、支持CFI的Flash、串口和USB總線等。
      ◆fs:支持文件系統(tǒng)的文件,U-BOOT現在支持cramfs、fat、fdos、jffs2和registerfs。
      ◆include:頭文件,還有對各種硬件平臺支持的匯編文件,系統(tǒng)的配置文件和對文件系統(tǒng)支持的文件。
      ◆net:與網絡有關的代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)的實現。
      ◆lib_arm:與ARM體系結構相關的代碼。
      ◆tools:創(chuàng)建S-Record格式文件和U-BOOTimages的工具。

      1.2U-BOOT的特點

        U-BOOT支持SCC/FEC以太網、OOTP/TFTP、IP和MAC的預置功能,這一點和其它BootLoader(如BLOB和RedBoot等)類似。但U-BOOT還具有一些特有的功能。

      ◆在線讀寫Flash、DOC、IDE、IIC、EEROM、RTC,其它的BootLoader根本不支持IDE和DOC的在線讀寫。
      ◆支持串行口kermit和S-record下載代碼,U-BOOT本身的工具可以把ELF32格式的可執(zhí)行文件轉換成為S-record格式,直接從串口下載并執(zhí)行。
      ◆識別二進制、ELF32、uImage格式的Image,對Linux有特別的支持。U-BOOT對Linux內核進一步封裝為uImage。封裝如下:
      #{CROSS_COMPILE}-objcopy-Obinary-R.note-R.comment-Svmlinuxlinux.bin
      #gzip-9linux.bin
      #tools/mkimage-Aarm-Olinux-Tkernel-Cgzip-a0xc0008000-e
      0xc0008000-n“Linux-2.4.20”-dlinux.bin.gz/tftpboot/uImage
      即在Linux內核鏡像vmLinux前添加了一個特殊的頭,這個頭在include/image.h中定義,包括目標操作系統(tǒng)的種類(比如Linux,VxWorks等)、目標CPU的體系機構(比如ARM、PowerPC等)、映像文件壓縮類型(比如gzip、bzip2等)、加載地址、入口地址、映像名稱和映像的生成時間。當系統(tǒng)引導時,U-BOOT會對這個文件頭進行CRC校驗,如果正確,才會跳到內核執(zhí)行。如下所示:
      WT-ARM9#bootm0xc1000000
      ##CheckingImageat0xc100000...
      ImageName:Linux-2.4.20
      Created:2004-07-0222:10:11UTC
      ImageType:ARMLinuxKernelImage(gzipcompressed)
      DataSize:550196Bytes=537kB=0MB
      LoadAddress:0xc0008000
      EntryPoint:0xc0008000
      VerifyingChecksum...OK
      UncompressingKernelImage………OK
      ◆單任務軟件運行環(huán)境。U-BOOT可以動態(tài)加載和運行獨立的應用程序,這些獨立的應用程序可以利用U-BOOT控制臺的I/O函數、內存申請和中斷服務等。這些應用程序還可以在沒有操作系統(tǒng)的情況下運行,是測試硬件系統(tǒng)很好的工具。
      ◆監(jiān)控(minitor)命令集:讀寫I/O,內存,寄存器、內存、外設測試功能等
      ◆腳本語言支持(類似BASH腳本)。利用U-BOOT中的autoscr命令,可以在U-BOOT中運行“腳本”。首先在文本文件中輸入需要執(zhí)行的命令,然后用tools/mkimage封裝,然后下載到開發(fā)板上,用autoscr執(zhí)行就可以了。
      ①編輯如下的腳本example.script。
      echo
      echoNetworkConfiguration:
      echo----------------------
      echoTarget:
      printenvipaddrhostname
      echo
      echoServer:
      printenvserveriprootpath
      echo
      ②用tools/mkimage對腳本進行封裝。
      #mkimage-AARM-Olinux-Tscript-Cnone-a0-e0-n"autoscrexamplescript"-dexample.script/tftpboot/example.img
      ImageName:autoscrexamplescript
      Created:WesSep801:15:022004
      ImageType:ARMLinuxScript(uncompressed)
      DataSize:157Bytes=0.15kB=0.00MB
      LoadAddress:0x00000000
      EntryPoint:0x00000000
      Contents:
      Image0:149Bytes=0kB=0MB
      ③在U-BOOT中加載并執(zhí)行這個腳本。
      WT-ARM9#tftp100000/tftpboot/example.img
      ARPbroadcast1
      TFTPfromserver10.0.0.2;ourIPaddressis10.0.0.99
      Filename’/tftpboot/TQM860L/example.img’.
      Loadaddress:0x100000
      Loading:#
      done
      Bytestransferred=221(ddhex)
      WT-ARM9#autoscr100000
      ##Executingscriptat00100000
      NetworkConfiguration:
      ----------------------
      Target:
      ipaddr=10.0.0.99
      hostname=arm
      Server:
      serverip=10.0.0.2
      rootpath=/nfsroot
      WT-ARM9#
      ◆支持WatchDog、LCDlogo和狀態(tài)指示功能等。如果系統(tǒng)支持splashscreen,U-BOOT啟動時,會把這個圖像顯示到LCD上,給用戶更友好的感覺。
      ◆支持MTD和文件系統(tǒng)。U-BOOT作為一種強大的BootLoader,它不僅支持MTD,而且可以在MTD基礎上實現多種文件系統(tǒng),比如cramfs、fat和jffs2等。
      ◆支持中斷。由于傳統(tǒng)的BootLoader都分為stage1和stage2,所以在stage2中添加中斷處理服務十分困難,比如BLOB;而U-BOOT是把兩個部分放到了一起,所以添加中斷服務程序就很方便。
      ◆詳細的開發(fā)文檔。由于大多數BootLoader都是開源項目,所以文檔都不是很充分。U-BOOT的維護人員意識到了這個問題,充分記錄了開發(fā)文檔,所以它的移植要比BLOB等缺少文檔的BootLoader方便。

      2對U-BOOT-1.1.0的修改

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

      2.1支持ARM-922T內核的代碼修改

      修改以下代碼,使U-BOOT支持arm-922t內核。
      ①在include/目錄下新建文件arm922t.h,內容如下:
      #ifndef__ARM922T_H__
      #define__ARM922T_H__
      #endif
      ②在include/目錄下新建文件wt-arm9.h,該文件描述了ARM922T中Timer、UART等寄存器的結構及若干宏定義。具體內容要參考相關處理器手冊。
      ③在cpu/目錄下新建目錄arm922t,將目錄arm920t下的內容復制后,參考手冊分別修改cpu.c、interrupts.c和serial.c,其它文件不修改。

      2.2開發(fā)板的支持

        建立自己開發(fā)板的目錄和相關文件。
      ①在include/configs目錄中添加頭文件lh7a400.h。這個文件是lh7a400開發(fā)板的配置文件,它包括開發(fā)板的CPU、系統(tǒng)時鐘、RAM、Flash系統(tǒng)及其它相關的配置信息。其格式可參考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設備的源代碼文件。由于不同開發(fā)板中Flash存儲器的種類各不相同,所以,修改flash.c時需參考相應的Flash芯片手冊。它包括如下幾個函數:
      unsignedlongflash_init(void),Flash初始化;
      voidflash_print_info(flash_info_t*info),打印Flash信息;
      intflash_erase(flash_info_t*info,ints_first,ints_last),Flash擦除;
      volatilestaticintwrite_dword(flash_info_t*info,ulongdest,ulongdata),Flash寫入;
      intwrite_buff(flash_info_t*info,uchar*src,ulongaddr,ulongcnt),從內存復制數據。
      ◆lhmemsetup.c。初始化時鐘、SMC控制器和SDRAM控制器。
      ◆wt-arm9.c。設置各種總線時鐘,打開數據Cache和指令Cache,并設置相關內存參數。
      ◆Makefile。直接拷貝board/smdk2400/Makefile,作如下修改:
      OBJS:=wt-arm9.oflash.olhmemsetup.o
      ◆u-boot.lds。設置U-BOOT中各個目標文件的連接地址,直接拷貝board/smdk2400/u-boot.lds,作如下修改:
      .text
      {
      cpu/arm922t/start.o(.text)
      *(.text)
      }

      2.3添加網口設備控制程序

        在drivers/目錄中添加網口設備控制程序dm9000.c和dm9000.h,其中dm9000.c主要包括以下函數:
      inteth_init(bd_t*bd),初始化網絡設備;
      voideth_halt(void),關閉網絡設備;
      inteth_send(volatilevoid*packet,intlen),發(fā)送數據包;
      inteth_rx(void)接收數據包。
      用中斷方式處理數據包的收發(fā),因此還定義了另外兩個函數:
      voidInitInterrupt(void),中斷初始化;
      voiddm9000_irq(void),中斷處理。
      以上兩個函數在cpu/arm922t/interrupts.c中被調用,最后在drivers/Makefile中加入dm9000.o。

      2.4修改Makefile

        在u-boot-1.1.0/Makefile中加入
      lh7a400_config:unconfig
      @./mkconfig$(@:_config=)armarm922twt-arm9
      其中“arm”是CPU的種類,arm922t是ARMCPU對應的代碼目錄,wt-arm9是自己開發(fā)板對應的目錄。
      交叉編譯器安裝在/opt/arm/3.3/bin/目錄下,所以把CROSS_COMPILE設置成相應的路徑:
      exportCROSS_COMPILE=/opt/arm/3.3/bin/arm-elf-

      2.5生成目標文件

        先運行makeclean,
      [[email protected]]$makeclean
      然后運行makelh7a400_config,
      [[email protected]]$makelh7a400_config
      Configuringforlh7a400board...
      再運行make,
      [[email protected]]$make
      之后會生成三個文件:
      u-boot――ELF格式的文件,可以被大多數Debug程序識別;
      u-boot.bin――二進制bin文件,純粹的U-BOOT二進制執(zhí)行代碼,不保存ELF格式和調試信息。這個文件一般用于燒錄到用戶開發(fā)板中;
      u-boot.srec――MotorolaS-Record格式,可以通過串行口下載到開發(fā)板中。

      2.6測試

        通過JTAG口將u-boot.bin燒寫到Flash的零地址,復位后執(zhí)行u-boot。若運行正常,會從串口返回如下信息:
      U-Boot1.1.0(Aug212004?18:44:37)
      U-BooTcode:C3F80000->C3FA51A0BSS:->C3FA96EC
      IRQStack:c3f1ff7c
      FIQStack:c3f1ef7c
      RAMConfiguration:
      Bank#0:c00000008MB
      Bank#1:c10000008MB
      ……
      Flash:32MB
      In:serial
      Out:serial
      Err:serial
      WT-ARM9#

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

      結語

        BootLoader是操作系統(tǒng)和硬件的樞紐,它為操作系統(tǒng)內核的啟動提供了必要的條件和參數。在移植過程中,開發(fā)人員除了要掌握BootLoader的結構和工作流程外,還要對相關硬件有一定的了解。目前,筆者移植的U-BOOT已經能夠穩(wěn)定地運行在開發(fā)板上,而且可以通過Flash和網絡加載內核和文件系統(tǒng),為后續(xù)開發(fā),特別是驅動程序的開發(fā)奠定了良好的基礎。
      linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


      評論


      相關推薦

      技術專區(qū)

      關閉