Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409195
  • 博文数量: 35
  • 博客积分: 943
  • 博客等级: 准尉
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-15 13:17
个人简介

积累知识,方便自己

文章分类

全部博文(35)

文章存档

2014年(2)

2013年(5)

2012年(13)

2011年(15)

分类: LINUX

2011-11-24 14:03:19

test_main.c:
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
MODULE_LICENSE("GPL"); 
struct _DATA_INFO{ 
    
int data1; 
    
int data2; 
}; 
static struct _DATA_INFO data_info[2]; 

/* PROC stuff */ 
static void *dl_seq_start(struct seq_file *s, loff_t *pos) 
{ 
    
static unsigned long counter = 0; 
    
if ( *pos == 0 ) 
    
{ 
        
return &counter; 
    
} 
    
else 
    
{ 
        
*pos = 0; 
        
return NULL; 
    
} 
} 
static void *dl_seq_next(struct seq_file *s, void *v, loff_t *pos) 
{ 
    
return NULL; 
} 
static void dl_seq_stop(struct seq_file *s, void *v) 
{ 
} 
static int dl_seq_show(struct seq_file *s, void *v) 
{ 
    
struct proc_dir_entry *pde = s->private; 
    
struct _DATA_INFO *info = pde->data; 
    
seq_printf(s, "%d----%d",info->data1,info->data2); 
    
return 0; 
} 
static struct seq_operations dl_seq_ops = { 
    
.start = dl_seq_start, 
    
.next = dl_seq_next, 
    
.stop = dl_seq_stop, 
    
.show = dl_seq_show 
}; 
static int dl_proc_open(struct inode *inode, struct file *file) 
{ 
    
int ret = seq_open(file, &dl_seq_ops); 
    
if (!ret) { 
    
struct seq_file *sf = file->private_data; 
    
sf->private = PDE(inode); 
    
} 
    
return ret; 
} 
static const struct file_operations dl_file_ops = { 
    
.owner = THIS_MODULE, 
    
.open = dl_proc_open, 
    
.read = seq_read, 
    
.llseek = seq_lseek, 
    
.release = seq_release 
}; 
void init_mem(void) 
{ 
    
data_info[0].inflow=1; 
    
data_info[0].upflow=2; 
    
proc_create_data("proc_test1", 0, init_net.proc_net, &dl_file_ops, &data_info[0]); 
    
data_info[1].inflow=3; 
    
data_info[1].upflow=4; 
    
proc_create_data("proc_test2", 0, init_net.proc_net, &dl_file_ops, &data_info[1]); 
} 
static int __init init_mem_pool(void) 
{ 
    
init_mem(); 
    
return 0; 
} 
static void __exit exit_mem_pool(void) 
{ 
    
remove_proc_entry("proc_test1", init_net.proc_net); 
    
remove_proc_entry("proc_test2", init_net.proc_net); 
} 
module_init(init_mem_pool); 
module_exit(exit_mem_pool);

Makefile:
TARGET = test_main 
CURRENT = $(shell uname -r) 
KDIR = /lib/modules/$(CURRENT)/build 
PWD = $(shell pwd) 
 
CF = *.o .*o.d .*.cmd .*.flags *.mod.c Module.* modules.* .tmp_* 
obj-m := $(TARGET).o 
default: 
    
make -C $(KDIR) SUBDIRS=$(PWD) modules 
clean: 
    
-rm -rf $(CF) 
    
-include $(KDIR)/Rules.make

运行:insmod test_main.ko
    
cat /proc/net/proc_test1
    
cat /proc/net/proc_test2

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