當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]Linux 2.6 內(nèi)核的嵌入式系統(tǒng)應(yīng)用

摘要:在分析Linux2.6內(nèi)核新特性的基礎(chǔ)上,在S3C2410開(kāi)發(fā)板上移植了2.6內(nèi)核和新的文件系統(tǒng),并成功地對(duì)H.264編解碼多媒體系統(tǒng)提供了支持。

關(guān)鍵詞:Linux內(nèi)核 嵌入式系統(tǒng) S3C2410

隨著多媒體技術(shù)與通訊技術(shù)相結(jié)合的信息技術(shù)的快速發(fā)展和互聯(lián)網(wǎng)的廣泛應(yīng)用,PC時(shí)代也過(guò)渡到了后PC時(shí)代。在數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)高速發(fā)展的后PC時(shí)代,嵌入式技術(shù)越來(lái)越與人們的生活緊密結(jié)合。

操作系統(tǒng)為用戶(hù)使用計(jì)算機(jī)及其外部設(shè)備提供最基本的接口程序,管理計(jì)算機(jī)上的資源。隨著應(yīng)用領(lǐng)域的擴(kuò)大,為了適應(yīng)不同的應(yīng)用場(chǎng)合,考慮到系統(tǒng)的靈活性、可伸縮性以及可裁剪性,一種以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗要求嚴(yán)格的專(zhuān)用計(jì)算機(jī)系統(tǒng)——嵌入式操作系統(tǒng)隨之延生。

Linux操作系統(tǒng)是一種性能優(yōu)良、源碼公開(kāi)且被廣泛應(yīng)用的免費(fèi)操作系統(tǒng),由于其體積小、可裁減、運(yùn)行速度高、良好的網(wǎng)絡(luò)性能等優(yōu)點(diǎn),可以作為嵌入式操作系統(tǒng)。隨著2.6內(nèi)核的發(fā)布,Linux向現(xiàn)有主流的RTOS提供商在嵌入式系統(tǒng)市場(chǎng)提出了巨大挑戰(zhàn),例如VxWorks和WinCE,具有許多新特性,將成為更優(yōu)秀的嵌入式操作系統(tǒng)。

Linux的低成本和開(kāi)放性,為其在嵌入式系統(tǒng)領(lǐng)域的應(yīng)用營(yíng)造了肥沃的土壤。本文著重介紹Linux2.6內(nèi)核的新特性及其嵌入式應(yīng)用中的優(yōu)勢(shì),并將其移植到嵌入式平臺(tái)中,成功支持H.264編解碼多媒體系統(tǒng)。

1Linux2.6內(nèi)核針對(duì)嵌入式開(kāi)發(fā)顯著特點(diǎn)

實(shí)時(shí)可靠性是嵌入式應(yīng)用較為普遍的要求,盡管Linux2.6并不是一個(gè)真正的實(shí)時(shí)操作系統(tǒng),但其改進(jìn)的特性能夠滿(mǎn)足響應(yīng)需求。Linux2.6已經(jīng)在內(nèi)核主體中加入了提高中斷性能和調(diào)度響應(yīng)時(shí)間的改進(jìn),其中有三個(gè)最顯著的改進(jìn):采用可搶占內(nèi)核、更加有效的調(diào)度算法以及同步性的提高[4]。在企業(yè)服務(wù)器以及嵌入式系統(tǒng)應(yīng)用領(lǐng)域,Linux2.6都是一個(gè)巨大的進(jìn)步。在嵌入式領(lǐng)域,Linux2.6除了提高其實(shí)時(shí)性能,系統(tǒng)的移植更加方便,同時(shí)添加了新的體系結(jié)構(gòu)和處理器類(lèi)型——包括對(duì)沒(méi)有硬件控制內(nèi)存管理方案的MMU-less系統(tǒng)的支持,可以支持大容量?jī)?nèi)存模型、微控制器,同時(shí)還改善了I/O子系統(tǒng),增添更多的多媒體應(yīng)用功能[4]。

