查看: 1343|回复: 1

Linux 3.10 proc文件系统改动 create_proc_entry和proc_create

[复制链接]

47

主题

49

帖子

227

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
227
发表于 2018-1-8 00:24:51 | 显示全部楼层 |阅读模式
proc fs 是一个虚拟文件系统。和普通的文件系统不一样,proc 里的文件是在内存中。
proc fs 非常实用,linux中常用来查看cpu、内存、进程、等信息。
例如/proc/cpuinfo中包含cpu信息:
cpuinfo.png
android中,只要权限够,应用层可以直接读写procfs 。省去写hal、jni、serve一路上去的代码。所以proc fs是内核和应用层的通信,常用的一种手段。

linux 3.4中用create_proc_entry 可以创建procfs下的一个文件节点,如下:
  1. struct proc_dir_entry *alarm_lamp_proc_entry = NULL;
  2.         alarm_lamp_proc_entry = create_proc_entry(LAMP_PROC_NAME, 0777, NULL);
  3.         if (alarm_lamp_proc_entry != NULL){
  4.                 alarm_lamp_proc_entry->write_proc = alarm_lamp_writeproc;
  5.                 alarm_lamp_proc_entry->read_proc = alarm_lamp_readproc;
  6.         }        
复制代码
但在linux 3.10的create_proc_entry已经没有
linux 3.10用同样的方法却提示"create_proc_entry" 未定义:

未定义.png

proc_fs.h 确实已经没有 create_proc_entry的身影。
kernel/include/linux/proc_fs.h
可以用 proc_create  或 proc_create_data 来代替。
  1. static const struct file_operations alarm_lamp_proc_fops = {
  2.         .read        = alarm_lamp_readproc,
  3.         .write        = alarm_lamp_writeproc,
  4. };
  5. static void alarm_lamp_proc_init(void)
  6. {
  7.       struct proc_dir_entry *alarm_lamp_proc_entry = NULL;
  8.       alarm_lamp_proc_entry = proc_create(LAMP_PROC_NAME, 0777, NULL,&alarm_lamp_proc_fops);
  9.       if (alarm_lamp_proc_entry == NULL){
  10.           printk("%s error!!! \n", __func__);
  11.       }        
  12.      return ;
  13. }
复制代码
alarm_lamp_writeproc 函数 参数数据类型等要改变
  1. static int alarm_lamp_write_proc(struct file *file,const char *buffer,
  2.                         unsigned long count, loff_t *data)
复制代码
改为:
  1. static ssize_t alarm_lamp_write_proc(struct file *file, const char __user *buffer,
  2.                            size_t count, loff_t *data)
复制代码
alarm_lamp_read_proc 函数 参数数据类型等要改变:
  1. static int alarm_lamp_read_proc(char *page, char **stat, off_t off,  
  2.                           int count, int *eof, void *data)
复制代码
改为
  1. static ssize_t alarm_lamp_read_proc (struct file *file, char __user *buf, size_t size, loff_t *ppos)
复制代码
并修改alarm_lamp_read_proc 的实现方法。






回复

使用道具 举报

0

主题

23

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2018-8-23 21:34:08 | 显示全部楼层
zhe shi shen me zishi
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表