1/14/2015

/proc 정보 이용 분석

1. /proc 정보사용  


# ls /proc/
1              252            66             driver         mounts
10             256            68             execdomains    mtd
11             3              7              fb             net
12             390            70             filesystems    pagetypeinfo
13             396            72             fs             partitions
14             405            74             interrupts     scsi
15             42             76             iomem          self
16             43             8              ioports        slabinfo
17             44             82             irq            softirqs
18             48             9              kallsyms       stat
19             5              asound         key-users      sys
2              50             buddyinfo      keys           sysrq-trigger
20             52             bus            kmsg           sysvipc
21             54             cmdline        kpagecount     timer_list
22             56             config.gz      kpageflags     tty
228            58             cpu            loadavg        uptime
23             6              cpuinfo        locks          version
24             60             crypto         meminfo        vmallocinfo
25             62             devices        misc           vmstat
250            64             diskstats      modules        zoneinfo



 # ls /proc/      
1             456           579           fs            self
152           461           592           graphics      slabinfo
154           466           6             interrupts    softirqs
155           471           606           iomem         stat
157           476           636           ioports       sys
163           481           7             irq           sysrec
174           486           8             kallsyms      sysvipc
186           491           959           key-users     timer_list
187           496           976           kmsg          tnk
2             5             990           kpagecount    tty
269           501           buddyinfo     kpageflags    umap
275           504           bus           loadavg       uptime
3             507           cmdline       locks         version
329           510           consoles      media-mem     vfmw
346           513           cpu           meminfo       vfmw_chn
362           516           cpuinfo       misc          vfmw_dbg
363           519           crypto        modules       vfmw_dec
364           522           devices       mounts        vfmw_prn
365           525           diskstats     mtd           vfmw_scd
366           528           driver        net           vmallocinfo
4             531           execdomains   pagetypeinfo  vmstat
439           562           fb            partitions    yaffs
442           578           filesystems   scsi          zoneinfo


상위와 같이 Kernel  Version 및 SoC마다 지원해주는 proc 기능이 다르고, 기능이 구현이 안되는 경우도 있으니 이런 부분은 조심해서 확인하자.


  • interrupt 분석
$ cat /proc/interrupts  // 모든 Interrupt 정보 확인  
$ ls /proc/irq/number/

  • Kernel Symbol Table 확인 
$ cat /proc/kallsyms   // Kernel의 Sysmbol Table 확인 및 Memory 주소 확인  

  • Kernel HW I/O Memory 확인 
$ cat /proc/iomem // Kernel의 HW I/O Memory확인  
$ cat /proc/modules   // Kernel Module Memory 확인 



