字符設備的子設備的識別方法一

子設備的識別

1、  全局變量 設備結構體的定義

主要包括共有的cdev和私有的相關數據,例如:

2、  在模塊加載函數中,註冊設備號,對設備結構體的cdev進行相關操作函數的綁定,將自字符設備註冊到內核,私有數據的初始化。在模塊卸載函數,進行設備從內核的刪除,設備號的註銷。

3、  Insmod 添加模塊

4、  Mknod 手動創建設備文件,每一個文件對應一個inode結構體

Inode結構體用於描述文件的靜態屬性,其中包含指向cdev結構體的指針。

 

 

5、  應用程序

Linux一切皆文件,open函數打開設備節點文件,VFS層系統調用sys_open函數,調用底層的chardev_open函數。系統中每個打開的文件在內核空間都有一個對應的file結構體。內核會將註冊在驅動裏的file_operation賦給file結構體裏的f_ops。

在底層的open函數中,會通過函數參數inode得到設備的額cdev。通過container_of宏得到對應的設備結構體的首地址,將其賦值給file結構體的private_data。


6、  應用程序在對其進行讀寫操作時,底層調用對應的read、write函數,根據函數參數file結構體我們可以將private_data賦值給設備信息結構體指針。

7、  通過這種方式,可以操作不同子設備的不同的數據。完成子設備的識別。

/***********************************************

水平有待提高,謝謝大家的指導幫助。

***********************************************/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章