技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 嵌入式數(shù)字視頻播放系統(tǒng)軟件平臺的構(gòu)建

嵌入式數(shù)字視頻播放系統(tǒng)軟件平臺的構(gòu)建

時間:2007-12-12 10:20:00來源:caojing

導(dǎo)語:?本文介紹了在PowerPC405上利用嵌入式Linux來構(gòu)建數(shù)字視頻播放系統(tǒng)軟件平臺的過程,探討了嵌入式Linux系統(tǒng)里交叉編譯器、bootloader、Linux內(nèi)核、根文件系統(tǒng)等幾個主要部分的構(gòu)建過程。
摘要:本文介紹了在PowerPC405上利用嵌入式Linux來構(gòu)建數(shù)字視頻播放系統(tǒng)軟件平臺的過程,探討了嵌入式Linux系統(tǒng)里交叉編譯器、bootloader、Linux內(nèi)核、根文件系統(tǒng)等幾個主要部分的構(gòu)建過程。 關(guān)鍵詞:PowerPC405 嵌入式Linux 數(shù)字視頻播放機 U-BOOT 引言: 數(shù)字視頻播放設(shè)備在近幾年的發(fā)展十分迅速,種類繁多。傳統(tǒng)的視頻播放設(shè)備(如DVD播放機)的軟件系統(tǒng)一般都是一簡單的控制環(huán)系統(tǒng),沒有操作系統(tǒng),功能擴展和升級受到限制。本課題研究的便攜式數(shù)字視頻播放設(shè)備構(gòu)建于嵌入式32位PowerPC405 CPU之上,運行Linux操作系統(tǒng),以大容量的硬盤作為存儲介質(zhì),具有網(wǎng)絡(luò)功能。PowerPC405是IBM公司推出的一款專門針對嵌入式應(yīng)用的RISC處理器,應(yīng)用十分廣泛。嵌入式Linux[1]作為一種開源的操作系統(tǒng)軟件,具有免費、支持眾多CPU、可裁減、支持網(wǎng)絡(luò)、豐富的軟件資源等特點。利用嵌入式Linux來構(gòu)建數(shù)字視頻播放系統(tǒng)的軟件平臺使得該播放機成本低,易于升級和管理,支持多種接口如USB,從而使得視頻節(jié)目交換方便等優(yōu)勢,代表了該種設(shè)備未來發(fā)展的一個方向。本文主要探討了構(gòu)建應(yīng)用于數(shù)字視頻播放機的嵌入式Linux系統(tǒng)的bootloader、Linux內(nèi)核移植的主要過程和可能碰到的問題,給出了相應(yīng)的解決方案。 1 數(shù)字視頻播放系統(tǒng)框圖
圖1-1 碼流播放系統(tǒng)硬件框圖
圖1-1為本播放機的系統(tǒng)框圖,其核心控制系統(tǒng)為基于PowerPC405的嵌入式Linux,通過其上的應(yīng)用程序來把數(shù)據(jù)存儲系統(tǒng)里的節(jié)目經(jīng)過一定處理后搬移到碼流控制系統(tǒng)里的FPGA里,由FPGA完成解密后送給解碼系統(tǒng),經(jīng)過解碼系統(tǒng)解壓縮后輸出RGB信號給顯示設(shè)備來顯示。其中我們要關(guān)注的就是核心控制系統(tǒng)里嵌入式Linux系統(tǒng)的搭建。 播放機的嵌入式Linux系統(tǒng)的層次結(jié)構(gòu)如圖1-2,硬件上電后,CPU的程序指針首先指向一個特定的存儲器地址,該地址處一般存放著bootloader,bootloader在初始化完CPU以及內(nèi)存等設(shè)備后,把Linux內(nèi)核從一般ROM設(shè)備里搬移解壓到內(nèi)存里,然后程序指針跳轉(zhuǎn)到內(nèi)核在內(nèi)存里的開始位置處,由Linux內(nèi)核來繼續(xù)完成剩下的系統(tǒng)引導(dǎo)工作。內(nèi)核在重新初始化完系統(tǒng)后,就加載根文件系統(tǒng),運行用戶應(yīng)用程序。整個嵌入式Linux系統(tǒng)平臺的構(gòu)建過程可以參照系統(tǒng)的啟動過程,主要要做的工作有構(gòu)建bootloader、Linux內(nèi)核、根文件系統(tǒng)這幾個部分。
2 嵌入式Linux系統(tǒng)平臺搭建的準(zhǔn)備 要搭建嵌入式Linux系統(tǒng)平臺,首先要準(zhǔn)備好跨平臺開發(fā)工具鏈。它運行于本地主機上,編譯鏈接生成的二進制可執(zhí)行程序能夠運行于開發(fā)板的CPU及操作系統(tǒng)上。構(gòu)建這樣一個主要包括編譯器gcc,鏈接器ld,C庫glibc等的工具鏈的方法有很多種,可以去相關(guān)網(wǎng)站下載源代碼手工編譯,而最便捷的方法則為利用完善的已編譯好開發(fā)包,如德國denx公司的ELDK開發(fā)包。 3 bootloader與Kernel的選擇 準(zhǔn)備好了開發(fā)工具鏈之后,就可以開始嵌入式Linux系統(tǒng)的開發(fā),首先是bootloader的選擇。 3.1 bootloader的選擇 一般的PC機啟動后先是進入BIOS,通過BIOS進行一定的系統(tǒng)初始化后,再引導(dǎo)操作系統(tǒng)如Windows或Linux等,而一般嵌入式系統(tǒng)里沒有BIOS,但也需要實現(xiàn)類似功能的模塊,這就是bootloader(引導(dǎo)裝載器),其主要的功能是初始化CPU、內(nèi)存等硬件設(shè)備,以及導(dǎo)入操作系統(tǒng)。Bootloader種類很多,如blob、lilo、grub、U-BOOT等。目前在嵌入式領(lǐng)域用得最廣泛的是denx公司的免費開源軟件U-BOOT,它支持PowerPC、ARM、MIPS、x86等多種CPU,超過100種開發(fā)板,源碼結(jié)構(gòu)清晰,移植容易,開發(fā)文檔豐富,用戶在使用中可能碰到的問題一般都能夠很快被解決。因此,我們選用U-BOOT做為開發(fā)板的bootloader。 根據(jù)不同的開發(fā)板,flash的大小以及型號不同,內(nèi)存的大小不一樣,啟動方式的不同等使得利用U-BOOT時需要做一些相應(yīng)的修改,以適應(yīng)用戶自己的開發(fā)板,具體移植方法及常見問題可參見[3]。 3.2 Linux內(nèi)核的移植 bootloader初始化完系統(tǒng)硬件后,把Linux內(nèi)核從外部存儲介質(zhì)中導(dǎo)入內(nèi)存里,然后,就將控制權(quán)交給Linux內(nèi)核,由內(nèi)核來繼續(xù)完成系統(tǒng)的引導(dǎo)工作。 如果內(nèi)核里沒有支持用戶所使用的開發(fā)板,那么用戶就需要自己手工修改Linux的內(nèi)核,做一些相關(guān)的移植工作,要關(guān)注的是對開發(fā)板的硬件外設(shè)部分的處理,包括內(nèi)核對板子硬件基本信息的處理,板上硬件設(shè)備的初始化、中斷的分配等。 開發(fā)板級別的Linux內(nèi)核移植最方便的方法是利用內(nèi)核里已有的且與用戶使用的硬件平臺最接近的開發(fā)板為模板,在此基礎(chǔ)上再做修改。我們使用的開發(fā)板與IBM walnut開發(fā)板類似,主要的外設(shè)包括硬盤、USB設(shè)備等都是利用PCI總線接口轉(zhuǎn)接(PCI轉(zhuǎn)IDE,PCI轉(zhuǎn)USB),所以內(nèi)核的移植工作主要有兩部分, 一為bootloader和內(nèi)核之間板子硬件信息的傳遞,二為PCI外設(shè)的初始化。 3.2.1 U-BOOT與Linux內(nèi)核的配合 U-BOOT在初始化完硬件設(shè)備后,把內(nèi)核裝入內(nèi)存,然后程序指針跳轉(zhuǎn)到內(nèi)核所在位置處的同時,會傳遞一些參數(shù)給內(nèi)核來使用,其中就包括有board_info數(shù)據(jù)結(jié)構(gòu),內(nèi)容包括板子的CPU主頻、SDRAM和flash大小、ip地址、MAC地址等,Linux會利用這些參數(shù)來初始化系統(tǒng)。但Linux內(nèi)核與U-BOOT的開發(fā)并不是同一個組織,要修改Linux內(nèi)核的相關(guān)部分來匹配U-BOOT傳遞過來的數(shù)據(jù),對于我們所使用的PowerPC,U-BOOT是利用五個通用寄存器(r3,r4,r5,r6,r7)來傳遞參數(shù),我們需要修改通過r3寄存器傳遞過來的board_info數(shù)據(jù)結(jié)構(gòu)(定義在Linux內(nèi)核里arch/ppc/platforms/cs2000.h),使之與U-BOOT源代碼里u-boot-1.1.1/include/asm-ppc/u-boot.h里定義的bd_info數(shù)據(jù)結(jié)構(gòu)內(nèi)容一致,這樣內(nèi)核才不會對U-BOOT傳遞過來的board_info數(shù)據(jù)結(jié)構(gòu)進行錯誤解讀。 3.2.2 PCI外設(shè)初始化部分的修改 Linux內(nèi)核初始化PCI部分的主要過程為:掃描整個PCI總線,找到連接在總線上的所有設(shè)備,根據(jù)各PCI設(shè)備配置空間寄存器的信息,給各PCI設(shè)備統(tǒng)籌分配I/O空間,memory空間,以及IRQ中斷號。對于x86平臺,這部分工作其實已經(jīng)在BIOS部分做過,Linux內(nèi)核只需調(diào)用BIOS生成的配置即可,但對于我們嵌入式Linux系統(tǒng),沒有BIOS,這部分工作Linux內(nèi)核要自己做。而對于各個不同的開發(fā)板,需要補充到標(biāo)準(zhǔn)的PCI初始化代碼里的內(nèi)容有兩部分,一為PCI設(shè)備配置空間寄存器的訪問方式,另一為PCI中斷的配置。 根據(jù)PCI的協(xié)議規(guī)范,訪問某PCI設(shè)備配置空間的方法為先使能該設(shè)備的IDSEL管腳,才可以讀寫該設(shè)備的配置寄存器組。但PCI規(guī)范并沒有定義IDSEL管腳的連接方法,所以根據(jù)各開發(fā)板PCI從設(shè)備的IDSEL管腳硬件連線方法的不同,訪問PCI設(shè)備配置空間的方法也不同。
圖3-1PCI設(shè)備IDSEL管腳的兩種接法
如圖3-1所示,對于一般接法的(a)圖,PCI從設(shè)備的IDSEL管腳是通過一電阻串聯(lián)到PCI總線的地址線AD[11-31]中某一根,這樣可通過在訪問PCI總線的地址期內(nèi)往AD[11-31]這些地址線一個個的置高電平,如果讀回來的配置寄存器數(shù)據(jù)有效,說明該地址線連了某設(shè)備的IDSEL,若無效,說明未連接。而我們開發(fā)板則采用了圖3-1里面的(b)接法,把PCI從設(shè)備的IDSEL管腳與CPU的一個GPIO端口相連,這樣就可以通過控制GPIO來靈活的控制PCI總線上某設(shè)備的使能或者失效。在我們這種硬件連接下,訪問PCI從設(shè)備配置空間時,需要先置該設(shè)備IDSEL管腳所連接的GPIO為高,再讀寫配置寄存器組。所以,對于我們這種開發(fā)板,需要在一般的讀取配置寄存器空間的源碼里(arch/ppc/kernel/indirect_pci.c),讀寫配置寄存器之前,插入下列代碼: switch (dev_function) { case PCI_DEV1: set_gpio1_high(); //置相應(yīng)的GPIO為高 case PCI_DEV2: set_gpio2_high(); default:break; } 另外一項需要修改的PCI初始化代碼是有關(guān)PCI設(shè)備的中斷號分配。對于沒有BIOS的嵌入式Linux,PCI設(shè)備中斷號分配是由內(nèi)核根據(jù)板子的硬件連線來決定的。一般嵌入式設(shè)備不需要中斷路徑互連器,直接把插槽的/INT管腳與CPU的IRQ線相連。連接方法有很多種,如把一個插槽的四個中斷腳都連到一個IRQ上,由操作系統(tǒng)來控制中斷的復(fù)用關(guān)系,也可以一個PCI中斷管腳只連一個IRQ線。所以PCI IRQ的分配這部分Linux代碼要根據(jù)各開發(fā)板實際的中斷連接方法來修改。 在我們的開發(fā)板里,每個PCI的/INT管腳都連接到一單獨的IRQ線上,根據(jù)這種連接關(guān)系,我們從軟件上可以構(gòu)造出下面這樣一張表: /* arch/ppc/platforms/our_board_name.c:ppc405_map_irq ()*/ static char pci_irq_table[][4] = /* PCI /INT PIN->INTLINE * A B C D */ { {28, 29, 30, 30}, /* IDSEL 1 - PCI 插槽 1 */ {31, 31, 31, 31}, /* IDSEL 2 - PCI 插槽2 */ }; 上表描述的PCI插槽1的/INT A中斷的號是28,而這個28號中斷的由來是該槽的/INT A與CPU的28號中斷的IRQ線相連了。把所有PCI插槽的中斷線與CPU IRQ線的連接關(guān)系填入表中,就可以通過內(nèi)核里標(biāo)準(zhǔn)的PCI初始化代碼正確分配各PCI設(shè)備的中斷號了。當(dāng)然,在板子的IRQ初始化部分(arch/ppc/platforms/our_board_name.c:board_setup_irq())還要正確設(shè)置這些分配了的中斷線的觸發(fā)方式,極性等。 Linux內(nèi)核的移植牽涉到很多硬件的知識,對開發(fā)板的硬件原理圖有比較清楚的認(rèn)識可以對移植工作有事半功倍的效果。 4 結(jié)束語 有了bootloader,內(nèi)核,再利用Busybox[4][5]來構(gòu)建一個簡單的根文件系統(tǒng)后,這個嵌入式Linux系統(tǒng)平臺就已經(jīng)搭建完畢,用前述過程所搭建的嵌入式Linux系統(tǒng)平臺體積小,功能強,運行穩(wěn)定,對于像數(shù)字視頻播放機這種需要長期工作運行的設(shè)備而言非常適合,而且升級性強,對于未來的一些應(yīng)用需求,可以通過開發(fā)板上的PCI、USB、Ethernet等接口進行擴展,可以說是為以后設(shè)備的進一步功能增強奠定了堅實的基礎(chǔ)。本論文的創(chuàng)新點在于將傳統(tǒng)的視頻播放設(shè)備的簡單控制系統(tǒng)升級為嵌入式Linux系統(tǒng),并對嵌入式Linux系統(tǒng)的構(gòu)建和移植作了詳細探討,特別是根據(jù)PCI設(shè)備的新連接方法提出了一種新的初始化算法,具有很強的應(yīng)用價值。

標(biāo)簽:

點贊

分享到:

上一篇:基于uClinux嵌入式系統(tǒng)的汽車...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

相關(guān)資訊

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號