procfs_example
前言
本程序是为了《操作系统课程设计》(浙江大学出版社09年版 李善平著)第6章/proc实验而写,因书上及网络上的现有教程基本上都是10年以前内核2点几的,不再适用,故在3.10.0下写了此内核模块,发布出来。更高版本内核可能会有一些小问题,但大体相似,可自行百度解决。
功能描述
编写一个内核模块,该模块在/proc目录下创建我们自己的目录proc_example 然后在这个目录下创建三个普通文件(foo、bar、jiffies)和一个文件链接(jiffies_too)。foo和bar是两个可读写文件,各自实现读取操作函数与写入操作函数。jiffies是一个只读文件,取得当前系统时间jiffies。jiffies_too为文件jiffies的一个符号链接。
代码
procfs_example.c
/*
*procfs_example.c
*
*test kernel version:3.10.0
*
*author:zhangle
*
*date:2019/5/5
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/jiffies.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
//如果是高版本内核,copy_to_user可能会报错,原因是该函数定义在include/linux/uaccess.h中,请将上一行改为#include <linux/uaccess.h>
#define MODULE_VERS "1.0"
#define MODULE_NAME "procfs_example"
#define FOOBAR_LEN 8
struct fb_data_t{
char name[FOOBAR_LEN+1];
char value[FOOBAR_LEN+1];
};
static struct proc_dir_entry *example_dir, *foo_file, *bar_file, *jiffies_file, *symlink;
struct fb_data_t foo_data, bar_data;
int foo_len,foo_temp,bar_len,bar_temp;
int jiff_temp=-1;
char tempstr[FOOBAR_LEN*2+5];
//===========jiffies文件操作函数=========
static ssize_t read_jiffies_proc(struct file *filp,char __user *buf,size_t count,loff_t *offp ){
printk(KERN_INFO"count=%d jiff_temp=%d\n", count, jiff_temp);
char tempstring[100]="";
if