田 莎
(廈門理工學(xué)院 電子與電器工程系,福建 廈門 361000)
隨著因特網(wǎng)和流媒體技術(shù)的迅速發(fā)展,出現(xiàn)了網(wǎng)絡(luò)電視(IPTV)這種融合互聯(lián)網(wǎng)和傳統(tǒng)電視的新業(yè)務(wù)。IPTV通過寬帶網(wǎng)絡(luò),向家庭用戶提供包括數(shù)字電視在內(nèi)的多種交互式服務(wù)。高清電視(HDTV)[1]相對(duì)于目前的標(biāo)清電視節(jié)目而言,在圖像質(zhì)量上有質(zhì)的提高,其畫面更加清晰,更具有視覺沖擊力,大大提高用戶對(duì)IPTV業(yè)務(wù)的認(rèn)同感,是IPTV業(yè)務(wù)發(fā)展的必然趨勢(shì)。ST7109芯片是一款高集成度的高清機(jī)頂盒解碼芯片,采用其構(gòu)建高清IPTV平臺(tái),性能高且成本低,同時(shí)支持多種視頻格式和多樣化的機(jī)頂盒功能,適應(yīng)不同業(yè)務(wù)需求。
ST7109芯片支持MPEG-2,H.264和VC-1等多種標(biāo)準(zhǔn)的高清視頻解碼。不僅應(yīng)用于地面、衛(wèi)星和有線數(shù)字電視機(jī)頂盒,且應(yīng)用于DSL和IP客戶端高清機(jī)頂盒。ST7109包含嵌入式CPU ST40-202、系統(tǒng)碼流解復(fù)用、視頻解碼、音頻解碼、SDRAM/Flash控制器、USB2.0接口、以太網(wǎng)接口等。能解密并解碼高清或標(biāo)清的音視頻系統(tǒng)碼流,通過SATA接口實(shí)現(xiàn)接收和處理。解復(fù)用后,視頻流通過TS子系統(tǒng)進(jìn)行接收和處理,視頻解碼后,輸出2個(gè)獨(dú)立的顯示模式:全分辨率的TV主顯示,或者降采樣給VCR或DVD-R作為從顯示信號(hào)。采用ST7109構(gòu)建高清IPTV平臺(tái),只需較少的外圍器件,性價(jià)比高,其結(jié)構(gòu)如圖1所示。

圖1 ST7109用于IPTV的解決方案
基于ST7109的IPTV機(jī)頂盒作為一個(gè)嵌入式系統(tǒng),運(yùn)行Linux操作系統(tǒng),軟件開發(fā)采用交叉開發(fā)模式,即程序編寫和編譯在PC機(jī)上完成,編譯結(jié)果在嵌入式平臺(tái)上運(yùn)行,如圖2所示。

