當前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于PXA255的ARM Linux操作系統(tǒng)移植

摘要: Linux在嵌入式領(lǐng)域中應(yīng)用越來越廣泛,已成為最有潛力的嵌入式操作系統(tǒng)。操作系統(tǒng)的移植是進行嵌入式應(yīng)用開發(fā)的前提和基礎(chǔ)。ARM Linux是一種針對ARM體系結(jié)構(gòu)的Linux操作系統(tǒng)。本文以新一代高端嵌入式處理器PXA255為例,進行ARM Linux的移植,闡述了移植中需要解決的關(guān)鍵技術(shù),包括:內(nèi)核的定制、文件系統(tǒng)的創(chuàng)建、設(shè)備驅(qū)動的移植等。最后,在移植成功的平臺上實現(xiàn)了無線接入點。
關(guān)鍵字:ARM Linux;移植;PXA255;CSB226;驅(qū)動程序

1.     引言

ARM處理器是當今應(yīng)用最為廣泛的處理器芯片,它功耗小、成本低、性能優(yōu)越,在消費電子類產(chǎn)品中占據(jù)主導(dǎo)地位。Linux操作系統(tǒng)近年來在嵌入式領(lǐng)域中發(fā)展很快,由于其強大的性能和開源免費的特點,越來越受到嵌入式系統(tǒng)開發(fā)商的青睞,信息家電、網(wǎng)絡(luò)設(shè)備、手持終端等都是嵌入式Linux應(yīng)用的廣大市場。

在嵌入式開發(fā)中,把操作系統(tǒng)移植到開發(fā)板是進行嵌入式應(yīng)用開發(fā)的前提和基礎(chǔ)。ARM Linux是針對ARM體系結(jié)構(gòu)的嵌入式Linux操作系統(tǒng)。本文主要闡述了將ARM Linux系統(tǒng)移植到基于PXA255處理器的開發(fā)板CSB226上的方法和關(guān)鍵技術(shù)。

2.     軟硬件平臺環(huán)境

2.1.   硬件平臺

(1)PXA255處理器

Intel PXA255是基于XScale微架構(gòu)的一款嵌入式應(yīng)用處理器,它在XScale結(jié)構(gòu)的基礎(chǔ)上集成了眾多的外設(shè)接口,如:PCMCIA控制器、LCD控制器、多媒體通信口等,是專為高性能、低功耗的便攜式手持設(shè)備而開發(fā)的。CSB226是基于PXA255處理器而設(shè)計的一款開發(fā)板,本文的移植工作就是在此開發(fā)板上進行的。CSB226還配置有許多外設(shè),包括:64MB SDRAM內(nèi)存、32MB Flash、CS8900A以太網(wǎng)控制器、CF接口等。CSB226開發(fā)板系統(tǒng)結(jié)構(gòu)框圖[2]如圖1所示。

圖1 CSB226開發(fā)板系統(tǒng)結(jié)構(gòu)框圖

(2)硬件環(huán)境搭建

嵌入式開發(fā)通常采用宿主機—目標機的主從開發(fā)模式[3]。宿主機指開發(fā)主機,由一臺通用PC機或工作站構(gòu)成;目標機即指嵌入式設(shè)備,在本文中是CSB226開發(fā)板。硬件的連線圖如圖2所示,開發(fā)板和宿主機之間通過串口、以太網(wǎng)或JTAG口等進行通信,采用“交叉”開發(fā)方式。本文采用硬件仿真工具BDI2000進行軟件的調(diào)試,仿真器一端通過JTAG口與目標機相連,另一端用網(wǎng)線與宿主機相連。

圖2 主機和目標機的連線圖

2.2.   軟件環(huán)境

本文開發(fā)主機采用RedHat9.0操作系統(tǒng)。首先需要對開發(fā)主機和目標機做一些設(shè)置,然后搭建交叉編譯和調(diào)試環(huán)境,具體步驟如下:

