《操作系统课程设计》第6章/proc文件系统——编写内核模块,实现在/proc目录下添加文件

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值