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

?

基于ARM9的嵌入式linux系統(tǒng)移植

2011-10-26 03:27:38李勝琴許巖
中國(guó)科技信息 2011年7期
關(guān)鍵詞:編譯器開發(fā)板內(nèi)核

李勝琴 許巖

西北師范大學(xué)數(shù)學(xué)與信息科學(xué)學(xué)院, 甘肅 蘭州 730070

基于ARM9的嵌入式linux系統(tǒng)移植

李勝琴 許巖

西北師范大學(xué)數(shù)學(xué)與信息科學(xué)學(xué)院, 甘肅 蘭州 730070

對(duì)要裝載到ARM9系列芯片開發(fā)板上的linux系統(tǒng)進(jìn)行定制和裁減,嵌入式linux系統(tǒng)移植主要分為三個(gè)方面:(1)在開發(fā)板上裝載用于引導(dǎo)和硬件初始化的u—B00T程序。(2)linux系統(tǒng)kernel的移植。(3)linux文件系統(tǒng)制作。實(shí)驗(yàn)結(jié)果表明:實(shí)現(xiàn)了linux系統(tǒng)到定制目標(biāo)平臺(tái)的移植。

ARM9;Linux;嵌入式系統(tǒng);linux系統(tǒng)移植

引言

嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。[1]嵌入式Linux系統(tǒng)資源有限、專用性強(qiáng),在部署到嵌入式平臺(tái)之前必須對(duì)其進(jìn)行裁剪、定制,減小嵌入式Linux系統(tǒng)體積,提高運(yùn)行效率。

由于Linux具有內(nèi)核小、效率高、源代碼開放和強(qiáng)大的網(wǎng)絡(luò)支持等一系列獨(dú)特優(yōu)勢(shì),嵌入式Linux將在未來的嵌入式發(fā)展中占最大的優(yōu)勢(shì),其巨大的市場(chǎng)潛力已經(jīng)吸引了眾多的廠商進(jìn)入這一領(lǐng)域。目前,國(guó)外的著名廠商,例如IBM、DELL等,幾乎都在嵌入式Linux操作系統(tǒng)的研究、開發(fā)和推廣方面投入了巨資。國(guó)內(nèi)有一些公司,例如華恒、共創(chuàng)軟件聯(lián)盟、中軟、紅旗、萬禾等,也開始積極從事嵌入式Linux操作系統(tǒng)的研究、開發(fā)和推廣。隨著微電子技術(shù)的不斷創(chuàng)新和發(fā)展,嵌入式系統(tǒng)(Embedded Systems)作為計(jì)算機(jī)應(yīng)用的一個(gè)重要領(lǐng)域,已深入到社會(huì)的方方面面,越來越被人們所關(guān)注。嵌入式系統(tǒng)出現(xiàn)于60年代晚期,它最初被用于控制機(jī)電電話交換機(jī),如今已經(jīng)廣泛地應(yīng)用于工業(yè)制造、過程控制、通訊、航空航海、軍事裝備等相關(guān)行業(yè),而且深入到信息家電、娛樂、社會(huì)文化等各個(gè)領(lǐng)域,掀起了一場(chǎng)數(shù)字化的技術(shù)革命。隨著多媒體技術(shù)與Internet應(yīng)用的迅速普及,消費(fèi)電子(Consumptive electron)、計(jì)算機(jī)(Computer)、通訊(Comunication)等3C一體化趨勢(shì)日趨明顯,極大地推進(jìn)了嵌入式技術(shù)的發(fā)展,使嵌入式技術(shù)再度成為研究與應(yīng)用的熱點(diǎn)。

1 交叉編譯環(huán)境的創(chuàng)建

基于Linux 操作系統(tǒng)的應(yīng)用開發(fā)環(huán)境一般是由目標(biāo)系統(tǒng)硬件(開發(fā)板) 和宿主PC機(jī)所構(gòu)成。目標(biāo)硬件開發(fā)板用于運(yùn)行操作系統(tǒng)和系統(tǒng)應(yīng)用軟件,而目標(biāo)板所用到的操作系統(tǒng)的內(nèi)核編譯、應(yīng)用程序的開發(fā)和調(diào)試則需要通過宿主PC 機(jī)來完成(所以稱為交叉編譯) 。雙方之間一般通過串口、并口或以太網(wǎng)接口建立連接關(guān)系。交叉編譯工具是嵌入式開發(fā)的基礎(chǔ),完善的工具鏈可以保證項(xiàng)目開發(fā)的進(jìn)度和質(zhì)量。交叉編譯工具可以通過兩種方式獲得,一種是直接從網(wǎng)上下載已經(jīng)制作好的交叉編譯工具,另一種就是自己制作交叉編譯工具,制作方式是:(1)下載源碼,準(zhǔn)備補(bǔ)??;(2)設(shè)置環(huán)境變量,指定交叉編譯器的安裝目錄;(3)內(nèi)核頭文件的設(shè)置;(4)二進(jìn)制工具包binutils的設(shè)置;(5)編譯器gcc的設(shè)置;(6)C鏈接庫glibc的設(shè)置;最后是完整編譯器的設(shè)置。本文用的交叉編譯工具為arm-linux-gcc4.0.2,將交叉編譯器解壓到相應(yīng)的目錄下,命令為# tar-zxcf armlinuxgcc4.0.2.tar.bz2,要注意解壓后的路徑。

