vxworks系統的設計遵循了大多數微核心系統的設計思路,在裝置上使用了與裝置無關的介面方案,這是乙個進步,也是乙個犧牲(犧牲了實時性),具體的原理暫時就不描述了,接觸過作業系統的人都會有點印象。做驅動只要知道兩表一鏈一描述符。所謂兩表指驅動描述表和檔案描述符表,一鏈指裝置鍊錶,一描述符指裝置描述符。這幾個東西的關係將在下面的描述中提及。
1.必要的資料結構:
structdef
dev_hdr的作用是為了系統可以在裝置鍊錶上安裝裝置,並在執行開啟操作時可以使系統找到裝置。
2.製作好的驅動必須安裝到系統之上。vxworks系統不會自動查詢驅動程式,或者為新裝置安裝驅動。那麼製作驅動的第一步工作就是安裝驅動,這裡要使用的函式是iosdrvinstall,這個工作的目的是把驅動掛接在驅動描述表中。之後,系統就可以為裝置使用驅動了。為了遵循標準請使用***drv(***代表裝置的名稱)的名稱作為驅動程式的安裝函式。
在呼叫的時候使用***drv()。呼叫之後可以使用iosdrvshow來檢視系統的驅動描述表。
3.必須在裝置實體上使用驅動。安裝完驅動,vxworks系統並不會先知先覺的在某個裝置上使用驅動程式,而需要使用者建立乙個裝置,並為將來的開啟作準備。這裡將會使用iosdevadd函式新增乙個裝置到系統中去,同時會通知系統該裝置所要使用的驅動程式。使用者應在這個函式呼叫之前建立裝置資料結構,就是1節裡提到的那個,然後將dev_hdr通過iosdevadd傳給系統。為了遵循標準請使用***devcreate(***代表裝置的名稱)。
在呼叫的時候使用***devcreate()。呼叫之後可以使用shell下devs命令來檢視系統的裝置鍊錶。
4.開啟函式。開啟函式的實現是非常豐富多彩的。可以初始化硬體、初始化軟體、可以什麼都不做、甚至可以什麼都做了,但是返回的時候要如下操作:
return(***pdev);這裡,***pdev是指向裝置資料結構的指標。便於系統在檔案描述符中操作。系統會根據檔案描述符中的內容返回乙個檔案描述符。當然,使用者也可以返回寫其他的東西,但是在這裡的返回要和下面的其它介面函式所獲取的引數相對應,否則將會蹈我的覆轍,浪費掉很多寶貴的時間。open的第乙個引數是char *的字串,但是在驅動中,實際傳來的是乙個指標,嘿嘿,這可是關鍵的變化,這是系統在裝置列表中查詢的結果。就是1節裡提到的資料結構。
5.讀寫函式和ioctl函式。這幾個函式可沒什麼說的,根據硬體進行資料的傳輸即可。對應的介面是read\write\ioctl。這三個函式的第乙個引數是fd,但到了驅動裡面,就變成了上面提到的***pdev,這一點是需要注意的。
6.不得不說的中斷處理函式。雖然不得不說,但是也只想說就是一段中斷來了要執行的**!這段**的限制有很多,但是一般的實現中還是不會出問題。只要知道,就是一段**而已。
7.最後就是那些可實現或可不實現的東西。裝置的關閉、刪除、解除安裝等等,這些可以參見iosdevdelete、iosdrvremove等函式,由於實時系統是個不死系統,所以不會有哪個牛人去不斷的建立、刪除裝置,開啟關閉裝置。
vxworks驅動程式編寫入門
Linux驅動程式編寫
linux作業系統網路驅動程式編寫 一.linux系統裝置驅動程式概述 1.1 linux裝置驅動程式分類 1.2 編寫驅動程式的一些基本概念 二.linux系統網路裝置驅動程式 2.1 網路驅動程式的結構 2.2 網路驅動程式的基本方法 2.3 網路驅動程式中用到的資料結構 2.4 常用的系統支援...
linux驅動編寫(入門)
csdn 大牛 feixiaoxing 在我離職之前,工作內容幾乎不涉及到驅動方面的知識。我所要做的內容就是把客戶對裝置的請求拆分成乙個乙個的介面,呼叫驅動的設定進行配置就可以了。當然,至於驅動下面是怎麼實現那就要根據具體情況而定了。比如說,有的驅動是晶元廠商直接寫好的,假設晶元廠商提供了對應平台的...
linux驅動編寫(入門)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!在我離職之前,工作內容幾乎不涉及到驅動方面的知識。我所要做的內容就是把客戶對裝置的請求拆分成乙個乙個的介面,呼叫驅動的設定進行配置就可以了。當然,至於驅動下面是怎麼實現那就要根據具體情況而定了。比如說,有的驅動是晶元廠商直接寫好的,假設晶元廠商提供...