PROC 文件系统

更新时间:
2024-05-13
下载文档

PROC 文件系统

为了方便访问内核信息,SylixOS 提供了一个 PROC 虚拟文件系统,该文件系统存在于/proc 目录,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。之所以将/proc 文件系统称为虚拟文件系统,是因为其包含的文件和子目录并未存储于磁盘上,而是由内核在进程访问此类信息时动态创建而成。

SylixOS 提供的 PROC 文件系统示例目录内容:

# ls
1               ksymbol      posix          net             power        fs             version      kernel          cpuinfo      bspmem          self            yaffs

/proc 目录下的文件及目录说明如下表所示。

根文件系统典型符号链接功能
/ tmp/yaffs2/n1/tmp存放临时文件
/var/yaffs2/n1/var存放可变的数据
/root/yaffs2/n1/root根用户的目录
/home/yaffs2/n1/home普通用户的目录
/apps/yaffs2/n1/apps存放应用程序
/sbin/yaffs2/n1/sbin系统级的可执行程序
/bin/yaffs2/n1/bin普通的可执行程序
/usr/yaffs2/n1/usr存放共享数据
/lib/yaffs2/n1/lib存放共享库和内核模块
/qt/yaffs2/n1/qt存放 Qt 相关文件
/ftk/yaffs2/n1/ftk存放 FTK 相关文件
/etc/yaffs2/n0/etc存放常用配置文件
/boot/yaffs2/n0/boot存放加载器所需的文件
/usbUSB 挂载根节点
/yaffs2YAFFS 文件系统分区
/procPROC 文件系统根节点
/media移动设备挂载根节点
/mnt卷标挂载根节点
/dev设备挂载根节点

通常使用脚本来访问/proc 目录下的文件,也可以从程序中使用常规 I/O 系统调用来访问/proc 目录下的文件。但是在访问这些文件时,有以下限制:

  • /proc 目录下的一些文件是只读的,即这些文件仅用于显示内核信息,但无法对其进行修改。/proc/pid 目录下的大多数文件就属于此类型。
  • /proc 目录下一些文件仅能由文件拥有者(或超级用户所属进程)读取。
  • 除了/proc/pid 子目录中的文件,/proc 目录的其他文件大多属于 root 用户,并且仅有 root 用户能够修改那些可修改的文件。

/proc/pid 进程相关信息

在终端中输入 ps 命令可以查看当前进程信息,其中 PID 为 0 的进程为系统内核进程。对于系统中每个进程,内核都提供了相应的目录,命名为/proc/pid,其中 pid 为进程 ID。在此目录中的各个文件或子目录包含了进程的相关信息。

进程信息目录示例内容:

# ps
      NAME                 FATHER         PID   GRP     MEMORY     UID   GID    USER
----------------- ----------------- ----- ----- ---------- ----- ----- ------
kernel               <orphan>                  0      0            0        0      0  root
app_proc             <orphan>                  1      1        53248        0      0  root
total vprocess : 2
# cd /proc/
# ls
1               ksymbol        posix        net            power            fs           version        kernel        cpuinfo         bspmem          self                yaffs           
# cd 1
# ls
ioenv           filedesc        modules         mem             cmdline         exe  

其中/proc/pid 目录下文件说明如下表所示。

文件/目录描述(进程属性)
1进程 ID 为 1 的进程信息目录
ksymbol内核符号表文件
posixPOSIX 子系统信息目录
net网络子系统信息目录
power电源管理子系统信息目录
fs文件系统子系统信息目录
version当前系统运行的内核版本号信息文件
kernel内核子系统信息目录
cpuinfo处理器相关信息文件
bspmem每个物理存储器设备(RAM 或 ROM)在系统内存中的映射信息文件
self辅助性信息目录
yaffsYAFFS 文件系统信息文件

/proc/ pid 目录下文件示例内容:

# cd /proc/pid/1
# cat ioenv
umask:0
wd:/
# cat filedesc
FD NAME
0 /dev/pty/7.hst
1 /dev/pty/7.hst
2 /dev/pty/7.hst
# cat modules
NAME HANDLE TYPE GLB BASE SIZE SYMCNT
app_proc 30c5f170 USER YES c0008000 8428 2
libvpmpdm.so 30c5f5a8 USER YES c0018000 d384 70
<VP Ver:1.5.1 dl-malloc>
# cat mem
static memory    : 49152
heap memory     : 4096
total memory     : 53248
# cat cmdline
/apps/app_proc/app_proc
# ll
-r--r----- root     root     Mon Jul 27 14:37:11 2015      0 B, ioenv
-r--r----- root     root     Mon Jul 27 14:37:11 2015      0 B, filedesc
-r--r----- root     root     Mon Jul 27 14:37:11 2015      0 B, modules
-r--r----- root     root     Mon Jul 27 14:37:11 2015      0 B, mem
-r--r----- root     root     Mon Jul 27 14:37:11 2015      0 B, cmdline
lr--r----- root     root     Mon Jul 27 14:37:11 2015            exe/ -> /apps/app_proc/app_proc
      total items : 6

/proc/ksymbol 内核符号表

内核符号表文件示例内容:

# cat /proc/ksymbol
         SYMBOL NAME                  ADDR     TYPE
------------------------------ -------- --------
viShellInit                        3000c888 RX      
aodv_netif                         3149e6b4 RW      
_cppRtUninit                       302afcec RX      
_IosFileSet                           302935b4 RX      
_epollFindEvent                    3028efb8 RX      
__blockIoDevDelete                   302631dc RX      
__pxnameGet                           3023db10 RX      
mq_timedreceive                   3023cc90 RX      
API_INetNpfDetach                  30221e90 RX      
snmp_set_sysname                   301da42c RX      
igmp_joingroup                      301c6d6c RX      
vprocIoFileDescGet                  30178130 RX      
API_MonitorUploadCreate             3016e528 RX      
API_MonitorNet6UploadCreate        3016d490 RX      

/proc/posix POSIX 子系统信息

POSIX 子系统中包含命名信息文件 pnamed,POSIX 命名信息可以通过 cat 命令来查看 pnamed 的内容,其中 TYPE 表示类型(其中 SEM 表示信号类型,MQ 表示消息队列),OPEN 表示使用计数,NAME 表示对象名。

/proc/posix 目录示例内容:

# cd /proc/posix/
# ls
pnamed
# cat pnamed
TYPE  OPEN                      NAME
---- ------ --------------------------------
SEM           1 sem_named

/proc/net 网络子系统

网络子系统目录示例内容:

# cd /proc/net/
# ls
netfilter      wireless         ppp                 packet          arp             if_inet6       dev              unix                 tcpip_stat         route          igmp6          igmp       raw6             raw               udplite6           udplite         udp6           udp          tcp6            tcp               mesh-adhoc

网络子系统各目录文件说明如下表所示。

文件描述(进程属性)
ioenv进程 I/O 环境文件
filedesc文件描述符信息文件
modules动态链接库情况文件
mem内存信息文件
cmdline命令行文件,以 \0 分隔命令行文件
exe可执行文件的符号链接

/proc/power 电源管理子系统

电源管理子系统目录示例内容:

# cd /proc/power/
# ls
pminfo          devices         adapter

其中/proc/power 目录下文件说明如下表所示。

目录/文件描述(进程属性)
netfilter网络过滤规则文件
wireless无线网络配置文件
pppPPP 拨号文件
packetAF_PACKET 信息文件
arpARP 信息文件
if_inet6IPV6 网络接口文件
dev网络接口设备信息文件
unixAF_UNIX 信息文件
tcpip_statTCP/IP 状态信息文件
route路由表信息文件
igmp6IPV6 IGMP 信息文件
igmpIGMP 信息文件
raw6IPV6 原始数据信息文件
raw原始数据信息文件
udplite6IPV6 UDP 简要信息文件
udpliteUDP 简要信息文件
udp6IPV6 UDP 信息文件
udpUDP 信息文件
tcp6IPV6 TCP 信息文件
tcpTCP 信息文件
mesh-adhocMesh 自组网信息目录

