電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 2097|回復(fù): 0
收起左側(cè)

嵌入式的軟件工程師培訓(xùn)_嵌入式培訓(xùn)大連_Linux 2.6 內(nèi)核的嵌入式系統(tǒng)應(yīng)用

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-8-5 14:24:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
嵌入式的軟件工程師培訓(xùn)_嵌入式培訓(xùn)大連_Linux 2.6 內(nèi)核的嵌入式系統(tǒng)應(yīng)用,   

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

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

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

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

一、Linux 2.6內(nèi)核針對嵌入式開發(fā)顯著特點

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

1、可搶占內(nèi)核

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

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

2.6內(nèi)核并不是真正的RTOS(Real Time Operation System),其在內(nèi)核代碼中插入了搶占點,允許調(diào)度程序中止當(dāng)前進(jìn)程而調(diào)用更高優(yōu)先級的進(jìn)程,通過對搶占點的測試避免不合理的系統(tǒng)調(diào)用延時。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ù)而不被搶占。

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

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

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

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

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

4、POSIX線程及NPTL

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

5、微控制器的支持

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

6、面向應(yīng)用

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

二、應(yīng)用研究

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

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

在RedHat9的主機上進(jìn)行內(nè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來建立交叉編譯工具鏈,建立之后將工具鏈路徑加入系統(tǒng)路徑$PATH中。藍(lán)橋杯嵌入式程序, 好看的時鐘顯示嵌入式, 天朗音箱有嵌入式嗎, 嵌入式藍(lán)牙通信實驗, 嵌入式系統(tǒng)ssl庫, 嵌入式去泥毯, 武大卓越科技嵌入式, 嵌入式相應(yīng)實驗案例, 嵌入式螺母國標(biāo), 龍凈環(huán)保嵌入式電袋, 做嵌入式的前景, 嵌入式方向的研究生, 蘇大嵌入式社區(qū), 瀏覽器嵌入式設(shè)置, 大學(xué)專業(yè)嵌入式專業(yè), 鋁合金方龍骨嵌入式, 大數(shù)據(jù)嵌入式培養(yǎng), 嵌入式和腳本語言, 嵌入式系統(tǒng)采集圖像, 嵌入式工程師獵聘, 嵌入式軟件開發(fā)近況, 嵌入式職業(yè)發(fā)展環(huán)境, 做深做實嵌入式防控, 嵌入式是編程嗎, 用嵌入式寫小游戲, 嵌入式系統(tǒng)系列書, 嵌入式后臺開發(fā), 嵌入式不銹鋼插座箱, 簡述嵌入式應(yīng)用軟件, 嵌入式平臺應(yīng)用, 嵌入式系統(tǒng)和cps, 嵌入式插板更換, 怎樣組件嵌入式硬件, 機箱嵌入式顯示器, 嵌入式證件識別系統(tǒng), 計算機中嵌入式, 嵌入式技能大賽江蘇, 醫(yī)療顯示嵌入式, 嵌入式難而且工資低, 嵌入式arm09, 嵌入式機器視覺庫, 嵌入式led萬年歷, 美軍嵌入式芯片,

2、內(nèi)核修改

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

表1 NAND FLASH分區(qū)表

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

Vivi 0x00000000 0x00020000

Param 0x00020000 0x00010000

Kernel 0x00030000 0x001c0000

Root 0x00200000 0x00200000

Usr 0x00400000 0x03c00000

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

3、內(nèi)核編譯加載

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

make mrproper

make menuconfig(字符界面,或者用make xconfig圖形界面,但需要Qt庫的支持,而make gconfig則需要GTK庫的支持)

make

make bzImage

4、文件系統(tǒng)

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

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

mkcramfs rootfs rootfs.ramfs

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

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

系統(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ū)動程序drivers/net/arm/cs8900.h和cs8900.c,并且配置網(wǎng)絡(luò)設(shè)備驅(qū)動的Makefile和Kconfig文件,加入CS8900A的配置選項,這樣可以在內(nèi)核編譯時加載網(wǎng)絡(luò)設(shè)備的驅(qū)動。

  

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

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表