新版内核下proc目录的使用

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函数了,具体哪个版本去掉的未了解。

猜你喜欢

转载自blog.csdn.net/weixin_41884251/article/details/116494800