pminfo文件示例信息:

# cat pminfo
NCPUS           : 1
ACTIVE          : 1
POWERLevel    : Top
SYSStatus       : Running
  • NCPUS:当前系统 CPU 核心数。
  • ACTIVE:当前系统使能的 CPU 核心数。
  • POWERLevel:电源能量等级,由高到低分别为 Top、Fast、Normal、Slow。
  • SYSStatus:当前系统运行状态,运行状态包括低功耗状态 Power-Saving 和正常运行状态 Running。

devices 文件信息 :

# cat devices
PM-DEV         ADAPTER        CHANNLE   POWER
uart2          inner_pm       12         on
uart1          inner_pm       11         on
uart0          inner_pm       10         on
  • PM-DEV:电源管理设备名称。
  • ADAPTER:所属电源管理适配器名称。
  • CHANNLE:所属电源管理适配器通道号。
  • POWER:当前电源状态,包括打开状态 on 和关闭状态 off。

adapter 文件信息 :

# cat adapter
ADAPTER        MAX-CHANNLE
inner_pm       21
  • ADAPTER:电源管理适配器名称。
  • MAX-CHANNLE:电源管理适配器通道号最大数目。

/proc/fs 文件系统子系统

文件系统目录示例内容:

# cd /proc/fs
# ls
fssup           procfs          rootfs

其中/proc/fs 目录下文件说明如下表所示。

文件描述(进程属性)
pminfo当前系统信息文件
devices使能电源管理的设备文件
adapter适配器信息文件

fssup 文件信息:

# cat fssup
rootfs procfs ramfs romfs vfat nfs yaffs

procfs 目录信息:

# cd procfs/
# ls
stat
# cat stat
memory used : 0 bytes
total files : 47
  • memory used:文件大小。
  • total files:文件数量。

rootfs 目录信息 :

# cd rootfs/
# ls
stat
# cat stat
memory used : 3031 bytes
total files : 43
  • memory used:文件大小。
  • total files:文件数量。

/proc/version 内核版本信息

内核版本信息文件示例内容:

# cd /proc
# cat version
SylixOS kernel version: 1.2.1 NeZha(a) BSP version 5.1.2 for GEMINI
(compile time : Jan 15 2016 11:44:33)
GCC:4.9.3

内核版本信息包含了 SylixOS 内核版本信息,BSP 版本信息,SylixOS 内核编译时间,编译器版本信息。

/proc/kernel 内核信息

内核信息目录示例内容:

# cd /proc/kernel/
# ls
affinity        objects         tick

其中/proc/kernel 目录下文件说明如下表所示。

目录/文件描述(进程属性)
fssup文件系统支持信息文件
procfsPROC 文件系统信息目录
rootfsROOT 文件系统信息目录

affinity 文件示例内容:

# cat affinity
      NAME            TID     PID  CPU
---------------- ------- ----- ---
t_idle              4010000      0   *
t_itimer          4010001      0   *
t_except          4010002      0   *
t_log              4010003      0   *
t_power              4010004      0   *
t_hotplug          4010005      0   *
t_reclaim          4010007      0   *
t_netjob          4010008      0   *
t_netproto          4010009      0   *
t_tftpd              401000a      0   *
t_ftpd              401000b      0   *
t_telnetd          401000c      0   *
t_tshell          401000e      0   *
  • NAME:线程名称。
  • TID:线程 ID。
  • PID:进程 ID。
  • CPU:当前线程亲和到指定 CPU。

objects 文件示例内容:

# cat objects
object      total    used     max-used
event          1500       99        101
eventset        100        0           0
heap            22          2           2
msgqueue        300       6           6
partition       30          7           7
rms             30          1           1
thread          100         13          14
threadvar       20          0           0
timer           100         2           2
dpma            2          0           0
threadpool    2           0           0
  • object:内核对象类型。
  • total:指定类型对象总数。
  • used:指定类型对象已经被使用的数目。
  • max-used:指定类型对象被使用过的最大数目。

tick 文件示例内容:

# cat tick
tick rate    : 100 hz
tick          : 44304
  • tick rate:系统时钟频率。
  • total: 系统总时钟计数。

/proc/cpuinfo 处理器信息

cpuinfo 文件示例内容:

# cd /proc
# cat cpuinfo
CPU             : SAMSUNG S3C2440A (ARM920T 405/101MHz NonFPU)
CPU Family    : ARM(R) 32-Bits
CPU Endian     : Little-endian
CPU Cores      : 1
CPU Active     : 1
PWR Level      : Top level
CACHE          : 32KBytes L1-Cache (D-16K/I-16K)
PACKET          : Mini2440 Packet
BogoMIPS  0    : 426.600
  • CPU:处理器类型及关键性参数。
  • CPU Family:处理器架构类型及字长。
  • CPU Endian:大端小端类型。
  • CPU Cores:处理器核心数。
  • CPU Active:当前激活的处理器数。
  • PWR Level:当前电源能级。
  • CACHE:高速缓存信息。
  • PACKET:板级支持包类型。
  • BogoMIPS 0:SylixOS 中衡量计算器运行速度的一种尺度(每秒百万次)。

/proc/bspmem 内存映射信息

bspmem 文件示例内容:

# cd /proc
# cat bspmem
ROM SIZE: 0x00200000 Bytes (0x00000000 - 0x001fffff)
RAM SIZE: 0x04000000 Bytes (0x30000000 - 0x33ffffff)
use "mems" "zones" "virtuals"... can print memory usage factor.

/proc/self 辅助性信息

self 目录示例内容:

# cd /proc/self/
# ls
auxv

/proc/cmdline 启动信息

cmdline 文件示例内容:

# cat /proc/cmdline
hz=1000 hhz=1000 console=/dev/ttyS0 kdlog=no kderror=yes kfpu=no heapchk=yes utc=yes rfsmap=/boot:/media/hdd0,/:/media/hdd1 video=uvesafb:ywrap,mtrr:3,640x480-16@60
# 
  • hz=1000 : 指定内核的时钟频率为 1000 Hz,即每秒发生 1000 次时钟中断。
  • console=/dev/ttyS0 : 指定系统的控制台输出设备为 /dev/ttyS0
  • kdlog=no : 禁用内核调试日志功能。
  • kderror=yes : 使能内核调试错误输出。
  • kfpu=no : 禁用浮点单元(FPU)支持。
  • heapchk=yes : 使能堆校验功能。
  • utc=yes :系统时钟使用 UTC 时间(协调世界时),而不是本地时间。
  • rfsmap=/boot:/media/hdd0,/:/media/hdd1 : 用于配置 root 文件系统的映射关系。指定 /boot 目录映射到 /media/hdd0 ,根目录 / 映射到 /media/hdd1
  • video=uvesafb:ywrap,mtrr:3,640x480-16@60 : 用于配置内核的视频驱动选项。指定使用 uvesafb 驱动,并设置 ywrap 模式和 MTRR(Memory Type Range Registers)选项,分辨率为 640x480,颜色深度为 16 位,刷新率为 60Hz。

/proc/diskcache 磁盘CACHE

diskcache 文件示例内容:

# cat /proc/diskcache
DO NOT INCLUDE 'NAND' READ CACHE INFO.

       NAME       OPT SECTOR-SIZE TOTAL-SECs VALID-SECs DIRTY-SECs BURST-R BURST-W DIRECT-R DIRECT-W  HASH