1.1可搶占內(nèi)核

在先前的內(nèi)核版本中(包括2.4內(nèi)核)不允許搶占以核心態(tài)運(yùn)行的任務(wù)(包括通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核模式的用戶(hù)任務(wù)),只能等待它們自己主動(dòng)釋放CPU。這樣必然導(dǎo)致一些重要任務(wù)延時(shí)以等待系統(tǒng)調(diào)用結(jié)束。

一個(gè)內(nèi)核任務(wù)可以被搶占,為的是讓重要的用戶(hù)應(yīng)用程序可以繼續(xù)運(yùn)行。這樣做最主要的優(yōu)勢(shì)是極大地增強(qiáng)系統(tǒng)的用戶(hù)交互性。

2.6內(nèi)核并不是真正的RTOS(RealTimeOperationSystem),其在內(nèi)核代碼中插入了搶占點(diǎn),允許調(diào)度程序中止當(dāng)前進(jìn)程而調(diào)用更高優(yōu)先級(jí)的進(jìn)程,通過(guò)對(duì)搶占點(diǎn)的測(cè)試避免不合理的系統(tǒng)調(diào)用延時(shí)。2.6內(nèi)核在一定程度上是可搶占的,比2.4內(nèi)核具備更好的響應(yīng)性。但也不是所有的內(nèi)核代碼段都可以被搶占,可以鎖定內(nèi)核代碼的關(guān)鍵部分,確保CPU的數(shù)據(jù)結(jié)構(gòu)和狀態(tài)始終受到保護(hù)而不被搶占。

軟件需要滿(mǎn)足最終時(shí)間限制與虛擬內(nèi)存請(qǐng)求頁(yè)面調(diào)度之間是相互矛盾的。慢速的頁(yè)錯(cuò)誤處理將會(huì)破壞系統(tǒng)的實(shí)時(shí)響應(yīng)性,而2.6內(nèi)核可以編譯無(wú)虛擬內(nèi)存系統(tǒng)避免這個(gè)問(wèn)題,這是解決問(wèn)題的關(guān)鍵,但要求軟件設(shè)計(jì)者有足夠的內(nèi)存來(lái)保證任務(wù)的執(zhí)行。

1.2有效的調(diào)度程序

2.6版本的Linux內(nèi)核使用了由IngoMolnar開(kāi)發(fā)的新的調(diào)度器算法,稱(chēng)為O(1)算法,如圖1所示。它在高負(fù)載情況下執(zhí)行得極其出色,并且當(dāng)有很多處理器并行時(shí)也可以很好地?cái)U(kuò)展[2]。過(guò)去的調(diào)度程序需要查找整個(gè)readytask隊(duì)列,并且計(jì)算它們的重要性以決定下一步調(diào)用的task,需要的時(shí)間隨task數(shù)量而改變。O(1)算法則不再每次掃描所有的任務(wù),當(dāng)task就緒時(shí)被放入一個(gè)活動(dòng)隊(duì)列中,調(diào)度程序每次從中調(diào)度適合的task,因而每次調(diào)度都是一個(gè)固定的時(shí)間。任務(wù)運(yùn)行時(shí)分配一個(gè)時(shí)間片,當(dāng)時(shí)間片結(jié)束,該任務(wù)將放棄處理器并根據(jù)其優(yōu)先級(jí)轉(zhuǎn)到過(guò)期隊(duì)列中?;顒?dòng)隊(duì)列中任務(wù)全部調(diào)度結(jié)束后,兩個(gè)隊(duì)列指針互換,過(guò)期隊(duì)列成為當(dāng)前隊(duì)列,調(diào)度程序繼續(xù)以簡(jiǎn)單的算法調(diào)度當(dāng)前隊(duì)列中的任務(wù)。這在多處理器的情況更能提高SMP的效率,平衡處理器的負(fù)載,避免進(jìn)程在處理器間的跳躍。

圖1O(1)調(diào)度算法