本文所使用的嵌入式系統(tǒng)目標(biāo)平臺(tái)是SamSung公司基于ARM920T 內(nèi)核的嵌入式處理S3C2410,ARM2410開發(fā)板支持WINCE、Linux、UCOS以及NUCLEUS嵌入操作系統(tǒng)。面向手持式設(shè)備以及高性價(jià)比,低功耗的應(yīng)用,內(nèi)部集成LCD,USB等控制器。Linux內(nèi)核采用2.6版本的內(nèi)核,它吸收了一些新技術(shù),在性能,可靠性和可擴(kuò)展性方面有較大提高。本設(shè)計(jì)基于fedora -12進(jìn)行開發(fā)。

2 嵌入式linux系統(tǒng)組成

嵌入式Linux系統(tǒng)從軟件方面來說主要包括以下幾個(gè)部分,Bootloader(引導(dǎo)程序),內(nèi)核啟動(dòng)參數(shù),內(nèi)核(kernel)和根文件系統(tǒng)四個(gè)部分,在Flash中存儲(chǔ)的示意圖如圖1所示。[2]

圖1 系統(tǒng)組成

2.1 bootloader的移植

Bootloader指系統(tǒng)啟動(dòng)后,在操作系統(tǒng)內(nèi)核之前運(yùn)行的一小段程序。Bootloader主要完成硬件檢測(cè)和系統(tǒng)引導(dǎo),操作系統(tǒng)的主要功能之一是管理系統(tǒng)硬件設(shè)備,屏蔽硬件細(xì)節(jié),向其上的應(yīng)用提供標(biāo)準(zhǔn)接口,易于應(yīng)用程序的編寫和移植。我們可以初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,從而為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader是依賴于硬件而實(shí)現(xiàn)的,但是不管事什么樣的開發(fā)板,都是遵循以下流程:先關(guān)閉中斷,設(shè)置cpu的速度和時(shí)鐘頻率,初始化RAM,將代碼從FLASH中復(fù)制到RAM中,設(shè)置堆棧,這樣就搭建了一個(gè)C運(yùn)行環(huán)境,之后跳轉(zhuǎn)到C入口點(diǎn),就是初始化驅(qū)動(dòng)設(shè)備,設(shè)置linux內(nèi)核參數(shù),啟動(dòng)linux。[3]下載u-boot壓縮包,經(jīng)過解壓修改和設(shè)置一些參數(shù)后,通過JTAG接口燒寫到開發(fā)板的Flash 中。

2.2 linux內(nèi)核的移植

linux內(nèi)核源碼樹[4]

/include子目錄包含了建立內(nèi)核代碼時(shí)所需的大部分包含文件,這個(gè)模塊利用其他模塊重建內(nèi)核。

/init子目錄包含了內(nèi)核的初始化代碼,這是內(nèi)核工作開始的起點(diǎn)。

/arch子目錄包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼,如i386和alpha。

/drivers子目錄包含了內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序,如塊設(shè)備和SCSI設(shè)備。

/fs子目錄包含了所有的文件系統(tǒng)的代碼,如ext2和vfat等。

/net子目錄包含了內(nèi)核的聯(lián)網(wǎng)代碼。

/mm子目錄包含了所有內(nèi)存管理代碼。

/ipc子目錄包含了進(jìn)程間通信代碼。

/kernel子目錄包含了主內(nèi)核代碼

2.2.1 內(nèi)核源碼下載

標(biāo)準(zhǔn)的linux內(nèi)核源碼可以從http://www.kernel.org/pub/linux/kernel/v2.6/下載,也可以從鏡像ftp站點(diǎn)獲得,筆者用的是linux-2.6.26.tar.gz,將其解壓到相應(yīng)的目錄下,命令為#tar–zxvf linux-2.6.26.tar.gz。armlinux是針對(duì)標(biāo)準(zhǔn)linux內(nèi)核為arm做的補(bǔ)丁,也可以直接下載針對(duì)linux內(nèi)核打好arm補(bǔ)丁的源碼。

