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 | 存放加载器所需的文件 |
/usb | 无 | USB 挂载根节点 |
/yaffs2 | 无 | YAFFS 文件系统分区 |
/proc | 无 | PROC 文件系统根节点 |
/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 | 内核符号表文件 |
posix | POSIX 子系统信息目录 |
net | 网络子系统信息目录 |
power | 电源管理子系统信息目录 |
fs | 文件系统子系统信息目录 |
version | 当前系统运行的内核版本号信息文件 |
kernel | 内核子系统信息目录 |
cpuinfo | 处理器相关信息文件 |
bspmem | 每个物理存储器设备(RAM 或 ROM)在系统内存中的映射信息文件 |
self | 辅助性信息目录 |
yaffs | YAFFS 文件系统信息文件 |
/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 | 无线网络配置文件 |
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 自组网信息目录 |
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 | 文件系统支持信息文件 |
procfs | PROC 文件系统信息目录 |
rootfs | ROOT 文件系统信息目录 |
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
……