田 莎
(廈門理工學院 電子與電器工程系,福建 廈門 361000)
隨著因特網(wǎng)和流媒體技術的迅速發(fā)展,出現(xiàn)了網(wǎng)絡電視(IPTV)這種融合互聯(lián)網(wǎng)和傳統(tǒng)電視的新業(yè)務。IPTV通過寬帶網(wǎng)絡,向家庭用戶提供包括數(shù)字電視在內(nèi)的多種交互式服務。高清電視(HDTV)[1]相對于目前的標清電視節(jié)目而言,在圖像質(zhì)量上有質(zhì)的提高,其畫面更加清晰,更具有視覺沖擊力,大大提高用戶對IPTV業(yè)務的認同感,是IPTV業(yè)務發(fā)展的必然趨勢。ST7109芯片是一款高集成度的高清機頂盒解碼芯片,采用其構建高清IPTV平臺,性能高且成本低,同時支持多種視頻格式和多樣化的機頂盒功能,適應不同業(yè)務需求。
ST7109芯片支持MPEG-2,H.264和VC-1等多種標準的高清視頻解碼。不僅應用于地面、衛(wèi)星和有線數(shù)字電視機頂盒,且應用于DSL和IP客戶端高清機頂盒。ST7109包含嵌入式CPU ST40-202、系統(tǒng)碼流解復用、視頻解碼、音頻解碼、SDRAM/Flash控制器、USB2.0接口、以太網(wǎng)接口等。能解密并解碼高清或標清的音視頻系統(tǒng)碼流,通過SATA接口實現(xiàn)接收和處理。解復用后,視頻流通過TS子系統(tǒng)進行接收和處理,視頻解碼后,輸出2個獨立的顯示模式:全分辨率的TV主顯示,或者降采樣給VCR或DVD-R作為從顯示信號。采用ST7109構建高清IPTV平臺,只需較少的外圍器件,性價比高,其結構如圖1所示。
圖1 ST7109用于IPTV的解決方案
基于ST7109的IPTV機頂盒作為一個嵌入式系統(tǒng),運行Linux操作系統(tǒng),軟件開發(fā)采用交叉開發(fā)模式,即程序編寫和編譯在PC機上完成,編譯結果在嵌入式平臺上運行,如圖2所示。
圖2 ST7109的開發(fā)環(huán)境
主機操作系統(tǒng)為Linux,并安裝有相應的開發(fā)軟件工具包(SDK)和串口通信軟件。主機通過串口1與開發(fā)板相連,用于輸出調(diào)試信息并實現(xiàn)開發(fā)板與主機的命令交互,也可以使用其來燒寫內(nèi)核、文件系統(tǒng)和設置U-Boot參數(shù);主機通過串口2來配置ST調(diào)試器的IP地址[3]。只有當調(diào)試器具備可以在網(wǎng)絡上使用的IP地址時,調(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ā)板掛載主機上的文件系統(tǒng),以提高調(diào)試的便捷度。主機、仿真器、開發(fā)板均連接到1個路由器以實現(xiàn)網(wǎng)絡連接。
ST7109上的IPTV機頂盒系統(tǒng)采用交叉開發(fā)模式。其開發(fā)流程如下:
1)在開發(fā)主機上搭建交叉開發(fā)環(huán)境,比如交叉編譯工具的安裝、通信工具的配置等;
2)在開發(fā)主機上利用交叉編譯環(huán)境和相應的嵌入式系統(tǒng)內(nèi)核(STLinux),根據(jù)所使用的硬件平臺和所需實現(xiàn)的功能,構建一個嵌入式的Linux系統(tǒng)并生成內(nèi)核的二進制文件映像;
3)構建其根文件系統(tǒng),該系統(tǒng)只是開發(fā)過程中所使用的一個骨架,包含系統(tǒng)的基本配置文件和必要的系統(tǒng)支撐程序,使后續(xù)的開發(fā)在此基礎上不斷完善;
4)為了讓這個系統(tǒng)在板上運行起來,使用內(nèi)核的引導加載程序(Bootloader)進行硬件的初始化并將嵌入式Linux加載到內(nèi)存中運行,在此基礎上進行應用程序的開發(fā)和調(diào)試。
開發(fā)平臺中主機環(huán)境的搭建分為以下幾步:
1)在安裝前配置主機的PATH參數(shù),通過修改root/.bash_profile文件來配置安裝工具的環(huán)境變量。這樣,在使用開發(fā)工具時,就可以直接使用工具的名稱,而不必輸入完整的路徑。
2)進行ST的STLinux開發(fā)工具LDDE(Linux Distribution Develop Environment)的安裝,既包含了STLinux的操作系統(tǒng)內(nèi)核,還帶有相關的開發(fā)環(huán)境,比如交叉編譯器、本地編譯器、調(diào)試器、下載工具等。在掛載相應的.iso文件后,進入安裝文件夾使用install命令安裝,安裝完成后得到opt/STM/STLinux-2.2文件夾,接下來將工具箱和內(nèi)核文件解壓安裝到相應的文件夾下。
3)安裝 ST7109 的 SDK(STAPI),將 STAPI安裝文件解壓后,根據(jù)misc文件夾下的INSTALL-README.txt文檔進行安裝配置。
4)串口通信參數(shù)的配置,使用的串口通信函數(shù)是kermit(),利用腳本文件.kermrc對其進行如下配置:
內(nèi)核的配置主要是對內(nèi)核的功能模塊進行選擇和參數(shù)設置,這一步驟通過進入內(nèi)核源碼目錄,使用make menuconfig或make xconfig實現(xiàn)。在這里,通過menuconfig實現(xiàn),menuconfig界面是一個按照功能模塊分類的表單,以此選擇內(nèi)核需要支持的功能模塊。模塊前有2種配置符:“<>”與“[]”。對于“[]”對應的模塊,可以通過空格切換為“*”和空置,用來表示此項目是否編入內(nèi)核;對于“<>”對應的模塊,多了一種選項“M”,表示此項目編譯成內(nèi)核模塊,將生成一個獨立可加載的內(nèi)核模塊文件,可在需要時動態(tài)載入[3]。
內(nèi)核配置中,在ST7109的默認配置基礎上根據(jù)板子的具體特性進行相應的修改。最后,在編譯完成后將生成的內(nèi)核文件利用mkimage工具打包,供U-Boot燒錄。
對于該機頂盒嵌入式文件系統(tǒng),采用Ramdisk技術,將系統(tǒng)內(nèi)存拿出一部分作為塊設備,將基本程序和數(shù)據(jù)以某種文件系統(tǒng)的二進制映像形式,在內(nèi)核運行前加載到該地址中。這樣,在內(nèi)核啟動之后,該文件系統(tǒng)映像加載的內(nèi)存區(qū)域被內(nèi)核安裝為根文件系統(tǒng),這種Ramdisk就是所謂的初始RAM磁盤(Initrd)。
根文件系統(tǒng)中存放的是嵌入式Linux系統(tǒng)所需使用的基本應用程序、庫以及系統(tǒng)配置等其他一些文件,根文件系統(tǒng)的制作主要包括以下幾個方面[3]:
1)頂層的目錄結構,包括頂層目錄下的bin,sbin,dev,etc,lib,proc,usr,var,tmp 和 sys文件。 同時,還必須實現(xiàn)系統(tǒng)運行時所需的基本軟件工具 (如ls,cp,mount等),這些可通過Busybox工具來實現(xiàn),Busybox是構造文件系統(tǒng)最常用的一個軟件工具包,其配置方法與menuconfig類似。
2)設備節(jié)點。Linux系統(tǒng)中的設備也是以文件方式存取的,在Linux系統(tǒng)啟動時所需的設備節(jié)點也必須加到根文件系統(tǒng)中。
3)inittab文件。inittab是init程序讀取的配置文件,通過執(zhí)行腳本實現(xiàn)系統(tǒng)必要的初始化。init程序是內(nèi)核啟動后運行的第一個程序,所有的應用程序都是它的子進程,在系統(tǒng)運行期間一直駐留在內(nèi)存中運行,直到系統(tǒng)關閉為止。
4)根文件系統(tǒng)制作完成后,可利用其生成initrd.img根文件系統(tǒng)鏡像,并用mkimage打包成initrd.ub以供UBoot燒錄。
在內(nèi)核映像和根文件系統(tǒng)映像創(chuàng)建好后,還必須有一個引導加載程序(Bootloader)負責硬件和內(nèi)存的初始化工作,并在系統(tǒng)啟動前負責加載內(nèi)核和文件系統(tǒng)。Bootloader是系統(tǒng)加電后運行的第一段軟件代碼,從功能上說,其在操作系統(tǒng)內(nèi)核運行之前負責初始化硬件設備、建立內(nèi)存空間的映射圖。加載過程如圖3所示。
圖3 Bootloader加載原理
系統(tǒng)復位后從0x00000000地址開始運行存放在Flash起始處的Bootloader。Bootloader啟動后,初始化相應的硬件設備,并將嵌入式Linux內(nèi)核及根文件系統(tǒng)映像分別加載到內(nèi)核中的正確位置,然后跳轉到內(nèi)核的起始地址啟動內(nèi)核。
由于Bootloader和硬件緊密相關,所以Bootloader幾乎都是對應于單一的設備,但仍有某些Bootloader試圖把硬件相關的代碼與其他代碼相隔離,以支持多種體系結構。如U-Boot就是這么一種Bootloader,它能在改動不大的情況下支持多種體系結構。
ST的SDK中提供了支持ST7109芯片的U-Boot,筆者利用其提供的標準文檔,針對開發(fā)的具體硬件設置對其進行了修改,生成所需的U-Boot文件,用來燒錄到Flash中。
需要燒錄進Flash中的文件共有3個:U-Boot程序u-boot.bin、內(nèi)核映像vmlinux.ub和根文件系統(tǒng)映像initrd.ub。燒錄Flash是通過仿真器實現(xiàn)的,先連接好JTAG接口,然后在主機中運行kermit連接仿真器。仿真器的端口設置完成后,使用Load命令將u-boot.bin下載到Flash當中。下載成功后,U-Boot將自動運行,這時可通過U-Boot命令將內(nèi)核映像和根文件系統(tǒng)也寫到Flash中。
當文件燒錄完成后,可根據(jù)需要,利用U-Boot設置開發(fā)板上的網(wǎng)絡地址、串口協(xié)議、啟動參數(shù)等環(huán)境變量并保存,下次開發(fā)板上電時就能自動啟動系統(tǒng)了。
NFS文件系統(tǒng)基于客戶端/服務器模型,允許客戶端通過網(wǎng)絡共享遠程主機的文件。在開發(fā)過程中使用NFS文件系統(tǒng),利用開發(fā)板調(diào)用主機中特定文件夾里的文件系統(tǒng)作為自身的根文件系統(tǒng),比使用Ramdisk開發(fā)調(diào)試方便。
NFS文件系統(tǒng)的配置包括主機的配置、嵌入式內(nèi)核的配置和U-Boot配置。在RedHat Linux中NFS的配置文件是ect/exports,本系統(tǒng)中的配置文件為/opt/STM/STLinux-2.2/target* (rw,no_rootsquash, sync)。
然后在內(nèi)核配置中打開對NFS的支持,最后在UBoot中設置內(nèi)核的啟動參數(shù),其設置格式為bootargs_nfs=set bootargs${mem}${tty}root=/dev/nfs${nwhwconf}${stmmaceth}nfsroot=${serverip}∶${serverdir},${tcp_udp}ip=${ipaddr}。
利用ST7109芯片的開發(fā)板搭建開發(fā)平臺,實現(xiàn)高清網(wǎng)絡視頻的播放功能以及基于XBMC框架的機頂盒系統(tǒng)。該高清機頂盒所支持的視頻格式范圍廣,目前能實現(xiàn)MPEG-2、H.264、VC-1格式1080i分辨力的視頻硬解碼播放[5-6],同時,基于XBMC能實現(xiàn)大量其他音視頻格式的軟解碼播放功能以及多種娛樂功能[7-8]。為滿足最終IPTV業(yè)務的需要,未來仍需要在具體運營商的配合下開發(fā)其他業(yè)務功能。
[1]信息產(chǎn)業(yè)部.SJ/T 11324-2006-I,數(shù)字電視接收設備術語[S].北京:信息產(chǎn)業(yè)部,2006.
[2]袁冰.基于STx5105芯片的數(shù)字電視機頂盒設計與實現(xiàn)[D].大連:大連海事大學電子與通信工程系,2008.
[3]謝希仁.計算機網(wǎng)絡教程[M].北京:人民郵電出版社,2006.
[4]鄭靈翔.嵌入式系統(tǒng)設計與應用開發(fā)[M].北京:北京航空航天大學出版社,2006.
[5]尹明,王宏遠.VC-1 視頻編碼技術研究[J].電視技術,2005(11):20-21.
[6]韓云,陳祖爵.H.264,VC-1和AVS視頻編碼研究[J].電視技術,2007,31(2):6-9.
[7]李華.嵌入式IPTV流媒體播放器關鍵技術研究[D].西安:西北工業(yè)大學軟件工程系,2007.
[8]張濤.IPTV機頂盒流媒體系統(tǒng)研究[D].西安:西安電子科技大學計算機應用技術系,2006.