2.2.2 內(nèi)核配置

內(nèi)核配置通常是對(duì)內(nèi)核的各個(gè)功能進(jìn)行取舍配置,將配置的方案保存到configure文件中。在交叉編譯內(nèi)核之前,對(duì)編譯選項(xiàng)的配置是很重要的,本文中選擇對(duì)S3C2410開發(fā)板的支持,選擇File System支持,對(duì)于File System應(yīng)確保如下支持:

(1)proc file system support

(2)ROM file system support

(3)Second extended fs support

然后配置塊設(shè)備,使其支持RAM disk。在編譯內(nèi)核的時(shí)候,就會(huì)根據(jù)此配置進(jìn)行取舍編譯。在編譯目錄下通過make menuconfig命令進(jìn)入內(nèi)核配置界面。

修改內(nèi)核目錄樹根下的Makefile時(shí),指定目標(biāo)平臺(tái)為arm,指定交叉編譯器, 可向Makefile中添加如下內(nèi)容:

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm_cross/4.0.2/bin/arm-linux-

2.2.3 內(nèi)核編譯

編譯內(nèi)核使其生成內(nèi)核映像,編譯內(nèi)核有非壓縮和壓縮兩種方式。[5]壓縮方式,內(nèi)核從ROM中啟動(dòng),將被壓縮的內(nèi)核壓縮到RAM,然后再執(zhí)行內(nèi)核,有點(diǎn)是可以將內(nèi)核事先燒寫至flash中,而無需手工下載,這種方式使用make zimage來編譯內(nèi)核。

#make dep //設(shè)置依賴關(guān)系

#make zIamge //編譯內(nèi)核

交叉編譯內(nèi)核時(shí)間相對(duì)較長(zhǎng),編譯完成后會(huì)形成一個(gè)文件zImage,這就是編譯成功后的ARMLinux內(nèi)核。

2.3 根文件系統(tǒng)的制作

根文件系統(tǒng)一直是linux系統(tǒng)不可或缺的組件,在嵌入式linux中,內(nèi)核在啟動(dòng)期間進(jìn)行的最后操作之一就是安裝根文件系統(tǒng)。Busybox是構(gòu)建嵌入式根文件的軟件,用它制作根文件系統(tǒng)簡(jiǎn)單,設(shè)置靈活。根文件系統(tǒng)一般都包括:1)基本的文件系統(tǒng)結(jié)構(gòu),包含一些必需的目錄,比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp;2)基本運(yùn)行程序所需要的庫函數(shù),如:lib/uc-libc;3)基本的系統(tǒng)配置文件,如:rc,inittab等腳本文件;4)必要的設(shè)備文件,如:/dev/tty,/dev/fd0;5)基本的應(yīng)用程序,如:sh,ls,cp,mv等;根文件系統(tǒng)制作就是生成包含上述各種文件系統(tǒng)的過程。[6]

2.3.1 安裝busybox

從網(wǎng)站http://www.busybox.net/下載busybox-1.17.4.tar.bz2,使用tarzxvf busybox-1.17.4.tar.bz2解壓,進(jìn)入busybox-1.17.4.o目錄后執(zhí)行 make munuconfig命令可進(jìn)入配置界面。修改busybox根目錄下的makefile使用交叉編譯器。將ARCH?=$(SUBARCH)修改為ARCH?=arm,將CROSS_COMILE?修改為CROSS_COMILE?=arm_linux-,修改后執(zhí)行make命令編譯busybox。然后安裝busybox。

2.3.2 創(chuàng)建根文件

開發(fā)板的根文件系統(tǒng)在主機(jī)上的目錄為/home/work/lsq,在此目錄下使用mkdir命令創(chuàng)建dev,etc,home,lib,mnt,proc,root,sys,tmp目錄。在/etc目錄下存放配置文件;創(chuàng)建etc/inittab文件,init進(jìn)程根據(jù)/etc/inittab文件來創(chuàng)建其他子進(jìn)程;創(chuàng)建etc/fstab文件,fstab文件描述系統(tǒng)中各種文件系統(tǒng)的信息,應(yīng)用程序讀取這個(gè)文件,然后根據(jù)其內(nèi)容進(jìn)行自動(dòng)掛載的工作。

2.3.3 制作yaffs2文件系統(tǒng)映像文件

制作文件系統(tǒng)映像文件,就是將一個(gè)目錄下的所有內(nèi)容按照一定的格式存放到一個(gè)文件中,這個(gè)文件可以直接燒寫到存儲(chǔ)設(shè)備中。

