linux 在proc文件系统下创建文件

时间:2022-01-10 16:27:46

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