proc_create_data 是Linux核心中用於建立 /proc 虛擬檔案系統中的一個檔案介面函式。這個函式允許核心模組或驅動程式在 /proc 目錄下建立一個檔案節點,使用者空間的程式可以透過讀寫這個檔案來與核心模組進行互動,獲取或設定相關資訊。函式原型通常如下所示:
struct proc_dir_entry *proc_create_data(const char *name,
umode_t mode,
struct proc_dir_entry *parent,
const struct file_operations *proc_fops,
void *data);
- name:要建立的檔名,將在 /proc 下的 parent 目錄下建立。
- mode:建立的檔案許可權,類似於Unix檔案許可權,例如S_IRUGO | S_IWUSR表示檔案對所有使用者可讀,對檔案所有者可寫。
- parent:父目錄的proc_dir_entry結構體指標,通常是 /proc 下的一個子目錄。
- proc_fops:指向file_operations結構體的指標,定義了對這個檔案執行諸如open、read、write、ioctl等操作時的回撥函式。
- data:傳遞給檔案操作函式的私有資料指標,通常用於在回撥函式中識別不同的例項。當使用者空間透過檔案系統介面對建立的 /proc 檔案進行操作時,核心會呼叫相應的 file_operations 結構體中的函式來處理請求,從而實現核心與使用者空間的資料互動。
示例:
// su806d/kernel4.14/drivers/usb/host
void usb_hub_test_init(void)
{
/* create debugfs */
wcn_usb_hub = debugfs_create_dir("usb_hub", NULL);
if (!debugfs_create_file("cmd_test", 0444, wcn_usb_hub,
NULL, &usb_test_fops)) {
pr_err("%s debugfs_create_file fail!!\n", __func__);
debugfs_remove_recursive(wcn_usb_hub);
}
/*creat proc node of usb_control*/
proc_create_data("usb_control", 0666, NULL, &usb_hub_proc_fops, NULL);
}