在開發(fā)主機上需要做以下設(shè)置:(1)啟動NFS服務(wù),為目標機使用NFS文件系統(tǒng)做準備;(2)安裝TFTP服務(wù)器,為目標機從主機上下載文件提供服務(wù);(3)啟動Telnet服務(wù);(4)安裝Minicom工具,它是Linux環(huán)境下的超級終端工具,用它與目標機進行串口通信。另外,目標機上需要設(shè)置IP地址,與開發(fā)主機設(shè)置在同一網(wǎng)段。

對于交叉編譯環(huán)境,使用最廣泛的ARM Linux交叉工具鏈為arm-linux-toolchain,由bin、include、lib三部分組成。調(diào)試環(huán)境的搭建使用GNU/GDB調(diào)試工具,安裝后生成ARM平臺的交叉調(diào)試工具arm-linux-gdb。

3.     基于PXA255的ARM Linux移植關(guān)鍵技術(shù)

3.1.   內(nèi)核定制

Linux內(nèi)核和文件系統(tǒng)是嵌入式Linux的兩個核心部分。首先進行內(nèi)核的編譯,在開發(fā)主機上配置編譯ARM Linux內(nèi)核,生成一個針對CSB226平臺的Linux內(nèi)核映像zImage。

本文使用2.4.19版本的標準內(nèi)核,編譯內(nèi)核的步驟如下:(1)準備Linux內(nèi)核源代碼linux-2.4.19.tar和平臺相關(guān)的系列補丁:patch-2.4.19-rmk7.gz、diff-2.4.19-rmk7-pxa2.gz、linux-2.4.19-rmk7-pxa2-ptx14.diff。(2)解壓源碼包并按順序打上幾個補丁,再對內(nèi)核源碼的配置文件作適當?shù)男薷?,然后用make dep,make zImage命令進行編譯,如果編譯成功會在Linux源碼arch/arm/boot目錄下生成內(nèi)核映像文件zImage。

在內(nèi)核成功編譯之前,關(guān)鍵是對內(nèi)核源碼做適當?shù)男薷?,以適應(yīng)特定的開發(fā)平臺。本文中對源碼的修改有如下幾點:(1)將Makefile文件中的編譯器改為交叉編譯器arm-linux-gcc,體系結(jié)構(gòu)改為ARM。(2)本文中使用NFS方式掛載文件系統(tǒng),因此,需要在CSB226的默認配制文件linux/arch/arm/def-configs/csb226中設(shè)置配置命令行的屬性:CONFIG_CMDLINE ="root=/dev/nfs rw nfsroot=10.0.0.1:/home/busybox ip=10.0.0.2 mem=64M console=tty0 console=ttyS0,38400",其中“root=/dev/nfs”指定設(shè)備文件,“10.0.0.1:/home/busybox”是文件系統(tǒng)所在開發(fā)主機的IP地址和目錄位置,10.0.0.2是目標機的IP地址。主機端和目標機的串口通信波特率要一致,本項目中是38400。(3)在源碼linux/arch/arm/tools/目錄下的mach-types文件中添加CSB226的宏定義和機器號,CSB226的機器號是216,這個整數(shù)是唯一的,在啟動初始化的時候會把它賦給微處理器的R1寄存器。(4)用make menuconfig命令對默認配置做一些調(diào)整,比如添加外設(shè)、網(wǎng)絡(luò)協(xié)議和文件格式等選項。

成功生成映像文件zImage后,就可以下載到目標機運行了,但只有這個內(nèi)核還無法與系統(tǒng)交互,還需要一個文件系統(tǒng)。

3.2.   文件系統(tǒng)

(1)嵌入式文件系統(tǒng)制作

本文采用Busybox工具包組建嵌入式文件系統(tǒng)。直接配置編譯Busybox就可以創(chuàng)建/bin、/sbin、/usr等目錄,其中包含了大部分常用的命令,但Busybox并不提供與登錄相關(guān)的命令如:login、getty、passwd等,這需要用Tinylogin軟件包生成。/lib目錄的動態(tài)庫文件可以用Glibc生成。/dev目錄下是系統(tǒng)所用的設(shè)備節(jié)點,只需要根據(jù)當前平臺對外設(shè)的支持情況逐個地添加即可。/etc目錄是系統(tǒng)配置文件和子目錄,比如啟動配置、網(wǎng)絡(luò)配置等,需要針對特定應(yīng)用啟動相應(yīng)的服務(wù)和進程。

