有什么区别?/dev目录、sys/module目录、/proc/modules目录等

yobwoc 2009-07-09 10:41:55
我的系统是centos 2.6.18,最近在学习简单的驱动编程。

请问
/dev下的设备文件
/sys/module下的模块目录
/proc/modules下的模块
/proc/devices中注册的设备
有什么区别和联系?请从模块、驱动、设备文件、的角度解释一下。
我发现它们彼此有重叠但又各不相同。

具体的一问:
1、加载了下面一个简单的模块之后,这些目录或文件那些会变化?
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int __init hello_init(void)
{
printk("Hello world enter\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("Hello world exit\n");
}

module_init(hello_init);
module_exit(hello_exit);


2、如果加载了一个简单的设备驱动(以模块方式)后,这些目录或文件会怎么变?

3、insmod后、mknod后,这些目录或文件怎么变?

谢谢!
...全文
1789 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqhrs232 2010-12-15
  • 打赏
  • 举报
回复
不懂的东西真多,做个记号!
Linux-Torvalds 2010-07-30
  • 打赏
  • 举报
回复
动态分配主设备号的情况下,用外部工具从/proc/devices获取信息,然后在/dev创建设备文件。
/proc/modules是内核中已经加载了的模块。命令:
lsmod

的输出内容就是/proc/modules里面内容的子集~~
ShowMan 2009-07-09
  • 打赏
  • 举报
回复
hello不需要创建节点。
ShowMan 2009-07-09
  • 打赏
  • 举报
回复
/dev/下是设备节点号, 你的驱动中注册了,就需要在此创建一个节点, 留user操作使用。
/sys/module 是一个 sysfs 目录层次, 包含当前加载模块的信息. /proc/moudles 是旧式的, 那种信息的单个文件版本. 其中的条目包含了模块名, 每个模块占用的内存数量, 以及使用计数. 另外的字串追加到每行的末尾来指定标志, 对这个模块当前是活动的.

/proc 文件系统是一种特殊的、由程序创建的文件系统,内核使用它向外界输出信息。/proc 下面的每个文件都绑定于一个内核函数,这个函数在文件被读取时,动态地生成文件的"内容",例如,/proc/modules 列出的是当前载入模块的列表。这样可以动态访问其中进程和内核信息。
yobwoc 2009-07-09
  • 打赏
  • 举报
回复
谢谢!后面还有两个小问题能不能说一下?

我自己的理解是
/dev下的设备文件 对应着所有已经注册的设备,但有的设备并没有用。
/sys/module下的模块目录 对应着所有可用的模块(modprobe),但有的模块没有用。

/proc/devices文件 对应在用的的设备
/proc/modules文件 对应已经加载的模块

是这样么?

对应于像hello这样的没有注册设备号的模块,
加载后既不能用mknod建立节点文件,
又不像一般的系统调用函数那样有系统调用号。
那么应用程序就没有办法利用hello模块,对么?
hefuhua 2009-07-09
  • 打赏
  • 举报
回复
1、加载了下面一个简单的模块之后,这些目录或文件那些会变化?

/sys/module/目录会增加hello这个模块的基本信息

/proc/modules文件会增加hello模块名字

/proc/devices文件没有变化

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