vxworks驅動開發基礎

2022-07-03 20:36:11 字數 1822 閱讀 1153

vxworks核心驅動基本結構:

三張表:1. 系統裝置表  2. 系統驅動表 3. 檔案描述符表

vxworks 內部對每個裝置使用dev_hdr 資料結構進行表示:

typedef struct

該結構中給出了鏈結指標(用以將該結構串入佇列中)、驅動索引號、裝置節點名稱。核心提供這個結構較為簡單,只儲存了一些裝置的關鍵資訊。底層驅動對其驅動的裝置都有乙個自定義資料結構表示,其中包含了驅動裝置暫存器基位址,中斷號,可能的資料緩衝區,儲存核心**函式的指標,以及一些標誌位。最關鍵的一點是dev_hdr必須是自定義資料結構的第乙個成員變數,因為這個使用者自定義結構最後需要新增到系統裝置佇列中,必須能夠在使用者定義結構與dev_hdr結構之間進行轉換,而將dev_hdr結構設定為使用者自定義結構的第乙個成員變數就可以達到目的。

typedef struct

drv_ctrl;

系統提供了iosdevadd(dev_hdr *pdevhdr, char *name, int drvnum)用於驅動程式呼叫註冊乙個裝置。

第三個引數是裝置對應的驅動程式索引號。這個驅動號是iosdrvinstall函式的返回值,在裝置初始化函式中,我們首先呼叫iosdrvinstall註冊驅動,然後使用iosdrvinstall 函式返回的驅動號呼叫 iosdevadd新增裝置到系統中

通過這兩步裝置就可以被使用者程式使用了。

使用者呼叫open函式開啟乙個裝置檔案時,系統將以傳入的檔案路徑名匹配系統裝置的裝置節點名,匹配方式是最佳匹配。

系統驅動表:

系統驅動表包含了當前註冊到i/o子系統下的所有驅動。這些驅動可以直接驅動硬體工作的驅動層。系統驅動表底層實現是乙個陣列,陣列元素數目在核心初始化過程中指定。i/o子系統提供iosdrvinstall供驅動程式註冊,iosdrvinstall原型如下:

int iosdrvinstall

(funcptr pcreate, funcptr pdelete,

funcptr popen, funcptr pclose,

funcptr pread, funcptr pwrite,

funcptr pioctl /*

pointer to driver ioctl function

*/)

乙個裝置驅動在初始化過程中一方面完成硬體裝置暫存器配置,另一方面就是向i/o子系統註冊驅動和裝置。

乙個驅動並不需要實現上述所有函式,無須實現的函式直接傳遞null指標就可以了。

iosdrvinstall 函式的基本實現即遍歷drvtable陣列,查詢乙個空閒表項,用傳入的函式位址對各成員變數進行初始化。

系統檔案描述符表

檔案描述符表表項索引被用做檔案描述符id,即open函式返回值。對於檔案描述符,需要注意:標準輸入、標準輸出、標準錯誤輸出雖然使用0,1,2三個檔案描述符,但是可能在系統檔案描述符表中只占用乙個表項,即都使用同乙個表項。vxworks核心將0,1,2三個標準檔案描述符與系統檔案描述符表中的內容分開進行管理。

系統檔案描述符中的內容主要是針對硬體裝置,使用一次open函式呼叫就占用乙個表項:

int fd = open(devname, 2,0);
應用程式每呼叫一次open函式,系統檔案描述符表中就增加乙個有效表項,直到陣列滿為止。此時open函式呼叫將以失敗返回,因此注意如果需要反覆開啟裝置的話,一定要在裝置不用的時候呼叫close函式關閉該描述符指向的裝置,並在每次呼叫open函式之後檢查返回的檔案描述符是否合法。

使用者請求服務過程

對於vxworks下硬碟驅動

1.曾經看到帖子說vxworks5.5下沒有sata驅動,vxworks6.6下有,這樣的說法恐怕不正確,由 於俺在5.5下也運用運用了sata硬碟,請注重這裡俺只是說運用運用,沒有說運用運用了sata的ahci模式。俺個人覺得,vxworks5.5下實際上是可以運用運用ide模式的ata,就是說c...

WinCE驅動開發基礎

wince中的程序 process 是程式的一次動態執行例項 instance 程序不參與系統排程,沒有優先順序和上下文。每個程序在建立時都會建立乙個主線程作為其預設的執行體。真正參加系統排程的是執行緒。wince提供了互斥mutex,事件event,訊號量semaphore 3種核心機制來實現多執...

VxWorks網路驅動配置及分析

vxworks支援兩種形式的網路驅動,一種是bsd驅動支援通用的bsd4.4網路,api,結構等和大多數bsd網路的驅動類似.另一種是end網路驅動,是vxworks獨有的,根據vxworks mux介面程式設計,不過end驅動在底層也要轉換成bsd的形式.vxworks網路驅動可參見vxworks...