函數作用:
用於動態創建設備的邏輯類,並完成部分字段的初始化,然後將其添加進Linux內核系統。
參數含義:
owner:struct module結構體類型的指針,指向函數即將創建的這個struct
class的模塊。一般賦值爲THIS_MODULE。
name:char類型的指針,代表即將創建的struct class變量的名字。
返回值:struct class * 類型的結構體。
class_destroy(…)函數
該函數在“內核源碼/include/linux/device.h”文件中所引用,如下(圖11-2)所示:
圖 11-2
函數作用:
用於刪除設備的邏輯類,即從Linux內核系統中刪除設備的邏輯類。
參數含義:
owner:struct module結構體類型的指針,指向函數即將創建的這個struct
class的模塊。一般賦值爲THIS_MODULE。
name:char類型的指針,代表即將創建的struct class變量的名字。
返回值:無
device_create(…)函數
該函數在“內核源碼/include/linux/device.h”文件中所引用,如下(圖11-3)所示:
函數作用:
用來在class類中下創建一個設備屬性文件,udev會自動識別從而進行設備節點的創建。
參數含義:
cls:指定所要創建的設備所從屬的類。
parent:指定該設備的父設備,如果沒有就指定爲NULL。
devt:指定創建設備的設備號。
drvdata:被添加到該設備回調的數據,沒有則指定爲NULL。
fmt:添加到系統的設備節點名稱。
返回值:struct device * 類型結構體
device_destroy(…)函數
在“內核源碼/include/linux/device.h”文件中所引用,如下(圖11-4)所示:
函數作用:
用來刪除class類中的設備屬性文件,udev會自動識別從而進行設備節點的刪除。
參數含義:
cls:指定所要創建的設備所從屬的類。
devt:指定創建設備的設備號。
返回值:無
至此,關於自動創建節點相關的函數就介紹完成了,會在下一小節中對於設備節點的自動創建進行相應實驗程序的編寫。
11.2 實驗程序的編寫
本實驗對應的網盤路徑爲:iTOP-RK3568開發板【底板V1.7版本】\03_【iTOP-RK3568開發板】指南教程\02_Linux驅動配套資料\04_Linux驅動例程\06。
本章實驗將編寫Linux下的自動創建設備節點實驗代碼,首先採用自動申請設備號的方式進行設備號的申請,並對獲取的主設備號與次設備號進行打印,之後對字符設備進行註冊(file_operations結構體只填充owner 字段即可,會在下個章節對file_operations結構體進行講解),最後自動對設備節點進行創建。
編寫完成的chrdev_node.c代碼如下(圖11-5)所示
相較於上一章節實驗,本章節代碼在入口函數中添加了自動創建設備節點相關代碼,在驅動出口函數中添加了相應的刪除設備節點相關代碼(相關代碼已加粗)。
需要注意的是,在進行設備節點添加時,類的創建要放在設備創建之前;在進行設備節點刪除時,類的刪除要放在設備刪除之後。
11.3 運行測試
11.3.1 編譯驅動程序
在上一小節中的chrdev_node.c代碼同一目錄下創建 Makefile 文件,Makefile 文件內容如下(圖11-6)所示:
對於Makefile的內容註釋已在上圖添加,保存退出之後,來到存放chrdev_node.c和Makefile文件目錄下,如下圖(圖11-7)所示:
然後使用命令“make”進行驅動的編譯,編譯完成如下圖(圖11-8)所示:
編譯完生成 chrdev_node.ko目標文件,如下圖(圖11-9)所示:
至此我們的驅動模塊就編譯成功了,下面進行驅動的運行測試。