linux
Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。
Linux操作系統誕生于1991 年10 月5 日(這是第一次正式向外公布時間)。Linux存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬件設備中,比如手機、平板電腦、路由器、視頻游戲控制臺、臺式計算機、大型機和超級計算機。
嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基于Linux內核,并且使用GNU 工程各種工具和數據庫的操作系統。
PMP軟件體系框架
PMP軟件最底層是操作系統層,該層主要包括 Bootloader引導程序和嵌入式Linux操作系統。 Bootloader主要完成系統從Flash的啟動、硬件各部分的初始化、LOGO的顯示以及OS的引導:嵌入式 Linux主要包括經過定制的適合在DM320上運行的 Linux操作系統。
Bootloade r:引導程序的定制
DM320下的Bootloader的啟動過程
Bootloader是指系統啟動后,在操作系統內核運行之前運行的一段小程序。不同的Bootloader的安裝介質Flash,系統的啟動過程是不一樣的。
1)當安裝介質為NOR Flash時,Bootloader就可以直接在Flash閃存內運行,不必把代碼拷貝到系 ①收稿時I‘a-]:2008—1 2-1 9 統RAM中。啟動方式設置成外部Memory,這樣ARM 的開始地址就從0xFFFF:0000開始。然后在 Bootloader的程序中,把入口地址設置成 0xFFFF:0000即可。
2)當安裝介質為NAND Flash時,系統上電以后,運行ROM里面的啟動代碼,選擇啟動方式為: AIM(Arm Internal Memory)ROM,ARM的開始地址為0×0000:O000。然后ROM里的程序會拷貝NAND Flash里的User Bootloader到處理器內部的RAM。再次,執行User Bootloader程序,完成初始化 SDRAM和驅動NAND Flash的讀能力等少量工作。最后初始化系統,將NAND Flash中的主Bootloader 拷貝到SDRAM中執行,拷貝完成后,要把存放主 Bootloader的內存地址,賦值給pc(Program Counter)指針o
DM320下Bootloader啟動程序的定制
本PMP使用的Bootloader為U-Boot。從 Internet上得到開源的U—Boot程序,然后對DM320 特有硬件環境進行初始化工作。
1)修改Makefile和Kconfig,目的是生成適合 DM320平臺的配置選項以及目標文件。在./Makefile (當前目錄均為U—Boot源碼樹根目錄)下加入如下語句:
dm320一config:unconfig @./mkconfig S(@:一config=)arm arm926ejs dm320
其中mkconfig為一個腳本文件,參數為 (Target,Architecture,CPU,Board)分別對應上面的四個參數($(@:一config=)arm arm926ejs dm320)。
2)在U—Boot源碼樹下創建文件夾./board/ dm320。存放與DM320平臺有關的文件。
3)在./board/dm320/platform.S中加入對 DM320寄存器初始化賦值語句,在./cpu/arm 926ejs中對cpu.C和start.S修改,前者提供有關cpu 操作的函數,后者為cpu執行時的初始化代碼。
4)./lib—arm/board.C是完成初始化操作的主要文件。在文件中定義了一個初始化序列: init—fnc_t★init—sequence[】=l cpu—init. P basic cpu dependent setup+| board—init。|+basic board dependent setup+| interrupt—init.|+set up exceptions’| env_init。|’initialize environment‘| init—baudrate。|+initialize baudrate settings+| serial—init.|+serial communications setup‘} console—init』, /+init console★/ display—bannerl|’say that we are here‘| dram—init.|+configure available RAM banks’| display—dram—config, #if defined(CONFlG—VCMA9) checkboard, #endif NULL, ):上述數組中函數序列依次執行。在完成初始化序列后,將是一些特定的操作。
Linux內核的定制
本系統中采用的Linux內核版本號為2.6.50要定制Linux內核,不僅要修改內核源碼樹,而且要編寫相關外圍設備的驅動程序。使之成為一個適合 DM320運行的OS環境。
Kconfig文件的修改 Kconfig文件是用來對所要加載內核內容進行配置的文件,其腳本語言描述參考.\Documentation \kbuild。
首先,在內核目錄下./arch/arm/Kconfig中加入DM320的配置選項,將DM320框架加入內核,這樣才能在執行make menuconfig配置內核時看到 DM320框架。修改內容如下:
choice
prompt”ARM system type”
default ARCH—DM320—20
表示:在配置ARM架構的系統時:默認的就是 DM320框架。
source”arch/arm/mach-dm320-20/Kcon f.g”
表示:把DM320框架下的配置選項也引入,同時把其他CPU框架去掉,這樣方便選擇。比如: #source”arch/arm/mach-clps71 1 x/Kconfig”
#source”arch/arm/mach-integrator/Kconfi g“(“孝”表示注釋掉相關的內容)
最后把內核配置選項中對DM320開發有用的選進來。比如:
source”drivers/char/Kconfig”
if(1ARCH—DM320一20) source”sound/Kconfig” endif
表示:需要開發字符設備的驅動,而不需要聲音的支持。
因為要把CODEC編入內核,所以還要加入對 CODEC支持的配置選向。
source”codecs/modules/Kconfig” 如果要加入一個新的外圍設備,也需要在Kconfig 文件中加入相應的內容。比如說要加入一個三星的4 寸TFT—LCD的驅動,就需要修改./drivers/char/ Kconfig文件,并加入以下內容:
config DM 3 20..SAMSU NG..4..LCD
tristate”DM320 SAMSUNG 4.0 inch 1 6:9 TFT LCD”
depends on ARCH—DM320—20 && BOARD一400H
default Y
help
This driver provides support for SAMSUNG 4.0’1 6:9 TFT—LCD
for DM320 Platform.
config DM320一SAMSUNG一4一LCD:表示增加
新的配置入口。一旦這個配置選項被選中就會在./include/Iinu×/autoconf.h中有:#define CONFIG—DM320一SAMSUNG一4一LCD 1
這樣整個內核源碼中都可以使用CONFIG— DM320—SAMSUNG一4一LCD進行特定選擇。
tristate”DM320 SAMSUNG 4.0 inch 1 6:9 TFT—LCD”:在引號里的內容是在配置選項中的提示文字。tristate表示除了可以選擇【+】,【】外。還可以選擇【M】,表示把當前內容當成模塊編譯。
depends on ARCH—DM320—20&&BOARD一 400H:如果配置平臺框架時選擇了ARCH—DM 320—20,在選擇型號時選擇BOARD一400H,就能看到三星4寸T丌一LCD配置選項。
default Y:表示默認把此驅動編入內核。
help:help的內容為對內核進行配置時。選中幫助選項所看到的內容。
Makefile文件的修改
Makefile根據配置文件.config形成編譯源文件列表,GNU編譯工具對源文件進行編譯,把目標代碼鏈接在一起,形成Linux內核二進制文件。Makefile 分布在各源代碼目錄中。
在作者所進行的PMP設備開發中,首先是對主 Makefile的修改,比如:
ARCH:=arm
CROSS—COMPILE:=arm—linux一(對編譯器的選項修改為ARM平臺)
E×TRAVERSION=-our0
EXT臥WERSlON變量值被附加在內核版本編號之后,成為內核建立后自勺最終版本。項目中使用的內核版本號為2.6.5,加上EXTRAVERSION變量后,最終的版本就是2.6.5一our0,表示開發過程中零號內核版本。
對其他子目錄的Makefile文件的修改則相對容易。以加入三星4寸TF丁一LCD驅動為例說明,當需要把此驅動模塊加入相應的內核源碼樹時,要在./drivers/char/MakefiIe文件中加入如下內容: obj一$(CONFIG—DM320一SAMSUNG一4一LCD)-I-= dm320一Icd—samsung4.0
總結
本文探討了嵌入式Linux在PMP消費類電子產品上的應用,并實現了啟動程序Bootloader和Linux 內核的移植和定制。目前一些項目產品已經過嚴格測試,成功推向市場。
評論
查看更多