Linux内核设备驱动之proc文件系统笔记整理
时间:2022-07-27
本文章向大家介绍Linux内核设备驱动之proc文件系统笔记整理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/*****************
* proc文件系统
*****************/
(1)/proc文件系统的特点和/proc文件的说明
/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。
/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核参数
/proc目录下的文件分析 /proc/$pid关于进程$pid的信息目录。每个进程在/proc 下有一个名为其进程号的目录。例:$>strings -f /proc/[0-9]*/cmdline
- /proc/cmdline 内核启动的命令行
- /proc/cpuinfo 处理器信息,如类型、制造商、型号和性能。
- /proc/devices 列出字符和块设备的主设备号,以及分配到这些设备号的设备名称
- /proc/dma 显示当前使用的DMA通道。
- /proc/filesystems 列出了可供使用的文件系统类型,通常是编入内核的文件系统类型,但可以通过模块加入新的类型
- /proc/interrupts 显示使用的中断号,中断名称,以及这些中断从系统启动后产生的次数
- /proc/ioports 当前使用的I/O端口。
- /proc/kallsyms 内核符号表。安装新的模块后,会在这里体现出来
- /proc/kcore 系统物理内存映象。与物理内存大小完全一样,但不实际占用这么多内存;(记住:除非拷贝到文件中,/proc下没有任何东西占用任何磁盘空间)
- /proc/kmsg 内核输出的消息。也被送到syslog。
- /proc/loadavg 系统的平均负载,前3个是过去1分钟,5分钟,15分钟的负载,然后是正在运行的任务数和总任务数,最后是上次运行的进程号
- /proc/meminfo 存储器使用信息,包括物理内存和swap。
- /proc/modules 当前加载了哪些核心模块。
- /proc/partitions 系统当前挂载硬盘的分区信息
- /proc/pci 系统的pci总线信息
- /proc/net 网络协议状态信息。
- /proc/self 到查看/proc的程序的进程目录的符号连接。当2个进程查看/proc时,是不同的连接。这主要便于程序得到它自己的进程目录。
- /proc/slabinfo 系统中slab缓存的分配信息
- /proc/stat 系统的一些状态信息
- /proc/swaps 系统采用的交换区信息
- /proc/sysrq-trigger 用于启动sysRq键 $>echo 1 > sysrq-trigger
- /proc/uptime 系统启动的时间长度和空闲的时间长度。供uptime使用
- /proc/version 内核版本
(2)自行实现一个/proc文件
需包含头文件<linux/proc_fs.h>,函数定义在/fs/proc/generic.c
a.在/proc下创建文件
调用create_proc_read_entry在/proc下创建新的文件
struct proc_dir_entry *create_proc_read_entry(
const char *name,
mode_t mode,
struct proc_dir_entry *base,
read_proc_t *read_proc,
void * data)
b.卸载/proc下的文件
采用remove_proc_entry卸载proc文件
void remove_proc_entry(
const char *name,
struct proc_dir_entry *parent);
c.定义返回数据的函数
在进程读取/proc文件时,内核会分配一个内存页(即PAGE_SIZE个字节的内存块),驱动将要写的数据通过这个内存页返回到用户空间。
typedef int (read_proc_t)(char *page, char **start, off_t off,
int count, int *eof, void *data);
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接
- spring cloud:Edgware.RELEASE版本中zuul回退方法的变化
- js中几种实用的跨域方法原理详解
- spring cloud:Edgware.RELEASE版本hystrix超时新坑
- JS魔法堂:再识ASCII实体、符号实体和字符实体
- MyBatis之传入参数——parameterType
- 被解放的姜戈07 马不停蹄
- 机器学习笔记(6):多类逻辑回归-使用gluon
- JS魔法堂:被玩坏的innerHTML、innerText、textContent和value属性
- JavaWeb(四)EL表达式
- eclipse SWT Designer 插件
- 身份证号码验证算法
- JS读书心得:《JavaScript框架设计》——第12章 异步处理
- 被解放的姜戈04 各取所需
- PLT:说说Evaluation strategy
- 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 数组属性和方法
- Spring源码学习笔记(5)——@Conditonal注解
- 你好,CloudBase CLI 1.0
- Spring源码学习笔记(6)——REST服务的拦截
- Spring源码学习笔记(7)——使用@Import导入组件
- 深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird
- Could not load driverClass ${jdbc.driver}
- Js通过值获取索引下标
- Spring源码学习笔记(8)——Bean的生命周期
- hibernate系列之一
- Flutter定义tabbar底部导航路由跳转
- hibernate系列之二
- Flutter配置路由组件抽离及页面传参
- Spring源码学习笔记(9)——AOP
- spring笔记二
- spring中的AOP