1. 簡介:
數字電視是在電視信號產生后的處理、傳送、接收、記錄等過程都采用數字技術的電視。在設計數字電視系統時,應用于傳統模擬電視系統中的硬件,不能滿足音頻、視頻和數據處理等功能的需要,因此,數字電視系統需要更高性能的處理器和大規模的存儲器。嵌入式操作系統可以有效的管理這些硬件資源。
本文將嵌入式linux操作系統移植到一個數字電視上,使其能夠接收數字廣播節目。為了將操作系統移植到數字電視系統上,需要修改內核和交叉開發環境,重新設計基本的設備驅動,配置系統的存儲器映像以便加載內核到主存儲器中,并且設計一個總線接口設備的驅動程序來控制整個系統。
2. 數字電視操作系統
數字電視比模擬電視能夠提供更優質的電視圖像和更多的視頻服務。它采用改進的掃描線和水平清晰度獲得高質量的視頻效果,同時采用AC3或MPEG2壓縮技術來獲得高質量的音頻效果。數字電視的節目不但便于存儲,而且還可以通過眾多的媒介進行傳播。因此,數字電視系統需要處理大量的數據。如在EPG(電子節目指南)服務中,被提取出來的數據被修改并存儲后作為一個畫面打印至OSD(屏幕菜單式調節)界面,在這個過程中需要靠操作系統來不斷地接收到被篩選、存儲后的信號,同時產生屏幕畫面。
市場上的數字電視系統包括如pSOSTM (Windriver Inc.)等的商業操作系統,這些系統具有高可靠性和最優化的特點,但要支付昂貴的版稅。如果在數字電視系統中使用嵌入式linux操作系統,則不用支付版稅費用。嵌入式linux操作系統還有其他一些優點,如有開放源代碼的設備驅動程序及應用程序的存在,大大縮短了開發時間;利用shell、文件系統及模塊功能方便了開發環境的配置;許多問題可以在開源社區得到快速解決等。
3. 商業數字電視系統
數字電視的結構
數字電視系統包括數字處理模塊、視頻處理模塊、射頻模塊、LCD驅動模塊和模擬輸出模塊,其結構如圖1所示。
數字處理模塊負責控制其它模塊和執行程序。它由MCU、SDRAM、FLASH存儲器、UART、I2C總線接口構成。視頻處理模塊把從射頻模塊捕獲的數據解碼生成視頻、音頻和文本消息。它由一個信號處理單元(SPU)和一個SDRAM構成,SDRAM中包含被顯示的數據幀。射頻模塊接收數字廣播信號,并且將該信號解調成數據流。LCD驅動模塊控制LCD面板。模擬輸出模塊控制視頻-音頻信號輸出和輸出信號。數字處理模塊通過I2C總線,控制射頻模塊、LCD模塊和模擬輸出模塊,同時通過DMA控制視頻處理模塊。
硬件構成
在數字電視系統中,數字處理模塊的核心是ARM7TDMITM,它不包括MMU(存儲器管理單元)。在數字電視系統中MCU只支持大端格式[5],存儲器映射由MCU內的系統管理寄存器來配置,在系統運行之前,嵌入式linux內核運行在flashROM中,當系統運行時,內核被拷入ram中。除了ROM和RAM外,外設也經常被使用。這些設備被映射到一個線性存儲器映射單元,且可以按同樣的方式尋址。。MCU的中斷控制器包括21個中斷資源(其中17個來自內部設備,4個來自外部設備)。數字處理模塊中的定時器是一個32位的間隔模式定時器。在系統中用串口設備如UART(通用異步收發器)來打印啟動過程中的消息和程序出錯信息,由于射頻模塊、LCD驅動模塊、模擬輸出模塊都是由MCU通過I2C總線控制,因此,在MCU和I2C串行總線之間需要一個接口。在這里使用PCF8584 (Philips Inc.)。圖2描述了MCU和I2C總線之間的連接。
圖2 MCU和I2C總線之間的連接
4.linux系統移植
在這一部分中,我們將解釋linux操作系統的移植順序。包括修改內核初始化代碼和編寫設備驅動程序。
4.1重建內核初始化代碼
為了將linux內核加載到嵌入式系統中,有必要修改與硬件相關的內核初始化代碼。這個過程包括設置存儲器映射以便加載內核映像,以及為支持內核的運行而修改設備驅動程序。
4.1.1設置存儲器映射
Linux內核映像是一種壓縮文件,存放在flash存儲器中,執行時被拷貝到SDRAM中并解壓。圖3描述了內存映像的加載順序。
系統復位時,CPU只能接受flash ROM空間的代碼,同時執行位于flash ROM底層的bootloader,它負責從主機端下載代碼并且將代碼存儲到flashROM中。
1)bootloader將主機的linux內核拷貝到數字處理模塊上的SDRAM中。
2)SDRAM中被下載的linux內核映像被存儲在flash ROM中位于bootloader頂層的空間中。
3)系統初始化,同時,bootloader調用linux映像內的一段執行代碼(head.o),將全部flash ROM空間中的內容拷貝到SDRAM中。
4)CPU利用系統管理寄存器,將flash ROM中的初始地址空間與SDRAM的初始地址空間相交換。
當flash ROM中的映像被加載到SDRAM之后,無需改變程序計數器就可以執行代碼(head.o)。圖4中顯示了最終的存儲器映射。
拷貝到SDRAM中的linux映像可解壓執行,為了完成釋放功能,需要一些存儲器空間,例如符號開始段、用戶堆棧、分配的內存等。在這些空間中,一個壓縮的linux內核映像被解壓工具釋放出來,被釋放的代碼位于被分配的內存空間的下一地址。
4.1.2 內核需要的設備
內核需要的基本設備包括中斷控制器、定時器和控制臺設備。這些設備被映像到MCU的內部寄存器中,通過修改內部寄存器而提供必要的功能。
4.2設備驅動的設計
數字電視系統包括視頻處理設備和模擬輸出設備以及內核所必須的設備,本文為I2C總線接口(PCF8584)設計一個設備驅動。PCF8584設備驅動包括接口模塊、內核模塊、算法模塊、適配器模塊,如圖5所示。
接口模塊提供設備驅動程序與應用程序之間的接口,定義設備文件操作(open, read, write, ioctl,release)以及初始化設備文件(/dev/i2c0);內核模塊用來增加或移除適配器、定義I2C總線的功能以及初始化包含系統信息的文件系統(/proc);算法模塊用來初始化PCF8584設備以及定義PCF8584的函數(i2c_start,i2c_stop(), wait_for_pin());適配器模塊通過被映射到MCU的存儲器地址將數據傳送到MCU。
為了驅動PCF8584接口設備,需要對模塊進行初始化。在通常的linux系統中,設備驅動在運行時載入和初始化,而在嵌入式linux系統中,設備驅動將在啟動階段被加載和初始化。4個模塊的初始化程序被存儲在“.init”段的“_init”處,由“do_initcalls()”函數在啟動時調用執行。控制數據從接口模塊開始,依次經內核模塊、算法模塊、適配器模塊傳送。接口模塊接收應用程序的請求(open, write, read, ioctl),調用內核模塊的接口程序(master_send(), master_receive(),transfer()),同時傳遞參數。內核模塊將從地址、標記位、信息長度等數據傳送到算法模塊。算法模塊檢查I2C總線的狀態和從地址,設置PCF8584的控制寄存器。最后,適配器模塊從被映射到外部總線的地址空間中讀寫數據。
5.系統構建
為了移植linux操作系統,我們首先在主機端安裝一個交叉開發環境,然后在供測試的目標板上安裝一個測試環境,測試好后,再移植到數字電視系統上。
5.1安裝交叉開發環境
在裁減和定制Linux,運用于你的嵌入式系統之前,由于一般嵌入式開發系統存儲大小有限,通常需要在強大的pc機上建立一個用于目標機的交叉編譯環境。這是一套編譯器、連接器和libc庫等組成的開發環境。圖6描述了交叉開發環境的安裝過程。
要制作二進制linux映像文件,首先應制作二進制連接器、匯編器和其它目標工具。然后,用 make menuconfig配置內核,此時在內核目錄中將生成include/linux/version.h 和 include/linux/autoconf.h 文件。注意,由于數字電視系統的MCU只支持大端存儲器格式,所以,應在內核庫中做相應修改。第三步是制作交叉編譯器(gcc)和c庫(glibc)。由于兩者是相互依賴的關系,可以先制作一個不帶glibc的gcc,然后用交叉編譯器創建一個glibc,再重新編譯這個帶glibc的gcc。第四步,由于移植好的linux運行在只讀存儲器中,所以需要安裝用于制作二進制文件系統映像的工具(genromfs),和一個用于將elf格式(通用文件格式)轉換為flt格式(扁平格式)的工具。
5.2開發環境
系統開發環境包括測試板的SNDS100TM(Samsung)、用于遠程調試的JEENITM (Jtag EmbeddedICE Ethernet Interface)、數字電視機主板等。表1列出了開發環境的各個部分。
表1 開發環境
組成部分 功能
測試板
三星 s3c4510B (ARM 7TDMI),16M字節的SDRAM, 1M字節的flashROM, LED, RJ45連接器. 網絡應用開發板
數字電視主板 三星s3c4500(ARM 7TDMI),16M字節的SDRAM, 8M字節的flashROM, pcf8584, SPU (LG electronics),32M字節SDRAM. 數字處理模塊
JEENITM EPI, 兩個硬件斷點,以太網主機接口,內部的ARM 710A高速緩沖存儲器 遠端調試環境
軟件
gcc-2.95.3, glibc-2.1.3, binutils-2.12, genromfs-0.5.1, elf2flt, gdb-5.0, ADS(ARMTM Developer Suite),evaluation ver. 1.1 交叉開發和調試的工具
在主機中制作一個二進制的linux內核映像,將其通過串口線傳送到開發板上。利用JEENI來安裝遠端調試環境。由于flash ROM中的boot塊被保護,不能修改,因此我們需要將它與數字電視主板分開,在flash ROM中燒入一個bootloader后再安裝到主板上。
通過這一實驗,可以通過PCF8584控制音頻輸出。也就是說,I2C總線的從設備將數字信號轉換為音頻輸出信號。最終,我們可以聽到蜂鳴聲,也可以通過數字示波器來檢測I2C總線信號。
參考文獻
[1] Korea Broadcasting System 2001th annual report-data broadcasting
http://tri.kbs.co.kr/pdf/publish/01/6.pdf.
[2] Digital Video Broadcasting (DVB): Specification for Service Information (SI) in DVB systems, ETSI EN 300 468 V1.5.1.
[3] ATSC Digital Television Standard, Rev.B, ATSC Standard A/53B with Amendment 1.
[4] 田澤,于敦山,盛世敏.ARM SoC體系結構.北京:北京航空航天大學出版社,2003
[5] s3c4510B用戶手冊,http://www.samsung.com/Products/Semiconductor/SystemLSI/Networks/Personal/NTASSP/CommunicationProcessor/S3C4510B/um_s3c4510b_rev1.pdf
[6] Embedded Linux/Microcontroller Project, http://www.uclinux.org/description.
[7] Sang-Pil Moon, Joo-Won Kim, Kuk-Ho Bae, Jae-Cheon Lee,Dae-Wha Seo. Embedded Linux Implementation on a Commercial Digital TV System.Consumer Electronics, IEEE Transactions on Volume 49,Issue 4, Nov. 2003