閱讀782 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Vxworks驅動程序的結構

驅動程序的結構包括三個部分:初始化部分,函數功能部分和中斷服務程序ISR。初始化部分初始化硬件,分配設備所需的資源,完成所有與係統相關的設置。如果是字符設備,首先調用iosDrvlnstall()來安裝驅動程序,把中斷向量和ISR掛上,然後調用iosDevAdd()來把驅動程序加到IO係統中:如果是塊設備,首先把中斷向量和ISR掛上,在內存中分配一個設備結構,然後初始化該結構。用戶要使用該設備時,先調用設備初始化部分myInit()(一般放在sysLib.C中),再調用設備創建函數myDevCreate()返回一個BLK_DEV結構的指針,供文件係統初始化函數如
dosFsDevInit()使用。以下為塊設備的初始化示例代碼:
struct MyDevice{ //自定義的設備結構
BLK_DEV dev; 必須在結構的開始
Int interrupt;設備使用的中斷號
....
}
int mylnit(){ //初始化函數
MyDevicelnit();//硬件初始化函數
MyDevice* Device =(MyDevice*)malloc(sizeof(MyDevice));
//為設備結構分配內存
Device->dev.bd_blkRd = Read;//初始化設備結構
Device->dev_blkWrt= Write;
intConnect(imToVec(9),my_ISR);//連接中斷向量和中斷服務程序ISR
)
  ISR處理硬件中斷,管理具體的硬件輸入輸出,同時和驅動程序的其它部分通信。ISR中第一條指令用來讀APIC的中斷服務寄存器,以通知CPU已經接到中斷請求。
my_ISR(int va1)//中斷斷服務函數
sysOutByte(0xa0,0x02);//中斷響應
.....
semGive(my_sem);//通知其它程序中斷處理完畢
}
   函數功能部分完成係統指定的功能,對於字符設備,這些函數就是指定的7個標準函數;對於塊設備,則是在BLK_DEV或SEQ_DEV結構中指定的功能函數。應當注意的是,係統在調用塊標準函數時,傳遞的設備結構指針是設備結構中BLK_DEV結構的指針,由於BLK_DEV定義在設備結構的開始處,該指針實際上也就是設備結構的指針。
STATUS Read (MyDevice* pDev,int startBlk,int numBlk,char*pBuf)
{
........
SemTake(my sem,WAI1 OREVER);//等待設備IO執行完成
)

最後更新:2017-04-03 12:55:38

  上一篇:go Printf格式輸出
  下一篇:go 動態規劃-排列組合