新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > arm linux內(nèi)核移植裁剪過程概覽

arm linux內(nèi)核移植裁剪過程概覽

作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
微處理器的產(chǎn)生為價格低廉、結(jié)構(gòu)小巧的CPU和外設(shè)的連接提供了穩(wěn)定可靠的硬件架構(gòu),這樣,限制嵌入式系統(tǒng)發(fā)展的瓶頸就突出表現(xiàn)在了軟件方面。盡管從八十年代末開始,已經(jīng)陸續(xù)出現(xiàn)了一些嵌入式操作系統(tǒng)(比較著名的有Vxwork、pSOS、Neculeus和Windows CE)。但這些專用操作系統(tǒng)都是商業(yè)化產(chǎn)品,其高昂的價格使許多低端產(chǎn)品的小公司望而卻步;而且,源代碼封閉性也大大限制了開發(fā)者的積極性。而Linux的開放性,使得許多人都認(rèn)為Linux非常適合多數(shù)Intemet設(shè)備。Linux操作系統(tǒng)可以支持不同的設(shè)備和不同的配置。Linux對廠商不偏不倚,而且成本極低,因而很快成為用于各種設(shè)備的操作系統(tǒng)。嵌入式linux是大勢所趨,其巨大的市場潛力與醞釀的無限商機(jī)必然會吸引眾多的廠商進(jìn)入這一領(lǐng)域。

1 嵌入式linux操作系統(tǒng)
Linux為嵌入操作系統(tǒng)提供了一個極有吸引力的選擇,它是個和Unix相似、以核心為基礎(chǔ)、全內(nèi)存保護(hù)、多任務(wù)、多進(jìn)程的操作系統(tǒng)。可以支持廣泛的計算機(jī)硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA等現(xiàn)有的大部分芯片。Linux的程序源碼全部公開,任何人都可以根據(jù)自己的需要裁剪內(nèi)核,以適應(yīng)自己的系統(tǒng)。文章以將linux移植到ARM920T內(nèi)核的s3c2410處理器芯片為例,介紹了嵌入式linux內(nèi)核的裁剪以及移植過程,文中介紹的基本原理與方法技巧也可用于其它芯片。

