子設備的識別
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、 通過這種方式,可以操作不同子設備的不同的數據。完成子設備的識別。
/***********************************************
水平有待提高,謝謝大家的指導幫助。
***********************************************/