朱 黎
(陜西工業職業技術學院,陜西咸陽 712000)
由于嵌入式產品的大量應用和由于Linux具有良好的可裁剪性與可移植性,而且代碼完全公開,具有豐富的網絡資源及有力的技術支持和眾多的研發力量。因此,嵌入式Linux系統的開發得到廣泛的重視,成為越來越多的嵌入式系統選擇和開發熱點。一個完整的嵌入式Linux系統通常由由Bootload、內核、文件系統3部分組成,目標板上電后由Bootload初始化硬件,引導內核和文件系統,從而啟動Linux。
嵌入式Linux開發環境的搭建主要包括:編譯生成Bootloader、裁剪、配置和編譯Kernel Image和Root File System,并將它們燒寫到Flash中。
本系統開發環境是在宿主機的vmware虛擬機中安裝Linux操作系統實現的。其中Linux操作系系統的開發版本為 RedHat4.0,內核版本為 Linux2.6.24。此外,還需要在宿主機上配置IP地址并關閉防火墻、相關的網絡服務,如NFS網絡文件系統、TFTP服務、Samba服務。而對應的ARM開發板通常稱為目標板。GNU編譯器的開發流程如圖1所示。

圖1 GNU編譯器的開發流程

圖2 用gcc編譯程序流程
Bootloader芯片復位后進入操作系統之前執行的一段程序,其作用與PC機上的BIOS類似。Bootloader主要是為運行操作系統提供基本的運行環境,如CPU、SDRAM、Flash、串行口等進行初始化,也可以下載文件到系統板,對Flash進行擦除與編程。
1)建立目錄并解壓u-boot源碼

2)進入解壓后的目錄 u-boot-1.3.2,首先用 make distclean命令清除原來編譯環境依賴關系

3)配置開發板,編譯u-boot。編譯成功后會在當前目錄下生成u-boot二進制文件。

4)燒寫U-Boot
將編譯得到的u-boot.bin拷貝到PC機sjf2410-s.exe文件所在的路徑下。連接好開發板的電源、JTAG下載線,然后打開電源。在PC機的DOS命令提示符下,進入u-boot.bin所在文件夾,運行命令燒寫u-boot。

在燒寫中需要做一些選擇,要分別輸入三次0,開始燒寫,燒寫完輸入2推出。
連接好開發板和主機之間的串口、網口,斷開開發板的JTAG下載線,重新啟動開發板。如果燒寫成功,會在串口終端上出現如下內容:


1)修改Makefile文件
在配置內核之前需要修改 linux-2.6.24.2目錄下的Makefile文件,指定交叉編譯器為arm-linux-編譯器和使用ARM體系結構。

使用vi編輯器打開Makefile文件,作如下修改。

2)配置內核
內核源碼必須先進行配置才能編譯。通常內核的配置有以下4 中方法:make config、make xconfi、make menuconfig和make gconfig。

得到.config文件,運行“make menuconfig”命令打開內核配置界面如圖3所示。設置S3C2410 Machines、Nand Flash、網卡、文件系統等相關配置信息。

圖3 內核配置界面
1)編譯內核映像和模塊
如果內核已經編譯過多次,需進入內核根目錄清除原先殘留的.config和.o文件。然后用make命令進行編譯。編譯成功,在內核源碼根目錄的arch/arm/boot下生成zImage文件。

2)生成uImage文件
使用由u-boot生成的工具mkimage,生成uImage文件。執行腳本程序make_uImage此時會在內核源碼根目錄下生成uImage內核文件。

1)配置IP地址。設置宿主機即TFTP服務器端機器IP為 setenv serverip 192.168.1.12,設置 ARM 端 U-BOOT 中網絡設備 IP 地址 setenv ipaddr 192.168.1.13,saveenv保存設置。

2)將生成的uImage文件拷貝到tftpboot目錄下

3)下載到SDRAM。運行tftp 0x30008000 uImage命令,將uImage文件下載到ARM開發板的SDRAM中0x30008000開始的空間中。
4)擦除NANDFLASH空間,寫入Nand Flash。
重啟ARM開發板,執行命令“bootm”,實現U-BOOT引導內存中的內核。啟動后液晶屏左上角出現小企鵝圖案。
Root Filesystem(根文件系統)是ARM Linux正常運行的必要組成部分。創建文件系統后,應用程序對Nand-Flash存儲設備的讀寫操作就好像對MS-DOS文件系統的磁盤設備操作一樣。目前Linux支持多種文件系統,主要包括Romfs、Cramfs、JFFS和 JFFS2等。
1)創建根文件目錄rootfs
2)使用busybox工具創建文件系統
a)將已有的busybox-1.12.2壓縮包拷貝到根目錄下并解壓
b)修改Makefile文件,支持交叉編譯
修改該目錄下Makefile文件中的ARCH和CROSS_COMPIL,指定交叉編譯器和目標系統,與本機的路徑一致。

c)編譯busybox
執行命令make menuconfig進入busybox如圖4所示配置界面設置相關選項并保存。

圖4 busybox的配置界面
d)用make,make install進行編譯生成_install目錄

至此busybox工具編譯完成,生成了文件系統需要的相關命令和工具在_install目錄下。用戶也可以根據需要,在busybox中添加刪除相關命令和工具。
創建根文件系統的其它目錄結構,如 etc、dev、lib、mnt等,并添加相關配置文件與設備節點。也可直接解壓rootfs壓縮包,生成rootfs根目錄樹。
3)復制_install文件夾內容
將“/home/uptech/rootfs/busybox-1.12.2/_install”的全部內容復制到“/home/uptech/rootfs”中。
4)使用mkcramfs工具將rootfs文件系統目錄制作成CRAMFS根文件系統映像生成root.cramfs根文件系統文件。
1)將生成的根文件系統文件root.cramfs到宿主機TFTP服務器下載目錄/tftpboot

2)配置宿主機和目標機的網絡IP,啟動ARM設備,進入U-Boot控制臺
3)下載到SDRAM
在U-BOOT中輸入boot目錄引導系統。

輸入root用戶名稱,系統順利引導運行起來了。
本章主要設計完成系統設計所需要的開發環境的搭建。首先給出了嵌入式Linux開發環境主要過程。其中介紹了GNU編譯器和gcc編譯工具的基本結構及gcc編譯程序的基本能流程。然后詳細的介紹了Bootloader操作模式、啟動過程和U-Boot移植、測試。此外介紹Linux內核的裁減、配置、編譯和燒寫,及根文件系統建立、編譯、配置和燒寫過程。
[1] 高強,鄭曉慶,陳敏.嵌入式Linux的家用無線遠程監控系統[J].自動化與儀表,2010(5):47 -50.
[2] 呂盛林,林子杰,陳立定.基于ARM9的無線環境監控系統的實現[J].信息技術,2009(12):17-20.
[3] 何永琪.嵌入式Linux系統實用開發[M].北京:電子工業出版社,2010:13 -24.
[4] 楊宗德.嵌入式ARM系統原理與實訓開發[M].第2版.北京:電子工業出版社,2010.
[5] 華清軟件嵌入式培訓中心.嵌入式Linux應用程序開發標準教程[M].第2版.北京:人民郵電出版社,2010:109-114.
[6] 薛園園.21天學通Linux嵌入式開發[M].北京:電子工業出版社,2010:51 -52.
[7] 楊水清,張劍,施云飛.ARM嵌入式Linux系統開發技術詳解[M].北京:電子工業出版社,2010.
[8] 韋東山.嵌入式Linux應用開發完全手冊[M].北京:人民郵電出版社,2009.
(責任編輯楊繼森)