• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于S3C2440的嵌入式引導(dǎo)程序的開發(fā)

      2010-08-15 00:47:58華中農(nóng)業(yè)大學工學院
      湖北農(nóng)機化 2010年6期
      關(guān)鍵詞:源碼開發(fā)板內(nèi)核

      華中農(nóng)業(yè)大學工學院 王 龍

      嵌入式Linux在IT界已經(jīng)迅猛發(fā)展,使用Linux進行嵌入式產(chǎn)品開發(fā)有一個很大的優(yōu)勢,就是開發(fā)資源豐富,且成本低廉,嵌入式Linux操作系統(tǒng)越來越受到重視,其應(yīng)用也越來越廣泛。而嵌入式Linux系統(tǒng)開發(fā)離不開引導(dǎo)程序,這個引導(dǎo)程序就叫作Bootloader。引導(dǎo)程序是嵌入式Linux系統(tǒng)開發(fā)不可或缺的部分,在嵌人式Linux中,內(nèi)核在啟動前進行的首要操作就是啟動引導(dǎo)程序。U-Boot是構(gòu)建嵌入式 Linux引導(dǎo)程序的工具,用它作為 Bootloader簡單、方便,而且設(shè)置靈活。

      1 Bootloader介紹

      對于計算機系統(tǒng)來說,從開機到操作系統(tǒng)啟動需要一個引導(dǎo)過程。嵌入式linux系統(tǒng)同樣離不開引導(dǎo)程序,這個引導(dǎo)程序就叫作Bootloader。

      簡單地說,Bootloader就是在操作系統(tǒng)內(nèi)核運行之前運行的一段程序,它類似于PC機中的BIOS程序。通過這段程序,可以完成硬件設(shè)備的初始化,并建立內(nèi)存空間的映射圖的功能,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),為最終調(diào)用系統(tǒng)內(nèi)核做好準備。通常,Bootloader是嚴重地依賴于硬件實現(xiàn)的,特別是在嵌入式中。因此,在嵌入式世界里建立一個通用的Bootloader幾乎是不可能的。

      2 U-Boot概述

      U-Boot(Universal Bootloader),是遵循 GPL 條款的開放源碼項目。它是從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來。其源碼目錄、編譯形式與 Linux內(nèi)核很相似,事實上,不少U-Boot源碼就是相應(yīng)的Linux內(nèi)核源程序的簡化,尤其是一些設(shè)備的驅(qū)動程序,這從U-Boot源碼的注釋中能體現(xiàn)這一點。但是U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo),而且還支持 NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等嵌入式操作系統(tǒng)。其目前要支持的目標操作系統(tǒng)是 OpenBSD、NetBSD、FreeBSD、4.4BSD、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、VxWorks,LynxOS、pSOS、QNX、RTEMS、ARTOS。這是 U-Boot中 Universal的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。這兩個特點正是U-Boot項目的開發(fā)目標,即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。就目前為止,U-Boot對PowerPC系列處理器支持最為豐富,對Linux的支持最完善。

      3 U-Boot的開發(fā)與設(shè)計

      3.1 U-Boot的源碼結(jié)構(gòu)

      從網(wǎng)上下載得到的 U-Boot源代碼包,如 UBoot-1.3.3.tar.bz2,經(jīng)過解壓就可以得到全部的U-Boot源程序,其頂層目錄下有30個子目錄,分別存放和管理不同的源程序。以下是其中較為重要的幾個目錄:

      board:該目錄下存放各廠家生產(chǎn)的開發(fā)板型號。

      cpu:該目錄下存放U-Boot所支持的cpu類型及型號,cpu相關(guān)的文件主要是初始化一個執(zhí)行環(huán)境,包括中斷的初始化等。

      fs:該目錄下存放U-Boot所支持的文件系統(tǒng)。

      include:該目錄下存放各開發(fā)板頭文件和配置文件,因此只需修改此文件就可以配置目標板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。

      drivers:該目錄下存放通用設(shè)備的驅(qū)動程序。

      3.2 交叉編譯環(huán)境的建立

      交叉編譯環(huán)境主要用于跨平臺的源碼編譯,對于ARM平臺有好多源碼需要編譯,如內(nèi)核、驅(qū)動程序、應(yīng)用程序、Bootloader等。所以在PC環(huán)境中建立交叉編譯是必要的。

      通常,建立交叉編譯環(huán)境的方法有以下幾種:

      (1)分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈,該方法比較困難。

      (2)通過Crosstool腳本工具來一次編譯生成交叉編譯工具鏈。

      (3)直接從網(wǎng)上下載已經(jīng)制作好的交叉編譯工具鏈。該方法最為簡單,但是局限性比較大。建立好交叉編譯工具鏈后,在/etc/bashrc文件的最后加上以下程序:exportPATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin:$PATH這樣就可以使建立的交叉編譯工具鏈成為系統(tǒng)默認的交叉編譯工具了。但是對于不同的編譯對象,有可能出現(xiàn)版本不匹配的問題,經(jīng)檢驗用crosstool-0.43.tar.gz建立的交叉編譯環(huán)境編譯U-Boot-1.3.3.tar.bz2,就可避免此問題的發(fā)生。

      3.3 U-Boot的編譯

      U-Boot是由GCC和Makefile組織編譯的。首先在頂層的 Makefile下設(shè)置開發(fā)板的定義,然后遞歸到各級目錄下Makefile,最后由編譯過的程序鏈接成可以下載到開發(fā)板的U-Boot映象。

      3.3.1 頂層Makefile

      每個開發(fā)板在頂層Makefile中都有定義,例如:

      smdk2410_config:unconfig

      @$ (MKCONFIG)$ (@:_config=)armarm920tsmdk2410 NULL s3c24x0

      這是smdk2410開發(fā)板的定義,其中變量arm,arm920t,smdk2410。S3C24x0含義分別為:

      ARCH:arm;CUP :arm920t;

      BOARD:smdk2410;

      SOC:S3C24x0;

      NULL的位置是廠商 (這里沒有定義)。

      當要編譯S3C2440的U-Boot時,在Makefile文件中沒有定義,所以得添加開發(fā)板配置信息,依照smdk2410,其配置如下:

      tcs3c2440_config:unconfig

      @$ (MKCONFIG)$ (@:_config=)armarm920tsmdk2410 NULL s3c24x0

      另外,在頂層 Makefile中還有交叉編譯器和目標平臺的定義,在文件中必須根據(jù)目標平臺作相應(yīng)的配置所示:

      ifeq($(ARCH),arm)

      CROSS-C0MPILE=arm-linux-

      說明當目標平臺為arm時,用amn-linux-gcc交叉編譯器編譯。

      3.3.2 開發(fā)板配置文件

      創(chuàng)建一個新目錄用來存放開發(fā)板配置文件,這里以smdk2410開發(fā)板為原型,執(zhí)行如下命令:

      #cdboard

      #cprsmdk2410 tcs3c2410

      #cdtcs3c2440

      #ls

      #config.mkflash.clowlevel_init.S Makefilesmdk2410.cu-boot.1ds

      將smdk2410.c改成tcs3c2440.c

      #mvsmdk2410 tes3c2440

      修改Makfefile,將其中的COBJS變量改成COBJS:=tcs3c2440.oflash.o。

      在編譯U-Boot時,需要頭文件的支持,因此必須為開發(fā)板配置頭文件:

      #cdinclude/configs

      #cpsmdk2410.htcs3c2440.h

      至此,開發(fā)板文件就暫時配置好了,這時可以直接在終端鍵入make來檢驗上述建立的交叉編譯環(huán)境是否可以編譯這個版本的U-Boot。

      3.4 U-Boot移植配置

      如果以 SMDK2410為模板移植,必須知道目標硬件平臺與它之間的區(qū)別,然后再對其做相應(yīng)的修改。從SMDK2410到S3C2440主要考慮NAND FLASH,由于S3C2440采用的啟動方式是NANDFLASH啟動,因此將SMDK2410的FLASH啟動改為NAND FLASH啟動。

      (1)將start.s位于cup/arm920t下面,其主要作用是初始化硬件環(huán)境,把U-Boot從FLASH加載到SDRAM中。在此需要修改start.s內(nèi)容以實現(xiàn)U-Boot從NAND FLASH啟動。

      (2)為了實現(xiàn)讀取 NAND FLASH的功能,需要拷貝VlVI中的讀 NAND FLASH文件 nand_read.c到/board/tes3c2440下,并將nand_read.c添加到/board/Makefile的編譯目標文件中,并做如下修改:

      OBJS:=tekkaman2440.onand_read.oflash.o

      (3)修改/include/configs/tes3c2440.h,添加NANDFLASH相關(guān)寄存器的定義,以及對它的讀寫操作實現(xiàn)的具體過程。

      (4)每次NAND FLASH啟動都需要進行初始化,所以需要在/board/tcs3c2440/tcs3c2440.c文件中添加對其的初始化函數(shù)nand_init()函數(shù)。

      3.5 編譯U-Boot并下載到開發(fā)板執(zhí)行

      配置好上述文件后,退到頂層 Makefile所在目錄執(zhí)行命令:

      #make

      在該目錄下會生成System.map(uboot映象符號表)、uboot(uboot映象ELF格式)、u-boot.bin(uboot映象二進制格式)、u-boot.srec(uboot映象S-Record格式)4個文件,其中后3個文件都可以下載到 NAND FLASH中,一般將 uboot.bin文件通過并口-JTAG下載到開發(fā)板即可。然后重新啟動開發(fā)板,嵌入式開發(fā)板最終成功從NANDFLASH啟動。

      4 總結(jié)

      近年來由于U-Boot開放源代碼的特點和它支持各類處理器的廣泛程度,使其備受嵌入式開發(fā)人員青睞。隨著嵌入式硬件的發(fā)展,U-Boot支持的外圍器件也越來越多。本文以添加U-Boot的NANDFLASH啟動為例,使U-Boot實現(xiàn)了從NANDFLASH啟動的功能,為特定的目標平臺移植UBoot提供了一般方法。

      [1]楊水清,張劍,施云飛等編著.ARM嵌入式linux系統(tǒng)開發(fā)技術(shù)詳解 [M].電子工業(yè)出版社.

      [2]李亞鋒,歐盛文.Hnux系統(tǒng)開發(fā)從入門到精通[M].北京:清華大學出版社,2007.

      [3]鳥哥的Linux私房菜基礎(chǔ)學習篇 [M].2版.北京:科學出版社,2005.

      [4]杜春雷.ARM體系結(jié)構(gòu)與編程 [M].北京:清華大學出版社,2008.

      [5]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊 [M].北京:人民郵電出版社.2008.

      [6]魏永明,耿丘,鐘書毅.Linux設(shè)備驅(qū)動程序 [M].第3版.北京:中國電力出版社,2006.

      猜你喜歡
      源碼開發(fā)板內(nèi)核
      基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
      基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測方法
      計算機時代(2023年6期)2023-06-15 17:49:09
      萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      企業(yè)如何保護源碼
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護機制研究
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      淺析單片機開發(fā)板的設(shè)計與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實驗課程改革
      計算機教育(2016年4期)2016-05-20 02:36:05
      遂昌县| 永年县| 永春县| 湄潭县| 应用必备| 琼结县| 平江县| 泰来县| 陕西省| 岳池县| 喀喇沁旗| 全南县| 巴马| 临沂市| 正阳县| 阿尔山市| 宁远县| 通化市| 昌都县| 洛南县| 余干县| 康平县| 龙江县| 石景山区| 永州市| 丰城市| 报价| 江华| 潜江市| 穆棱市| 襄樊市| 嘉定区| 双江| 金华市| 思茅市| 大新县| 遵义县| 西林县| 高密市| 襄垣县| 河东区|