$ cat /proc/vmallocinfo 
0xbf000000-0xbf026000  155648 module_alloc_update_bounds+0x14/0x64 pages=37 vmalloc
0xbf02f000-0xbf035000   24576 module_alloc_update_bounds+0x14/0x64 pages=5 vmalloc
0xbf039000-0xbf03b000    8192 module_alloc_update_bounds+0x14/0x64 pages=1 vmalloc
0xbf03d000-0xbf049000   49152 module_alloc_update_bounds+0x14/0x64 pages=11 vmalloc
0xbf04f000-0xbf05b000   49152 module_alloc_update_bounds+0x14/0x64 pages=11 vmalloc
0xbf061000-0xbf090000  192512 module_alloc_update_bounds+0x14/0x64 pages=46 vmalloc
0xbf09a000-0xbf0bb000  135168 module_alloc_update_bounds+0x14/0x64 pages=32 vmalloc
0xbf0c0000-0xbf0d7000   94208 module_alloc_update_bounds+0x14/0x64 pages=22 vmalloc
0xbf0dd000-0xbf10e000  200704 module_alloc_update_bounds+0x14/0x64 pages=48 vmalloc
0xbf113000-0xbf11e000   45056 module_alloc_update_bounds+0x14/0x64 pages=10 vmalloc
0xbf123000-0xbf14b000  163840 module_alloc_update_bounds+0x14/0x64 pages=39 vmalloc
0xbf153000-0xbf17a000  159744 module_alloc_update_bounds+0x14/0x64 pages=38 vmalloc
0xbf182000-0xbf18f000   53248 module_alloc_update_bounds+0x14/0x64 pages=12 vmalloc
0xbf194000-0xbf1ca000  221184 module_alloc_update_bounds+0x14/0x64 pages=53 vmalloc
0xbf1d8000-0xbf236000  385024 module_alloc_update_bounds+0x14/0x64 pages=93 vmalloc
0xbf24d000-0xbf293000  286720 module_alloc_update_bounds+0x14/0x64 pages=69 vmalloc
0xbf29f000-0xbf2a8000   36864 module_alloc_update_bounds+0x14/0x64 pages=8 vmalloc
0xbf2ac000-0xbf2d8000  180224 module_alloc_update_bounds+0x14/0x64 pages=43 vmalloc
0xbf2df000-0xbf2ed000   57344 module_alloc_update_bounds+0x14/0x64 pages=13 vmalloc
0xbf2f2000-0xbf2f4000    8192 module_alloc_update_bounds+0x14/0x64 pages=1 vmalloc
0xbf2f6000-0xbf309000   77824 module_alloc_update_bounds+0x14/0x64 pages=18 vmalloc
0xbf30f000-0xbf337000  163840 module_alloc_update_bounds+0x14/0x64 pages=39 vmalloc
0xbf33d000-0xbf398000  372736 module_alloc_update_bounds+0x14/0x64 pages=90 vmalloc
0xbf3ac000-0xbf3da000  188416 module_alloc_update_bounds+0x14/0x64 pages=45 vmalloc
0xbf3e5000-0xbf3e8000   12288 module_alloc_update_bounds+0x14/0x64 pages=2 vmalloc
0xbf3ea000-0xbf3ed000   12288 module_alloc_update_bounds+0x14/0x64 pages=2 vmalloc
0xbf3f0000-0xbf3f4000   16384 module_alloc_update_bounds+0x14/0x64 pages=3 vmalloc
0xbf3f7000-0xbf411000  106496 module_alloc_update_bounds+0x14/0x64 pages=25 vmalloc
0xbf414000-0xbf419000   20480 module_alloc_update_bounds+0x14/0x64 pages=4 vmalloc
0xbf41c000-0xbf421000   20480 module_alloc_update_bounds+0x14/0x64 pages=4 vmalloc
0xbf424000-0xbf447000  143360 module_alloc_update_bounds+0x14/0x64 pages=34 vmalloc
0xbf44c000-0xbf475000  167936 module_alloc_update_bounds+0x14/0x64 pages=40 vmalloc
0xbf479000-0xbf488000   61440 module_alloc_update_bounds+0x14/0x64 pages=14 vmalloc
0xbf48c000-0xbf491000   20480 module_alloc_update_bounds+0x14/0x64 pages=4 vmalloc
0xd0804000-0xd0810000   49152 cramfs_uncompress_init+0x34/0x64 pages=11 vmalloc
0xd0810000-0xd081c000   49152 zisofs_init+0x14/0x34 pages=11 vmalloc
0xd081c000-0xd081f000   12288 jffs2_lzo_init+0x28/0x78 pages=2 vmalloc
0xd0831000-0xd083d000   49152 jffs2_zlib_init+0x5c/0xb0 pages=11 vmalloc
0xd083e000-0xd0840000    8192 hinfc301_probe+0x88/0x3a0 ioremap
0xd0852000-0xd0854000    8192 hinfc301_probe+0xc4/0x3a0 ioremap
0xd0854000-0xd0856000    8192 hinfc301_probe+0xf0/0x3a0 ioremap
0xd0856000-0xd0858000    8192 hi_mci_probe+0x17c/0x460 ioremap
0xd085a000-0xd085c000    8192 SYS_HAL_Init+0x6c/0x174 [hi3521_sys] ioremap
0xd0860000-0xd0871000   69632 pl011_probe+0x190/0x294 ioremap
0xd0880000-0xd0891000   69632 pl011_probe+0x190/0x294 ioremap
0xd0891000-0xd08d4000  274432 jffs2_zlib_init+0x20/0xb0 pages=66 vmalloc
0xd08d4000-0xd08e5000   69632 jffs2_lzo_init+0x18/0x78 pages=16 vmalloc
0xd08fe000-0xd0900000    8192 VcmpHalInit+0x38/0x104 [vcmp] ioremap
0xd0900000-0xd0911000   69632 devm_ioremap+0x48/0x78 ioremap
0xd0914000-0xd0918000   16384 TdeHalInit+0x264/0x374 [hi3521_tde] ioremap
0xd091c000-0xd091f000   12288 wf_ipc_init+0x100/0x4c8 [wfcommon] pages=2 vmalloc
0xd0920000-0xd0931000   69632 hiusb_ehci_hcd_drv_probe+0xcc/0x160 ioremap
0xd093c000-0xd093f000   12288 wf_ipc_init+0x3bc/0x4c8 [wfcommon] pages=2 vmalloc
0xd0940000-0xd0951000   69632 hiusb_ohci_hcd_drv_probe+0xc0/0x154 ioremap
0xd0980000-0xd09a1000  135168 stmmac_dvr_probe+0xe8/0xa50 [stmmac] ioremap
0xd09be000-0xd09c0000    8192 VoieHalInit+0x20/0x40 [hi3521_aenc] ioremap
0xd09c0000-0xd09d1000   69632 SYS_HAL_Init+0x20/0x174 [hi3521_sys] ioremap
0xd09e0000-0xd09f1000   69632 SYS_HAL_Init+0x48/0x174 [hi3521_sys] ioremap
0xd0a00000-0xd0a11000   69632 SYS_HAL_Init+0x8c/0x174 [hi3521_sys] ioremap
0xd0b00000-0xd0bc1000  790528 _mmb_map2kern+0x68/0xd0 [mmz] ioremap
0xd0ce0000-0xd0cf1000   69632 HAL_VOU_Init+0x20/0x30 [hi3521_vou] ioremap
0xd0da0000-0xd0da9000   36864 _mmb_map2kern+0x68/0xd0 [mmz] ioremap
0xd0db0000-0xd0dbe000   57344 _mmb_map2kern+0x68/0xd0 [mmz] ioremap
0xd0e00000-0xd0f96000 1662976 _mmb_map2kern+0x68/0xd0 [mmz] ioremap
0xd0fe0000-0xd0ff1000   69632 DRV_HDMI_BoardInit+0x20/0x30 [hi3521_hdmi] ioremap
0xd1000000-0xd17ea000 8298496 _mmb_map2kern+0x68/0xd0 [mmz] ioremap
0xd1800000-0xd1996000 1662976 _mmb_map2kern+0x68/0xd0 [mmz] ioremap
0xd1a11000-0xd1a92000  528384 wf_ipc_init+0xd4/0x4c8 [wfcommon] pages=128 vmalloc
0xd1ac0000-0xd1ad1000   69632 dmac_init+0x44/0x10c [hidmac] ioremap
0xd1b00000-0xd1bf1000  987136 wfw_init+0x16c/0x1d4 [wfcommon] ioremap
0xd1bf1000-0xd1ff2000 4198400 wf_ipc_init+0xd4/0x4c8 [wfcommon] pages=1024 vmalloc
0xd1ff2000-0xd23f3000 4198400 wf_ipc_init+0x1ac/0x4c8 [wfcommon] pages=1024 vmalloc
0xd23f3000-0xd25f4000 2101248 wf_ipc_init+0xd4/0x4c8 [wfcommon] pages=512 vmalloc
0xd25f4000-0xd27f5000 2101248 wf_ipc_init+0x314/0x4c8 [wfcommon] pages=512 vmalloc
0xd27f5000-0xd28f6000 1052672 wf_ipc_init+0xd4/0x4c8 [wfcommon] pages=256 vmalloc
0xd28f6000-0xd30f7000 8392704 wf_ipc_init+0x100/0x4c8 [wfcommon] pages=2048 vmalloc vpages
0xd30f7000-0xd32f8000 2101248 wf_ipc_init+0xd4/0x4c8 [wfcommon] pages=512 vmalloc
0xd32f8000-0xd33f9000 1052672 wf_ipc_init+0xd4/0x4c8 [wfcommon] pages=256 vmalloc
0xd33f9000-0xd3bfa000 8392704 wf_ipc_init+0x3bc/0x4c8 [wfcommon] pages=2048 vmalloc vpages
0xd3bfa000-0xd3c7b000  528384 wf_ipc_init+0x1f4/0x4c8 [wfcommon] pages=128 vmalloc 

