文/林福德
數字高清電視系統中Linux驅動的基本結構及應用
文/林福德
數字高清電視保留了對傳統的模擬信號進行抽樣、量化和編碼后轉換成的二進制數字式信號,也支持對目前主流數字媒體設備的數字信號處理,同時也向互聯網應用、人機交互、智能家居和客戶定制等方向發展,基于Linux系統的電視方案中Linux驅動發揮著重要的作用。文章首先對Linux驅動進行了介紹,然后對Linux驅動的基本結構進行了分析,最后對Linux驅動的使用方法進行了探討,為相關人員提供借鑒。
數字高清電視系統 Linux驅動 驅動設備加載
在Linux系統中設備驅動程序是硬件設備的控制代碼,基于Linux的數字高清電視系統中如果沒有Linux驅動,那么就無法保證運行系統的功能。文章重點對數字高清電視系統中Linux驅動的基本結構和使用方法進行分析和探討。
Linux是一種利用POSIX操作的系統,有著BSD和SYSV兩種特征。相比其它系統,Linux具有連接用戶多、擁有多種平臺及有虛擬內存等優勢,再加上其源代碼經常不關閉,用戶在使用時可以根據不同的需求選擇操作系統,進而能夠很好地滿足用戶各種需求。另外,由于Linux是一款免費軟件,系統所花費成本相對較低,而且可以根據用戶需求進行剪裁,所以相比于其他系統有著很好的實用性及穩定性,在軟件開發時越來越多的人通過Linux平臺進行開發研究。
Linux系統主要分為下面幾種:字符設備以及網絡設備等。不同的模塊與不同的設備相互對應,同時也可以將模塊分為不同的模塊。但是這種分類不是十分嚴格。
(1)字符設備是一種可以同字節流一樣進行訪問的設備,利用相應的程序來完成。字符設備驅動程序可以在不同設備中隨意使用打開、關閉、讀取和編輯等系統調用。字符終端(/dev/console)和串口(/dev/ttys0以及類似設備)就可以較好的顯示成流抽象索。在進行訪問時可以利用文件系統節點(比如/dev/tty1和/dev/mtd0等),以 fl ash的mtd設備為例操作單元小到字節,分區只須擦除一次就可以順序寫數據直至所有空間都寫滿才需要重新擦除后再寫,所以小數據操作時只要管理算法得當就能很大程度上提高設備的使用壽命;常用的文件在進行訪問時,指針可以隨意移動,字符設備進行訪問時遵守一定的次序,指針不能進行移動;有的設備性能與其具有一定的相似性,在進行訪問時指針也能夠隨意移動,就像幀抓取器在訪問時指針可以隨意移動。

