摘要:簡要介紹了TE2410開發板的硬件特性,重點闡述了Linux 內核在ARM9上的移植過程。其中包括:建立交叉編譯環境、系統內核的移植和根文件系統的移植等。移植后的操作系統在開發板上運行穩定,并且可以根據需要編寫應用程序,將該開發板用于工業控制。
關鍵詞:ARM Linux;TE2410;移植;Bootloader
中圖分類號:TP311.54文獻標識碼:A文章編號:1009-3044(2008)31-0915-02
Porting ARM Linux to TE2410 Board
YAN Guo-yingZHANG Ji-kou
(Hebei University, Baoding 071002, China)
Abstract:The hardware properties of TE2410 board are presented. The technique of Porting ARM Linux to TE2410 board are introduced in this paper. All the work consists of the building the cross compile environment,the Porting of ARM Linux kernel and the Porting of root File system. After finished the porting successfully,the system run stable on the board. We can design application programme to meet control requirements.
Key words: ARM Linux; TE2410; Porting; Bootloader
1 引言
ARMLinux是一個將Linux內核移植到各種基于ARM處理器的目標系統的項目,由RussellKing
2 TE2410開發板介紹
不同的硬件平臺所定制的Bootloader和Linux系統內核是不同的。本設計中用到的Bootloader是vivi,版本:0.1.4。開發主機和目標板卡通過串口相連。設計的目標平臺為TE2410-1型開發板,基于三星公司的S3C2410X處理器,采用6層板設計。S3C2410X使用ARM920T內核,內部帶有MMU(內存處理單元),適用于設計移動手持設備類產品。
TE2410-1型開發板具有以下主要特性:CPU采用S3C2410XARM9內核,穩定運行200M與258M;64M SDRAM內存;64M nandflash.采用yaffs文件系統可以安全可靠的讀寫;基于cs8900a的10M網絡;顯示最高可以達到800x600的VGA和TV輸出;基于uda1341的聲音輸入輸出;1個標準串口, 2個usb host,1個usb device,標準SD卡接口,標準20pin JTAG接口;CPU內置STN/CSTN/TFT LCD控制器,支持1024*76分辨率下的各種液晶;板上4個按鍵5個led;留出總線插座,供用戶擴展其他產品用。系統的 Bootloader和Linux內核都是基于以上硬件資源配置的。
3 移植過程
3.1建立交叉編譯環境
移植的Linux內核版本為Linux2.6.22.1,交叉編譯器(CROSS-COMPILE)版本為4.2.0,開發操作系統為Fedora 6,交叉編譯環境建立的具體步驟如下:
1)解壓文件:tar jxvf obsolete-gcc-4.2.0.tar.bz2;
2)把解壓的文件夾中的“4.2.0”文件夾拷貝到 /usr/local/arm目錄下。這里需要注意:如果沒有arm目錄就新建arm目錄,但是一定要是拷貝到這個目錄,不然不能運行;
3)在命令窗口輸入export PATH=/usr/local/arm/4.2.0/bin:$PATH;
4)如果輸入“arm-”然后按下tab鍵能自動補全命令 arm-linux-說明搭建成功。
3.2 內核配置和編譯
在TE2410板卡中,內核的配置和編譯主要涉及對下列文件的修改。
1)修改 Makefile:[root@localhost linux-2.6.22.1]# vi Makefile
ARCH ?=arm;CROSS_COMPILE ?=/usr/local/arm/arm-2007q1/bin/arm-none-eabi-
2)修改common-smdk.c文件
a. vivi 目錄下輸入vim ./arch/s3c2410/smdk.c命令,在mtd_partition_t default_mtd_partitions[] = {……}查看vivi的分區信息。
b. 根據vivi中的分區信息,在static struct mtd_partition smdk_default_nand_part[] = {……}
中設置內核分區。注意:內核分區信息必須和 vivi 的分區信息相同,否則分區表不能顯示,燒寫的內核也不能運行。TE2410 開發板的分區如表1所示。
c. 在 arch\\arm\\mach-s3c2410\\mach-smdk2410.c 文件中加入S3C2410X需要初始化的設備接口,主要包括對usb、lcd、i2c總線、nand等的初始化。命令格式如:
Startic struct platform_device *smdk2410_devices[] _initdata={
s3c_device_usb,
s3c_device_lcd;
……/*add here*/ }
3)禁止nand flash 的ECC:內核中的ECC校驗碼是由S3C2410中nand flash控制器產生的,一般內核燒寫時生成的ECC校驗碼與內核ECC不一致。所以,通常選擇禁止內核ECC校驗。步驟如下:打開drivers/mtd/nand/s3c2410.c ;搜索關鍵字NAND_ECC_SOFT,在s3c2410_nand_init_chip函數里修改NAND_ECC_SOFT為NAND_ECC_NONE。
4)支持啟動時掛載devfs:為了內核支持devfs以及在啟動時并在/sbin/init運行之前能自動掛載/dev為devfs文件系統,需要在[root@localhost linux-2.6.22]# vi fs/Kconfig找到menu \"Pseudo filesystems\"添加如下語句:
config DEVFS_FS bool \"/dev file system support (OBSOLETE)\" default y
config DEVFS_MOUNT bool \"Automatically mount at boot\" default y depends on DEVFS_FS
5)配置內核:輸入[root@localhost linux-2.6.21.1]# make xconfig命令,通過對選項的添加和去除,可以實現對內核資源的配置。主要內容如表2所示。
6)編譯內核:[root@localhost linux-2.6.22.1]# make zImage
3.3 燒寫linux內核到開發板上
1)在Windows下:將編譯生成的內核鏡像 zImage 拷貝到電腦的某個硬盤上,將和TE2410開發板配套的安裝光盤上所給的Mytftp.exe 文件拷貝到和 zImage 同一個文件夾下。
2)重啟開發板,到vivi 敲空格,然后在vivi> load flash kernel t
3)啟動 dos 命令:到zImage所在的文件夾下輸入 mytftp –i 192.168.0.12 PUT zImage
回車稍等就會出現vivi>表示燒寫成功。
3.4 根文件系統的移植
嵌入式Linux系統的根文件系統通常是以Ramdisk的方式存在的,Ramdisk的映像文件一般以壓縮的形式存放在Flash中,在內核啟動時將這個壓縮的文件解壓存放到內存中再作為根文件系統裝載。根文件系統的移植主要步驟如下:
1)下載用busybox制作好的root_china.tar.gz,解壓以后用命令進入root_china /dev,并輸入mknod console c51;
2)用制作工具mkcramfs將root_china 文件夾里的所有文件做成文件系統;
3)執行 ./mkcramfs root_chinaroot_china.cramfs將其制成可燒寫的cramfs文件系統。
4)燒寫到flash,方法與內核燒寫類似。
在步驟1中容易出現“ VFS: Mounted root (cramfs filesystem) readonly. Freeing init memory: 112K,Warning: unable to open an initial console”的現象?原因是不能正確掛接文件系統。在2.6以前的版本掛接文件系統時會在dev 文件夾下自動生成console 文件。在以后的版本不會自動生成,必須手動在此文件的節點上添加mknod console c51。
4 結論
在具有操作系統的嵌入式產品中Bootloader、操作系統內核、根文件系統是必需的,也是保證系統能運行的最小單元。本設計中TE2410開發板的配套光盤中有編譯好的Bootloader并已完成Bootloader的燒寫。本文主要實現了的Linux2.6.22.1內核和根文件系統的移植過程。移植后的操作系統在開發板上運行穩定,可以減少以后項目的開發周期。
參考文獻:
[1] 李程遠,劉文峰,李善平. ARMLinux在EP7312上的移植[J]. 計算機工程與設計,2003.7,24(7):73-76.
[2] 孫天澤等.嵌入式設計及Linux驅動開發指南—基于ARM9處理器[M].電子工業出版社,2007(1):191-214.
[3] 徐英慧.ARM9嵌入式系統設計——基于S3C2410與Linux[M].電子工業出版社, 2007(9):97-121.