文件节点创建


1创建文件节点文件夹:
struct proc_dir_entry *proc_test_dir;
proc_test_dir = proc_mkdir("proc_test", NULL);
proc_test:文件夹名字

NULL:父文件夹指针,NULL表示proc_test在proc文件夹下


2创建文件节点:
proc_create("proc_gpio", S_IRUGO | S_IWUSR, proc_test_dir, &proc_gpio_fops);
printk("proc_create proc_gpio_fops\n");
proc_gpio:文件名
IRUGO | S_IWUSR:文件权限
proc_test_dir:父文件夹指针,表示proc_gpio在proc_test文件夹下

proc_gpio_fops:操作函数


3编写文件节点操作函数
static const struct file_operations proc_gpio_fops = {
        .owner          = THIS_MODULE,
        .open           = proc_gpio_open,
        .read           = proc_gpio_read,
        .write          = proc_gpio_write,
        .llseek         = seq_lseek,
        .release        = single_release,
};
seq跟single开头的是在kernel内部实现的函数,可以不写
具体的操作函数示例如下:
static ssize_t proc_gpio_write(struct file *file, const char __user *buffer, size_t count, loff_t *data)
{
       if (copy_from_user(&proc_gpio_write_flag, buffer, count))
                return -EFAULT;
      
        return count;
}


static ssize_t proc_gpio_read(struct file *flip, char __user *user_buf, size_t count, loff_t *ppos)
{      
        int len = 0;


        len = simple_read_from_buffer(user_buf, count, ppos, &proc_gpio_read_flag, 1);


        return len;
}


static int proc_gpio_show(struct seq_file *m, void *v)
{
        return 0;
}


static int proc_gpio_open(struct inode *inode, struct file *file)
{
        return single_open(file, proc_gpio_show, NULL);
}

这是一个文件节点创建的框架,操作函数中的具体内容还需要按自己需求去写。


4对文件节点进行操作(节点位置)
adb shell打开shell终端
通过echo xxx > /proc/proc_gpio写入proc_gpio文件,进行控制



猜你喜欢

转载自blog.csdn.net/qq_38500662/article/details/80501689