1.3同步原型與共享內(nèi)存

多進(jìn)程應(yīng)用程序需要共享內(nèi)存和外設(shè)資源,為避免競(jìng)爭(zhēng)采用了互斥的方法保證資源在同一時(shí)刻只被一個(gè)任務(wù)訪(fǎng)問(wèn)。Linux內(nèi)核用一個(gè)系統(tǒng)調(diào)用來(lái)決定一個(gè)線(xiàn)程阻塞或是繼續(xù)執(zhí)行來(lái)實(shí)現(xiàn)互斥,在線(xiàn)程繼續(xù)執(zhí)行時(shí),這個(gè)費(fèi)時(shí)的系統(tǒng)調(diào)用就沒(méi)有必要了。Linux2.6所支持的FastUser-SpaceMutexes可以從用戶(hù)空間檢測(cè)是不是需要阻塞線(xiàn)程,只在需要時(shí)執(zhí)行系統(tǒng)調(diào)用終止線(xiàn)程。它同樣采用調(diào)度優(yōu)先級(jí)來(lái)確定將要執(zhí)行的進(jìn)程[4]。多處理器嵌入式系統(tǒng)各處理器之間需要共享內(nèi)存,對(duì)稱(chēng)多處理技術(shù)對(duì)內(nèi)存訪(fǎng)問(wèn)采用同等優(yōu)先級(jí),在很大程度上限制了系統(tǒng)的可量測(cè)性和處理效率。Linux2.6則提供了新的管理方法——NUMA(NonUniformMemoryAccess)。NUMA根據(jù)處理器和內(nèi)存的拓?fù)洳季?在發(fā)生內(nèi)存競(jìng)爭(zhēng)時(shí),給予不同處理器不同級(jí)別權(quán)限以解決內(nèi)存搶占瓶頸,提高吞吐量。

1.4POSIX線(xiàn)程及NPTL

新的線(xiàn)程模型基于一個(gè)1:1的線(xiàn)程模型(一個(gè)內(nèi)核線(xiàn)程對(duì)應(yīng)一個(gè)用戶(hù)線(xiàn)程),包括內(nèi)核對(duì)新的NPTL(NativePOSIXThreadingLibrary)的支持,這是對(duì)以前內(nèi)核線(xiàn)程方法的明顯改進(jìn)。2.6內(nèi)核同時(shí)還提供POSIXsignals和POSIXhigh-resolutiontimers。POSIXsignals不會(huì)丟失,并且可以攜帶線(xiàn)程間或處理器間的通信信息。嵌入式系統(tǒng)要求系統(tǒng)按時(shí)間表執(zhí)行任務(wù),POSIXtimer可以提供1kHz的觸發(fā)器使這一切變得簡(jiǎn)單,從而可以有效地控制進(jìn)度。

1.5微控制器的支持

Linux2.6內(nèi)核加入了多種微控制器的支持。無(wú)MMU的處理器以前只能利用一些改進(jìn)的分支版本,如uClinux,而2.6內(nèi)核已經(jīng)將其整合進(jìn)了新的內(nèi)核中,開(kāi)始支持多種流行的無(wú)MMU微控制器,如Dragonball、ColdFire、HitachiH8/300。Linux在無(wú)MMU控制器上仍舊支持多任務(wù)處理,但沒(méi)有內(nèi)存保護(hù)功能。同時(shí)也加入了許多流行的控制器的支持,如S3C2410等。

1.6面向應(yīng)用

