新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式Linux的PMP系統設計與實現

        基于嵌入式Linux的PMP系統設計與實現

        ——
        作者:上海師范大學 陳寧 張元海 時間:2007-01-26 來源:《電子設計應用》 收藏


        pmp系統簡介

        本文引用地址:http://www.104case.com/article/21515.htm

        便攜式多媒體播放器(pmp),也就是通常人們所說的mp4,已成為繼mp3以后消費類產品的一個新熱點。pmp的主要優點是:攜帶方便,能夠直接播放高品質音/視頻文件;也可以瀏覽圖片,以及作為移動硬盤、數字銀行使用;此外,還有fm、游戲等功能。pmp播放器不僅需要對機體大小有所限制,更重要的是需要一種壓縮效率更高、畫面質量更高的視頻壓縮技術,以及相關編解碼芯片。本文介紹了此pmp系統的軟、硬件設計,重點在軟件設計,此pmp系統方案現在已經進入量產階段。

        pmp系統的硬件設計

        現階段pmp內部核心架構,大多都是采用cpu搭配dsp的方式。其中,dsp負責編/解碼工作;cpu則是針對文件管理、存取、以及使用接口、周邊組件的控制等進行處理。另外,還需考慮整合硬盤、存儲卡及lcd顯示屏等組件,以及與外部usb接口、操控按鈕間的搭配等問題。

        為符合上述要求,pmp的設計需要內建視頻編/解碼芯片,作為模擬與數字兩種信號間轉換之用。另外,設計還需要考慮:用來連接視頻譯碼器與dsp的總線;lcd顯示屏的驅動電路;ide接口與硬盤控制芯片間的溝通等。

        本系統整體方案是建立在tidm320基礎之上的。dm320是一款支持視頻編/解碼的帶有雙cpu核的處理器。針對多媒體器件做專門的處理,它可以直接支持視頻輸入/輸出,可以方便的擴展音頻的輸入/輸出,支持usb,sdram,flash,cf/sd/mmc/ms/ms pro接口。dm320的結構圖,如圖1所示。

        ti dm320將c5409與arm926整合,即將cpu與dsp同時集成在dm320核心內。芯片采用32mb或64mb容量的sdram,以及4mb的閃存,用作加載與存放操作系統。dm320本身已內建lcd控制器、usb2.0 otg接口控制器,同時讓ccir-656格式信號經由總線在視頻譯碼芯片與dm320間傳送。由于ntsc/pal編碼器也被整合在其中,因此也可直接進行復合視頻輸出。

        另一方面,dm320還可支持ccd/cmos感光組件的連接,使得未來pmp要導入dsc、dv等更為容易。對于存儲卡的兼容性部分,除現階段主流的cf、sd及mmc外,還包括memory stick。此外,此芯片還提供2組rs232串行端口、1組jtag接口,能支持更多的外圍設備。dm320硬件系統的整體框架圖,如圖2所示。

        pmp系統的軟件設計

        因為要兼顧到高質量的音視頻效果、多種外設和有限的系統資源,pmp軟件系統的設計變得相對復雜。系統設計將軟件分為三層結構,如圖3所示。

        該系統的最底層是操作系統層,其中包括bootloader引導程序,主要完成系統從flash的啟動,logo的顯示,以及os的引導。嵌入式linux主要包括適合在tidm320上運行的linux操作系統,以及各種外圍設備的驅動程序。第2層為codec和mmi核層,mmi核包括第3層主gui和各種應用程序所依賴的各種框架結構和數據結構,如窗口管理,定時器管理等。codec部分包括音頻的編解碼程序(主要由arm實現)和圖像的編解碼程序(主要由dsp實現)。最上層為主gui和各種應用程序。應用程序包括:filemanager(用來瀏覽存儲器中的文件),videoplayer(播放視頻文件),audioplayer(播放音頻文件),imageviewer(瀏覽圖片),fm(收音機),games(游戲),resumes(重新播放音/視頻文件)。

        嵌入式linux操作系統

        本系統采用的linux內核是對從internet上下載比較穩定的arm-linux內核進行相應的修改,并縮寫相關外圍設備的驅動程序,使之成為一個適合ti dm320開發的操作系統環境。之所以稱為嵌入式,是因為其操作系統運行的環境并不是普遍的pc,而且嵌入在非pc構架的電子設備中。

        關于內核修改

        kconfig文件

        kconfig文件是用來對你所要加載內核內容進行配置的文件。比如,當在控制臺上敲入make menuconfig,就會看到內核配置的窗口,可對其中的內容進行選擇。選擇[*]表示把此內容編入內核,選擇[m]表示把此內容當成模塊編譯。linux支持動態加載內核模塊的功能,甚至可以在運行操作系統一段時間后再加載內核模塊。由于dm320框架并未列入內核中,所以我們需要把dm320框架加入內核。首先,就要在內核目錄下./arch/arm/kconfig加入dm320的配置選項,這樣才能在執行make menuconfig配置內核時看到dm320框架。修改的部分內容如下所示:

        choice

        prompt"arm system type"

        default arch_dm320_20//在配置arm系統時,默認的就是dm320框架。

        source"arch/arm/mach-dm32020/kconfig"把dm320框架下的配置選項也引入。

        同時,去掉其他cpu框架。如:

        #source "arch/arm/machclps711x/kconfig"

        #source "arch/arm/machintegrator/kconfig"

        其中,“#”表示此行內容為注釋內容。

        最后,就是要把內核配置選項中對dm320開發有用的項選進來。比如:

        source"drivers/char/kconfig"

        if(!arch_dm320_20)

        source "sound/kconfig"

        endif//選擇開發字符設備的驅動,而不需要聲音的支持。

        因為要把codec編入內核,所以我們還要加入支持codec的配置選項:

        source "codecs/modules/kconfig"

        同時,如果我們要加入一個新外圍設備,需要在kconfig文件中加入對應的內容。比如說,要加入一個三星的4英寸tft lcd的驅動,我們可以修改./drivers/char/kconfig文件,并加入以下內容:

        config dm320_samsung_4_lcd

        tristate "dm320 samsung4.0 inch 16:9 tft tcd"

        depends on arch_dm320_20 &&board_400h

        defaulty

        help

        this driver provides support for samsung 4.0"16:9 tft lcd for dm320.

        其中,config dm320_samsung_4_lcd表示增加一個新的配置入口。一旦這個配置選項被選中就會在./include/linux/autoconf.h:有#define config_dm320_samsung_4_lcd1的定義。這樣的話,我們在整個內核源碼樹中都可以使用config_dm320_samsung_4_lcd來進行特定的選擇。

        在tristate"dm320 samsung 4.0 inch 16:9 tft lcd"中,引號里的內容未出現在配置選項中的提示文字。tristate表示三態,意思是除了可以選擇[*]、[]外,還可以選擇[m],表示把當前內容當成模塊編譯。

        depends on arch_dm320_20&&board_400h表示如果前面配置平臺框架時選擇了arch_dm320_2o,并在選擇型號時選擇了board_400h,我們就可以看到這個對于三星4英寸tft lcd的配置選項。

        defaulty表示默認把此驅動編入內核。help的內容為當我們對內核進行配置時,選幫助所看到的內容。

        makefile文件

        簡單地說,makefile是用來進行項目配置和管理的。我們要把linux編譯,鏈接最后生成可執行的內核映像,makefile文件是必不可少的。

        在該pmp設計開發中,只需要把外設驅動模塊加入相應的內核源碼樹就可以完成對makefile文件的修改。以加入三星4英寸tft lcd驅動為例,只需要在./drivers/char/makefile加入如下內容即可:

        obj-$(config_dm320_samsung_4_lcd)+=dm320_lcd_samsung4.0

        pmp系統設計中兩個必須的驅動以及要注意的問題

        lcd驅動程序

        在一個pmp設備中,lcd顯示屏是必備的。在lcd驅動程序的設計過程中,主要是要選好時鐘源、分頻系數以及時鐘極性。比如在dm320中,時鐘控制器有以下幾個外部輸入:pclk、sysclk、mxi、m48xi,其中除了m48xi外其余均27m外部晶振。lcd的時鐘頻率dclk在本系統中是由venc(video encoder clock)確定,而venc又可以通過系統的pll分頻而確定,所以說首先要選好時鐘源和恰當的分頻系數,然后通過設置venc的寄存器就可以設置時鐘的極性。

        framebuffer驅動

        framebuffer是把顯存抽象成一個設備,通過對這個設備的讀寫就等同于直接對顯存進行操作。這種操作是抽象的、統一的。用戶不必關心顯存的物理位置、換頁機制等具體細節,這些都是由framebuffer設備驅動程序來完成的。framebuffer對應的源文件在linux/drivers/video/目錄下。全部的抽象設備文件作為fbcon.c與各種顯卡驅動程序相關的源文件放在該目錄下,如筆者所進行的針對dm320的framebuffer源文件dm320fb.c。在源文件我們要設置相應屏幕的長、寬以及每一個像素點的位數等等,還有一些與dm320 osd(on-screen display)相關的寄存器的設置。因為涉及內容較多,再次不再贅述。

        結語

        本pmp方案設計的產品已經進入量產階段,經過大量的用戶測試,證實了整個設計是切實可行的。同時,其設計思路對于其他類似產品如車載gps,都有一定的參考價值。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 马龙县| 凉山| 新源县| 视频| 治多县| 庆元县| 安溪县| 盐城市| 丁青县| 温州市| 原阳县| 松滋市| 巨鹿县| 巴东县| 龙里县| 迭部县| 娱乐| 隆化县| 漳平市| 汾阳市| 阜新市| 汽车| 贵阳市| 临澧县| 胶州市| 平陆县| 墨脱县| 无为县| 望都县| 浪卡子县| 泸溪县| 和平区| 祁连县| 延津县| 理塘县| 景宁| 平顺县| 德清县| 盱眙县| 桂林市| 岫岩|