下面是一个创建简单的procfs文件节点的例子:
static ssize_t usb_hnp_show(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
// char *buf;
ssize_t ret;
struct usb_device *udev = global_usb_device;
if (udev == NULL)
{
printk(KERN_ERR "%s:the usb_device is NULL\n", __func__);
return -EFAULT;
}
dev_err(&udev->dev, "zsm %s\n", __func__);
return ret;
}
static ssize_t usb_hnp_store(struct file *file,
const char __user *user_buf, size_t count,
loff_t *ppos)
{
char buf[32];
ssize_t buf_size;
struct usb_device *udev = global_usb_device;
if (udev == NULL)
{
printk(KERN_ERR "%s:the usb_device is NULL\n", __func__);
return -EFAULT;
}
dev_err(&udev->dev, "zsm %s\n", __func__);
buf_size = min(count, (size_t)(sizeof(buf)-1));
if (copy_from_user(buf, user_buf, buf_size)) {
dev_err(&udev->dev, "Failed to copy from user\n");
return -EFAULT;
}
buf[buf_size] = 0;
return buf_size;
}
static const struct file_operations usb_hnp_node_fops = {
.owner = THIS_MODULE,
.open = simple_open,
.read = usb_hnp_show,
.write = usb_hnp_store,
};
struct proc_dir_entry *usb_hnp_dentry;
usb_hnp_dentry = proc_create("enable_usb_hnp",
S_IRUGO, NULL, &usb_hnp_node_fops);
对应生成的文件节点位置如下:
在/proc/下