4.19内核版本
在proc目录下出创建目录
struct proc_dir_entry dbg_root_dir;
struct proc_dir_entry dbg_file_a;
dbg_root_dir = proc_mkdir("debug", NULL);
dbg_file_a = proc_create("a-dbg", 0644, dbg_root_dir, &adbg_proc_ops);
proc_remove(dbg_file_a );//释放
proc_remove(dbg_root_dir);
proc_create(文件名,权限,父目录,ops)
释放注意层级,虽然最外层直接释放也不报错,但再吃create的时候就会报错,所以还是老老实实从里到外挨个释放。
ops函数
struct file_operations adbg_proc_ops=
{
.open = adbg_proc_open,
.read = seq_read,
.write = adbg_proc_write,
.llseek = seq_lseek,
.release = single_release,
};
//可以通过echo 写proc的文件达到传入内核驱动命令的效果
static ssize_t adbg_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *f_pos)
{
char str[4] = {
0};
if (count >= sizeof(str)) {
return -EFAULT;
}
if (copy_from_user(str, buffer, count)) {
return -EFAULT;
}
aa = simple_strtol(str, NULL, 0);
if (aa ) {
pr_info("debug ON!\n");
} else {
pr_info("debug OFF!\n");
}
return count;
}
static int adbg_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, dbg_proc_show, NULL);
}
static int dbg_proc_show(struct seq_file *m, void *v)
{
seq_printf(m, "********dbg*****\n");
seq_printf(m, "%-8s\t %-5d\t\n", name, index);
return 0;
}
之前的linux版本,使用,
create_proc_entry,
remove_proc_entry来创建和删除proc目录下的文件,
但在4.19版本中已找不到create_proc_entry函数了,具体哪个版本去掉的未了解。