----------------- --- ----------- ---------- ---------- ---------- ------- ------- -------- -------- ------
SD-MemCard          2         512       1024        882          0     128     256        0        0   1024
#
  • NAME: 磁盘缓存设备名;
  • OPT:CACHE工作选项;
  • SECTOR-SIZE: 每一扇区字节数量;
  • TOTAL-SECs:CACHE缓冲的节点数;
  • VALID-SECs: 有效的扇区数量;
  • DIRTY-SECs: 需要回写的扇区数量;
  • BURST-R: 最大触发读扇区数量;
  • BURST-W: 最大触发写扇区数量;
  • HASH: HASH 表大小。

/proc/dma DMA属性

dma 文件示例内容:

# cat /proc/dma
DMA   MAX DATA   MAX NODE CUR NODE
--- ------------ -------- --------
  1       1024KB        8        0
  2       1024KB        8        0
  3       1024KB        8        0
  4       1024KB        8        0
  5       1024KB        8        0
  6       1024KB        8        0
  7       1024KB        8        0
  8       1024KB        8        0
  9       1024KB        8        0
 10       1024KB        8        0
 11       1024KB        8        0
 12       1024KB        8        0
 13       1024KB        8        0
 14       1024KB        8        0
 15       1024KB        8        0
 16       1024KB        8        0
 17       1024KB        8        0
 18       1024KB        8        0
 19       1024KB        8        0
 20       1024KB        8        0
 21       1024KB        8        0
 22       1024KB        8        0
 23       1024KB        8        0
 24       1024KB        8        0
 25       1024KB        8        0
 26       1024KB        8        0
 27       1024KB        8        0
 28       1024KB        8        0
 29       1024KB        8        0
 30       1024KB        8        0
 31       1024KB        8        0
# 
  • DMA:DMA 通道号;
  • MAX DATA:DMA 传输最大数据量;
  • MAX NODE:允许最大节点缓冲;
  • CUR NODE:允许最大节点缓冲。

/proc/hook 系统钩子

hook 目录示例内容:

# cd /proc/hook/
# ls
fatal     idle       init      objcreate  pdelete      tcreate  tinit
fdcreate  idleenter  intenter  objdelete  reboot       tdelete  tswap
fddelete  idleexit   intexit   pcreate    stkoverflow  tick     wdtimer
#

/proc/pci PCI 信息

pci 文件示例内容:

# cat /proc/pci
PCI info:
Bus  0 Slot  0 Function 0 VendorID 8086 DevieceID c00:
  Class 6 [Bridge] Sub 0 [Host bridge] Prog-if 0 []
    IRQ Line-0 Pin-0
    Latency=0 Min Gnt=0 Max lat=0
    Base0 00000000 Base1 00000000 Base2 00000000
    Base3 00000000 Base4 00000000 Base5 00000000
    Rom 0 SubVendorID 1028 SubSystemID 612
Bus  0 Slot  1 Function 0 VendorID 8086 DevieceID c01:
  Class 6 [Bridge] Sub 4 [PCI bridge] Prog-if 0 [Normal decode]
    IRQ Line-11 Pin-1
    Latency=0 SecLatency=0 PriBus=0 SecBus=1 SubBus=1
    I/O behind 2000e0e0 Memory behind f7c0f6c0
    I/O e0-1c0 Mem f6c0-1ee80 Rom 0
Bus  0 Slot  2 Function 0 VendorID 8086 DevieceID 412:
  Class 3 [Display controller] Sub 0 [VGA compatible controller] Prog-if 0 [VGA controller]
    IRQ Line-11 Pin-1
    Latency=0 Min Gnt=0 Max lat=0
    Base0 f6800004 Base1 00000000 Base2 e000000c
    Base3 00000000 Base4 0000f001 Base5 00000000
    Rom 0 SubVendorID 1028 SubSystemID 612
    Region 0: Memory at f6800000 [Size 4M] [flags 00140204]  (64-bit non-pre)
    Region 2: Memory at e0000000 [Size 256M] [flags 0014220c]  (64-bit pre)
    Region 4: I/O ports at f000 [Size 64] [flags 00040101] 
    Irq start 10 end 10 [flags 00000400] 