참고사항
- Address : Virtual Address 이지만 뒤에 phy 옵션으로 제공하는 경우도 있음
- 관련 함수 (ioremap , ioremap_nocache,vmalloc ... )

request_mem_region() 으로 할당된 memory는 아래에 표시.

$ cat /proc/iomem 

10000000-10000100 : hinand
10020000-10020fff : hi_mci.0
10080000-1008ffff : ahci.0
100a0000-100affff : hiusb-ohci.0
  100a0000-100affff : ohci_hcd
100b0000-100bffff : hiusb-ehci.0
  100b0000-100bffff : ehci_hcd
101c0000-101dffff : stmmaceth.0
  101c0000-101dffff : stmmaceth
20030000-200300ff : stmmaceth.0
  20030000-20030064 : hinand
20080000-2008ffff : uart:0
  20080000-20080fff : uart-pl011
20090000-2009ffff : uart:1
  20090000-20090fff : uart-pl011
20700000-2070ffff : l2cache.0
50000000-50000880 : hinand
80000000-83ffffff : System RAM
  8002a000-805acfff : Kernel text
  805ae000-8062aa37 : Kernel data 

상위 정보는 Kernel version or SoC마다 다를 수 있으므로 참고

  • Kernel의 시간체크 
$ cat /proc/uptime  // Kernel이 Boot Up 시간표시   


  • 사용중인 Device 확인 

