本例主要涉及如何在proc下创建文件
##### 基于linux3.10 #####
例1:
/*===============================================================
* Copyright (C) 2015 All rights reserved.
*
* File :proc.c
* Author:Gavin (gavinlu1015@gmail.com)
* Date :2015-04-22
* Remark:基于linux3.10
*
================================================================*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/proc_fs.h>
MODULE_LICENSE("GPL");
static struct proc_dir_entry *proc_test_root;
static struct proc_dir_entry *proc_file1, *proc_file2;
static const struct file_operations proc_fops = {
};
/**
* 更加详细的说明看/fs/proc/generic.c
* proc_create_data 和 create_proc_entry有说明区别?
* 前者需要自己定义文件操作函数,后者可以不需要但默认的
* 功能单一,看源码可知。
*/
static int __init create_sys_proc_init(void)
{
/* 创建根文件夹 */
proc_test_root = proc_mkdir("proc_test", NULL);
/* 创建文件proc_file1 */
proc_file1 = proc_create_data("proc_file1", 0544, proc_test_root,
&proc_fops, NULL);
/* 创建文件proc_file2 */
proc_file2 = create_proc_entry("proc_file2", 0544, proc_test_root);
/* 同样自己也可以重新赋值 */
if(proc_file2) {
proc_file2->proc_fops = &proc_fops;
}
printk(KERN_ERR "proc init\n");
return 0;
}
static void __exit create_proc_file_exit(void)
{
remove_proc_entry("proc_file2", proc_test_root);
remove_proc_entry("proc_file1", proc_test_root);
remove_proc_entry("proc_test", NULL);
printk(KERN_ERR "proc exit\n");
}
module_init(create_proc_file_init);
module_exit(create_proc_file_exit);
MODULE_AUTHOR("gavinlu1990@gmail.com");
MODULE_DESCRIPTION("create proc file");
Makefile:
obj-m = proc.o
KERN_DIR := /lib/modules/$(shell uname -r)/build/
PWD := $(shell pwd)
all:
make -C $(KERN_DIR) M=$(PWD) modules
clean:
rm -rf *.o *.ko *.mod.c *.order *.symvers