圖2 ST7109的開發(fā)環(huán)境
主機(jī)操作系統(tǒng)為L(zhǎng)inux,并安裝有相應(yīng)的開發(fā)軟件工具包(SDK)和串口通信軟件。主機(jī)通過串口1與開發(fā)板相連,用于輸出調(diào)試信息并實(shí)現(xiàn)開發(fā)板與主機(jī)的命令交互,也可以使用其來燒寫內(nèi)核、文件系統(tǒng)和設(shè)置U-Boot參數(shù);主機(jī)通過串口2來配置ST調(diào)試器的IP地址[3]。只有當(dāng)調(diào)試器具備可以在網(wǎng)絡(luò)上使用的IP地址時(shí),調(diào)試器才可以使用。ST仿真器連接開發(fā)板的JTAG口用于燒寫U-Boot、內(nèi)核和文件系統(tǒng)等,并可用于調(diào)試開發(fā)板。開發(fā)板上的操作系統(tǒng)使用的是ST公司提供的STLinux系統(tǒng),在開發(fā)過程中,使用NFS文件系統(tǒng)令開發(fā)板掛載主機(jī)上的文件系統(tǒng),以提高調(diào)試的便捷度。主機(jī)、仿真器、開發(fā)板均連接到1個(gè)路由器以實(shí)現(xiàn)網(wǎng)絡(luò)連接。
ST7109上的IPTV機(jī)頂盒系統(tǒng)采用交叉開發(fā)模式。其開發(fā)流程如下:
1)在開發(fā)主機(jī)上搭建交叉開發(fā)環(huán)境,比如交叉編譯工具的安裝、通信工具的配置等;
2)在開發(fā)主機(jī)上利用交叉編譯環(huán)境和相應(yīng)的嵌入式系統(tǒng)內(nèi)核(STLinux),根據(jù)所使用的硬件平臺(tái)和所需實(shí)現(xiàn)的功能,構(gòu)建一個(gè)嵌入式的Linux系統(tǒng)并生成內(nèi)核的二進(jìn)制文件映像;
3)構(gòu)建其根文件系統(tǒng),該系統(tǒng)只是開發(fā)過程中所使用的一個(gè)骨架,包含系統(tǒng)的基本配置文件和必要的系統(tǒng)支撐程序,使后續(xù)的開發(fā)在此基礎(chǔ)上不斷完善;
4)為了讓這個(gè)系統(tǒng)在板上運(yùn)行起來,使用內(nèi)核的引導(dǎo)加載程序(Bootloader)進(jìn)行硬件的初始化并將嵌入式Linux加載到內(nèi)存中運(yùn)行,在此基礎(chǔ)上進(jìn)行應(yīng)用程序的開發(fā)和調(diào)試。
開發(fā)平臺(tái)中主機(jī)環(huán)境的搭建分為以下幾步:
1)在安裝前配置主機(jī)的PATH參數(shù),通過修改root/.bash_profile文件來配置安裝工具的環(huán)境變量。這樣,在使用開發(fā)工具時(shí),就可以直接使用工具的名稱,而不必輸入完整的路徑。
2)進(jìn)行ST的STLinux開發(fā)工具LDDE(Linux Distribution Develop Environment)的安裝,既包含了STLinux的操作系統(tǒng)內(nèi)核,還帶有相關(guān)的開發(fā)環(huán)境,比如交叉編譯器、本地編譯器、調(diào)試器、下載工具等。在掛載相應(yīng)的.iso文件后,進(jìn)入安裝文件夾使用install命令安裝,安裝完成后得到opt/STM/STLinux-2.2文件夾,接下來將工具箱和內(nèi)核文件解壓安裝到相應(yīng)的文件夾下。
3)安裝 ST7109 的 SDK(STAPI),將 STAPI安裝文件解壓后,根據(jù)misc文件夾下的INSTALL-README.txt文檔進(jìn)行安裝配置。
4)串口通信參數(shù)的配置,使用的串口通信函數(shù)是kermit(),利用腳本文件.kermrc對(duì)其進(jìn)行如下配置:

