基于S3C2410的嵌入式Linux系統(tǒng)構建

2013-08-28 16:39 來源:電子信息網(wǎng) 作者:鈴鐺

目前,在嵌入式系統(tǒng)中基于ARM微核的嵌入式處理器已經(jīng)成為市場主流。隨著ARM技術的廣泛應用,建立面向ARM構架的嵌入式操作系統(tǒng)成為當前研究的熱點問題。

已經(jīng)涌現(xiàn)出許多嵌入式操作系統(tǒng),如VxWork,windows-CE,PalmOS,Linux等。在眾多的嵌入式操作系統(tǒng)中,Linux以其開源代碼及免費使用倍受開發(fā)人員的喜愛。本文選用的微處理器S3C2410是基于32位ARM920T內核的微處理器,基于此處理器構造一Linux嵌入式操作系統(tǒng),將其移植到基于32位的ARM920T內核的系統(tǒng)中,在此基礎上進行應用程序開發(fā)。

l、開發(fā)環(huán)境介紹

1.1、基于S3C2410ARM920T的硬件平臺

該系統(tǒng)的硬件平臺為深圳旋極公司提供,硬件的核心部件為三星$3C2410ARM920T芯片,外圍還包括:64MNANDFLASH和RAM外圍存儲芯片;串口、網(wǎng)口和USB外圍接口;CSTNLCD和觸摸屏外圍顯示設備;UDAl34lTS的外圍音頻設備。S3C2410處理器和外圍設備共同構成了基于ARM920T的開發(fā)板。

1.2、嵌入式Limlx軟件系統(tǒng)

該嵌入式Linux的軟件系統(tǒng)包括以下4個部分:引導加載程序vivi;Linux2.6.14內核;YAFFS2文件系統(tǒng)以及用戶程序。他們的可執(zhí)行映像依次存放在系統(tǒng)存儲設備上.

與通常的嵌入式系統(tǒng)布局有所不同,本系統(tǒng)在引導加載程序和內核映像之間還增加了一個啟動參數(shù)區(qū),在這個區(qū)里存放著系統(tǒng)啟動參數(shù)。引導加載程序通過調用這些參數(shù)來決定啟動模式、啟動等待時間等,這些啟動參數(shù)的增加加強了系統(tǒng)的靈活性。本系統(tǒng)采用64MNANDFLASH的存儲設備。

2、嵌入式Linux系統(tǒng)設計與實現(xiàn)

2.1、引導加載程序vivi

2.1.1、vivi的基本功能

該系統(tǒng)使用的:Bootloader是vivi,vivi是韓國MIZIResearch公司為其開發(fā)的SMDK2410開發(fā)板編寫的一款引導程序。vivi是CPU加電后運行的第一段程序,其基本功能是初始化硬件設備、建立內存空間的映射圖,從而為調用嵌入式Linux內核做好準備。

vivi由2部分組成:一部分是依賴于CPU體系結構的代碼,用匯編語言實現(xiàn)對硬件環(huán)境的初始化,并為第二部分代碼的執(zhí)行做好準備;另部分是用C語言實現(xiàn)內存空間的映射,并將Linux內存映像和根文件系統(tǒng)映像從FLASH上讀到RAM空間中,設置好啟動參數(shù),最后調用內核。

2.1.2、Bootloadcrvivi移植

從網(wǎng)站www.mizi.com下載vivi源碼并解壓,按以下步驟進行移植,該系統(tǒng)使用ARM-GCC一2.95.2對vivi進行編譯。

(1)、指定/vivi/Makefile文件中的CROSS-COM-PILE,Linux-INCLUDE-DIR,ARM-GCC-LIBS,如下面的參考路徑:

Linux_INCLUDE_DIR=/opt/host/armv41/include/;

CROSS_COMPILE=/opt/host/armv41/bin/armv41-unknown-Linux-:

ARM-GCC-LIBS=/opt/host/armv41/lib/gcc-lib/armv41一unknown-Linux/2.95.2:

(2)、修改/vivi/arch/s3c2410/smdk.C文件里的mtd-par-tition-tdefault-mtd-partitions[]分區(qū)內容如表1所示;

(3)、增加/vivi/lib/loadyaffs.C文件,實現(xiàn)燒寫yaffs2

映像文件;修改/vivi/lib/Config_cmd.in,增加如下一行:bool'loadyaffstOflashcommand'CONFIG-LOAD-YAFFS,使得loadyaffs命令可作為可選項;

(4)、執(zhí)行make distclean:清理vivi編譯環(huán)境;執(zhí)行make menu config進行對vivi裁剪,根據(jù)實際情況進行選擇,注意要選上"[*]load yaffs t0 flash command"因為這里用的是YAFFS2文件系統(tǒng),需要vivi支持YAFFS2映像下載;執(zhí)行make生成所需要的文件vivi;

(5)、采用JTAG燒寫映像到目標板NAND FLASH的零地址處,實現(xiàn)引導程序的裝載。

2.2、Linux2.6.14內核的移植

2.2.1、內核的選擇

Linux內核版本的更新速度非常快,但Linux的內核版本發(fā)行同Linux對嵌入式處理器支持程度的發(fā)展是不同步的,因此,需要對特定的處理器體系結構選擇合適的內核,并且根據(jù)其硬件功能部件加上相應的補丁。根據(jù)S3C2410的體系結構以及外圍硬件特性,該系統(tǒng)采用Linux2.6.14內核,所用的編譯器為ARM-Linux-GCC一3.4.1版本;由于該系統(tǒng)采用的是YAFFS2文件系統(tǒng),因此需要從網(wǎng)上下載yaffs2.tar.gz文件,解壓并執(zhí)行"./patch.ker.sh/I.inux2.6.14"命令,對I.inux內核打補丁使其支持YAFFS2文件系統(tǒng)。

2.2.2、內核的修改

(1)、修改內核源碼中Makefile的交義編譯項:

ARM_=arm;CROSS_COMPILE=/usr/local/arm/3.4.1/bin/arm-Linux-;

(2)、在arch/arm/mach-s3c2410/devs.C文件中:

①、增加頭文件定義:

#include

#include

#inelude

②、增加staticstruct mtd-partition partition-info[]函數(shù),建立分區(qū)表信息,分區(qū)內容如表1所示;

③、加入NandFlash分區(qū):struet s3c241O-nand-set nandset-{nr_partitions:5,partitions:partition-info,};

④、建立NandFlash芯片支持struct s3c2410-platform-nand superlpplatform={tacls:O,twrph0:30,twrphl:0,sets:&.nandset,nr-sets:1,};

⑤、在Nand Flash驅動里加入Nand Flash芯片支持:在s3C-device-nand中增加.dev一{.platforM一data一&super-lpplatform}。

(3)、在arch/arm/machs3c2410/machsmdk2410.C中的一initdata部分增加&s3c-device-nand,使內核啟動時初始化NANDFLASH信息。

(4)、為了使內核支持devfs并在啟動時在/sbin/init運行之前自動掛載/dev為devfs文件系統(tǒng).修改fs/Kconfig.并在menu"Pseudo filesystetns"下添加如下語句:config DEVFS_FSbooI"/dev flie system support(OBOLETE) default yconfig DEVFS-MOUNTbool"Automatically mount at boot"default ydepends on DEVFS FS

1 2 > 
嵌入式 S3C2410 Linux系統(tǒng)

相關閱讀

暫無數(shù)據(jù)

一周熱門