嵌入式應(yīng)用有用戶(hù)定制的特點(diǎn),硬件設(shè)計(jì)都針對(duì)特定應(yīng)用開(kāi)發(fā),這給系統(tǒng)帶來(lái)對(duì)非標(biāo)準(zhǔn)化設(shè)計(jì)支持的問(wèn)題(如IRQ的管理)。為了更好地實(shí)現(xiàn),可以采用部件化的操作系統(tǒng)。Linux2.6采用的子系統(tǒng)架構(gòu)將功能模塊化,可以定制而對(duì)其他部分影響最小。同時(shí)Linux2.6提供了多種新技術(shù)的支持以實(shí)現(xiàn)各種應(yīng)用開(kāi)發(fā),如AdvancedLinuxSoundArchitecture(ALSA)和Video4Linux等,對(duì)多媒體信息處理更加方便;對(duì)USB2.0的支持,提供更高速的傳輸,增加藍(lán)牙無(wú)線(xiàn)接口、音頻數(shù)據(jù)鏈接和面向鏈接的數(shù)據(jù)傳輸L2CAP,滿(mǎn)足短距離的無(wú)線(xiàn)連接的需要;而且在2.6內(nèi)核中還可以配置成無(wú)輸入和顯示的純粹無(wú)用戶(hù)接口系統(tǒng)。

2應(yīng)用研究

在S3C2410開(kāi)發(fā)板上移植嵌入式Linux2.6.11.7內(nèi)核系統(tǒng),應(yīng)用于構(gòu)建H.264多媒體系統(tǒng)。

2.1建立交叉編譯環(huán)境

在RedHat9的主機(jī)上進(jìn)行內(nèi)核移植開(kāi)發(fā),首先需要建立交叉編譯環(huán)境。由于2.6內(nèi)核中采用了一些新的特性和指令,需要采用較新的工具集,采用binutils-2.15、gcc-3.4.2、glibc-2.2.5、linux-2.6.8、glibc-linuxthreads-2.2.5來(lái)建立交叉編譯工具鏈,建立之后將工具鏈路徑加入系統(tǒng)路徑$PATH中。

2.2內(nèi)核修改

Linux2.6.11.7內(nèi)核加入了對(duì)S3C2410芯片的支持,不再需要任何補(bǔ)丁文件。修改內(nèi)核源碼中Makefile的交叉編譯選項(xiàng)ARCH=arm,CROSS_COMPILE=arm-linux-。針對(duì)硬件配置,需要在arch/arm/mach-s3c2410/devs.c或者smdk2410.c中添加FLASH的分區(qū)信息s3c_nand_info,如表1。

表1NANDFLASH分區(qū)表

分區(qū)名起始地址大小

Vivi0x000000000x00020000

Param0x000200000x00010000

Kernel0x000300000x001c0000

Root0x002000000x00200000

Usr0x004000000x03c00000

然后在s3c_device_nand中增加.dev={.platform_data=&s3c_nand_info},在arch/arm/mach-s3c2410/mach-smdk2410.c中的__initdata部分增加&s3c_device_nand,使內(nèi)核在啟動(dòng)時(shí)初始化NANDFLASH信息。

2.3內(nèi)核編譯加載

對(duì)內(nèi)核進(jìn)行適當(dāng)?shù)呐渲檬且粋€(gè)量體裁衣的過(guò)程。由于2.6內(nèi)核會(huì)根據(jù)本地系統(tǒng)配置進(jìn)行初始設(shè)置,可以導(dǎo)入內(nèi)核源碼默認(rèn)s3c2410的配置文件,方便加載內(nèi)核基本配置,然后再選擇所需選項(xiàng)。對(duì)MTD配置選擇支持MTD設(shè)備驅(qū)動(dòng)以及NANDFLASH驅(qū)動(dòng);選擇支持要用到的各類(lèi)文件系統(tǒng)(DEVFS、TMPFS、CRAMFS、YAFFS、EXT2、NFS)以及網(wǎng)絡(luò)設(shè)備和協(xié)議,本系統(tǒng)加載了網(wǎng)絡(luò)芯片CS8900以及USB支持;在H.264多媒體系統(tǒng)中還需要加載Framebuffer以支持LCD顯示功能。使用交叉編譯工具編譯內(nèi)核源碼后,會(huì)在arch/arm/boot/下生成名為zImage的內(nèi)核映像,在Bootloader的命令提示模式下使用下載命令完成內(nèi)核加載到開(kāi)發(fā)板的存儲(chǔ)設(shè)備FLASH中。編譯過(guò)程(相對(duì)以前版本的編譯過(guò)程,2.6內(nèi)核編譯有所簡(jiǎn)化):