在yaffs源碼中有個(gè)utils目錄,里面有mkyaffsimage和mkyaffs2image的源代碼,前者制作yaffs映像文件,后者制作yaffs2映像文件,將下載的yaffs2解壓,在目錄/Dovelopment下有兩個(gè)文件夾;進(jìn)入yaffs2/utils目錄,加入兩個(gè)文件:nand-ecc.c和yaffs_packed-tagsl.c;修改makefile文件

MKYAFFSSOURCES=mkyaffsimage.c yaffs_packedtagsl.c nand-ecc.c然后執(zhí)行make生成mkyaffs2image工具,復(fù)制工具到/usr/local/bin目錄下,執(zhí)行#mkyaffsimage2 lsq/pyaffs2.img命令可生成文件系統(tǒng)映像文件,執(zhí)行#gzip –pyaffs2img最終生成嵌入式linux根文件系統(tǒng)的映像文件為pyaffs2-.img.gz。根文件系統(tǒng)制作完成。

3 下載并執(zhí)行映像文件

下載linux內(nèi)核映像和根文件系統(tǒng)映像文件到目標(biāo)板

#tftp 30008000 zImage /*下載linux內(nèi)核映像到目標(biāo)板內(nèi)存*/

#fftp 300800000 pyaffs2.img.gz /*下載根文件系統(tǒng)映像到目標(biāo)板內(nèi)存*/

#go 30008000 /*啟動(dòng)目標(biāo)板linux*/。

重啟開發(fā)板,能看到嵌入式linux系統(tǒng)在超級(jí)終端完整的打印信息,說明嵌入式linux系統(tǒng)成功的移植到S3C2410上去了。

4 總結(jié)

文章研究了基于arm-linux和S3C2410的嵌入式系統(tǒng)設(shè)計(jì),詳細(xì)地介紹了移植的基本方法,重點(diǎn)說明了移植過程的關(guān)鍵步驟。這對(duì)于嵌入式linux系統(tǒng)的應(yīng)用以后的發(fā)展具有重要意義。

[1] 曹 玥.Linux 內(nèi)核分析及在S3C2440上移植過程[J].科技廣場(chǎng).2010,(1):173-175

[2] 鄧俊華,杜玉曉. 基于S3C2410 處理器的Linux 移植[J]. 技術(shù)交流.2009 25(8) : 53 - 55

[3] 王志誠. 基于ARM9 的嵌入式Linux操作系統(tǒng)的移植[J]. 陶瓷.2010 (3):50-52

[4] 黃義文. Linux操作系統(tǒng)內(nèi)核裁剪的分析[J]. 中國(guó)民航飛行學(xué)院學(xué)報(bào).2010 (3) :56 - 59

[5] 趙 炯. Linux內(nèi)核完全剖析[M]. 北京:機(jī)械工業(yè)出版社. 2006

[6]孫紀(jì)坤,張小全.嵌入式Linux 系統(tǒng)開發(fā)技術(shù)詳解[M].北京:人民郵電出版社.2006

The technique of porting Linux to one board based on Cirrus Logic S3C2410 processor is introduced in this paper, embedded linux system migration can be divided into three areas: (1)loading u-B00T Program used for guidance and hardware initialization in the development board. (2)transplanting kernel in linux system. (3) making linux root filesystem . The results show that it implements the transplantation of linux system to custom target platform.

ARM 9; Linux; Embedded System; porting Linux system

TP316

A

10.3969/j.issn.1001-8972.2011.07.061

李勝琴(1984-),女,漢,河南信陽人,本科,西北師范大學(xué)碩士研究生,研究方向嵌入式系統(tǒng)。

猜你喜歡
編譯器開發(fā)板內(nèi)核
萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
Microchip最新推出兩款PIC32 Curiosity開發(fā)板
淺析單片機(jī)開發(fā)板的設(shè)計(jì)與制作
電子制作(2017年22期)2017-02-02 07:10:14
Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
林州市| 旌德县| 驻马店市| 潮州市| 泰来县| 阿瓦提县| 高陵县| 苍山县| 波密县| 新巴尔虎左旗| 大港区| 池州市| 钟山县| 达州市| 达拉特旗| 湘潭县| 布拖县| 什邡市| 韶关市| 弥渡县| 哈巴河县| 天津市| 修文县| 汤原县| 玉田县| 遵义县| 屏南县| 新巴尔虎左旗| 依兰县| 安龙县| 成安县| 海口市| 青海省| 永顺县| 山阳县| 铜鼓县| 清水县| 阜宁县| 罗源县| 北海市| 南丹县|