[KERNEL] 在procfs中新增文件的方法
时间:2020-05-21
本文章向大家介绍[KERNEL] 在procfs中新增文件的方法,主要包括[KERNEL] 在procfs中新增文件的方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近遇到debug需要,在proc文件系统中新增一个文件进行控制debug的开关,主要是控制trace_printk什么时候开打打印,什么时候结束打印。debug函数从入口到出口所用的时间。
/* * * * Add a directory named hello under proc, * and a file named world under hello, whose content is "hello world" * * Copyright (C) 2019 Larry <https://github.com/Larry955/OS-exp.git> * * Released under the GPL. */ #include <linux/module.h> #include <linux/kernel.h> #include<linux/sched.h> #include <asm/uaccess.h> #include <linux/proc_fs.h> static struct proc_dir_entry *proc_parent;static ssize_t read_proc(struct file *filp,char __user *buf,size_t count,loff_t *offp ) { char ibuf[5];
static char flag = 0;
int len;
len = sprintf(ibuf,"%d\n",xxxxxx); //cat时打印开关变量的状态
copy_to_user(buf, ibuf, len);
if (flag == 0){ //cat时,必须返回0表示read结束,否则会不停的read。
flag = 1;
return len;
}
else {
flag = 0;
return 0;
} }
static ssize_t read_proc(struct file *filp,char __user *buffer,size_t count,loff_t *offp){
char buf[5];
// pr_err("count = %d\n",count);
if (count > 5){
return -ESRCH;
}
copy_from_user(buf, buffer,len);
if (buf[0] == '0')
xxxxxx = 0;
else
if (buf[1] == '1')
xxxxxx = 1;
pr_err("set xxxxx status to %d\n", xxxxxxx);
return len; //返回len表示数据全部写完,否则echo会不停调用
}
static const struct file_operations proc_fops = {
.read = read_proc,
.write = write_proc, }; void create_new_proc_entry(void) { /*create a new directory named hello, and return a pointer point to this dir*/ proc_parent = proc_mkdir("switchdir",NULL); if(!proc_parent) { printk(KERN_INFO "Error creating proc entry"); } /*create a file named world, add read attribute to this file using proc_fops*/ proc_create("switch",0666,proc_parent,&proc_fops); } int proc_init (void) { create_new_proc_entry(); return 0; } void proc_cleanup(void) { remove_proc_entry("switchdir",proc_parent); remove_proc_entry("switch",NULL); } MODULE_LICENSE("GPL"); module_init(proc_init); module_exit(proc_cleanup);
原文地址:https://www.cnblogs.com/smilingsusu/p/12933461.html
- JavaWeb项目之电话本,两个版本,以及总结反思
- 工作中问题记录
- Java导出数据生成Excel表格
- Layui常见问题
- layui动态设置下拉框数据,根据后台数据设置选中
- BCryptPasswordEncoder加密及判断密码是否相同
- 两个HTML,CSS布局实例
- cors解决Web跨域访问问题
- Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
- IIS中实现HTTPS的自动跳转
- Windows Server下IIS安装PHP+MySql环境
- Python玩机器学习简易教程
- 腾讯云服务器搭建个人博客教程
- Ubuntu下安装Nginx+PHP+MySql环境
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浙大版《C语言程序设计(第3版)》题目集 习题5-3 使用函数计算两点间的距离
- 浙大版《C语言程序设计(第3版)》题目集 习题5-4 使用函数求素数和
- Linux进程之如何查看进程详情?
- 浙大版《C语言程序设计(第3版)》题目集 习题5-5 使用函数统计指定数字的个数
- 浙大版《C语言程序设计(第3版)》题目集 习题5-6 使用函数输出水仙花数
- 浙大版《C语言程序设计(第3版)》题目集 习题5-7 使用函数求余弦函数的近似值
- 浙大版《C语言程序设计(第3版)》题目集 习题6-1 分类统计字符个数
- 微信群总是有人发广告?看我用Python写一个自动化机器人消灭他!
- 浙大版《C语言程序设计(第3版)》题目集 习题6-2 使用函数求特殊a串数列和
- 浙大版《C语言程序设计(第3版)》题目集 习题6-4 使用函数输出指定范围内的Fibonacci数
- 浙大版《C语言程序设计(第3版)》题目集 习题6-5 使用函数验证哥德巴赫猜想
- Linux Used内存到底哪里去了?
- 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数
- 浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差
- SQL查找是否"存在",别再count了!