在/proc文件系统中添加和删除文件

来源:互联网 发布:淘宝图标 编辑:程序博客网 时间:2024/05/20 18:48

在Linux-2.6.18内核中编写一个内核模块,其功能是在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world。

代码附录在博文的末尾

1. 在/目录中新建一个目录test,在test目录中新建一个目录proc_t,用于编写内核模块

cd /mkdir testcd testmkdir proc_tcd proc_t

2. 在proc_t目录中,新建文件proc.c和Makefile

注:Makefile的大小写不能错,如果写成makefile、MakeFile、makeFile等,则不行。

请参考以下教程进行新建(如何使用vim命令修改或新建文件):点击打开链接

http://blog.csdn.net/softimite_zifeng/article/details/53303856

2.1. 新建proc.c

vim proc.c

2.2. 新建Makefile

vim Makefile

2.3. 查看proc_t目录下的文件

ls

3. 编译模块

make
4. 载入模块

insmod proc.ko
5. 在/proc文件系统中查看

cd /proclscd hellolscat world

6. 卸载模块

rmmod proc
7. 清除编译结果

make clean


实验运行流程:

1. 跳转至/proc文件下,查看已有文件,此时没有名为hello的目录。


2. 跳转至/test/proc_t文件下,编译并载入模块。


3. 跳转至/proc文件下,查看文件信息。我们发现在/proc文件下,存在一个名为hello的目录,hello目录下存在一个名为world的文件,文件内容为hello world。


4. 跳转至/test/proc_t文件下,卸载模块并清理。


5. 跳转至/proc文件下,查看文件信息,此时hello目录已被删除



代码:

1. proc.c

#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/proc_fs.h>#define dir_name "hello"#define file_name "world"MODULE_LICENSE("GPL");MODULE_AUTHOR("Kook Bae");MODULE_DESCRIPTION("a proc_test module");static struct proc_dir_entry *dir;static struct proc_dir_entry *file;int file_read(char *buf,char **start,off_t off,int count,int *eof,void *data){int ret;ret=sprintf(buf,"hello world\n");return(ret);}static int __init proc_init(void){dir = proc_mkdir(dir_name,NULL);if(dir==NULL){remove_proc_entry(dir_name,NULL);printk(KERN_ALERT "Create direction hello :Failed!\n");return(-1);}printk(KERN_ALERT "Create direction hello :Success!\n");file = create_proc_entry(file_name,0644,dir);if(file==NULL){remove_proc_entry(file_name,dir);printk(KERN_ALERT "Create file world :Failed!\n");return(-1);}file->read_proc = file_read;file->uid=0;file->gid=0;file->size=36;printk(KERN_ALERT "Create file world :Success!\n");return(0);}static void __exit proc_exit(void){remove_proc_entry(file_name,dir);remove_proc_entry(dir_name,NULL);printk(KERN_ALERT "Delete direction hello and file world :Success!\n");}module_init(proc_init);module_exit(proc_exit);

2. Makefile

obj-m := proc.oKDIR := /lib/modules/2.6.18/build/PWD := $(shell pwd)all:make -C $(KDIR) M=$(PWD) modulesclean:make -C $(KDIR) M=$(PWD) cleanrm -rf *.ko *.mod.c *.o Module.* *.c~ Makefile~

0 0
原创粉丝点击