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

基于WindML環(huán)境下的顯卡驅動設計

2010-04-12 00:00:00張繼偉
現(xiàn)代電子技術 2010年14期

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

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

1 WindML簡介

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

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

typedef struct ugl ugi driver * UGL DEVICE ID;

typedef struct ugl_ugi_driver {

/*數(shù)據(jù)成員*/

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

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

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

/*通用函數(shù)*/

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);

}

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

2 驅動開發(fā)流程

可根據(jù)以下步驟實現(xiàn)圖形驅動。

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目錄下創(chuàng)建Intel855文件夾,并在該文件夾中創(chuàng)建Intel855.h文件。該文件包含了設備驅動的主要功能接口函數(shù)Intel855DevCreate的定義。

2.3 設計驅動程序源文件

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

2.3.1 創(chuàng)建設備

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

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

{

/* 執(zhí)行一般的設備檢測及初始化 */

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輸出。

設置顯示模式需要設置顯示時的分辨率大小、屏幕刷新頻率等參數(shù)。分辨率主要與CRT控制寄存器中的一些寄存器相關。Intel855芯片組中的CRT控制控制寄存器的索引端口為3D4,數(shù)據(jù)端口為3D5。即用函數(shù)sysOutByte (0x3d4,index)確定要訪問CRT控制寄存器中索引值為index的寄存器,用函數(shù)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; /*參數(shù)項*/

}Mode Line;

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

2.3.3 初始化顯示芯片

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

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

STATUS intel855GartInitialize ( intel855_DRIVER * intel855Driver )

{

/*查找芯片*/

if ( intel855FindSupported() != OK )

{

return (ERROR);

}

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

intel855MapMem();

/*初始化芯片*/

retval = intel855Chipset.initialize();

/*配置設定芯片*/

retval = intel855Chipset.configure ();

return (OK); }

3 結 語

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

參考文獻

[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]孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2002.

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

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

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

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

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

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

主站蜘蛛池模板: 国产无人区一区二区三区| 国产成人高清在线精品| 精品日韩亚洲欧美高清a| 亚洲综合18p| 狠狠做深爱婷婷久久一区| 亚洲人免费视频| 亚洲国产日韩在线观看| 国产微拍一区| 色哟哟国产精品| 欧美激情第一区| 九九九久久国产精品| 午夜爽爽视频| 天天色天天综合| 狠狠色噜噜狠狠狠狠奇米777| 91区国产福利在线观看午夜| 无码日韩精品91超碰| 国产一区二区三区在线观看视频| 国产精品毛片一区| 亚洲国产亚洲综合在线尤物| 玖玖免费视频在线观看| 久久黄色一级视频| 人人妻人人澡人人爽欧美一区| 亚洲国产精品无码AV| 亚洲精品无码日韩国产不卡| 精品乱码久久久久久久| 国产精品爽爽va在线无码观看| 精品国产成人av免费| 无码内射在线| 亚洲第一天堂无码专区| 午夜毛片免费看| 国产熟睡乱子伦视频网站| 亚洲欧美人成电影在线观看| 国产高清在线观看| 亚洲人成人伊人成综合网无码| 亚洲精品国偷自产在线91正片| 午夜国产精品视频| 全裸无码专区| 人妻精品久久久无码区色视| 99中文字幕亚洲一区二区| 99国产精品免费观看视频| 少妇极品熟妇人妻专区视频| 国产精品欧美日本韩免费一区二区三区不卡 | 欧美全免费aaaaaa特黄在线| 日韩最新中文字幕| 欧美精品亚洲二区| 美女无遮挡拍拍拍免费视频| 日韩专区第一页| 精品国产免费观看一区| 国产欧美日韩另类精彩视频| 亚洲精品视频网| 91视频青青草| 伊人成人在线| 久久福利片| 美女毛片在线| 亚洲日韩久久综合中文字幕| 91蝌蚪视频在线观看| 97视频在线精品国自产拍| 亚洲欧美自拍中文| 精品91自产拍在线| 2022精品国偷自产免费观看| 国产一区二区三区夜色 | 欧美在线精品一区二区三区| 亚洲欧美一区二区三区图片| 久久久久久国产精品mv| 91免费精品国偷自产在线在线| 久久99精品久久久久纯品| 亚洲男人天堂网址| 麻豆AV网站免费进入| 午夜色综合| 欧美日韩国产成人在线观看| 91麻豆精品视频| 亚洲国产成人精品无码区性色| 国产成人欧美| 久久情精品国产品免费| 一级香蕉人体视频| 久久人搡人人玩人妻精品 | 日韩精品毛片人妻AV不卡| 园内精品自拍视频在线播放| 成人免费黄色小视频| 黄色网页在线观看| 久久青草免费91观看| 喷潮白浆直流在线播放|