999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于WindML環境下的顯卡驅動設計

2010-04-12 00:00:00張繼偉
現代電子技術 2010年14期

摘 要:目前VxWorks操作系統及其圖形支持庫WindML已經在很多領域得到了廣泛的應用。但由于WindML本身支持的硬件少,提供的分辨率低等因素,往往不能滿足在實際運用的要求,使得自行開發顯卡驅動越來越有必要。但缺少相應的文檔,顯卡驅動程序的開發是比較困難的。在此以Intel855GME芯片組為例,介紹了基于VxWorks操作系統圖形支持庫WindML基礎上的顯卡驅動程序開發,對其整個流程進行描述。一方面通過調用一些WindML標準API函數,另一方面對顯示芯片的相關寄存器進行設置。實現了高分辨率圖像在WindML環境下的顯示,討論了在開發中需要注意的問題。

關鍵詞:WindML; 顯卡驅動程序設計; 高分辨率圖像; 寄存器

中圖分類號:TN911; TP311 文獻標識碼:A

文章編號:1004-373X(2010)14-0078-03

Graphics Device Driver Development Based on WindML

ZHANG Ji-wei

(Chongqing Chang’an Industrial Group Co. Ltd., Chongqing 401120, China)

Abstract:VxWorks operation system and WindML have been widely used in many fields. The graphics device driver developed autonomously for solving the unappeasable requirement in practical application of less hardware and low resolution provided by WindML. The development of graphics device driver on VxWorks is difficult in defect of relevant document. The circuit of graphics device driver development on WindML of VxWorks was designed. The high resolution image displayed in WindML is realized by transfering standard API function and setting associate registers.

Keywords: WindML;design of graphics device driver program; high resolution image; register

VxWorks操作系統以其良好的可靠性和卓越的實時性被廣泛應用在通信、軍事、航空和航天等高尖技術及實時性要求極高的領域中。其圖形支持庫WindML為多種操作系統提供基本的圖形、視頻、聲頻技術,并且提供了一個設計標準設備驅動程序的框架。但WindML由于其本身支持的硬件少,提供的分辨率低等因素,往往不能滿足在實際運用的要求。這時,就需要自己針對硬件去開發顯卡驅動。本文以Intel855GME芯片組為例,介紹了基于VxWorks操作系統圖形支持庫WindML基礎上的驅動程序開發。

1 WindML簡介

WindML包括2個組件:軟件開發包SDK和驅動程序開發包DDK。SDK組件用于各種平臺開發與硬件無關的應用,它在圖形、輸出處理、多媒體、字體和內存管理方面提供了完整的API[1]。DDK用于開發驅動程序,它提供了一整套可用于通用硬件配置、軟件框架的參考驅動程序,以及支持開發人員從提供的“通用”代碼快速創建新驅動程序的API。

VxWorks下圖形驅動定義了一個圖形接口的數據結構,包含了所有可用的函數,如下所示[2]:

typedef struct ugl ugi driver * UGL DEVICE ID;

typedef struct ugl_ugi_driver {

/*數據成員*/

UGL MODE * pMode;/*顯示模式*/

UGL PAGE * pPageZero;/*第一個顯示頁面地址*/

void * extension;/*可選的擴展驅動部分*/

/*通用函數*/

UGL STATUS (* info) (struct ugl ugi driver * pDriver,

UGL INFO REQ infoRequest, void *info);

UGL STATUS (* destroy) (struct ugl ugi driver * pDriver);

/*支持的模式*/

UGL STATUS (* modeSet) (struct ugl ugi driver * pDriver,UGL MODE * pMode);

}

任何顯卡驅動都是將自己的函數,如模式設置函數公用畫點、畫線等圖形函數傳給UGLDEVICE_ID這種結構。因此,盡管不同顯卡的驅動函數各不相同,但對用戶來說都是透明的,即用戶只需在配置的時候選擇顯卡型號,而在調用畫點、畫線的函數時,函數名及參數都是相同的。

2 驅動開發流程

可根據以下步驟實現圖形驅動。

2.1 建立配置選項

圖形驅動程序必須從圖1的配置工具配置過程中獲得配置信息,所以首先要在圖1的配置工具中添加驅動選項。需要在Tornado2.2\\host\\resource\\windML\\config\\database下建立配置文件windML_INTEL855_DB.cfg,具體配置信息包括:顯示解決方案;色彩格式及像素深度;添加、刪除附加功能的元素縮放比例。

圖1 WindML配置工具

2.2 建立頭文件目錄及頭文件

在Tornado2.2\arget\\h\\ugl\\driver\\graphics目錄下創建Intel855文件夾,并在該文件夾中創建Intel855.h文件。該文件包含了設備驅動的主要功能接口函數Intel855DevCreate的定義。

2.3 設計驅動程序源文件

