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