2 內(nèi)核移植過程
2.1 建立交叉編譯環(huán)境
交叉編譯的任務(wù)主要是在一個平臺上生成可以在另一個平臺上執(zhí)行的程序代碼。不同的CPU需要有不同的編譯器,交叉編譯如同翻譯一樣,它可以把相同的程序代碼翻譯成不同的CPU對應(yīng)語言。
交叉編譯器完整的安裝涉及到多個軟件安裝,最重要的有binutils、gcc、glibc三個。其中,binutils主要用于生成一些輔助工具;gcc則用來生成交叉編譯器,主要生成arm—linux—gcc交叉編譯工具;glibc主要是提供用戶程序所使用的一些基本的函數(shù)庫。
自行搭建交叉編譯環(huán)境通常比較復(fù)雜,而且很容易出錯。本文使用的是開發(fā)板自帶的交叉編譯器,即CROSS一3.3.4.交叉編譯器,該編譯只需將光盤中的arm—linux一3.3.4.bar.bz2用tar ixvf arm—linux一3.3.4.bar.bz2命令解壓到/usr/local/arm下即可。
2.2 修改Makefile
修改內(nèi)核目錄樹根下的Makefile時,可先指明交叉編譯器。設(shè)計時,可向Makefile中添加如下內(nèi)容:
ARCH ?=arm
CROSS_COMPILE?=arm-linux-然后設(shè)置PATH環(huán)境變量,使其可以找到其交叉編譯工具鏈,然后運行vi~/.bashrc,再添加如下內(nèi)容:
export PATH=/usr/local/arln—linux一3.4.4/bin:$PATH
2.3 設(shè)置Flash分區(qū)
此處一共要修改3個文件,分別如下:
(1)在arch/arm/machs3c2410/devs.c文件中添加如下內(nèi)容:
#include
#include
#include
然后再建立Nand Flash分區(qū)表;同時建立Nand F1ash芯片支持,最后加入Nand Flash芯片并支持到Nand Flash驅(qū)動。
另外,還要修改arch/arm/machs3c2410/devs.C文件中的s3c_device_nand結(jié)構(gòu)體變量,同時添加對dev成員的賦值。
(2)指定啟動時初始化
內(nèi)核啟動時,可以依據(jù)對分區(qū)的設(shè)置進(jìn)行初始配置,然后修改arch/am4mach—s3c2410/machsmdk2410.e文件下的smdk2410_devices[],指明初始化時包括在前面所設(shè)置的flash分區(qū)信息,并添加如下語句:
&s3c_device_nand,
(3)禁止Flash ECC校驗
內(nèi)核一般都是通過UBOOT寫到Nand Flash的。UBOOT則通過軟件ECC算法來產(chǎn)生ECC校驗碼,這與內(nèi)核校驗的ECC碼不一樣,內(nèi)核中的ECC碼是由S3C2410中Nand Flash控制器產(chǎn)生的。所以,這里選擇禁止內(nèi)核ECC校驗。
修改drivers/mtd/nand/s3c2410.C 下的s3c2410_nand_init_chip ()函數(shù),可在該函數(shù)體最后加上如下一條語句:
chip->eccmode=NAND_ECC_NONE;
3 內(nèi)核配置過程
3.1 支持啟動時掛載devfs
為了使內(nèi)核支持devfs以及在啟動且在/sbin/init運行之前能自動掛載/dev為devfs文件系統(tǒng),應(yīng)修改fs/Keonfig文件,找到menu“Pseudo filesystems”并添加如下語句:
3.2 配置內(nèi)核產(chǎn)生.config文件
Linux內(nèi)核裁減的配置菜單命令有好幾個配置方法,這幾個方法實現(xiàn)的功能類似,只是與用戶的交互界面不同。其中:
make config是基于文本的、最為傳統(tǒng)的配置界面,可進(jìn)入命令行;
make menuconfig是基于文本菜單的配置界面;
make xconfig是基于圖形窗口模式的配置界面,在Xwindow下推薦使用該界面。
在這3種方法中,make menuconfig使用最為廣泛,這里選用的是make menuconfig的配置方法。相應(yīng)的配置有三種選擇,它們分別代表的含義如下:
“Y”:將該功能編譯進(jìn)內(nèi)核;
“N”:不將該功能編譯進(jìn)內(nèi)核;
“M”:將該功能編譯成可以在需要時動態(tài)插入到內(nèi)核中的模塊。
運行make menuconfig時,在smdk2410_defeonfig基礎(chǔ)上,其所增刪的內(nèi)核配置項如下:
(1)增加對模塊的支持
Loadable module support--->
  • Enable loadable module support
  • Automatic kernel module loading
    System Type——>
    4 內(nèi)核編譯與下載
    4.1 內(nèi)核編譯
    編譯內(nèi)核時,可運行以下命令:其一是#make clean,即清理環(huán)境,保證沒有不正確的依賴文件存在;二是#make dep,即將內(nèi)核源碼樹中每個子目錄產(chǎn)生的“.depend”文件建立起依賴關(guān)系;三是#make zImage,用于建立壓縮的linux內(nèi)核映像。
    4.2 下載zImage到開發(fā)板
    下載zImage到開發(fā)板的方法很多,常見的有網(wǎng)絡(luò)下載(如FTP、TFTP等方式)、串口下載、USB下載等。本文采用FTP方式來移植Linux內(nèi)核映像文件到目標(biāo)機(jī)NAND FLASH中。代碼如下:
    CRANE2410#tftp 0x30008000 zImage
    至此,該嵌入式Linux的編譯和移植工作便告全部完成。


評論


技術(shù)專區(qū)

關(guān)閉