/proc文件系统下创建文件读取内核信息

本文模仿linux内核源码fs/proc/下各.c文件的写法,在/proc下创建一个文件读取CR3寄存器的值。
1. reg_cr3.c
 1 #include <linux/kernel.h>
 2 #include <linux/proc_fs.h>
 3 #include <linux/seq_file.h>
 4 #include <linux/module.h>
 5 
 6 MODULE_LICENSE("GPL");
 7 
 8 static int get_reg_cr3(struct seq_file *m, void *v)
 9 {
10     unsigned int cr3;
11 
12     cr3 = read_cr3();
13     seq_printf(m, "%X\n", cr3);
14 
15     return 0;
16 }
17 
18 static int reg_cr3_proc_open(struct inode *inode, struct file *file)
19 {
20     return single_open(file, get_reg_cr3, NULL);
21 }
22 
23 static const struct file_operations reg_cr3_proc_fops = {
24     .open = reg_cr3_proc_open,
25     .read = seq_read,
26     .llseek = seq_lseek,
27     .release = single_release,
28 };
29 
30 static int __init proc_reg_cr3_init(void)
31 {
32     proc_create("reg_cr3", 0, NULL, &reg_cr3_proc_fops);
33     return 0;
34 }
35 
36 static void proc_reg_cr3_exit(void)
37 {
38     remove_proc_entry("reg_cr3", NULL);
39 }
40 
41 module_init(proc_reg_cr3_init);
42 module_exit(proc_reg_cr3_exit);

2. Makefile

 1 obj-m += reg_cr3.o
 2 
 3 CURRENT_PATH:=$(shell pwd)
 4 LINUX_KERNEL:=$(shell uname -r)
 5 LINUX_KERNEL_PATH:=/usr/src/kernels/$(LINUX_KERNEL)
 6 
 7 all:
 8     make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
 9 clean:
10     make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean

3. make //生成reg_cr3.ko

4. insmod reg_cr3.ko //加载内核模块

5. lsmod | grep reg_cr3 //查看内核模块是否加载成功

6. 进入/proc/目录,存在reg_cr3文件,cat /proc/reg_cr3 即可打印CR3寄存器的值

7. rmmod reg_cr3.ko //卸载内核模块

8. 进入/proc/目录,reg_cr3文件不存在。

posted @ 2013-11-12 07:37  tanghuimin0713  阅读(1137)  评论(0)    收藏  举报