龍 芬
(咸寧職業技術學院 工學院,湖北 咸寧 437100)
適用于嵌入式系統的DTV Linux設備框架構建
龍 芬
(咸寧職業技術學院 工學院,湖北 咸寧 437100)
構建了一種用于支持和控制DTV硬件的Linux設備驅動架構。之前LinuxTV由于用于PC TV卡而被廣泛認可,但在發布Linux DVB API V3時,卻沒有面向嵌入式系統應用的計劃。通過改善和代替Linux DVB,開發出具有簡化內核驅動定義良好的APIs層次化軟件體系。
DVB;LinuxTV;Linux DVB API;嵌入式Linux
在數字視頻廣播早期,STBs和iDTV的主要功能是接收、選擇和顯示數字視頻,這些基本功能那時就出現了互動服務,如局部互動(請求視頻)、連接其它消費服務及訪問Internet[1]。軟件必須靈活適應TV服務,并能支持各種新的多媒體格式。為了適應硬件平臺較短的生命周期,軟件體系必須確保新的硬件平臺推出時最少能適應現有軟件。然而,即使已經被確立為TV市場中領先的嵌入式操作系統,Linux內核仍然不能對一個數字TV系統功能完全支持。數字TV設備的內核支持僅限于LinuxTV工程,但它主要側重于基于PC的系統,而不是嵌入式TV平臺。
本文對DTV linux設備框架進行了改進,并命名為嵌入式LinuxTV(LTVe)。LTVe框架在LinuxTV工程基礎上進行了擴展,使其更適用于嵌入式Linux平臺,支持PC DVB擴展卡,專用于機頂盒(STB)芯片組和集成數字電視(IDTV)。
1.1 設備類型
Linux設備依據其功能可劃分為幾類,這些分類關系到設備如何與上層Linux文件系統和其它內核模塊集成。像大多數UNIX系統一樣,字符設備有許多功能調用,執行像read()、write()、ioctl()等操作[2]。根據這一機制,LTVe讓單個硬件塊以字符設備的形式訪問,圖1為典型SOC電視系統設備映射圖。

圖1 典型SOC電視系統的設備映射
LTVe設備類型如表1所示。在大多數TV系統中,一般通過硬件塊來定義。硬件支持的數據流方式都可以選擇合適的硬件功能塊。

表1 LTVe 設備類型
通常情況下,poll()和select()的系統調用一般發生在字符設備標志信息有效時,且將觸發應用程序[3-4]。實際上,由于沒有生成事件序列,這種方法效率非常低。為了實現DTV系統事件隊列,允許源和類型事件過濾,引入了特殊設備。同理,為克服用戶驅動程序太復雜,引入了驅動橋。該設備作為一種內核接口類型,是導出用戶空間DTV設備驅動框架的主要部分。
1.2 設備控件
對每一功能都定義了一套控件組。一般有兩個主要控件組:一個用于通用設備,另一個指定給補充設備。
1.2.1 連接
連接指通過傳遞源設備進行定義的源同步類型文件描述符。這些控件用來定義一個設備如何互相連接,以及如何同步數據流。每個連接遵循 “單輸入-多輸出”規則。因此,每次只能有一個輸入設備。
1.2.2 數據訪問
數據訪問是指訪問用戶應用程序的數據處理接口。為了獲得流設備數據,應用程序必須使用read()調用,或內存設備的mmap()調用以及直接訪問數據。后一種方法優化了數據的訪問,因為沒有將數據額外復制到應用程序緩沖區。為了從之前的mmap()區域訪問數據,應用程序需要執行3個步驟:①從定位數據的設備獲得信息;②讀數據;③釋放讀出的數據。
1.2.3 內存輸入
由于類型輸入可讓應用程序寫數據流到設備,因此在重放多媒體內容時可以對硬件進行加速。一般應用中,運行時可配置雙緩沖區作為解碼器輸入,因為只有部分緩沖區能用來發送數據給給定設備。為了考慮這些硬件上的局限,嵌入式內存接口主要依賴于底層硬件模塊,由作為設備源的內存輸入激活。由于用戶內存和任意硬件緩沖區的自由配置需要一個解碼設備輸入的硬件平臺,為了支持這種系統,內存設備類型定義為直接的連接源,分配到其它設備中。
1.2.4 實時控制
控制接口主要用于配置和安裝硬件設備正常運行,一般能控制所有設備活動。實時控制能啟動、停止或暫停設備,同時控制運行狀態,且DTV設備框架能獲得當前設備狀態或狀態變化情況。
LTVe設備框架由硬件接口和內核編程接口兩部分組成。DTV軟件體系框架如圖2所示。
2.1 LTVe核
該組件使用Linux設備驅動模型和字符設備給用戶空間。它執行系統初始化,對每個框架內的設備進行注冊,以及將一部分用戶空間轉換成LTVe驅動接口[5]。LTV設備作為字符設備應用于 /dev/dvb/adapterN/tree中。