(2)文件系統(tǒng)的掛載

創(chuàng)建好文件系統(tǒng)的目錄結(jié)構(gòu)后,還需要將目錄制作成某種格式的文件系統(tǒng),掛載到Linux內(nèi)核下使用。常用的掛載方式有Ramdisk、JFFS2、NFS,其中NFS(Network File System)是網(wǎng)絡(luò)文件系統(tǒng),它的優(yōu)點是可以從主機上直接修改文件系統(tǒng),方便開發(fā)。本文使用NFS的掛載方式,將根文件系統(tǒng)是放在開發(fā)主機上,開發(fā)主機提供網(wǎng)絡(luò)共享服務(wù),目標機在啟動時通過NFS方式掛載根文件系統(tǒng)。

3.3.   設(shè)備驅(qū)動移植

將Linux內(nèi)核移植到CSB226開發(fā)板上后,還需要移植常用外設(shè)的驅(qū)動程序,如:LCD液晶屏、鼠標、鍵盤、CF卡等。下面重點闡述LCD液晶屏和CF卡的移植過程。

(1)LCD液晶屏的驅(qū)動移植

Linux中的Framebuffer幀緩沖驅(qū)動分為三層[4],中間層及上層是設(shè)備無關(guān)的軟件層,底層是與硬件相關(guān)的幀緩沖驅(qū)動,因此,LCD驅(qū)動移植主要是驅(qū)動幀緩沖硬件設(shè)備,在本文中對應(yīng)于CSB226平臺上的LCD控制器和其外接的TFT LCD顯示器。

基于PXA255微處理器的不同平臺的差異主要在于外接的LCD顯示屏硬件的差異,因此對于不同平臺的幀緩沖驅(qū)動程序的差別主要是在LCD控制寄存器中顯示屏規(guī)格參數(shù)的設(shè)置上有不同。LCD寄存器中的初始規(guī)格參數(shù)是在頭文件drivers/video/pxafb.h的宏定義中設(shè)置的,因此對于不同的硬件平臺只要更改硬件的規(guī)格參數(shù)即可。這些參數(shù)是在初始化函數(shù)pxafb_init()中進行配置的。

(2)CF卡的驅(qū)動移植

CF(Compact Flash)接口是一種標準的擴展接口,主要用于擴展存儲空間,如本文使用的128M CF存儲卡,也可以外接其他設(shè)備,如CF接口的modem、無線網(wǎng)卡等。

在Linux系統(tǒng)下,由于CF卡與PCMCIA設(shè)備控制器兼容,通常把CF卡當作PC Card設(shè)備進行驅(qū)動和管理。PCMCIA的插槽驅(qū)動和PC卡驅(qū)動與硬件直接相關(guān),是驅(qū)動移植中需要重新實現(xiàn)的部分。CF存儲卡的驅(qū)動可以直接使用標準的ATA/IDE設(shè)備驅(qū)動ide-cs模塊,因此在CSB226平臺上驅(qū)動CF存儲卡,只需要編寫PCMCIA控制器的驅(qū)動。

PXA225片上的PCMCIA控制器驅(qū)動的初始化函數(shù)為pxa_pcmcia_driver_init(),它調(diào)用底層PCMCIA接口函數(shù)初始化具體平臺上的插槽接口設(shè)備。這些底層函數(shù)是板級驅(qū)動與插槽驅(qū)動之間的標準接口,定義在結(jié)構(gòu)體struct pcmcia_low_level中。CF卡驅(qū)動移植的主要工作就是實現(xiàn)pcmcia_low_level結(jié)構(gòu)體中底層平臺相關(guān)的5個接口函數(shù)。pcmcia_low_level數(shù)據(jù)結(jié)構(gòu)如下:

struct pcmcia_low_level {

  int (*init)(struct pcmcia_init *);

  int (*shutdown)(void);

  int (*socket_state)(struct pcmcia_state_array *);

  int (*get_irq_info)(struct pcmcia_irq_info *);

  int (*configure_socket)(unsigned int, socket_state_t *);

};

l       init函數(shù),主要完成三個工作:執(zhí)行平臺相關(guān)的初始化任務(wù);設(shè)置所需要中斷信號的方向和邊緣觸發(fā)方式;注冊設(shè)備發(fā)現(xiàn)中斷與對應(yīng)的中斷處理函數(shù)。

l       shutdown函數(shù),在卸載驅(qū)動時使用,用來釋放所申請的資源。

l       socket_state函數(shù),設(shè)置插槽的初始化狀態(tài)信息,完成對輸入?yún)?shù)所包含的數(shù)據(jù)結(jié)構(gòu)struct pcmcia_state賦值,需要根據(jù)實際插槽的狀態(tài)信息正確設(shè)置此數(shù)據(jù)結(jié)構(gòu)。

l       get_irq_info函數(shù),用來獲得每個插槽接口設(shè)備上的Ready中斷信號。

l       configure_socket函數(shù),由上層驅(qū)動調(diào)用,用來動態(tài)改變插槽的狀態(tài),比如工作電壓VCC、可編程電壓VPP等。

將PCMCIA驅(qū)動程序成功編譯進內(nèi)核后,還需要使用卡管理工具cardmgr監(jiān)測CF卡設(shè)備,當CF存儲卡插入到CSB226開發(fā)板的插槽時,cardmgr會發(fā)現(xiàn)該設(shè)備并完成設(shè)備的加載。

4.     應(yīng)用實例

在CSB226開發(fā)板上成功移植了ARM Linux后,可以進行多種應(yīng)用開發(fā),如:電子地圖查詢系統(tǒng),娛樂游戲機等。本文在CSB226開發(fā)板上插入一塊基于Prism2芯片組的CF接口的無線網(wǎng)卡,由于已經(jīng)成功驅(qū)動了CF接口,所以只需要將無線接入點程序Host AP編譯到ARM Linux內(nèi)核中,再使用網(wǎng)橋工具將CSB226開發(fā)板自身的10MBit以太網(wǎng)和無線網(wǎng)絡(luò)橋接起來,這個開發(fā)板就可以作為一臺無線接入點工作了。

5.     結(jié)論

Linux操作系統(tǒng)在嵌入式設(shè)備中應(yīng)用越來越廣泛。本文針對基于PXA255處理器的開發(fā)板進行了系統(tǒng)移植,闡述了移植中的關(guān)鍵技術(shù),如:內(nèi)核的修改、文件系統(tǒng)建立、設(shè)備驅(qū)動的移植,最后在開發(fā)板上實現(xiàn)了無線接入點。本文的移植過程對于其他類型微處理器上Linux的移植也具有參考價值。

 

本文作者創(chuàng)新點:基于CSB226開發(fā)板進行了ARM Linux操作系統(tǒng)的移植,對LCD和CF卡設(shè)備驅(qū)動的平臺相關(guān)部分進行了重寫。最后在開發(fā)板上實現(xiàn)了無線接入點的應(yīng)用。

參考文獻:

[1] 毛德操, 胡希明. 嵌入式系統(tǒng)采用公開源代碼和StrongARM/XScale處理器[M]. 杭州: 浙江大學(xué)出版社, 2003. p. 61-63.
[2] CSB226 Block Diagram. http://www.cogcomp.com/datasheets/Visio-CSB226_disti. pdf, 2004.
[3] 許先斌, 熊慧君, 李淵, 楊芬. 基于ARM9的嵌入式Linux開發(fā)流程的研究[J]. 微計算機信息. 2006,11:87-90.
[4] Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini. Linux Device Driver[M]. 第三版.O'Reilly Media,Inc. 2005.

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