內(nèi)核的配置主要是對(duì)內(nèi)核的功能模塊進(jìn)行選擇和參數(shù)設(shè)置,這一步驟通過進(jìn)入內(nèi)核源碼目錄,使用make menuconfig或make xconfig實(shí)現(xiàn)。在這里,通過menuconfig實(shí)現(xiàn),menuconfig界面是一個(gè)按照功能模塊分類的表單,以此選擇內(nèi)核需要支持的功能模塊。模塊前有2種配置符:“<>”與“[]”。對(duì)于“[]”對(duì)應(yīng)的模塊,可以通過空格切換為“*”和空置,用來表示此項(xiàng)目是否編入內(nèi)核;對(duì)于“<>”對(duì)應(yīng)的模塊,多了一種選項(xiàng)“M”,表示此項(xiàng)目編譯成內(nèi)核模塊,將生成一個(gè)獨(dú)立可加載的內(nèi)核模塊文件,可在需要時(shí)動(dòng)態(tài)載入[3]。
內(nèi)核配置中,在ST7109的默認(rèn)配置基礎(chǔ)上根據(jù)板子的具體特性進(jìn)行相應(yīng)的修改。最后,在編譯完成后將生成的內(nèi)核文件利用mkimage工具打包,供U-Boot燒錄。
對(duì)于該機(jī)頂盒嵌入式文件系統(tǒng),采用Ramdisk技術(shù),將系統(tǒng)內(nèi)存拿出一部分作為塊設(shè)備,將基本程序和數(shù)據(jù)以某種文件系統(tǒng)的二進(jìn)制映像形式,在內(nèi)核運(yùn)行前加載到該地址中。這樣,在內(nèi)核啟動(dòng)之后,該文件系統(tǒng)映像加載的內(nèi)存區(qū)域被內(nèi)核安裝為根文件系統(tǒng),這種Ramdisk就是所謂的初始RAM磁盤(Initrd)。
根文件系統(tǒng)中存放的是嵌入式Linux系統(tǒng)所需使用的基本應(yīng)用程序、庫(kù)以及系統(tǒng)配置等其他一些文件,根文件系統(tǒng)的制作主要包括以下幾個(gè)方面[3]:
1)頂層的目錄結(jié)構(gòu),包括頂層目錄下的bin,sbin,dev,etc,lib,proc,usr,var,tmp 和 sys文件。 同時(shí),還必須實(shí)現(xiàn)系統(tǒng)運(yùn)行時(shí)所需的基本軟件工具 (如ls,cp,mount等),這些可通過Busybox工具來實(shí)現(xiàn),Busybox是構(gòu)造文件系統(tǒng)最常用的一個(gè)軟件工具包,其配置方法與menuconfig類似。
2)設(shè)備節(jié)點(diǎn)。Linux系統(tǒng)中的設(shè)備也是以文件方式存取的,在Linux系統(tǒng)啟動(dòng)時(shí)所需的設(shè)備節(jié)點(diǎn)也必須加到根文件系統(tǒng)中。
3)inittab文件。inittab是init程序讀取的配置文件,通過執(zhí)行腳本實(shí)現(xiàn)系統(tǒng)必要的初始化。init程序是內(nèi)核啟動(dòng)后運(yùn)行的第一個(gè)程序,所有的應(yīng)用程序都是它的子進(jìn)程,在系統(tǒng)運(yùn)行期間一直駐留在內(nèi)存中運(yùn)行,直到系統(tǒng)關(guān)閉為止。
4)根文件系統(tǒng)制作完成后,可利用其生成initrd.img根文件系統(tǒng)鏡像,并用mkimage打包成initrd.ub以供UBoot燒錄。
在內(nèi)核映像和根文件系統(tǒng)映像創(chuàng)建好后,還必須有一個(gè)引導(dǎo)加載程序(Bootloader)負(fù)責(zé)硬件和內(nèi)存的初始化工作,并在系統(tǒng)啟動(dòng)前負(fù)責(zé)加載內(nèi)核和文件系統(tǒng)。Bootloader是系統(tǒng)加電后運(yùn)行的第一段軟件代碼,從功能上說,其在操作系統(tǒng)內(nèi)核運(yùn)行之前負(fù)責(zé)初始化硬件設(shè)備、建立內(nèi)存空間的映射圖。加載過程如圖3所示。

