linux+proc+原理,Linux内核中的Proc文件系统(一)
(1)/proc文件系统的特点和/proc文件的说明
/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。
/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核参数
(2)/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
内核版本
(3)自行实现一个/proc文件
需包含头文件,函数定义在/fs/proc/generic.c
a.在/proc下创建目录
调用:struct proc_dir_entry *proc_mkdir(const char *name,
struct proc_dir_entry *parent)
在/proc下创建文件:
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
struct proc_dir_entry *parent)
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);
思考一下,它还可以有什么作用?
在实际工作中,一般由原厂提供的驱动,有一部分厂商会在proc下创建对应的目录,用proc文件系统来进行管理,比如:现在有一家触摸屏驱动的厂商,他们写的驱动的版本号,一般就会放在proc目录下对应厂商的目录,然后创建一个类似/proc/version的文件,在应用层,通过cat /proc/xxxx/version就可以获取到该厂商触摸屏驱动的版本信息。
下一节,我们将结合4412来实现一下。
本文同步分享在 博客“Engineer-Bruce_Yang”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
linux+proc+原理,Linux内核中的Proc文件系统(一)相关推荐
- Linux内核中的proc文件系统
简介 procfs文件系统是内核中的一个特殊文件系统.它是一个虚拟文件系统: 它不是实际的存储设备中的文件,而是存在于内存中.procfs中的文件是用来允许用户空间的程序访问内核中的某些信息(比如进程 ...
- Linux驱动模块编译进内核中
BQ27501驱动编译进内核 一. 驱动程序编译进内核的步骤 在 linux 内核中增加程序需要完成以下三项工作: 1. 将编写的源代码复制到 Linux 内核源代码的相应目录: 2. 在 ...
- Linux进程管理:内核中的优先级继承互斥(rtmutex.h):防止优先级反转
目录 Priority inheritance in the kernel 译文 Priority inheritance in the kernel https://lwn.net/Articles ...
- linux 随机数原理,Linux随机数生成器的原理和缺陷.pdf
第17卷.第10期 计算机技术与发展 vol.17No.10 2007年10月 COMPUTERTECHNOLOGYANDDEVELOPMENT Oct.2007 Linux随机数生成器的原理及缺陷 ...
- linux随机数原理,Linux随机数生成器的原理与缺陷.pdf
第17卷.第10期 计算机技术与发展 vol.17No.10 2007年10月 COMPUTERTECHNOLOGYANDDEVELOPMENT Oct.2007 Linux随机数生成器的原理及缺陷 ...
- linux操作系统原理_Linux内核分析-操作系统是如何工作的(二)
linux操作系统的主要构架如图1所示,我们知道,操作系统是通过管理CPU进程.存储器.文件系统.设备驱动.以及网络接口等相关部分来工作的,我们这里主要是通过分析关于CPU的操作即进程的管理执行来分析 ...
- linux shell 原理,linux下shell的工作原理
linux下shell的工作原理 2009-12-8 10:19:53 出处:https://www.yqdown.com shell是用户和Linux操作系统之间的接口.Linux中有多种she ...
- linux bonding 原理,Linux bonding 之balance-alb 原理介绍及其实现
Linux bonding 之balance-alb 原理介绍及其实现 要求: 首先要安***onding driver 和 ifenslave.bonding driver 是实现网卡绑定的软件基础 ...
- linux bonding 原理,Linux bonding介绍
网卡bond是通过把多个物理网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡. bonding技术的最早应用是在集群--beowulf上,为了提高集群节点间的数据传输而设计的.下面我们讨 ...
最新文章
- sql server 数据库还原
- hue 查询 hbase 操作相关参考
- 16岁高中生的「卷」,用13000+行代码,从头写了一个C++机器学习库
- UTF-8 + BOM引起的模板空格问题(PHP使用任何模板引擎貌似都有此问题)
- poj 1466 Girls and Boys (最大独立集)
- 把“TCP/IP”协议讲明白
- Ynote源码涉及功能解剖
- 咪咕:笔试题(20190916)
- 熵权法用matlab怎么,熵权法求权重原理详细步骤附matlab代码
- 服务器硬盘安装win10系统,硬盘安装win10的方法
- 五个免费的pdf转换器,轻松解决pdf怎么转换成word
- bp神经网络简单流程包括,bp神经网络简单实例
- 文件扫描生成PDF文件或图片,扫描效果碾压WPS及全能扫描王
- 计算机连接网络被限制,本地连接受限制或无连接怎么办很简单解决教程
- 如何将电脑文字复制到模拟器_如何将电脑中的文字复制到手机上?
- 木子-前端-方法标签属性小记(普通jsp/html篇)2020-11-24
- 如何用建木CI一键部署Java构件到Nexus
- [转载]推荐不伤眼睛的文字背景色 VS背景色
- 算法与价值观如何平衡?凤凰新闻客户端新版给出了答案
- 微信墙如何搭建服务器地址,如何制作微信墙
热门文章
- 【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
- Git之深入解析如何重写提交历史
- Swift之深入解析“属性”的底层原理
- Swift之缓存文件处理
- 面试题 16.18. Pattern Matching LCCI
- Django 使用 HttpResponse 返回 json 字符串显示 Unicode 编码
- 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1312:【例3.4】昆虫繁殖
- 【机器视觉】 assign_at算子
- 【MFC】根据菜单创建工具栏
- java连接linux服务器执行shell命令(框架分析+推荐)