圖1:將模塊存入內核
(2)模塊設備與字符設備相同,模塊設備在進行訪問時是利用/dev目錄來進行訪問。模塊設備(就像磁盤)可以承載一些系統。在許多Unix系統運行過程中,模塊設備都是以整數形式存在的,但是每個設備之間也有著差異性。
Linux可以使程序進行讀寫時像字符設備一樣,可以一次性傳送多種字符,所以模塊設備與字符設備的不同之處就是數據管理的方式,即設備所連接的接口不同。與字符設備相同,模塊設備在進行訪問時也需要通過節點,用戶使用時會明顯發現它們間的不同之處,以flash的mtdblock設備為例操作的最小單元是block,寫每個block之前都必須先擦除原有數據,較大數據量的操作時在速度上比字符設備會有很大的優勢。模塊設備不僅能給內核提供接口,還能夠向模塊設備提供接口,但是在dev目錄中打開是不能發現這些接口的。除此之外模塊設備如果不支持掛裝文件系統,就不能進行相應操作。
(3)在進行網絡訪問時都需要通過一個接口,即能夠與其它主機進行數據共享的設備。一般將硬件來作為接口,也可以是一個軟件設備,就像回環接口一樣。網絡接口的運行需要通過系統驅動來完成,以此來保證數據間的傳遞,完全不用了解數據傳遞的運行原理。最后Telnet以FTP連接都由一個設備來進行,但是只能看到數據包,由于使用的設備都不是面向流的設備,所以把運行接口應用到不同的設備(比如/dev/tty1)不容易。
Linux是通過模塊的形式進行連接的設備,即每個模塊都有著自己的程序,設備驅動程序應當給Linux的中心或者所屬系統提供一個程序。
設備驅動在運行的過程中經常需要用到函數init_module(),這個函數負責設備的初始化運行。其有著很重要的作用就是在系統中進行注冊,在注冊的過程中經常會用到register_ chrdev()以及register_blkdev()。注冊完成后,這個設備就會得到自己的設備號,而且還與文件產生了聯系。這跟PCI、USB設備進行注冊的時候有些差異。設備驅動在進行刪除時會將數據回收,然后會在系統中注銷相應的賬號,字符設備調用unregister_chrdev()、模塊設備調用unregister_blkdev()。調用insmod進行模塊的使用過程中設備會自動通過初始化函數保存數據,調用rmmod刪除這個模塊時會自動通過注銷函數來進行設備的卸載,除此之外用戶還可以通過lsmod命令來獲取已經加載過的模塊數據。系統對數據的獲取就是設備具體的操作過程,就像open、read、write、ioctl等設備的使用過程。圖1是設備模塊的掛接、刪除和數據保存的具體流程。
(1)設備驅動就是利用函數:open()、close()、read()、write()、ioctl()的過程來進行的。在進行操作的時候,open會啟動模塊,模塊開始運行,close是關閉這個模塊,這整個操作都是在read、write之中進行的,而且ioctl會對整個模塊進行一定的調整。所以在設備系統的操作過程中起到了很大的作用,fops進行注冊的方式如下:

以上表明, fi le_ fops對設備的運行有著一定的影響。由這些數據可以得出,基本完成了設備的開、關、讀、寫和控制功能。通過程序對文件進行讀取的時候,最重要的操作就是通過系統來調用函數,將這個過程作為數據進行傳遞,通過這種方式來連接驅動與核心。
Linux驅動程序利用函數運行,自動配置和初始化子程序能夠檢測設備是否能夠正常運行。要是設備沒有異常,就會對整個系統進行初始化運行。而這個程序只會在初始化操作時才會運行。
(2)根據I/O發出的指令而運行的子程序,又叫做程序的上半部分。這些程序在執行命令的過程中,系統依然會認定其與系統調用處于同一個進程。只是用戶進行了不同的操作,創造了用戶操作的環境,所以對在進行此項操作時通常會運行相應的函數。
(3)結束子程序運行狀態,通常又稱為驅動的下半部分。在進行系統調用時無法直接調用設備驅動程序的子程序,只能利用Linux系統來結束子程序的運行,然后通過系統來對中斷服務子程序進行調用。中斷的情況會出現在所有運行的程序中,所以當中斷服務程序被調用時,不要通過任意一個程序來調用,也就是不能對正在運行程序的函數進行調用。由于設備驅動程序一般只能通過同一種設備的驅動程序進行調用,因此在進行此操作的時候,經常會使用同一個參數。
綜上所述,數字高清電視系統是數字進程的一個主要產物,集中體現了計算機、多媒體、加解擾算法、熟悉壓縮編碼、通信技術、加解密算法的發展水平。在數字高清電視系統中Linux驅動作為數字高清電視廣播的主流接收端,在數字電視普及和發展過程中發揮著重要作用。本文通過對數字高清電視系統中Linux驅動的基本結構和使用方法進行研究,可以使程序的開發更加簡單,提高產品的可移植性和開放性,保證了數字高清電視系統的擴展性。
[1]范質堅.Linux在嵌入式系統中的應用[J].計算機與現代化,2000(06):22-25.
[2]夏一民,羅軍,鄧勝蘭.實時Linux操作系統初探[J].計算機應用研究,2001(01):45-48.
[3]劉云新,張堯學.一個基于Linux的嵌入式實時操作系統[J].計算機工程與應用,2001(07):64-66+85.
作者單位 廣東九聯科技股份有限公司 廣東省惠州市516025
林福德(1985-),男,廣東省梅州市人。大學本科學歷。工程師,從事軟件開發工作。