圖3 Bootloader加載原理
系統(tǒng)復(fù)位后從0x00000000地址開始運(yùn)行存放在Flash起始處的Bootloader。Bootloader啟動(dòng)后,初始化相應(yīng)的硬件設(shè)備,并將嵌入式Linux內(nèi)核及根文件系統(tǒng)映像分別加載到內(nèi)核中的正確位置,然后跳轉(zhuǎn)到內(nèi)核的起始地址啟動(dòng)內(nèi)核。
由于Bootloader和硬件緊密相關(guān),所以Bootloader幾乎都是對(duì)應(yīng)于單一的設(shè)備,但仍有某些Bootloader試圖把硬件相關(guān)的代碼與其他代碼相隔離,以支持多種體系結(jié)構(gòu)。如U-Boot就是這么一種Bootloader,它能在改動(dòng)不大的情況下支持多種體系結(jié)構(gòu)。
ST的SDK中提供了支持ST7109芯片的U-Boot,筆者利用其提供的標(biāo)準(zhǔn)文檔,針對(duì)開發(fā)的具體硬件設(shè)置對(duì)其進(jìn)行了修改,生成所需的U-Boot文件,用來燒錄到Flash中。
需要燒錄進(jìn)Flash中的文件共有3個(gè):U-Boot程序u-boot.bin、內(nèi)核映像vmlinux.ub和根文件系統(tǒng)映像initrd.ub。燒錄Flash是通過仿真器實(shí)現(xiàn)的,先連接好JTAG接口,然后在主機(jī)中運(yùn)行kermit連接仿真器。仿真器的端口設(shè)置完成后,使用Load命令將u-boot.bin下載到Flash當(dāng)中。下載成功后,U-Boot將自動(dòng)運(yùn)行,這時(shí)可通過U-Boot命令將內(nèi)核映像和根文件系統(tǒng)也寫到Flash中。
當(dāng)文件燒錄完成后,可根據(jù)需要,利用U-Boot設(shè)置開發(fā)板上的網(wǎng)絡(luò)地址、串口協(xié)議、啟動(dòng)參數(shù)等環(huán)境變量并保存,下次開發(fā)板上電時(shí)就能自動(dòng)啟動(dòng)系統(tǒng)了。
NFS文件系統(tǒng)基于客戶端/服務(wù)器模型,允許客戶端通過網(wǎng)絡(luò)共享遠(yuǎn)程主機(jī)的文件。在開發(fā)過程中使用NFS文件系統(tǒng),利用開發(fā)板調(diào)用主機(jī)中特定文件夾里的文件系統(tǒng)作為自身的根文件系統(tǒng),比使用Ramdisk開發(fā)調(diào)試方便。
NFS文件系統(tǒng)的配置包括主機(jī)的配置、嵌入式內(nèi)核的配置和U-Boot配置。在RedHat Linux中NFS的配置文件是ect/exports,本系統(tǒng)中的配置文件為/opt/STM/STLinux-2.2/target* (rw,no_rootsquash, sync)。
然后在內(nèi)核配置中打開對(duì)NFS的支持,最后在UBoot中設(shè)置內(nèi)核的啟動(dòng)參數(shù),其設(shè)置格式為bootargs_nfs=set bootargs${mem}${tty}root=/dev/nfs${nwhwconf}${stmmaceth}nfsroot=${serverip}∶${serverdir},${tcp_udp}ip=${ipaddr}。
利用ST7109芯片的開發(fā)板搭建開發(fā)平臺(tái),實(shí)現(xiàn)高清網(wǎng)絡(luò)視頻的播放功能以及基于XBMC框架的機(jī)頂盒系統(tǒng)。該高清機(jī)頂盒所支持的視頻格式范圍廣,目前能實(shí)現(xiàn)MPEG-2、H.264、VC-1格式1080i分辨力的視頻硬解碼播放[5-6],同時(shí),基于XBMC能實(shí)現(xiàn)大量其他音視頻格式的軟解碼播放功能以及多種娛樂功能[7-8]。為滿足最終IPTV業(yè)務(wù)的需要,未來仍需要在具體運(yùn)營(yíng)商的配合下開發(fā)其他業(yè)務(wù)功能。
[1]信息產(chǎn)業(yè)部.SJ/T 11324-2006-I,數(shù)字電視接收設(shè)備術(shù)語[S].北京:信息產(chǎn)業(yè)部,2006.
[2]袁冰.基于STx5105芯片的數(shù)字電視機(jī)頂盒設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連海事大學(xué)電子與通信工程系,2008.
[3]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)教程[M].北京:人民郵電出版社,2006.
[4]鄭靈翔.嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[5]尹明,王宏遠(yuǎn).VC-1 視頻編碼技術(shù)研究[J].電視技術(shù),2005(11):20-21.
[6]韓云,陳祖爵.H.264,VC-1和AVS視頻編碼研究[J].電視技術(shù),2007,31(2):6-9.
[7]李華.嵌入式IPTV流媒體播放器關(guān)鍵技術(shù)研究[D].西安:西北工業(yè)大學(xué)軟件工程系,2007.
[8]張濤.IPTV機(jī)頂盒流媒體系統(tǒng)研究[D].西安:西安電子科技大學(xué)計(jì)算機(jī)應(yīng)用技術(shù)系,2006.