makemrproper

makemenuconfig(字符界面,或者用makexconfig圖形界面,但需要Qt庫(kù)的支持,而makegconfig則需要GTK庫(kù)的支持)

make

makebzImage

2.4文件系統(tǒng)

Linux采用文件系統(tǒng)組織系統(tǒng)中的文件和設(shè)備,為設(shè)備和用戶(hù)程序提供統(tǒng)一接口。Linux支持多種文件系統(tǒng),本系統(tǒng)使用CRAMFS格式的只讀根文件系統(tǒng),而將FLASH中的USER區(qū)使用支持可讀寫(xiě)的YAFFS文件系統(tǒng)格式,方便添加自己的應(yīng)用程序。

在根文件系統(tǒng)中,為保護(hù)系統(tǒng)的基本設(shè)置不被更改,采用CRAMFS格式。采用DEVFS來(lái)實(shí)現(xiàn)基本設(shè)備的建立掛載,同時(shí)使用BusyBox也是一個(gè)縮小根文件系統(tǒng)的辦法,提供了系統(tǒng)的基本指令;還需要建立一些必備的目錄,添加所需配置文件,如fstab、inittab等;還有一個(gè)重要的工作就是添加系統(tǒng)應(yīng)用必備的動(dòng)態(tài)函數(shù)庫(kù)。使用生成工具mkcramfs將整個(gè)根文件目錄里的內(nèi)容制作成映像文件。

mkcramfsrootfsrootfs.ramfs

YAFFS文件系統(tǒng)格式的支持需要將驅(qū)動(dòng)加入到內(nèi)核代碼樹(shù)下fs/yaffs/,修改內(nèi)核配置文件,就可以在內(nèi)核編譯中加載對(duì)該文件系統(tǒng)的支持。使用mkyaffs工具將NANDFLASH分區(qū)格式化為YAFFS分區(qū),將mkyaffsimage生成的應(yīng)用程序鏡像燒寫(xiě)進(jìn)YAFFS分區(qū),在啟動(dòng)時(shí)通過(guò)寫(xiě)入fstab自動(dòng)加載YAFFS分區(qū)即可。

2.5網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)

系統(tǒng)中采用CS8900A的10M網(wǎng)絡(luò)芯片,它使用S3C2410的nGCS3和IRQ_EINT9,相應(yīng)修改linux/arch/arm/mach-s3c2410/irq.c,并在mach-smdk2410.c的smdk2410_iodesc[]中增加{SMDK2410_ETH_IO,S3C2410_CS2,SZ_1M,MT_DEVICE},內(nèi)核源碼中加入芯片的驅(qū)動(dòng)程序drivers/net/arm/cs8900.h和cs8900.c,并且配置網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的Makefile和Kconfig文件,加入CS8900A的配置選項(xiàng),這樣可以在內(nèi)核編譯時(shí)加載網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)。

在Linux2.6應(yīng)用的同時(shí),也要看到其與以前版本內(nèi)核比較存在的一些問(wèn)題。在內(nèi)核的編譯時(shí)間、內(nèi)核鏡像大小、內(nèi)核占用RAM空間大小、系統(tǒng)啟動(dòng)時(shí)間相對(duì)Linux2.4而言都存在不同程度的不足,但在硬件條件日益進(jìn)步的現(xiàn)今可以接受,而且一部分也是由于功能加強(qiáng)必然帶來(lái)的。雖然Linux并非一個(gè)真正的實(shí)時(shí)操作系統(tǒng),但2.6內(nèi)核的改進(jìn)能夠滿(mǎn)足大部分的應(yīng)用需求,所以L(fǎng)inux2.6內(nèi)核將會(huì)在嵌入式系統(tǒng)領(lǐng)域大展身手。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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