S3C2410和Linux的電影列表系統設計
摘要:隨著(zhù)數字信息技術(shù)和網(wǎng)絡(luò )技術(shù)的高速發(fā)展,建立在其基礎上的嵌入式系統也已經(jīng)廣泛應用于人們生活、工作的各個(gè)領(lǐng)域。本文介紹了基于S3C2410和嵌入式Linux操作系統的電影列表系統設計的實(shí)現過(guò)程。該系統基于嵌入式開(kāi)發(fā)平臺搭建,以Framebuffer實(shí)現對JPEG格式圖片、文字的各種效果顯示和外設鼠標的控制等。
本文引用地址:http://dyxdggzs.com/article/201809/388328.htm引言
隨著(zhù)新媒體的進(jìn)步,網(wǎng)絡(luò )媒體產(chǎn)品的日益發(fā)展,互聯(lián)網(wǎng)將“顛覆”電視的傳統地位。新媒體提供了豐富的媒體形態(tài)和多樣化的收視方式,如點(diǎn)播、回看、下載等,使其有了交互功能和更長(cháng)的生命周期。因此,交互式網(wǎng)絡(luò )電視(IPTV)的出現是必然的結果。電影列表是IPTV中數字多媒體內容最為關(guān)鍵的節目來(lái)源,即電視節目導航系統,主要用來(lái)描述提供給電視觀(guān)眾的所有節目的信息,是構成交互電視的重要技術(shù)之一。在IPTV業(yè)務(wù)中,用戶(hù)可通過(guò)電影列表功能來(lái)了解電視電影節目的名稱(chēng)、播放時(shí)間和內容梗概等相關(guān)信息,并實(shí)現對節目的快速檢索和訪(fǎng)問(wèn),進(jìn)行頻道選擇或視頻點(diǎn)播等操作。
1 系統環(huán)境的選擇與配置
1.1 系統軟硬件平臺選擇
嵌入式系統是指以應用為中心,以計算機技術(shù)為基礎,軟硬件可裁剪,適用于應用系統對功能、可靠性、成本、體積和功耗有嚴格要求的專(zhuān)用計算機系統。嵌入式系統由嵌入式微處理器、外圍硬件設備、嵌入式操作系統以及用戶(hù)應用程序4部分組成。本系統選擇x86處理器和
Linux操作系統作為系統開(kāi)發(fā)環(huán)境,嵌入式ARM系列微處理器和嵌入式Linux操作系統作為系統運行平臺。
作為學(xué)校實(shí)驗室開(kāi)放基金項目,本系統選擇學(xué)院實(shí)驗室已有的JXARM9-2410教學(xué)實(shí)驗系統進(jìn)行設計與實(shí)現。JXARM9-2410實(shí)驗箱采用三星公司的S3C2410微處理器,是一款為手持設備設計的低功耗、高集成度的基于A(yíng)RM920T核的微處理器。它集成了外部存儲器控制器、LCD控制器、ADC和觸摸屏接口等,現在廣泛應用于PDA、移動(dòng)通信、路由器、工業(yè)控制等領(lǐng)域。常見(jiàn)的通用型嵌入式操作系統有Linux、VxWorks、Win dows CE等。Linux是以Unix為基礎發(fā)展而成的操作系統,能夠支持ARM、MIPS、ALPHA、x86、PowerPC等多種系列的嵌入式微處理器。Linux操作系統最大的特性就是開(kāi)源性和可裁剪性,除此之外,Linux操作系統還有內核高效穩定、良好的可移植性、支持多種文件系統等優(yōu)點(diǎn),有利于Linux在嵌入式設備中的應用。
1.2 編譯器的選擇與配置
本系統選用C語(yǔ)言編寫(xiě)源碼、編譯生成在A(yíng)RM平臺上的程序,因此需要在Linux環(huán)境下安裝標準的C開(kāi)發(fā)環(huán)境和交叉編譯器arm-linux-gcc。使用命令sudo apt-getinstall gcc g++ libgccl libg++make gdb安裝C開(kāi)發(fā)環(huán)境。安裝交叉編譯器步驟如下:
①下載編譯器源文件arm-linux-gcc-3.4.1.tar.bz2,使用tar命令進(jìn)行解壓此文件。
②將解壓后形成的arm文件夾拷貝到usr/local/目錄下,現在交叉編譯程序集都在/usr/local/arm/3.4.1/bin目錄下。
③修改環(huán)境變量,把交叉編譯器的路徑加入到PATH中,并使用命令source/root/.bashrc使新的環(huán)境變量生效。
2 ARM9嵌入式電影列表軟件設計
在本系統中主要完成的任務(wù)是對所存在的電影信息的目錄進(jìn)行檢索,通過(guò)解析生成電影節目菜單,將其可用信息主要以圖片和文字的方式通過(guò)列表的形式顯示出來(lái),給用戶(hù)一個(gè)直觀(guān)的操作界面,以獲取節目的有用信息。
2.1 Framebuffer初始化
Framebuffer(幀緩沖)是Linux內核的一種圖形設備驅動(dòng)接口,提供了LCD控制器的抽象性描述。它將LCD控制器上的顯存抽象成一種字符設備,應用程序通過(guò)定義好的接口可以訪(fǎng)問(wèn)LCD控制器的顯存,直接對顯示緩沖區進(jìn)行讀/寫(xiě)操作。用戶(hù)只需要直接向Framebuffer顯示緩沖區寫(xiě)入數據就可以更新顯示屏的輸出。Framebuffer的設備文件一般是/dev/fb0、/dev/fb1等,其使用方法如下:
2.2 圖片顯示
本系統使用Libjpeg庫在Linux下顯示圖片。Libjpeg是一個(gè)被廣泛使用的jpeg壓縮/解壓縮函數庫,它能夠讀寫(xiě)JPEG格式的圖像文件,通常這類(lèi)文件是以.jpg或者.jpeg為后綴名的。通過(guò)Libjpeg庫,應用程序可以每次從jpeg壓縮圖像中讀取一個(gè)或多個(gè)掃描線(xiàn),而諸如顏色空間轉換、降采樣/增采樣、顏色量化等由Libjpeg完成。對于Libjpeg而言,圖像數據是一個(gè)二維的像素矩陣。對于彩色圖像,每個(gè)像素通常用三個(gè)分量表示,即R、G、B三個(gè)分量,每個(gè)分量用一個(gè)字節表示,因此每個(gè)分量的取值范圍為0~255;對于灰度圖像,每個(gè)像素通常用一個(gè)分量表示,一個(gè)分量同樣由一個(gè)字節表示,取值范圍為0~255。因此,本系統中只要將系統中需要顯示的JPEG圖片進(jìn)行解碼為bmp像素點(diǎn),再通過(guò)Framebuffer設備寫(xiě)入應用程序空間就可以實(shí)現圖片的顯示。通過(guò)Libjpeg對JPEG圖片進(jìn)行解碼的過(guò)程如下:
調用jpeg_start_decompress()函數之后需要為解壓后的掃描線(xiàn)上的所有像素點(diǎn)分配存儲空間,這個(gè)空間的大小由圖像輸出的寬度、高度和每個(gè)像素的字節數決定。JPEG解壓縮對象cinfo中output_width和output_height分別表示圖像輸出的寬度和高度,output_components表示字節數。
對掃描線(xiàn)的讀取是按照從上到下的順序進(jìn)行的,即圖像最上方的掃描線(xiàn)最先被jpeg_read_scanlines()讀入存儲空間中,緊接著(zhù)是第二個(gè)掃描線(xiàn),最后是圖像底邊的掃描線(xiàn)被讀入存儲空間中。
2.3 文字顯示
在Linux下顯示文字使用FreeType庫。FreeType庫是采用面向對象的思想高度模塊化的程序庫,是一個(gè)開(kāi)源的、高質(zhì)量可移植的字體引擎。它提供了統一的接口來(lái)訪(fǎng)問(wèn)多種字體格式文件,包括TrueType、OpenType、Type1、CID、CFF、Windows FON/FNT、X11 PCF等。本系統采用點(diǎn)陣的方式顯示字體,即要先取得漢字的點(diǎn)陣表示形式,然后根據點(diǎn)陣中每一位是否為1來(lái)決定是否對屏幕上相應的像素賦值。FreeType庫里保存字體屬性的結構體FT_Bitmap,包括位圖行、列、每行所占字節數等信息。對FreeType庫的使用步驟如下:
2.4 鼠標事件
目前最常見(jiàn)的鼠標有PS/2鼠標和USB鼠標。但就應用層去看這兩種鼠標其實(shí)沒(méi)有太大的區別,PS/2鼠標有4種工作模式:復位模式、流模式、遙控模式、檢測模式。流模式是默認的工作模式,在流模式下鼠標的任何動(dòng)作都會(huì )報告給主機。
(1)鼠標的解析與繪制
鼠標的設備文件為/dev/input/mice。當鼠標有動(dòng)作(移動(dòng)、按鍵、滾軸)的時(shí)候可以通過(guò)cat/dev/input/mice命令,獲得動(dòng)作數據并顯示在屏幕上。但多數是亂碼,原因是讀到的鼠標動(dòng)作數據,不一定是0~127的可見(jiàn)字符。
實(shí)現鼠標解析的主要代碼如下:
通過(guò)上述對鼠標協(xié)議數據的解析,獲取鼠標的按鍵事件和x、y方向的相對增量,只要聲明一組變量,用來(lái)累加dx、dy即可獲取鼠標在屏幕的絕對坐標。
鼠標的繪制首先需要定義一個(gè)鼠標的標志。在屏幕上繪制鼠標標志前,先保存屏幕相應位置(鼠標標志大小)的原有圖像,而后再繪制鼠標的標志。當鼠標移動(dòng)到一個(gè)新位置時(shí),在原來(lái)位置就可以根據保存的原有圖像恢復,而在新的位置繼續重復保存、繪制即可。
(2)鼠標的按鍵事件控制
以按鈕A事件為例,其主要實(shí)現代碼如下:
通過(guò)解析的鼠標信息。判斷D0,即左鍵的按鍵信息,當為1時(shí),表明左鍵按下,這時(shí)可以通過(guò)鼠標是否按下的狀態(tài),調用相應的功能。
3 系統實(shí)現
本系統主界面包括系統時(shí)間的顯示、電影海報排列、電影名、翻頁(yè)和結束按鈕,如圖1所示。點(diǎn)擊翻頁(yè)按鈕,可以進(jìn)入下一頁(yè)電影節目。點(diǎn)擊電影海報圖片進(jìn)入該影片的介紹欄,顯示該電影的詳細介紹,如圖2所示。點(diǎn)擊結束按鈕,程序進(jìn)入退出界面,3 s以后程序結束。
結語(yǔ)
本文主要介紹了在Linux操作系統下采用JXARM9-2410教學(xué)實(shí)驗箱設計實(shí)現的電影列表產(chǎn)品。本系統實(shí)現了圖片和文字的顯示、鼠標按鍵事件等功能,已經(jīng)完成了電影列表的基本功能。按鈕事件的實(shí)現為系統提供了交互功能,為后面IPTV的進(jìn)一步制作奠定了基礎。對于本系統后續研究設計,仍有可以進(jìn)一步擴展和改進(jìn)的地方,例如可以在本系統上擴展USB功能、網(wǎng)絡(luò )通信功能和觸摸屏功能等,以進(jìn)一步完善上層操作界面的設計。作為學(xué)校實(shí)驗室開(kāi)放基金項目,本系統的實(shí)現與完成也給學(xué)院提供了更多的專(zhuān)業(yè)教學(xué)資料,有利于激勵本專(zhuān)業(yè)學(xué)生的學(xué)習積極性,提高教學(xué)質(zhì)量和水平。
評論