曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 8217|回复: 6
打印 上一主题 下一主题

/proc 文件系统

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-2-14 01:46:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
软件驱动控制硬件经常是通过某种方法配置,或者可以报告相关信息。例如,一个硬盘控制器可能配置成使用某种特定的DMA模式。一个网络卡可能可以报告它是否可以处理高速,全双工的连接。

在过去与设备驱动进行通讯的适用工具已经相当普遍。例如,hdparm 用来配置一些磁盘参数;ifconfig 用来报告网络状态。在近年来,更趋向于提供更为一致的访问驱动的信息方法,实际上这已经扩展到包含有 linux 内核中各不同的元素。

Linux 提供一个特别的文件系统--procfs,这通常用在如 /proc 的目录上。它包含许多特别的文件,允许 higher-lever 访问驱动和内核信息。应用程序只要在正确访问权限的许可下,就可以读写这些信息并设置参数。

在 /proc 下的文件对于不同的系统而不同,而且每一个 LINUX 发行半中包含有多少这些文件,就会有多少支持 procfs 文件系统的驱动和设备。

很多时候,这些文件仅能读取并可以给出相关的状态信息,例如查看 CPU 信息:
[root@localhost ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 28
model name      : Mobile AMD Sempron(tm) Processor 2800+
stepping        : 0
cpu MHz         : 1600.000
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush mmx fxsr sse sse2 nx mmxext fxsr_opt 3dnowext 3dnow up lahf_lm ts fid vid ttp
bogomips        : 4002.57

查看内存使用信息
[root@localhost ~]# cat /proc/meminfo
MemTotal:       413696 kB
MemFree:         37632 kB
Buffers:          4600 kB
Cached:         115608 kB
SwapCached:          0 kB
Active:         275860 kB
Inactive:        44540 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       413696 kB
LowFree:         37632 kB
SwapTotal:      917496 kB
SwapFree:       917372 kB
Dirty:             360 kB
Writeback:           0 kB
AnonPages:      200192 kB
Mapped:          63200 kB
Slab:            31588 kB
PageTables:       7040 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   1124344 kB
Committed_AS:   643280 kB
VmallocTotal:   434168 kB
VmallocUsed:      5356 kB
VmallocChunk:   428676 kB

查看相关版本信息
[root@localhost ~]# cat /proc/version
Linux version 2.6.18-92.1.22.el5xen (mockbuild@builder16.centos.org) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) #1 SMP Tue Dec 16 13:08:49 EST 2008

有一些从这些文件得到的信息是在每次读取时会有变化的,如读取 meminfo ,每一次读取时都反应本次读取时内存使用的情况。

在 /proc 下的子目录里,可以从指定的内核函数取得更多的信息。例如,可以从 /proc/net/sockstat 得到有关于网络接口(network socket)的使用状况:
[root@localhost ~]# cat /proc/net/sockstat
sockets: used 492
TCP: inuse 11 orphan 0 tw 0 alloc 13 mem 0
UDP: inuse 16 mem 0
RAW: inuse 0
FRAG: inuse 0 memory 0

一些 /proc 条目可以写。例如,在所有运行中的程序在同一时间能打开的总的文件数是 Linux 内核的一个参数,其当前值可以通过
/proc/sys/fs/file-max 读取:
[root@localhost ~]# cat /proc/sys/fs/file-max
38167

这里的值是 38167。如果需要增加这个值,你可以将新值写到同一个文件上。如果在运行一个特殊的应用程序套件,你可能需要这么作--如一个使用许多表的数据库---这就需要一次性打开很多的文件。

写 /proc 文件需要超级用户权限。在写 /proc 文件时必须非常小心;在写不合适的值时,它可能会引起严重的问题--如数据丢失甚至是系统崩溃被破坏!

为了增加 system-wide 文件处理限度值到 80,000, 你可以简单的写一个新值到 file-max 文件:

echo 80000 >/proc/sys/fs/file-max

现在使用 cat /proc/sys/fs/file-max 可以看到这个改变:
80000

关于进程号,这个数字在 1 到 32,000 之间,使用 ps 命令可以提供当前正在运行的进程列表。如:
[root@localhost ~]# ps -e
  PID TTY          TIME CMD
    1 ?        00:00:00 init
    2 ?        00:00:00 migration/0
    3 ?        00:00:00 ksoftirqd/0
    4 ?        00:00:00 watchdog/0
......
   11723 ?        00:00:00 firefox
