Linux内核中的Proc文件系统(一)

简介: (1)/proc文件系统的特点和/proc文件的说明/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。/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文件

需包含头文件<linux/proc_fs.h>,函数定义在/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来实现一下。




目录
相关文章
|
2月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
128 0
|
5月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
237 67
|
3月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
102 0
|
5月前
|
存储 Linux
Linux内核中的current机制解析
总的来说,current机制是Linux内核中进程管理的基础,它通过获取当前进程的task_struct结构的地址,可以方便地获取和修改进程的信息。这个机制在内核中的使用非常广泛,对于理解Linux内核的工作原理有着重要的意义。
215 11
|
6月前
|
自然语言处理 监控 Linux
Linux 内核源码分析---proc 文件系统
`proc`文件系统是Linux内核中一个灵活而强大的工具,提供了一个与内核数据结构交互的接口。通过本文的分析,我们深入探讨了 `proc`文件系统的实现原理,包括其初始化、文件的创建与操作、动态内容生成等方面。通过对这些内容的理解,开发者可以更好地利用 `proc`文件系统来监控和调试内核,同时也为系统管理提供了便利的工具。
253 16
|
8月前
|
安全 Linux 测试技术
Intel Linux 内核测试套件-LKVS介绍 | 龙蜥大讲堂104期
《Intel Linux内核测试套件-LKVS介绍》(龙蜥大讲堂104期)主要介绍了LKVS的定义、使用方法、测试范围、典型案例及其优势。LKVS是轻量级、低耦合且高代码覆盖率的测试工具,涵盖20多个硬件和内核属性,已开源并集成到多个社区CICD系统中。课程详细讲解了如何使用LKVS进行CPU、电源管理和安全特性(如TDX、CET)的测试,并展示了其在实际应用中的价值。
196 4
|
存储 Linux
Linux的Proc文件系统详解
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系 统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变 内核的运行状态。
1111 0
|
2月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
626 13