对于开发者来说linux真是一个很好的系统,很多线索都可以从系统中找到。最近遇到一个问题,PC端有一个工具可以通过USB串口可以将数据写入到对端的linux系统里,但是对于开发者PC端工具是厂商提供没有代码,无法知道如何通信的。这样也很难知道linux系统里那些模块参与了。这时候有个方法是很有用的,你可能不知道linux系统端总共有那些模块参与,但是你肯定能知道一两个模块肯定参与其中了。如何查看参与其中的进程访问的设备和文件呢?
1. ps 查看你知道的进程的PID。
2. 通过查看proc来找 cd /proc/PID,此目录下可以看到此进程很多关联的信息。
3. 例如有如下
-r-------- root root 0 2012-09-13 03:29 auxv
-r--r--r-- root root 0 2012-09-13 03:29 cgroup
--w------- root root 0 2012-09-13 03:29 clear_refs
-r--r--r-- root root 0 2012-09-13 00:11 cmdline
-rw-r--r-- root root 0 2012-09-13 03:29 comm
-rw-r--r-- root root 0 2012-09-13 03:29 coredump_filter
lrwxrwxrwx root root 2012-09-13 03:29 cwd -> /
-r-------- root root 0 2012-09-13 03:29 environ
lrwxrwxrwx root root 2012-09-13 03:29 exe -> /system/bin/secsrv
dr-x------ root root 2012-09-13 03:29 fd
dr-x------ root root 2012-09-13 03:29 fdinfo
-r--r--r-- root root 0 2012-09-13 03:29 limits
-r--r--r-- root root 0 2012-09-13 03:29 maps
-rw------- root root 0 2012-09-13 03:29 mem
-r--r--r-- root root 0 2012-09-13 03:29 mountinfo
-r--r--r-- root root 0 2012-09-13 03:29 mounts
-r-------- root root 0 2012-09-13 03:29 mountstats
dr-xr-xr-x root root 2012-09-13 03:29 net
dr-x--x--x root root 2012-09-13 03:29 ns
-rw-r--r-- root root 0 2012-09-13 03:29 oom_adj
-r--r--r-- root root 0 2012-09-13 03:29 oom_score
-rw-r--r-- root root 0 2012-09-13 03:29 oom_score_adj
-r--r--r-- root root 0 2012-09-13 03:29 pagemap
-r--r--r-- root root 0 2012-09-13 03:29 personality
lrwxrwxrwx root root 2012-09-13 03:29 root -> /
-rw-r--r-- root root 0 2012-09-13 03:29 sched
-r--r--r-- root root 0 2012-09-13 03:29 smaps
-r--r--r-- root root 0 2012-09-13 03:29 stack
-r--r--r-- root root 0 2012-09-13 00:11 stat
-r--r--r-- root root 0 2012-09-13 03:29 statm
-r--r--r-- root root 0 2012-09-13 03:29 status
dr-xr-xr-x root root 2012-09-13 03:29 task
-r--r--r-- root root 0 2012-09-13 03:29 wchan
4. 查看访问了那些文件和设备 :cd fd
5. 查看如下: ls -l
root@android:/proc/1317/fd # ls -l
lrwx------ root root 2012-09-13 03:29 0 -> /dev/null
lrwx------ root root 2012-09-13 03:29 1 -> /dev/null
lrwx------ root root 2012-09-13 03:29 2 -> /dev/null
l-wx------ root root 2012-09-13 03:29 3 -> /dev/log/main
l-wx------ root root 2012-09-13 03:29 4 -> /dev/log/radio
l-wx------ root root 2012-09-13 03:29 5 -> /dev/log/events
l-wx------ root root 2012-09-13 03:29 6 -> /dev/log/system
lrwx------ root root 2012-09-13 03:29 7 -> /dev/sectz
lr-x------ root root 2012-09-13 03:29 8 -> /dev/__properties__ (deleted)
lrwx------ root root 2012-09-13 03:29 9 -> socket:[3401]
这样可以通过查看proc的信息来来找访问的设备和文件,顺藤摸瓜就可以找到更多的线索来解决问题。