董晶晶
摘 要:文章描述了將標(biāo)準(zhǔn)Linux系統(tǒng)移植到基于S3C2410微處理器的開發(fā)板上的方法,包括安裝交叉編譯環(huán)境、引導(dǎo)程序的移植、Linux內(nèi)核的裁減和編譯。移植后的linux內(nèi)核雖然減小了軟件的開發(fā)難度,但是仍具有良好的穩(wěn)定性和安全性,也降低了開發(fā)成本。
關(guān)鍵詞:嵌入式Linux;內(nèi)核;S3C2410處理器;移植
1 概述
S3C2410是基于ARM920T內(nèi)核的微處理器,具有支持多任務(wù)、高效、穩(wěn)定、內(nèi)核簡(jiǎn)單等特點(diǎn)。嵌入式Linux是在標(biāo)準(zhǔn)Linux的基礎(chǔ)上對(duì)內(nèi)核進(jìn)行裁減和編譯后的小型操作系統(tǒng),且占存儲(chǔ)空間小。
2 移植前準(zhǔn)備工作
嵌入式Linux基于S3C2410處理器上移植首先需要采用交叉編譯調(diào)試的方式。而交叉編譯調(diào)試環(huán)境建立在PC 機(jī)上對(duì)應(yīng)的開發(fā)平臺(tái),但是可執(zhí)行的二進(jìn)制代碼只能在開發(fā)平臺(tái)上執(zhí)行,因此在移植前要建立交叉編譯環(huán)境。準(zhǔn)備工作包括建立交叉編譯工具鏈,配置主機(jī)網(wǎng)絡(luò)接口的IP地址和TFTP服務(wù)。
安裝Linux的交叉編譯環(huán)境, 應(yīng)包括binutils,gcc.gnuc和glibc三部分的工具鏈。從Linux的官方網(wǎng)站可以下載免費(fèi)的工具鏈。其中binutils是用于處理二進(jìn)制文件的程序集合,gcc.gnuc是編譯工具,glibc是保證用戶鏈接C庫。交叉編譯工具鏈的安裝順序如下:
(1)下載Crosstol-3.4.1.tar.bz2包,在/usr/local/arm目錄下解壓縮。
在export之前添加# PATH: /usr / local/arm /,修改PATH環(huán)境變量,從而添加交叉編譯器的路徑。
(2)通過ifconfig 命令查看主機(jī)的網(wǎng)絡(luò)接口驅(qū)動(dòng)是否安裝成功后,配置主機(jī)網(wǎng)絡(luò)接口的IP地址。
(3)TFTP 服務(wù):Linux下的TFTP服務(wù)在默認(rèn)情況下處于關(guān)閉狀態(tài),需要以root 身份登錄,修改TFTP的配置文件,開啟TFTP服務(wù)。
使用命令/etc/init.d/xinetd restart,使TFTP服務(wù)重新啟動(dòng)。
3 嵌入式Linux 的移植過程
3.1 引導(dǎo)程序Bootloader的移植
引導(dǎo)程序類似于PC機(jī)中的BIOS程序,它可以進(jìn)行硬件設(shè)備的初始化(時(shí)鐘的設(shè)置、內(nèi)存的映射等), 方便調(diào)用系統(tǒng)內(nèi)核。引導(dǎo)程序是依賴于硬件平臺(tái)來實(shí)現(xiàn)的。而每種cpu芯片的引導(dǎo)程序不可能是通用的,不同的處理器架構(gòu)都有不同的引導(dǎo)程序。而且系統(tǒng)的板級(jí)設(shè)備的配置也限制著引導(dǎo)程序。如果在不同的兩塊嵌入式板上使用同一種cpu,而引導(dǎo)程序在兩塊板子上運(yùn)行,就需要修改Bootloader的源程序。u-boot移植主要過程如下:
(1)從Linux官方網(wǎng)址下載u-boot 1. 1. 2包。
在指定目錄解壓縮后,編譯S3C2410板的u-boot:
(2)配制Makefile,修改工具鏈前綴:
把CROSS _COMP ILE=arm-linux改為:=/usr/local/arm/3.3.2/bin/arm-linux-gcc
(3)配置編譯smdk2410 板,執(zhí)行# make smdk2410 config=/path/from/root install
(4)建立U- Boot開發(fā)板,配置開發(fā)板。
在configs目錄下復(fù)制smdk2410
(5)測(cè)試系統(tǒng)能否正常運(yùn)行:
如果系統(tǒng)正常運(yùn)行,在u-boot-1.1.2目錄下生成u-boot.bin文件;但是如果系統(tǒng)運(yùn)行不成功時(shí),可以將example文件夾下的Makefile中的 %.srec: % 改為: %.srec:%.0。
(6)通過fs2410的nand FLASH,將u- Boot燒寫到Flash上,引導(dǎo)程序就可以從FLASH上直接啟動(dòng)了 。
3.2 嵌入式Linux的內(nèi)核的裁減和編譯
對(duì)于嵌入式系統(tǒng)來說標(biāo)準(zhǔn)Linux的內(nèi)核過去龐大,因此要將Linux移植到嵌入式系統(tǒng)上,就需要將Linux內(nèi)核進(jìn)行裁減和編譯。
3.2.1 裁減Linux內(nèi)核
(1)進(jìn)入Linux內(nèi)核的編輯菜單,運(yùn)行如下命令:
# make config (進(jìn)入命令行)
# make mrproper (刪除解壓縮軟件包中的冗余文件)
# make xconfig (進(jìn)入xconfig配置菜單)
(2)在Linux內(nèi)核的配置菜單中,對(duì)嵌入式系統(tǒng)進(jìn)行配置。xconfig 配置菜單如圖1所示。
圖1 xconfig 配置菜單
在配制時(shí),Linux內(nèi)核配置中只有一部分根據(jù)用戶不同需要選擇或是去掉不需要的模塊,添加必須的模塊或是驅(qū)動(dòng)程序,但是大部分選項(xiàng)可以選擇默認(rèn)值。(選項(xiàng)中Y表示該功能加入內(nèi)核;N表示該功不能加入內(nèi)核;M表示該功可以在需要時(shí)動(dòng)態(tài)內(nèi)核。)
3.2.2 內(nèi)核的編譯
在內(nèi)核配置完后,需要對(duì)內(nèi)核創(chuàng)建源碼樹,壓縮的內(nèi)核映像。內(nèi)核編譯命令如下:
#make dep (讀取配置文件,并創(chuàng)建源碼關(guān)系樹);
#make clean 命令 (用于清除程序的冗余文件)
#make zImage ( 使用壓縮方法,生成更小linux內(nèi)核)
4 制作RAMdisk(根文件系統(tǒng))
嵌入式Linux 系統(tǒng)通過根文件系統(tǒng)為設(shè)備和用戶程序提供接口,調(diào)用系統(tǒng)中所有的文件和設(shè)備。因此移植Linux系統(tǒng)還需要制作RAMdisk。在RAMdisk的塊設(shè)備上建立根文件系統(tǒng)的目錄一般由下幾個(gè)組成:
/bin目錄 存儲(chǔ)文件管理程序的文件;
/lib目錄 存儲(chǔ)系統(tǒng)的庫文件;
/dev目錄 存儲(chǔ)系統(tǒng)設(shè)備文件;
/etc目錄 存儲(chǔ)系統(tǒng)配置文件。
在文章中基于S3C2410微處理器,創(chuàng)建Cramfs格式的根文件系統(tǒng)。RAMdisk使用壓縮映像存放在Flash的地址空間中后,就把RAMdisk設(shè)備加載成根文件系統(tǒng),最終將嵌入式操作系統(tǒng)移植到開發(fā)板上,生成可視化操作系統(tǒng)。
5 結(jié)束語
文章針對(duì)嵌入式系統(tǒng)基于S3C2410處理器上的移植方法,分別介紹了如何建立交叉編譯環(huán)境、引導(dǎo)程序和根文件系統(tǒng)的移植、對(duì)處理器內(nèi)核的裁減、編譯的過程,并且保證移植后的Linux系統(tǒng)的穩(wěn)定性、實(shí)時(shí)性、可視性和安全性的特點(diǎn)。生成嵌入式Linux系統(tǒng),用戶可以根據(jù)需要,編寫開發(fā)應(yīng)用程序。
參考文獻(xiàn)
[1]廖日坤.ARM嵌入式應(yīng)用開發(fā)技術(shù)白金手冊(cè)[M].北京:中國(guó)電力出版社,2005.
[2]倪繼利.Linux內(nèi)核分析與編程[M].北京:電子工業(yè)出版社,2005.
[3]張杰,吳敏,曹衛(wèi)華.基于S3C2410的Linux移植[J].微型電腦應(yīng)用,2005.