RK3568驅動指南|第二篇 字符設備基礎-第11章 創建設備節點實驗(一)
函數作用:
用于動態創建設備的邏輯類,并完成部分字段的初始化,然后將其添加進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)所示:
至此我們的驅動模塊就編譯成功了,下面進行驅動的運行測試。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。