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