国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

嵌入式Linux在IT界已經(jīng)迅猛發(fā)展,使用Linux進(jìn)行嵌入式產(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)核在啟動前進(jìn)行的首要操作就是啟動引導(dǎo)程序。U-Boot是構(gòu)建嵌入式 Linux引導(dǎo)程序的工具,用它作為 Bootloader簡單、方便,而且設(shè)置靈活。

1 Bootloader介紹

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

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

2 U-Boot概述

U-Boot(Universal Bootloader),是遵循 GPL 條款的開放源碼項目。它是從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來。其源碼目錄、編譯形式與 Linux內(nèi)核很相似,事實(shí)上,不少U-Boot源碼就是相應(yīng)的Linux內(nèi)核源程序的簡化,尤其是一些設(shè)備的驅(qū)動程序,這從U-Boot源碼的注釋中能體現(xiàn)這一點(diǎn)。但是U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo),而且還支持 NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等嵌入式操作系統(tǒng)。其目前要支持的目標(biāo)操作系統(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等諸多常用系列的處理器。這兩個特點(diǎn)正是U-Boot項目的開發(fā)目標(biāo),即支持盡可能多的嵌入式處理器和嵌入式操作系統(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ā)板頭文件和配置文件,因此只需修改此文件就可以配置目標(biāo)板的參數(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)默認(rèn)的交叉編譯工具了。但是對于不同的編譯對象,有可能出現(xiàn)版本不匹配的問題,經(jīng)檢驗(yàn)用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的位置是廠商 (這里沒有定義)。

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

tcs3c2440_config:unconfig

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

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

ifeq($(ARCH),arm)

CROSS-C0MPILE=arm-linux-

說明當(dāng)目標(biāo)平臺為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來檢驗(yàn)上述建立的交叉編譯環(huán)境是否可以編譯這個版本的U-Boot。

3.4 U-Boot移植配置

如果以 SMDK2410為模板移植,必須知道目標(biāo)硬件平臺與它之間的區(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)容以實(shí)現(xiàn)U-Boot從NAND FLASH啟動。

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

OBJS:=tekkaman2440.onand_read.oflash.o

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

(4)每次NAND FLASH啟動都需要進(jìn)行初始化,所以需要在/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映象二進(jìn)制格式)、u-boot.srec(uboot映象S-Record格式)4個文件,其中后3個文件都可以下載到 NAND FLASH中,一般將 uboot.bin文件通過并口-JTAG下載到開發(fā)板即可。然后重新啟動開發(fā)板,嵌入式開發(fā)板最終成功從NANDFLASH啟動。

4 總結(jié)

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

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

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

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

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

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

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

猜你喜歡
源碼開發(fā)板內(nèi)核
面向數(shù)據(jù)可靠傳輸?shù)母咦g碼率帶反饋的LT碼
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
國內(nèi)一站式工程設(shè)備租賃平臺眾能聯(lián)合完成C2、C3兩輪融資
淺談開源操作系統(tǒng)的歷史
企業(yè)如何保護(hù)源碼
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
Linux內(nèi)核mmap保護(hù)機(jī)制研究
淺析單片機(jī)開發(fā)板的設(shè)計與制作
微生物內(nèi)核 生態(tài)型農(nóng)資
ARM宣布mbed Enabled Freescale FRDM—K64F開發(fā)板通過微軟認(rèn)證