......
再看一下 /proc 中对应的文件夹中的内容:
[root@localhost ~]# ls -l /proc/11723
total 0
dr-xr-xr-x 2 root root 0 Feb 14 12:07 attr
-r-------- 1 root root 0 Feb 14 12:07 auxv
-r--r--r-- 1 root root 0 Feb 14 11:49 cmdline
-rw-r--r-- 1 root root 0 Feb 14 12:07 coredump_filter
-r--r--r-- 1 root root 0 Feb 14 12:07 cpuset
lrwxrwxrwx 1 root root 0 Feb 14 12:07 cwd -> /root
-r-------- 1 root root 0 Feb 14 12:06 environ
lrwxrwxrwx 1 root root 0 Feb 14 12:07 exe -> /bin/bash
dr-x------ 2 root root 0 Feb 14 12:07 fd
-r-------- 1 root root 0 Feb 14 12:07 limits
-r-------- 1 root root 0 Feb 14 12:07 limits
-rw-r--r-- 1 root root 0 Feb 14 12:07 loginuid
-r--r--r-- 1 root root 0 Feb 14 12:07 maps
-rw------- 1 root root 0 Feb 14 12:07 mem
-r--r--r-- 1 root root 0 Feb 14 12:07 mounts
-r-------- 1 root root 0 Feb 14 12:07 mountstats
-rw-r--r-- 1 root root 0 Feb 14 12:07 oom_adj
-r--r--r-- 1 root root 0 Feb 14 12:07 oom_score
lrwxrwxrwx 1 root root 0 Feb 14 12:07 root -> /
-r--r--r-- 1 root root 0 Feb 14 12:07 schedstat
-r-------- 1 root root 0 Feb 14 12:07 smaps
-r--r--r-- 1 root root 0 Feb 14 11:49 stat
-r--r--r-- 1 root root 0 Feb 14 12:07 statm
-r--r--r-- 1 root root 0 Feb 14 11:49 status
dr-xr-xr-x 3 root root 0 Feb 14 12:07 task
-r--r--r-- 1 root root 0 Feb 14 12:07 wchan
在上面可以看到许多特殊文件,这些文件告诉我们在这个进程上都发生了些什么。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
沙发
 楼主| 发表于 2009-8-19 12:06:31 | 只看该作者

查看系统中已登记的 I/O 口

beyes@linux-beyes:~/Desktop> cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0071 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0290-029f : pnp 00:02
  0290-0297 : f71882fg
02f8-02ff : serial
0378-037a : parport0
03c0-03df : vesafb
03f2-03f5 : floppy
03f7-03f7 : floppy DIR
03f8-03ff : serial
0400-047f : 0000:00:1f.0
  0400-047f : pnp 00:0e
    0400-0403 : ACPI PM1a_EVT_BLK
    0404-0405 : ACPI PM1a_CNT_BLK
    0408-040b : ACPI PM_TMR
    0410-0415 : ACPI CPU throttle
    0420-042f : ACPI GPE0_BLK
    0460-047f : iTCO_wdt
04d0-04d1 : pnp 00:0c
0500-053f : 0000:00:1f.0
  0500-053f : pnp 00:0e
0cf8-0cff : PCI conf1
1180-119f : pnp 00:0e
6000-6fff : PCI Bus 0000:05
  6000-601f : 0000:05:00.0
    6000-601f : XFi
7000-7fff : PCI Bus 0000:04
  7000-70ff : 0000:04:00.0
    7000-70ff : r8169
8000-8fff : PCI Bus 0000:03
  8000-800f : 0000:03:00.1
    8000-800f : pata_jmicron
  8010-8013 : 0000:03:00.1
    8010-8013 : pata_jmicron
  8020-8027 : 0000:03:00.1
    8020-8027 : pata_jmicron
  8030-8033 : 0000:03:00.1
    8030-8033 : pata_jmicron
  8040-8047 : 0000:03:00.1
    8040-8047 : pata_jmicron
9000-9fff : PCI Bus 0000:01
  9000-90ff : 0000:01:00.0
a000-a01f : 0000:00:1f.3
  a000-a01f : i801_smbus
a020-a03f : 0000:00:1d.2
  a020-a03f : uhci_hcd
a040-a05f : 0000:00:1d.1
  a040-a05f : uhci_hcd
a060-a07f : 0000:00:1d.0
  a060-a07f : uhci_hcd
a080-a09f : 0000:00:1a.2
  a080-a09f : uhci_hcd
a0a0-a0bf : 0000:00:1a.1
  a0a0-a0bf : uhci_hcd
a0c0-a0df : 0000:00:1a.0
  a0c0-a0df : uhci_hcd
a0e0-a0ef : 0000:00:1f.5
  a0e0-a0ef : ata_piix
a0f0-a0ff : 0000:00:1f.5
  a0f0-a0ff : ata_piix
