定義一個misc 設備,一般只需要填充minor、name、fops 這三個成員變量。
minor指次設備號,可以從“內核源碼/include/linux/miscdevice.h”文件中預定義的次設備號挑選,也可以自行定義子設備號(沒有被其他設備使用即可),通常情況下將該參數設置爲MISC_DYNAMIC_MINOR,表示自動分配子設備號。
name表示misc設備的名字。misc設備驅動註冊成功之後,會在dev目錄下生成名爲name的設備節點。
fops 指向了file_operations的結構體,表示字符設備的操作集合。
13.2 雜項設備的註冊和卸載
不同於字符設備的註冊和卸載的繁瑣,雜項設備的註冊可以直接使用函數misc_register函數來完成,雜項設備的卸載可以直接使用misc_deregister函數來完成。上述兩個函數均定義在“內核源碼/include/linux/miscdevice.h”文件當中。
雜項設備的註冊:
函數原型:
int misc_register(struct miscdevice *misc)
函數作用:
基於misc_class構造一個設備,將miscdevice結構掛載到misc_list列表上,並初始化與linux設備模型相關的結構。進而起到雜項設備註冊的作用。
參數含義:
misc: 雜項設備的結構體指針
函數返回值:申請成功返回0,申請失敗返回負數
雜項設備的卸載:
函數原型:
int misc_deregister(struct miscdevice *misc)
函數作用:
從mist_list中刪除miscdevice,進而起到雜項設備卸載的作用。
參數含義:
misc: 雜項設備的結構體指針
**函數返回值:**卸載成功返回0,申請失敗返回負數
至此,註冊和卸載雜項設備的API函數就講解完成了,會在接下來的驅動章節中對上述函數進行具體使用。
13.3 雜項設備驅動框架
MISC驅動一般使用以下結構:
13.4 實驗程序的編寫
本實驗對應的網盤路徑爲:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\08。
本小節將編寫最簡單的misc驅動,在驅動入口函數中通過misc_register(…)函數註冊雜項設備驅動,在驅動出口函數中通過misc_deregister(…)函數註銷雜項設備驅動。編寫完成的miscdevice.c代碼如下所示:
13.5 運行測試在上一小節中的miscdevice.c代碼同一目錄下創建 Makefile 文件,Makefile 文件內容如下所示:
Makefile保存退出之後,來到存放miscdevice.c和Makefile文件目錄下,如下圖(圖13-1)所示:
然後使用命令“make”進行驅動的編譯,編譯完成如下圖(圖 13-2)所示:
編譯完生成 miscdevice.ko目標文件,如下圖(圖 13-3)所示:
至此我們的驅動模塊就編譯成功了,下面進行驅動的運行測試。
可以看到驅動加載之後,打印“misc registe is succeed”,說明misc驅動註冊成功。輸入以下命令查看加載的驅動模塊,驅動加載成功如下(圖13-5)所示:
然後來到/sys/class/misc目錄下,可以看到名爲“test”的文件夾已經被創建了,在/sys/class/misc目錄下有misc類的所有設備,每個註冊的雜項設備對應一個文件夾目錄,如下圖(圖13-6)所示:
驅動加載成功之後會生成/dev/test設備驅動文件,輸入以下命令查看雜項設備的主次設備號。
結果如下圖(圖 13-8)所示:
從上圖可以看出,/dev/test這個雜項設備的主設備號爲10,次設備號爲53,最後可以使用以下命令對驅動進行卸載,卸載完成如下圖(圖 13-9)所示:
更多內容:B站搜索迅爲RK3568開發板