$ cat /proc/devices 
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 21 sg
 29 fb
 90 mtd
128 ptm
136 pts
166 ttyACM
180 usb
189 usb_device
204 ttyAMA
254 bsg

Block devices:
  1 ramdisk
259 blkext
  7 loop
  8 sd
 11 sr
 31 mtdblock
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
179 mmc
240 romblock 


2. 개별 PID 의 정보 


  • /proc/self         : 현재 동작 중인 pid 
  • /proc/number   : pid 정보 


$ ls /proc/250/
attr             exe              mountstats       smaps
auxv             fd               net              stat
clear_refs       fdinfo           oom_adj          statm
cmdline          limits           oom_score        status
comm             maps             oom_score_adj    task
coredump_filter  mem              pagemap          wchan
cwd              mountinfo        personality
environ          mounts           root 


$ cat /proc/250/maps  
00008000-000a6000 r-xp 00000000 01:00 6175       /usr/sbin/telnetd
000ae000-000af000 rw-p 0009e000 01:00 6175       /usr/sbin/telnetd
000af000-000d2000 rw-p 00000000 00:00 0          [heap]
40033000-40034000 rw-p 00000000 00:00 0
4004a000-4004b000 rw-p 00000000 00:00 0
400ca000-400e7000 r-xp 00000000 01:00 4005       /lib/ld-2.8.so
400ee000-400ef000 r--p 0001c000 01:00 4005       /lib/ld-2.8.so
400ef000-400f0000 rw-p 0001d000 01:00 4005       /lib/ld-2.8.so
400f0000-40195000 r-xp 00000000 01:00 3985       /lib/libm-2.8.so
40195000-4019c000 ---p 000a5000 01:00 3985       /lib/libm-2.8.so
4019c000-4019d000 r--p 000a4000 01:00 3985       /lib/libm-2.8.so
4019d000-4019e000 rw-p 000a5000 01:00 3985       /lib/libm-2.8.so
4019e000-402bb000 r-xp 00000000 01:00 4006       /lib/libc-2.8.so
402bb000-402c2000 ---p 0011d000 01:00 4006       /lib/libc-2.8.so
402c2000-402c4000 r--p 0011c000 01:00 4006       /lib/libc-2.8.so
402c4000-402c5000 rw-p 0011e000 01:00 4006       /lib/libc-2.8.so
402c5000-402c8000 rw-p 00000000 00:00 0
beb73000-beb94000 rw-p 00000000 00:00 0          [stack]
ffff0000-ffff1000 r-xp 00000000 00:00 0          [vectors]

$ cat /proc/250/mounts

rootfs / rootfs rw 0 0
/dev/root / ext2 rw,relatime,errors=continue 0 0
devtmpfs /dev devtmpfs rw,relatime,size=246140k,nr_inodes=61535,mode=755 0 0
proc /proc proc rw,relatime 0 0
tmpfs /mnt/.splash tmpfs rw,relatime,size=40k 0 0
sysfs /sys sysfs rw,relatime 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620 0 0
/dev/mtdblock11 /opt ext2 ro,relatime,errors=continue 0 0
/dev/mtdblock14 /rdk jffs2 ro,relatime 0 0  


  http://www.makelinux.net/ldd3/chp-9-sect-4
  http://www.tldp.org/LDP/sag/html/proc-fs.html
  http://bestskp.tistory.com/121
  https://www.kernel.org/doc/Documentation/filesystems/proc.txt
  https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=63&ved=0CCsQFjACODw&url=http%3A%2F%2Fcfile25.uf.tistory.com%2Fattach%2F242E0445514034683BF6FE&ei=SEyiVMvmC9OWuASh7YCoBg&usg=AFQjCNF01zVOTf66tox721ZrWIJ1CcrhVA&sig2=jDYliavyZOTf6nj4GcmsYw&bvm=bv.82001339,d.dGc&cad=rjt