Bus  0 Slot  3 Function 0 VendorID 8086 DevieceID c0c:
  Class 4 [Multimedia controller] Sub 3 [Audio device] Prog-if 0 []
    IRQ Line-11 Pin-1
    Latency=0 Min Gnt=0 Max lat=0
    Base0 f7e14004 Base1 00000000 Base2 00000000
    Base3 00000000 Base4 00000000 Base5 00000000
    Rom 0 SubVendorID 1028 SubSystemID 612
    Region 0: Memory at f7e14000 [Size 16K] [flags 00140204]  (64-bit non-pre)
    Irq start 10 end 10 [flags 00000400] 
Bus  0 Slot 20 Function 0 VendorID 8086 DevieceID 8c31:
  Class 12 [Serial bus controller] Sub 3 [USB controller] Prog-if 48 [XHCI]
    IRQ Line-11 Pin-1
    Latency=0 Min Gnt=0 Max lat=0
    Base0 f7e00004 Base1 00000000 Base2 00000000
    Base3 00000000 Base4 00000000 Base5 00000000
    Rom 0 SubVendorID 1028 SubSystemID 612
    Region 0: Memory at f7e00000 [Size 64K] [flags 00140204]  (64-bit non-pre)
    Irq start 10 end 10 [flags 00000400] 
Bus  0 Slot 22 Function 0 VendorID 8086 DevieceID 8c3a:
  Class 7 [Communication controller] Sub 128 [Communication controller] Prog-if 0 []
    IRQ Line-11 Pin-1
    Latency=0 Min Gnt=0 Max lat=0
    Base0 f7e1e004 Base1 00000000 Base2 00000000
    Base3 00000000 Base4 00000000 Base5 00000000
    Rom 0 SubVendorID 1028 SubSystemID 612
    Region 0: Memory at f7e1e000 [Size 16] [flags 00140204]  (64-bit non-pre)
    Irq start 10 end 10 [flags 00000400] 
#

/proc/smp SMP 启动相关信息

smp 文件示例内容:

# cat /proc/smp 
LOGIC CPU PHYSICAL CPU NON IDLE STATUS CURRENT THREAD MAX NESTING IPI VECTOR
--------- ------------ -------- ------ -------------- ----------- ----------
        0            0        0 ACTIVE t_idle0                  1          0
        1            1        0 ACTIVE t_tshell                 1          1
        2            2        0 ACTIVE t_idle2                  1          2
        3            3        0 ACTIVE t_idle3                  1          3
# 
  • LOGICCPU:逻辑 CPU;
  • PHYSICALCPU:物理 CPU;
  • NON IDLE:是否处于非空闲状态;
  • STATUS:线程状态;
  • CURRENT THREAD:当前线程;
  • MAX NESTING:最大嵌套层数;
  • IPI VECTOR:中断处理程序向量。

/proc/sysvipc System V IPC 机制信息

sysvipc 文件示例内容:

# ls /proc/sysvipc/msg  
sem  shm  ver
#

/proc/xinput 输入设备信息

xinput 文件示例内容:

# cat /proc/xinput
devices                 type status
/dev/input/kbd0         kbd  close
/dev/input/mse0         mse  close
/dev/input/touch0       mse  close
#
  • devices:输入设备;
  • type:设备类型(kbd:键盘,mse:鼠标);
  • status:设备状态;

/proc/yaffs YAFFS 分区信息

yaffs 文件示例内容:

# cd /proc
# cat yaffs
Device : "/n1"
startBlock......... 129
endBlock........... 1023
totalBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 871
nReservedBlocks.... 16
nCheckptResBlocks.. nil
blocksInCheckpoint. 0
nObjects........... 23
nTnodes............ 96
nFreeChunks........ 55975
nPageWrites........ 0
nPageReads......... 13
nBlockErasures..... 0
nErasureFailures... 0
nGCCopies.......... 0
……
文档内容是否对您有所帮助?
有帮助
没帮助