結構化裝置驅動:
把與某裝置相關的所有內容定義為乙個裝置結構體,其中包括驅動涉及的硬體資源,全域性軟體資源,控制(自旋鎖,互斥鎖,等待佇列,定時器等),在涉及裝置操作時,僅僅操作這個結構體就可以了。
open()和release()
一般來說,open()通常完成操作如下:
1,檢查裝置相關錯誤,如裝置尚未準備好等,
2,如果是第一次開啟,則初始化硬體裝置;
3,識別次裝置號,如果有必要則更新讀寫操作的當前位置指標f_ops;
4,分配和填寫要放在file->private_data裡的資料結構;
5,使用計數增1;
release()的作用正好與open相反,
1,使用計數減一
2,釋放file->private_data中分配的記憶體
3,如果使用計數為0,就關閉裝置;
複雜裝置驅動:
包括pci,usb,網路裝置,塊裝置,
注意,不要誤會了,pci和usb裝置屬於字元裝置
pci裝置:每個pci裝置都有乙個256位元組的裝置配置塊,其中前64位元組作為裝置的id和基本配置資訊,linux中提供了一組函式來處理pci配置塊,在pci裝置得以使用前,linux驅動程式需要從pci裝置配置塊中的資訊決定裝置的特定引數,進行相關設定以便能正確操作該pci裝置。
usb裝置的驅動主要處理probe(),disconnect(),以及usb_device_id(裝置資訊)資料結構,
當乙個裝置從系統拔掉後,裝置驅動程式的disconnect函式會自動被呼叫,在執行了disconnect函式後,所有為usb裝置分配的資料結構,記憶體空間都會被釋放;
當驅動程式向子系統註冊後,插入乙個新的usb裝置後總是要自動進入probe函式,驅動程式會為這個新加入的系統建立乙個新的例項
結構化裝置驅動程式
裝置結構體 linux 裝置驅動程式的編寫者喜歡把與某裝置相關的所有內容定義為乙個裝置結構體,其中包括裝置驅動涉及的硬體資源 全域性軟體資源 控制 自旋鎖 互斥鎖 等待佇列 定 時器等 在涉及裝置的操作時,僅僅操作這個結構體就可以了。對於 globalvar 裝置,這個結構體就是 struct gl...
linux裝置驅動程式 字元裝置驅動程式
先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...
Linux裝置驅動程式 字元裝置驅動程式
1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...