a100-a103 : 0000:00:1f.5
  a100-a103 : ata_piix
a110-a117 : 0000:00:1f.5
  a110-a117 : ata_piix
a120-a123 : 0000:00:1f.5
  a120-a123 : ata_piix
a130-a137 : 0000:00:1f.5
  a130-a137 : ata_piix
a140-a14f : 0000:00:1f.2
  a140-a14f : ata_piix
a150-a15f : 0000:00:1f.2
  a150-a15f : ata_piix
a160-a163 : 0000:00:1f.2
  a160-a163 : ata_piix
a170-a177 : 0000:00:1f.2
  a170-a177 : ata_piix
a180-a183 : 0000:00:1f.2
  a180-a183 : ata_piix
a190-a197 : 0000:00:1f.2
  a190-a197 : ata_piix
上面显示的是当前已注册的端口区间。第 1 列给出了保留给第 2 列中所列设备的 I/O 口地址。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
板凳
 楼主| 发表于 2009-8-20 01:16:55 | 只看该作者

查看已注册中断

beyes@linux-beyes:~/C> cat /proc/interrupts
           CPU0       CPU1      
  0:   16412493   16417504   IO-APIC-edge      timer
  1:          1          1   IO-APIC-edge      i8042
  3:          0          0   IO-APIC-edge      parport0
  4:          1          0   IO-APIC-edge   
  5:          0          1   IO-APIC-edge   
  6:          1          1   IO-APIC-edge      floppy
  8:          0          1   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          3          1   IO-APIC-edge      i8042
 16:     265058     264647   IO-APIC-fasteoi   ahci, uhci_hcd:usb1
 17:         11          9   IO-APIC-fasteoi   pata_jmicron, HDA Intel
 18:     915618     913257   IO-APIC-fasteoi   uhci_hcd:usb3, ehci_hcd:usb4, uhci_hcd:usb7
 19:     511827     513540   IO-APIC-fasteoi   ata_piix, ata_piix, uhci_hcd:usb6
 21:          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
 22:      75348      74641   IO-APIC-fasteoi   HDA Intel
 23:          0          0   IO-APIC-fasteoi   uhci_hcd:usb5, ehci_hcd:usb8
218:    1902366    1899015   PCI-MSI-edge      fglrx[0]@PCI:1:0:0
219:          0          0   PCI-MSI-edge      eth0
NMI:          0          0   Non-maskable interrupts
LOC:    9304810   11728700   Local timer interrupts
RES:    4170470    3846991   Rescheduling interrupts
CAL:       4590        340   function call interrupts
TLB:      30768      31081   TLB shootdowns
TRM:          0          0   Thermal event interrupts
SPU:          0          0   Spurious interrupts
ERR:          0
MIS:          0
第一列为中断号。由于是双核 CPU ,所以有两个 CPU 标识,分别是 CPU0 和 CPU1 。系统中,每一个 CPU 都有属于自己的中断号。第 4 列表示中断类型。最后一列对应这个中断的设备名。

IO-APIC-edge : 此中断上的电平信号从低到高时,产生了边沿触发,这时产生中断,这个中断仅发送一次中断信号。像这样的中断(IO-APIC-xxx) 仅在 586 或更高的处理器家族系统上独有。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
地板
 楼主| 发表于 2009-8-20 01:48:20 | 只看该作者

查看文件系统信息

beyes@linux-beyes:~/C> cat /proc/filesystems
nodev    sysfs
nodev    rootfs
nodev    bdev
nodev    proc
nodev    cgroup
nodev    cpuset
nodev    debugfs
nodev    securityfs
nodev    sockfs
nodev    pfmfs
nodev    pipefs
nodev    anon_inodefs
nodev    tmpfs
nodev    inotifyfs
nodev    devpts
nodev    ramfs
nodev    hugetlbfs
    minix
    iso9660
nodev    mqueue
    ext3
nodev    usbfs
nodev    fuse
    fuseblk
nodev    fusectl
nodev    binfmt_misc
nodev    rpc_pipefs
nodev    nfsd
nodev    vmblock
列出文件系统信息。第一列中有 nodev 字样的表示此文件系统没有被挂载,没有的则表示已经挂载。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
5#
 楼主| 发表于 2009-8-20 02:33:53 | 只看该作者

查看当前设备的系统内存映射

beyes@linux-beyes:~/C> cat /proc/iomem
00000000-0000ffff : reserved
00010000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000cf5ff : Video ROM
000cf800-000d07ff : Adapter ROM
000e0000-000fffff : reserved
  000f0000-000fffff : System ROM
