2012年3月8日 星期四

在Linux kernel module 建立proc

轉自:http://kaijie-chang.blogspot.com/2010/12/linux-kernel-module-proc.html

在Linux kernel module 建立proc

建立 Proc的方法很簡單,以下是個建立,讀寫的範例
//include kernel module一些基本的header
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/string.h>
#include <linux/vmalloc.h>
#include <asm/uaccess.h>

//建立proc_dir struct
static struct proc_dir_entry *dir;
static struct proc_dir_entry *item;
//先implement 對proc讀寫的function
int item_read(char *page, char **start, off_t off, int count, int *eof, void *data )
{
    return sprintf(page,"hello");
}
ssize_t itemt_write( struct file *filp, const char __user *buff, unsigned long len, void *data )
{
char *buffer;
copy_from_user(buffer,buff,len);
printk(KERN_INFO"%s",buffer);
return len;
}
//將讀寫的function註冊到proc_dir struct
int itemt_init(struct proc_dir_entry *entry)
{
entry->read_proc = item_read;
entry->write_proc = item_write;
entry->owner = THIS_MODULE;
return 0;
}
//將proc註冊到系統上
int proc_init(void)
{
entry_dir = proc_mkdir("dir", &proc_root);//把proc目錄建立到/proc 根目錄下
entry_item = create_proc_entry ("item", 0644, entry_dir);//再把item的proc建立在dir下
itemt_init(entry_item);//把proc callback initial好
}
void proc_exit(void)
{
remove_proc_entry("item", entry_item);
remove_proc_entry("dir", &proc_root);

沒有留言:

張貼留言