udev 和模块加载的关系
来源:互联网 发布:python cmdb开发实例 编辑:程序博客网 时间:2024/05/29 15:25
1 对于已经编入内核的驱动程序
当被内核检测到的时候,会直接在 sysfs中注册其对象;对于编译成模块的驱动程序,当模块载入的时候才会这样做。一旦挂载了sysfs 文件系统(挂载到 /sys),内建的驱动程序在 sysfs注册的数据就可以被用户空间的进程使用,并提供给 udev 以创建设备节点。
udev 初始化脚本负责在 Linux 启动的时候创建设备节点,该脚本首先将/sbin/udevsend 注册为热插拔事件处理程序。热插拔事件(随后将讨论)本不应该在这个阶段发生,注册 udev 只是为了以防万一。然后udevstart 遍历 /sys 文件系统,并在 /dev 目录下创建符合描述的设备。例如,/sys/class/tty/vcs/dev 里含有"7:0"字符串,udevstart就根据这个字符串创建主设备号为 7 、次设备号为 0 的 /dev/vcs 设备。udevstart 创建的每个设备的名字和权限由 /etc/udev/rules.d/目录下的文件指定的规则来设置。如果 udev 找不到所创建设备的权限文件,就将其权限设置为缺省的 660 ,所有者为 root:root 。
上面的步骤完成后,那些已经存在并且已经内建驱动的设备就可以使用了,那么以模块驱动的设备呢?
2 对于没有编进内核的模块
前面我们提到了"热插拔事件处理程序"的概念,当内核检测到一个新设备连接时,内核会产生一个热插拔事件, 并在 /proc/sys/kernel/hotplug 文件里查找处理设备连接的用户空间程序。udev初始化脚本将 udevsend 注册为该处理程序。
当产生热插拔事件的时候,内核让 udev 在 /sys文件系统里检测与新设备的有关信息,并为新设备在 /dev 里创建项目。
大多数 Linux 发行版通过 /etc/modules.conf配置文件来处理模块加载,对某个设备节点的访问导致相应的内核模块被加载。对 udev这个方法就行不通了,因为在模块加载前,设备节点根本不存在。为了解决这个问题,可以在开机时加载相应的模块,可以用到的方法有:
1 可以在 /etc/rc.local rc.sysinit 中添加相应的加载模块命令。
2 可以在 /etc/sysconfig/modules/
下放相应的模块加载脚本。具体脚本的书写可以参考该目录下的其他脚本。 在
/etc/rc.sysinit 中有以下内容:
# Load other user-defined modules
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
可知在rc.sysinit中执行了 /etc/sysconfig/modules/中的脚本。
当然modules/中的脚本是调用modprobe来加载模块的,这样必须将编译好的ko文件放到kernel的modules目录,并执行depmod命令:
cp hello.ko /lib/modules/2.6.35.6-45.fc14.i686/kernel/drivers/char/
depmod
之后就可以用modprobe加载hello模块了
这样就可以在系统启动的时候加载这些模块,这样 udev 就可以检测到设备,并创建相应的设备节点了。
3 如果插入的设备有一个驱动程序模块但是尚未加载
Hotplug软件包就有用了,它就会响应上述的内核总线驱动热插拔事件并加载相应的模块,为其创建设备节点,这样设备就可以使用了。
0 0
- udev 和模块加载的关系
- udev、热插拔和驱动模块加载
- /sys/dev 和/sys/devices 和udev的关系
- /dev、/sys/dev 和/sys/devices 和udev的关系
- udev研究之与模块关系
- udev(七):/dev、devfs、 udev和sysfs之间的关系
- udev(七):/dev、devfs、 udev和sysfs之间的关系
- dev、devfs、 udev和sysfs之间的关系
- 模块的加载和测试
- /sys/dev 和/sys/devices 和udev的关系
- 关于require和package.loadlib的介绍和它们的关系,以及它们在加载C模块时不同表现
- linux的udev和sysfs
- Ruby类和模块的关系
- 线程、槽和模块之间的关系
- 内核模块的加载和卸载
- Floodlight加载和运行模块的原理
- res_config_mysql和chan_sip模块的加载分析
- linux 模块的编译和加载
- fedora 下配置ftp服务器
- fedora14 下连接网络打印机
- 源码对比工具 bcompare
- open 和设备驱动中的open的联系
- virtualbox 安装win7共享文件夹
- udev 和模块加载的关系
- grub 命令进win7 和linux
- v880 kernel 下载与解压
- 解决centos 5.5 yum 源比较旧的问题
- android 应用开发3讲
- android 应用开发第4讲
- 用repo管理自己的git 仓库
- android 应用开发第5讲
- 下载android源码repo sync失败的解决办法