国嵌内核驱动进阶班-5-4(Proc文件系统)
实现流程:1创建一个结构体,2对结构体的成员进行赋值
-
//proc.c
-
#define __KERNEL__
-
#define MODULE
-
-
#include <linux/module.h>
-
#include <linux/kernel.h>
-
#include <linux/init.h>
-
#include <linux/proc_fs.h> /* Necessary because we use the proc fs */
-
#define procfs_name "proctest"
-
-
struct proc_dir_entry *Our_Proc_File;
-
-
int procfile_read(char *buffer,
-
char **buffer_location,
-
off_t offset, int buffer_length, int *eof, void *data)
-
{
-
int ret;
-
-
ret = sprintf(buffer, "HelloWorld!\n");
-
return ret;
-
}
-
-
int proc_init()
-
{
-
Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
-
if (Our_Proc_File == NULL) {
-
remove_proc_entry(procfs_name, NULL);
-
printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",
-
procfs_name);
-
return -ENOMEM;
-
}
-
Our_Proc_File->read_proc = procfile_read;
-
Our_Proc_File->owner = THIS_MODULE;
-
Our_Proc_File->mode = S_IFREG | S_IRUGO;
-
Our_Proc_File->uid = 0;
-
Our_Proc_File->gid = 0;
-
Our_Proc_File->size = 37;
-
printk("/proc/%s created\n", procfs_name);
-
return 0;
-
}
-
-
void proc_exit()
-
{
-
remove_proc_entry(procfs_name, NULL);
-
printk(KERN_INFO "/proc/%s removed\n", procfs_name);
-
}
-
-
module_init(proc_init);
-
module_exit(proc_exit);
-
-
编译:
从上面可知,该文是创建在/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) |