圖2 DTV軟件體系框架
基于Linux的DTV系統中,大部分軟件棧和模塊是從PC系統繼承和吸收過來的。因此,應用程序同時運行不太多,這和之前有較大不同。RTOS被編譯成單一的TV應用程序系統[6]。LTVe利用SysFS接口從系統shell配置框架,在運行應用程序上獨立控制設備活動。對每一個LTVe,都會創建注冊屬性列表的SysFS節點。使用這個接口,可以監視特定設備的運行狀態。
2.2 LTVe管理器
這個組件的創建和控制行為包含在框架里。為了統一LTVe設備行為,定義了一些基本原則:每個設備在寫使用權限時可以同時有限次打開,但對每個設備來說,只能設置一個輸入數據源,且輸入源只能是其它LTVe設備。
LTVe管理模塊實現了對通用邏輯數據流的定義。數據通路通過源設備至目標設備的源文件描述符來創建。LTVe管理將通過文件描述符進行檢查,僅在被識別為LTVe框架時對數據通路進行定義。在初始化連接前,為了確保正確的初始狀態,LTVe幫助設備釋放之前的數據源,此過程中設備處于非激活狀態。
每當要建立數據通路時,LTVe管理會先調用生產設備的set_feed,如果連通可行則執行查詢請求。set_input調用被執行,設備驅動會為輸入接口選擇一個合適的配置。
2.3 LTVe驅動器
該模塊為LTVe驅動開發定義了內核編程接口。圖3描述了LTVe內部結構之間的相互連接,并描述了不同設備類型如何與LTVe通訊。

圖3 LTVe驅動系統
2.4 LTVe橋
LTVe橋是為現有LTVe驅動編程接口的插件[7]。它是一個通用設備節點,模擬被LTVe驅動鉤子轉換的注冊設備類型,ioctl調用被定義為 /bridge設備,每個LTVe驅動鉤子匹配ioctl調用。數據流通過申請mmap()調用內部硬件緩沖區。橋設備的注冊處理將產生兩個設備節點:①dev/dvb/adapterN/bridge 作為用戶通訊接口的通用節點; ②dev/dvb/adapterN/xxxM LTVe設備節點,這里xxx以合適的設備類型代替(如video2)。
當需要在用戶空間運行監聽時,LTVe監聽/bridge設備通過橋接口重構內核調用,且以共享庫形式實現。這種機制確保了系統能夠成功通訊,實現LTVe橋驅動的數據流動。
本文提出的DTV驅動框架(LTVe)已成功移植到基于300MHz MIPS32內核的商業SoC數字電視產品線的ICs中,目前LTVe框架電視應用程序可通過第三方商業DVB和MHEG支持的DVB軟件庫來開發,這表明LTVe框架是可行的。
為開發數字電視驅動和應用程序接口,本文提出了Linux DVB設備框架軟件架構。本架構優點在于在驅動開發中完全脫離Linux內核,并且對不同硬件平臺有統一的DVB功能表現形式。采用Linux TV能極大縮短設計和開發時間,減少開發成本。
[1] 徐儉.數字電視接收機頂盒淺析[J].有線電視技術,2003(3):152-156.
[2] 李叢.基于Linux的嵌入式操作系統的研究與實現[D].北京:北京化工大學,2008.
[3] 田棣.嵌入式Linux下機頂盒驅動程序的開發[D].天津:天津大學,2004.
[4] 王拯.數字電視機頂盒關鍵模塊設計與實現[D].武漢:華中科技大學,2009.
[5] 劉洪濤.基于嵌入式Linux的IPTV機頂盒設計實現與關鍵技術研究[D].西安:西安電子科技大學,2007.
[6] 胡煒.數字機頂盒Linux平臺軟件的設計與實現[D].上海:上海交通大學,2006.
[7] SAN PIL MOON,JOO WOON KIM,KUK-HO BAE,et al.Embeded Linux implementation on a commercial digital TV system[J].Consumer Electronics,2003,49(4):155-159.
(責任編輯:杜能鋼)
龍芬(1984-),女,湖南祁東人,咸寧職業技術學院工學院講師,研究方向為自動測試系統。
10.11907/rjdk.162622
TP319
A
1672-7800(2017)003-0091-03