proc_create_data函数创建/proc/目录下的文件

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);
}

  

posted @ 2024-03-31 11:12  轻轻的吻  阅读(725)  评论(0编辑  收藏  举报