Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208383
  • 博文数量: 102
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1015
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-05 16:45
文章存档

2014年(73)

2013年(29)

我的朋友

分类: LINUX

2013-11-22 15:41:01

国嵌内核驱动进阶班-5-4(Proc文件系统)

实现流程:1创建一个结构体,2对结构体的成员进行赋值



点击(此处)折叠或打开

  1. //proc.c
  2. #define __KERNEL__
  3. #define MODULE

  4. #include <linux/module.h>
  5. #include <linux/kernel.h>
  6. #include <linux/init.h>
  7. #include <linux/proc_fs.h> /* Necessary because we use the proc fs */
  8. #define procfs_name "proctest"

  9. struct proc_dir_entry *Our_Proc_File;

  10. int procfile_read(char *buffer,
  11.         char **buffer_location,
  12.         off_t offset, int buffer_length, int *eof, void *data)
  13. {
  14.         int ret;

  15.         ret = sprintf(buffer, "HelloWorld!\n");
  16.         return ret;
  17. }

  18. int proc_init()
  19. {
  20.         Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
  21.         if (Our_Proc_File == NULL) {
  22.                 remove_proc_entry(procfs_name, NULL);
  23.                 printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",
  24.                         procfs_name);
  25.                 return -ENOMEM;
  26.         }
  27.         Our_Proc_File->read_proc = procfile_read;
  28.         Our_Proc_File->owner = THIS_MODULE;
  29.         Our_Proc_File->mode = S_IFREG | S_IRUGO;
  30.         Our_Proc_File->uid = 0;
  31.         Our_Proc_File->gid = 0;
  32.         Our_Proc_File->size = 37;
  33.         printk("/proc/%s created\n", procfs_name);
  34.         return 0;
  35. }

  36. void proc_exit()
  37. {
  38.         remove_proc_entry(procfs_name, NULL);
  39.         printk(KERN_INFO "/proc/%s removed\n", procfs_name);
  40. }

  41. module_init(proc_init);
  42. module_exit(proc_exit);

  43. 编译:


从上面可知,该文是创建在/proc目录下的。如:/proc/proctest

要测试,怎样测试里边的读函数呢?

#cat  /proc/proctest   //这就是读啦

HelloWorld  这是结果




另一个较复杂的实例


__init  myproc_init(void)函数只在加载时,执行完后,回收内存。能达到节省内存的目的


Insmod  procl.ko

/proc目录下产生了mydir目录,并在mydir目录下产生了pool文件

进入/proc/mydir目录:

pool写数据

#echo  123  >pool

#cat   pool  //读数据

结果是123



阅读(837) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~