本例主要涉及如何在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


Logo

更多推荐