proc

1. /proc 下文件的内容是动态创建的,当文件可写时可用作控制和配置目的。

2. 在某个进程读取 /proc 文件时,内核会分配一个内存页,驱动程序通过这个内存页将数据返回到用户空间 (read()调用传入的用户空间的buff指针)。

3. 驱动程序中需要定义一个 read_proc() 函数,并且把该函数与 /proc 入口项 (/proc 下的文件节点) 连接起来通过内核函数create_proc_read_entry()

 4. 实例

//proc.c
#include <linux/module.h>
#include <linux/init.h>

#include <linux/proc_fs.h>

char buffer[]="good morning
";
int scull_read_procmem(char *buf, char **start, off_t offset,
                   int count, int *eof, void *data)
{
    int len;
    len = sprintf(buf,"%s",buffer);
    return len;
}

int proc_init_module(void)
{
    create_proc_read_entry("mem", 0 /* default mode */,
            NULL /* parent dir */, scull_read_procmem,
            NULL /* client data */);    
    return 0;    
}

void proc_cleanup_module(void)
{
    remove_proc_entry("mem", NULL /* parent dir */);        
}

module_init(proc_init_module);
module_exit(proc_cleanup_module);
View Code

 分析: 不能直接将 buffer的地址赋给 buf ,而是需要通过 sprintf() 格式化输出到buf 。

原文地址:https://www.cnblogs.com/youngvoice/p/4844918.html