struct proc_dir_entry *proc_test_dir;
proc_test_dir = proc_mkdir("proc_test", NULL);
proc_test:文件夹名字
NULL:父文件夹指针,NULL表示proc_test在proc文件夹下
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:操作函数
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);
}
这是一个文件节点创建的框架,操作函数中的具体内容还需要按自己需求去写。
adb shell打开shell终端
通过echo xxx > /proc/proc_gpio写入proc_gpio文件,进行控制