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源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值