随笔-145  评论-173  文章-70  trackbacks-0
在编译模块的时候,如果模块加载成功。在/sys/module目录中又模块的信息。
/proc/modules包含所有模块的信息。

/sys/module
/proc/modules
/sys/module 是一个 sysfs 目录层次, 包含当前加载模块的信息. /proc/moudles 是旧式的, 那种信息的单个文件版本. 其中的条目包含了模块名, 每个模块占用的内存数量, 以及使用计数. 另外的字串追加到每行的末尾来指定标志, 对这个模块当前是活动的.
wugang@wugang-desktop:~$ cat /proc/modules
book 3200 0 - Live 0xe042e000
hello 2560 0 - Live 0xe02c3000
i915 32512 2 - Live 0xe0417000
其中 book(模块名)   3200是模块占用内存的大小。   0是模块加载计数   Live表示模块可用
0xe042e000 肯定是模块的起始地址。


在/sys/modules模块的信息(新版)
来自内核源码目录的目标文件, 描述一个模块为之建立的环境.
wugang@wugang-desktop:~$ cd /sys/module/book
wugang@wugang-desktop:/sys/module/book$ ls
holders  initstate  notes  parameters  refcnt  sections  srcversion

holders  持有人,是写本模块的人。但是目录为空。
initstate  记录模块活动
notes   暂且没有查到,好像是日记,有个隐藏文件,可能就是记录本模块的信息 *
parameters  使用的变量
refcnt   模块的加载计数
wugang@wugang-desktop:/sys/module/book/sections$ ls
__param  __versions
其中sections目录中, __param是参数起始地址。
而sections目录中,__versions   好像和版本有关 *
这两个参数和地址有关。
srcversion    BDF6D850ED985425407E440     模块版本号 像模块的ID一样


打开/proc/kallsyms目录下文件都是0字节,且打开为空白信息。
但是用cat命令,可以查看出里面的信息。
最后翻书,操作系统运行时,进程及内核信息(cpu,硬盘分区,内存信息)存放在这里。
/proc目录为伪文件系统,proc并不是真正的文件系统,它存在于内存中。
而且/sys也是存在内存中。
-r--------   1 root       root       528420864 2008-07-17 21:25 kcore
我机子上的,/proc文件目录大小几乎全部集中在那个文件中。
且无法用命令查看其中的信息.

/proc 文件系统是一种特殊的、由程序创建的文件系统,内核使用它向外界输出信息。/proc 下面的每个文件都绑定于一个内核函数,这个函数在文件被读取时,动态地生成文件的"内容",例如,/proc/modules 列出的是当前载入模块的列表。这样可以动态访问其中进程和内核信息。

Linux系统对/proc的使用很频繁。现代Linux系统中的很 多工具都是通过 /proc 来获取它们的信息,例如 ps、top 和 uptime。有些设备驱动程序也通过 /proc 输出信息,你的驱动程序当然也可以这么做。因为 /proc 文件系统是动态的,所以驱动程序模块可以在任何时候添加或删除其中的文件项。

特征完全的 /proc 文件项相当复杂;在所有的这些特征当中,有一点要指出的是,这些 /proc 文件不仅可以用于读出数据,也可以用于写入数据。不过,大多数时候,/proc 文件项是只读文件。


注:*表示我不确定的问题,有问题请参考  module.h源代码。
posted on 2010-03-09 13:56 deercoder 阅读(1403) 评论(0)  编辑 收藏 引用 所属分类: Linux/Unix

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理