00100000-bfd17fff : System RAM
  00100000-0034dd94 : Kernel code
  0034dd95-005301cf : Kernel data
  00582000-0065445b : Kernel bss
bfd18000-bfd39fff : ACPI Non-volatile Storage
bfd3a000-bfd6afff : reserved
bfd6b000-bfd6bfff : ACPI Non-volatile Storage
bfd6c000-bfd6dfff : reserved
bfd6e000-bfd76fff : ACPI Tables
bfd77000-bfd80fff : ACPI Non-volatile Storage
bfd81000-bfd8ffff : reserved
bfd90000-bfd95fff : ACPI Non-volatile Storage
bfd96000-bfefffff : System RAM
c0000000-cfffffff : PCI Bus 0000:01
  c0000000-cfffffff : 0000:01:00.0
    c0000000-c0ffffff : vesafb
d4000000-dbffffff : PCI Bus 0000:05
  d4000000-d7ffffff : 0000:05:00.0
    d4000000-d7ffffff : XFi
  d8000000-d81fffff : 0000:05:00.0
    d8000000-d81fffff : XFi
dc000000-dc0fffff : PCI Bus 0000:04
  dc000000-dc01ffff : 0000:04:00.0
  dc020000-dc020fff : 0000:04:00.0
    dc020000-dc020fff : r8169
dc100000-dc1fffff : PCI Bus 0000:03
  dc100000-dc101fff : 0000:03:00.0
    dc100000-dc101fff : ahci
dc200000-dc2fffff : PCI Bus 0000:01
  dc200000-dc21ffff : 0000:01:00.0
  dc220000-dc22ffff : 0000:01:00.0
  dc230000-dc233fff : 0000:01:00.1
    dc230000-dc233fff : ICH HD audio
dc300000-dc303fff : 0000:00:1b.0
  dc300000-dc303fff : ICH HD audio
dc304000-dc3043ff : 0000:00:1d.7
  dc304000-dc3043ff : ehci_hcd
dc304400-dc3047ff : 0000:00:1a.7
  dc304400-dc3047ff : ehci_hcd
dc304800-dc3048ff : 0000:00:1f.3
e0000000-efffffff : PCI MMCONFIG 0
  e0000000-efffffff : pnp 00:01
fec00000-fecfffff : pnp 00:0e
fed00000-fed003ff : HPET 0
fed14000-fed19fff : pnp 00:01
fed1c000-fed1ffff : reserved
fee00000-fee0ffff : pnp 00:0e
  fee00000-fee00fff : Local APIC
ffa00000-ffbfffff : reserved
ffe00000-ffffffff : reserved
100000000-13fffffff : System RAM
/proc/iomem 文件显示了每个物理设备的当前系统内存映射。第一列显示了内存的使用域,这些域由不同类型的内存所使用。第 2 列列出了坐落在第 1 列所示的内存使用域上的所使用的内存类型名。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
6#
 楼主| 发表于 2009-8-30 17:59:32 | 只看该作者

/proc/kmsg

控制台转换为终端就可以直接输出内核的 message 。但是该方法有一定的难度,而且还要补充相关程序。最简单的方法是输出 /proc/kmsg 文件。每次发生内核 message 就立即输出,并执行下列命令查看结果。

先 cat 查看 /proc/kmsg
beyes@linux-beyes:~/C/hh2410/module_test> sudo cat /proc/kmsg
|
上面 | 表示闪烁的光标,此时并无任何内核消息输出。

现在添加一个带参数的模块到内核中:
beyes@linux-beyes:~/C/hh2410/module_test> sudo /sbin/insmod test26.ko onevalue=0x27

上面命令执行成功的同时,在 cat /proc/kmsg 执行窗口看到内核消息输出,输出后继续等待下一条内核消息的输出:
beyes@linux-beyes:~/C/hh2410/module_test> sudo cat /proc/kmsg
<4>Hello, world [onevalue=39:twostring=<NULL>]
|

关于 test26.ko 模块代码见:http://www.groad.net/bbs/read.php?tid-1101-page-e.html#a

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
7#
 楼主| 发表于 2011-3-6 21:18:37 | 只看该作者

查看当前 rlimit 的值

beyes@linux-kd1q:~/C/system> cat /proc/self/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          885891072            unlimited            bytes
Max processes             7872                 7872                 processes
Max open files            1024                 8192                 files
Max locked memory         65536                262144               bytes
Max address space         2102968320           unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7872                 7872                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
关于 rlimit 值,系统资源的限制以及相关系统调用函数可参考:http://www.groad.net/bbs/read.php?tid-615.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 16:20 , Processed in 0.071320 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表