在Tornado2.2\arget\\src\\ugl\\driver\\graphics目錄下創建文件夾Intel855,并在該文件夾中創建Intel855.c文件。在該文件中需要實現創建設備、獲取顯示模式、設置顯示模式、初始化顯示芯片、設備刪除等功能。該部分是驅動程序核心部分,主要的功能都在這里實現,在進行這部分程序開發時,需要對目標硬件的功能及功能實現方法有很清楚的了解。下面對部分主要功能函數的設計思路進行介紹。

2.3.1 創建設備

這部分程序是整個驅動的核心,其函數就是在頭文件中所創建的Intel855DevCreate。在創建設備中要進行對設備的初始化,所以初始化顯示芯片的功能就是在這部分程序中進行的。在這里還要設置標準驅動API接口。由于WindML提供了一整套可用于通用硬件配置、軟件框架的參考驅動程序,以及支持開發人員從提供的“通用”代碼快速創建新驅動程序的API,所以除了設置顯示模式等函數,其中大部分函數均可直接使用通用標準的接口函數。具體程序如下:

UGL_UGI_DRIVER * intel85516bitDevCreate ( UGL_UINT32 instance, UGL_UINT32 notUsed0, UGL_UINT32 )

{

/* 執行一般的設備檢測及初始化 */

if (intel855DevInit(pDriver, 16) == UGL_STATUS_ERROR)

{

/* 設備不存在或無法初始化 */

uglSharedMemFree ((char *)intel855Driver);

return (UGL_NULL);

}

/* 初始化基本UGI結構 */

uglUgiDevInit(pDriver);

/* 設置標準驅動API功能 */

pDriver->cursorBitmapCreate=uglGenericCursorBitmapCreate;

/* bitdepth specific functions */

pDriver->bitmapBlt= uglGeneric16BitBitmapBlt;

…}

return(pDriver);

}

2.3.2 設置顯示模式

在設置顯示模式時,一般按以下流程進行:

(1) 計算所要設置的模式值是否有效;

(2) 禁止VGA輸出;

(3) 設置相關寄存器;

(4) 使能VGA輸出。

設置顯示模式需要設置顯示時的分辨率大小、屏幕刷新頻率等參數。分辨率主要與CRT控制寄存器中的一些寄存器相關。Intel855芯片組中的CRT控制控制寄存器的索引端口為3D4,數據端口為3D5。即用函數sysOutByte (0x3d4,index)確定要訪問CRT控制寄存器中索引值為index的寄存器,用函數sysInByte (0x3d5)、sysOutByte (0x3d5,data)讀或寫該寄存器[3]。

在WindML中有結構體Mode Line具體形式如下[1]:

typedef struct_modeline

{double freq; /*點時鐘頻率(MHz)*/

unsigned int hdisplay; /*水平顯示寬度(像素)*/

unsigned int hsyncstart; /*水平同步起始點*/

unsigned int hsyncend; /*水平同步結束點*/

unsigned int htotal; /*水平總寬度(像素)*/

unsigned int hblankstart; /*水平空白起始點*/

/*若為0,與hblankend通過計算獲得*/

unsigned int hblankend; /*水平空白結束點*/

unsigned int vdisplay; /*豎直顯示高度(像素)*/

unsigned int vsyncstart; /*豎直同步起始線*/

unsigned int vsyncend; /*豎直同步結束線*/

unsigned int vtotal; /*豎直總高度*/

unsigned int vblankstart; /*豎直空白起始線。

/*若為0,與hblankend通過計算獲得*/

unsigned int vblankend; /*豎直空白結束線*/

unsigned int options; /*參數項*/

}Mode Line;

其中的變量分別代表CRT控制寄存器中不同的寄存器對應的值。根據不同模式計算并填寫其中的值,然后寫入相應的寄存器中,即可獲得想要的顯示模式。

2.3.3 初始化顯示芯片

在顯示芯片開始工作前要先初始化芯片,通過設置寄存器來得到相應的工作狀態。在初始化芯片中應根據不同的芯片進行初始化,所以在編寫驅動前,需要對顯卡功能及特性有一定的了解,比如硬件所采用的圖形芯片及相關的芯片資料,以及采用何種DAC(數/模轉換),如何對DAC進行操作設置,支持何種硬件加速功能等。在Intel855芯片組中有一個硬件加速接口,硬件圖形加速是由顯示芯片直接修改顯示內存,而不是由CPU來修改。所以在這部分程序設計中除了要進行查找芯片,還要對硬件加速接口進行配置。

在這部分程序的設計過程中還有一個重要的內容即設置時鐘。時鐘是系統中的重要部分,包括視頻時鐘和內存時鐘。視頻時鐘同步DAC的數據刷新內存時鐘同步顯示內存的數據刷新。在Intel855芯片組中有專門的寄存器用以設置時鐘。可根據實際需要設置這個寄存器來得到你所需要模式。具體程序流程如下:

STATUS intel855GartInitialize ( intel855_DRIVER * intel855Driver )

{

/*查找芯片*/

if ( intel855FindSupported() != OK )

{

return (ERROR);

}

/*查找芯片映射的地址空間*/

intel855MapMem();

/*初始化芯片*/

retval = intel855Chipset.initialize();

/*配置設定芯片*/

retval = intel855Chipset.configure ();

return (OK); }

3 結 語

對于WindML顯卡驅動的開發單憑芯片資料是遠遠不夠的,如Intel855GME,其芯片資料只含部分寄存器資料。需要充分利用已有的資源,如借鑒其他操作系統下的圖形驅動相關的資源,但也只能做個參考,對不同的顯卡情況有些不同。這就需要不斷大膽猜想和實踐。

參考文獻

[1]WindRiver. WindML3.0 SDK programmer′s guide[ M] . [ S.l.] : WindRiver, 2002.

[2]WindRiver. WindML3.0 apireference[ M] . [ S.l.] : WindRiver, 2002.

[3]WindRiver. WindML3.0 release notes[ M] . [ S.l.] : WindRiver, 2002.

[4]Intel. IntelR 855GM/855GME chipset graphics and memory controller hub (GMCH)[ R] . [ S.l.] : Intel, 2009.

[5]孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境Tornado[M].北京:中國電力出版社,2002.

[6]王金剛,高偉,蘇琪,等.VxWorks程序員指南[M].北京:清華大學出版社,2003.

[7]周啟平,張揚,吳瓊,等.VxWorks開發指南與Tornado使用手冊[M].北京:中國電力出版社,2004.

[8]李方敏.VxWorks高級程序設計[M].北京:清華大學出版社,2004.

[9]廖容.VxWorks下顯卡高分辨率與雙屏驅動程序的開發[J].艦船電子工程,2006(1):91-93.

[10]劉尉悅,王硯方,劉松強.基于VxWorks的PCI顯卡實時驅動軟件設計[J].核電子學與探測技術,2002(5):435-437.

[11]王姍姍,秦開宇,談秀娟.VxWorks下的交互式用戶界面開發[J].現代電子技術,2007,30(4):58-60.

主站蜘蛛池模板: 欧美一级高清视频在线播放| 老汉色老汉首页a亚洲| 无码高潮喷水专区久久| 怡红院美国分院一区二区| 亚洲小视频网站| 久久免费精品琪琪| 99久久精品久久久久久婷婷| 国产在线观看一区二区三区| 亚洲精品片911| 亚洲国产精品日韩欧美一区| 久久中文无码精品| 国产成人免费视频精品一区二区| 亚洲天堂在线免费| 欧美成一级| 91免费国产高清观看| 国产对白刺激真实精品91| 成人精品午夜福利在线播放| 亚洲一区二区三区在线视频| 成人综合网址| 精品人妻AV区| 精品综合久久久久久97超人| а∨天堂一区中文字幕| 久热中文字幕在线| 亚洲一区二区视频在线观看| 另类欧美日韩| 尤物午夜福利视频| 美女被操91视频| 国产在线观看第二页| 91区国产福利在线观看午夜| 国产免费久久精品99re不卡| 亚洲永久免费网站| 欧美a√在线| 国产精品手机在线播放| 日本不卡在线播放| 国产乱肥老妇精品视频| 91精品国产91欠久久久久| 国产成+人+综合+亚洲欧美| 国产精品刺激对白在线| 最新国语自产精品视频在| 欧美劲爆第一页| 久久99国产综合精品女同| 在线国产91| 国产在线麻豆波多野结衣| 在线免费a视频| 国产成人夜色91| 国产精品永久不卡免费视频| 一区二区三区毛片无码| 亚洲综合欧美在线一区在线播放| 国产成人免费观看在线视频| 亚洲精品久综合蜜| 91在线免费公开视频| 国产精品久久久久无码网站| 亚洲伊人电影| 久久久受www免费人成| 丁香六月激情综合| 欧美三级不卡在线观看视频| 亚洲中文在线看视频一区| 久久综合伊人 六十路| 亚洲日本中文字幕天堂网| 国产精品永久久久久| 国产性精品| 伊人中文网| 91在线无码精品秘九色APP| 日韩av资源在线| 二级毛片免费观看全程| 天堂va亚洲va欧美va国产| 亚洲国模精品一区| 91口爆吞精国产对白第三集 | 久久影院一区二区h| 亚洲啪啪网| 国产一区亚洲一区| 小蝌蚪亚洲精品国产| 丝袜国产一区| 国产菊爆视频在线观看| 国产91无毒不卡在线观看| 99热这里只有精品2| 色综合久久无码网| 丁香婷婷激情综合激情| 婷婷综合色| 成人精品亚洲| 日韩一级毛一欧美一国产| 久草中文网|