PROC 文件系统简介
PROC 文件系统是一个虚拟文件系统,只存在于内存当中,而不占用外存空间。PROC 以文件系统的方式为访问系统内核数据的操作提供接口。应用程序可以通过访问 PROC 文件系统获得系统相关信息。由于系统的某些信息是动态改变的,所以应用程序读取 PROC 文件时,PROC 文件系统是动态从系统内核读出所需信息并提交的。
SylixOS 为了方便用户访问内核信息,支持 PROC 虚拟文件系统,该文件系统存在于/proc/目录,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。
SylixOS 提供的 PROC 文件系统示例目录内容:
# cd /proc/
# ls
1 xinput sysvipc ksymbol posix
net diskcache power fs hook
smp cmdline version kernel dma
cpuinfo bspmem self yaffs
/proc/目录下的文件及目录说明如下表所示。
文件/目录 | 描述(进程属性) |
---|---|
1 | 进程 ID 为 1 的进程信息目录 |
xinput | 显示多输入设备状态 |
sysvipc | XSI IPC 进程间通信 |
ksymbol | 内核符号表文件 |
posix | POSIX 子系统信息目录 |
net | 网络子系统信息目录 |
diskcache | 磁盘高速缓存信息 |
power | 电源管理子系统信息目录 |
fs | 文件系统子系统信息目录 |
hook | 显示系统 hook 信息 |
smp | 显示多核下任务 |
cmdline | 显示内核命令行参数 |
version | 当前系统运行的内核版本信息文件 |
kernel | 内核子系统信息目录 |
dma | 显示当前使用的 DMA 通道信息 |
cpuinfo | 处理器相关信息文件 |
bspmem | 显示 RAM/ROM 信息 |
self | 辅助性信息目录 |
yaffs | YAFFS 文件系统信息文件 |
通常使用脚本来访问/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 STAT PID GRP MEMORY UID GID USER
---------------- ------------ ---- ----- ----- ---------- ----- ----- ------
kernel <orphan> R 0 0 48KB 0 0 root
app_proc <orphan> R 1 1 232KB 0 0 root
total vprocess: 2
# cd /proc/
# ls
1 xinput sysvipc ksymbol posix
net diskcache power fs hook
smp cmdline version kernel dma
cpuinfo bspmem self yaffs
# cd 1
# ls
ioenv filedesc modules mem cmdline
exe
其中/proc/pid/目录下文件说明如下表所示。
文件 | 描述(进程属性) |
---|---|
ioenv | 进程 I/O 环境文件 |
filedesc | 文件描述符信息文件 |
modules | 动态链接库信息文件 |
mem | 内存信息文件 |
cmdline | 命令行文件,以 \0 分隔命令行文件 |
exe | 可执行文件的符号链接 |
/proc/ pid/目录下文件示例内容:
# cd /proc/1/
# cat ioenv
umask:0
wd:/apps/app_proc
# cat filedesc
FD NAME
0 /dev/ttyS0
1 /dev/ttyS0
2 /dev/ttyS0
# cat modules
NAME HANDLE TYPE GLB BASE SIZE SYMCNT
app_proc 013b4878 USER YES a0038000 82c2 2
libvpmpdm.so 013b4f50 USER YES a0048000 274b8 286
<VP Ver:2.0.1 dl-malloc>
# cat mem
static memory : 167936 Bytes
heap memory : 4096 Bytes
mmap memory : 65536 Bytes
total memory : 237568 Bytes
# cat cmdline
/apps/app_proc/app_proc
# ll
-r--r----- root root Sat Jan 01 08:04:53 2000 0 B, ioenv
-r--r----- root root Sat Jan 01 08:04:53 2000 0 B, filedesc
-r--r----- root root Sat Jan 01 08:04:53 2000 0 B, modules
-r--r----- root root Sat Jan 01 08:04:53 2000 0 B, mem
-r--r----- root root Sat Jan 01 08:04:53 2000 0 B, cmdline
lr--r----- root root Sat Jan 01 08:04:53 2000 exe -> /apps/app_proc/app_proc
total items: 6
/proc/xinput 输入设备信息
/proc/xinput 存储当前系统下输入设备状态信息:
# cd /proc/
# cat xinput
devices type status
/dev/input/kbd0 kbd close
/dev/input/touch0 mse open
/dev/input/mse0 mse close
/proc/sysvipc IPC 信息
/proc/sysvipc 存储当前系统下 IPC 的使用信息:
# cd /proc/sysvipc/
# ls
shm msg sem ver
# ps
NAME FATHER STAT PID GRP MEMORY UID GID USER
---------------- ---------------- ---- ----- ----- ---------- ----- ----- ------
kernel <orphan> R 0 0 40KB 0 0 root
app_proc <orphan> R 1 1 212KB 0 0 root
total vprocess: 2
# cat shm
key shmid perms size nattch cpid lpid uid gid cuid cgid atime dtime ctime
0 0 666 4096 1 1 1 0 0 0 0 1497865518 0 1497865518
/proc/ksymbol 内核符号表
/proc/ksymbol 存放当前系统下内核符号表信息:
# cat /proc/ksymbol
SYMBOL NAME ADDR TYPE
------------------------------ -------- --------
viShellInit 002097f8 RX
aodv_netif 00d1b34c RW
dns_mquery_v4group 0058293c RW
_cppRtUninit 0050c7c0 RX
_IosFileSet 004f0fc4 RX
_epollFindEvent 004eca9c RX
__blockIoDevDelete 004a63e8 RX
API_AhciDriveRegWait 004a0af0 RX
API_AhciDriveInfoShow 004a0058 RX
__pxnameGet 0046fc58 RX
mq_timedreceive 0046ec54 RX
gjb_format 0046b3c8 RX
API_INetNpfDetach 0044436c RX
igmp_joingroup 003f6d58 RX
if_param_getingw 003ab764 RX
vprocIoFileDescGet 0039b714 RX
lib_nlreent_init 00391bd0 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 网络子系统
/proc/net 存放当前系统下网络子系统信息:
# cd /proc/net/
# ls
netfilter nat wireless ppp unix
packet arp if_inet6 dev tcpip_stat
route igmp6 igmp raw6 raw
udplite6 udplite udp6 udp tcp6
tcp mesh-adhoc
网络子系统各目录文件说明如下表所示。
目录/文件 | 描述(进程属性) |
---|---|
netfilter | 网络过滤规则文件 |
nat | 网络地址转换 |
wireless | 无线网络配置文件 |
ppp | PPP 拨号文件 |
packet | AF_PACKET 信息文件 |
arp | ARP 信息文件 |
if_inet6 | IPV6 网络接口文件 |
dev | 网络接口设备信息文件 |
unix | AF_UNIX 信息文件 |
tcpip_stat | TCP/IP 状态信息文件 |
route | 路由表信息文件 |
igmp6 | IPV6 IGMP 信息文件 |
igmp | IGMP 信息文件 |
raw6 | IPV6 原始数据信息文件 |
raw | 原始数据信息文件 |
udplite6 | IPV6 UDP 简要信息文件 |
udplite | UDP 简要信息文件 |
udp6 | IPV6 UDP 信息文件 |
udp | UDP 信息文件 |
tcp6 | IPV6 TCP 信息文件 |
tcp | TCP 信息文件 |
mesh-adhoc | Mesh 自组网信息目录 |
/proc/diskcache 磁盘缓存
/proc/diskcache 存放当前系统下磁盘高速缓存信息:
# cd /proc/
# cat diskcache
DO NOT INCLUDE 'NAND' READ CACHE INFO.
NAME OPT SECTOR-SIZE TOTAL-SECs VALID-SECs DIRTY-SECs BURST-R BURST-W HASH
-------- --- ----------- ---------- ---------- ---------- ------- ------- ------
ATA-Hard 0 512 1024 1024 0 16 32 1024 Disk
/proc/power 电源管理子系统
/proc/power 存放当前系统下电源管理子系统信息:
# ls
pminfo devices adapter
其中/proc/power 目录下文件说明如所示。
文件 | 描述(进程属性) |
---|---|
pminfo | 当前系统信息文件 |
devices | 使能电源管理的设备文件 |
adapter | 适配器信息文件 |
pminfo 文件示例信息:
# cat pminfo
CPU Cores : 1
CPU Active : 1
PWR Level : Top
SYS Status : Running
- CPU Cores: 当前系统 CPU 核心数。
- CPU Active: 当前系统使能的 CPU 核心数。
- PWR Level: 电源能量等级,由高到低分别为 Top、Fast、Normal、Slow。
- SYS Status: 当前系统运行状态,运行状态包括低功耗状态 Power-Saving。
和正常运行状态 Running。
devices 文件信息:
# cat devices
PM-DEV ADAPTER CHANNEL 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-CHANNEL
inner_pm 21
- ADAPTER: 电源管理适配器名称。
- MAX-CHANNLE: 电源管理适配器通道号最大数目。
/proc/fs 文件系统子系统
/proc/fs 存放当前系统轩文件系统信息:
# cd /proc/fs/
# ls
fssup procfs rootfs
其中/proc/fs 目录下文件说明如下表所示。
目录/文件 | 描述(进程属性) |
---|---|
fssup | 文件系统支持信息文件 |
procfs | PROC 文件系统信息目录 |
rootfs | ROOT 文件系统信息目录 |
fssup 文件信息:
# cat fssup
rootfs procfs ramfs romfs vfat nfs yaffs tpsfs
procfs 目录信息:
# cd procfs/
# ls
stat
# cat stat
memory used: 0 Bytes
total files: 82
- memory used: 文件大小。
- total files: 文件数量。
rootfs 目录信息:
# cd rootfs/
# ls
stat
# cat stat
memory used: 3193 Bytes
total files: 45
- memory used: 文件大小。
- total files: 文件数量。
/proc/hook 信息
/proc/hook 存放系统当前的 hook 信息:
# cd /proc/hook/
# ls
pdelete pcreate fatal stkoverflow intexit
intenter idleexit idleenter fddelete fdcreate
objdelete objcreate wdtimer reboot init
idle tinit tick tswap tdelete
tcreate
/proc/smp 显示多核任务信息
/proc/smp/存放系统当前 CPU 运行任务信息:
# cd /proc/
# cat smp
LOGIC CPU PHYSICAL CPU NON IDLE STATUS CURRENT THREAD MAX NESTING IPI VECTOR
--------- ------------ -------- ------ -------------- ----------- ----------
0 0 1 ACTIVE app_proc 1 30
1 1 1 ACTIVE t_tshell 1 31
/proc/cmdline 内核命令行参数
/proc/cmdline 存放当前系统内核命令行参数信息:
# cd /proc/
# cat cmdline
hz=1000 hhz=1000 console=/dev/ttyS0 kdlog=no kderror=yes kfpu=no heapchk=yes utc=no video=uvesafb:ywrap,mtrr:3,640x480-32@60
/proc/version 内核版本信息
/proc/version 存放当前系统的内核版本信息:
# cd /proc/
# cat version
SylixOS kernel version: 1.4.3 Code name: LongYuan BSP version 1.0.0 for LongYuan
(compile time: May 12 2017 15:13:56)
GCC:4.9.3
内核版本信息包含了 SylixOS 内核版本信息,BSP 版本信息,SylixOS 内核编译时间,编译器版本信息。
/proc/kernel 内核信息
/proc/kernel 存放当前系统的内核信息:
# cd /proc/kernel/
# ls
affinity objects tick
其中/proc/kernel 目录下文件说明如下表所示。
文件 | 描述(进程属性) |
---|---|
affinity | 多核亲和度信息文件 |
objects | 内核对象信息文件 |
tick | 系统时钟嘀嗒信息文件 |
affinity 文件示例内容:
# cat affinity
NAME TID PID CPU
---------------- ------- ----- ---
t_idle0 4010000 0 0
t_itimer 4010001 0 *
t_isrdefer 4010002 0 *
t_except 4010003 0 *
t_log 4010004 0 *
t_power 4010005 0 *
t_hotplug 4010006 0 *
t_reclaim 4010008 0 *
t_sdhcisdio 4010009 0 *
t_diskcache 401000a 0 *
t_dcwpipe 401000b 0 *
t_tpsfs 401000c 0 *
t_netjob 401000d 0 *
t_netproto 401000e 0 *
t_snmp 401000f 0 *
t_tftpd 4010010 0 *
t_ftpd 4010011 0 *
t_telnetd 4010012 0 *
t_xinput 4010013 0 *
t_tshell 4010015 0 *
- NAME: 线程名称。
- TID: 线程 ID。
- PID: 进程 ID。
- CPU: 当前线程亲和到指定 CPU。
objects 文件示例内容:
# cd /proc/kernel/
# cat objects
object total used max-used
event 2400 121 123
eventset 400 0 0
heap 42 1 1
msgqueue 800 11 11
partition 40 8 8
rms 30 1 1
thread 400 20 21
timer 100 1 1
dpma 2 0 0
threadpool 2 0 0
- object: 内核对象类型。
- total: 指定类型对象总数。
- used: 指定类型对象已经被使用的数目。
- max-used: 指定类型对象被使用过的最大数目。
tick 文件示例内容:
# cd /proc/kernel/
# cat tick
tick rate : 100 hz
tick : 964939
monotonic : 2:40:49.398735170
reatime UTC : Sat Jan 01 02:40:49 2000
reatime LCL : Sat Jan 01 10:40:49 2000
- tick rate: 系统时钟频率。
- tick: 系统总时钟计数。
/proc/dma DMA 信息
/proc/dma 存放当前系统当前使用的 DMA 通道信息:
# cd /proc/
# cat dma
DMA MAX DATA MAX NODE CUR NODE
--- ------------ -------- --------
0 0 0 0
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 0 0
7 0 0 0
8 0 0 0
9 0 0 0
10 0 0 0
11 0 0 0
12 0 0 0
13 0 0 0
14 0 0 0
15 0 0 0
16 0 0 0
17 0 0 0
18 0 0 0
19 0 0 0
20 0 0 0
21 0 0 0
/proc/cpuinfo 处理器信息
/proc/cpuinfo 存放当前系统 CPU 信息:
# cd /proc/
# cat cpuinfo
CPU : Xilinx zynq7000 (Cortex-A9 NEON)
CPU Family : ARM(R) 32-Bits
CPU Endian : Little-endian
CPU Cores : 1
CPU Active : 1
PWR Level : Top level
CACHE : 64KBytes L1-Cache (D-32K/I-32K)
PACKET : QEMU zynq7000 Packet
BogoMIPS 0 : 682.600
- CPU: 处理器类型及关键性参数。
- CPU Family: 处理器架构类型及字长。
- CPU Endian:大端小端类型。
- CPU Cores: 处理器核心数。
- CPU Active: 当前激活的处理器数。
- PWR Level: 当前电源能级。
- CACHE: 高速缓存信息。
- PACKET: 板级支持包类型。
- BogoMIPS 0: SylixOS 中衡量计算器运行速度的一种尺度(每秒百万次)。
/proc/bspmem 内存映射信息
/proc/bspmem 存放当前系统内存映射信息:
# cd /proc/
# cat bspmem
ROM SIZE: 0x00040000 Bytes (0x00000000 - 0x0003ffff)
RAM SIZE: 0x0fe00000 Bytes (0x00200000 - 0x0fffffff)
use "mems" "zones" "virtuals"... can print memory usage factor.
/proc/yaffs YAFFS 分区信息
/proc/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
allGCs............. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 20
nRetiredBlocks..... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
Device : "/n0"
startBlock......... 1
endBlock........... 128
totalBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 126
nReservedBlocks.... 10
nCheckptResBlocks.. nil
blocksInCheckpoint. 0
nObjects........... 9
nTnodes............ 3
nFreeChunks........ 8183
nPageWrites........ 0
nPageReads......... 6
nBlockErasures..... 0
nErasureFailures... 0
nGCCopies.......... 0
allGCs............. 0
passiveGCs......... 0
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetiredBlocks..... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 0
nUnlinkedFiles..... 0
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1