QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3554|回复: 6

dbus+hal和hotplug+updfstab比较

[复制链接]
发表于 2005-5-27 15:53:09 | 显示全部楼层 |阅读模式
以下言论仅供参考,难免有错误的地方,只自己的一点理解。

linux内核支持hotplug在文件系统中
[root@MagicLinux ~]# cat /proc/sys/kernel/hotplug
/sbin/hotplug
/sbin/hotplug程序在hotplug的包中,该包会按linux内核中提示的类型
调用/sbin/hotplug程序,hotplug程序会调用/etc/hotplug.d/default下
的脚本,/etc/hotplug.d/default/default.hotplug又调用/etc/hotplug/
下的对应脚本,如果是usb则调用/etc/hotplug/usb.agent,该脚本如果
参数是add则会自动查找usb的驱动,然后调用kudzu包中updfstab程序,
该程序会修改/etc/fstab文件,增加一个mount的记录,比如:
/dev/sda1               /mnt/generichd          auto    noauto,owner,kudzu 0 0
kudzu表示是kudzu自动生成的,然后kdebase中kdebase-3.4.0/kioslave/media/kdedmodule这个模块如果是按fstab而不是
hal的编译的话fstabbackend.cpp(.h)这个模块就会编译到kded_mediamanager
这个kde后台执行程序中去,该模块会不断的扫描/etc/fstab和/etc/mtab两个
文件,如果发现有新的设备加入,就会自动触发桌面设备图标和konquer左边
栏中的设备图标,自动添加该设备。
参数如果是remove的话,会自动调用updfstab程序,该程序会自动删除/etc/fstab
中有kudzu添加的设备选项即加了kudzu这个参数的设备。然后kde后台的上面
提到的那个后台程序,就会把图标删掉。
不过这个工作方式的效率不如hal的工作效率,hal其实也是由hotplug触发的,
/etc/hotplug.d/default/20-hal.hotplug,(hal原来主要流行于gnome桌面环境)
hal好像是直接调用程序嵌入的,它会按消息来源触发不同的设备,而updfstab
则要扫描所有设备然后重新生成/etc/fstab文件,hal不会改该文件,它有自己的
消息机制,程序中要调用它hal-devel和dbus-devel的连接库开发,就这点来说hotplug中用脚本
方式相对比较自由一点。
 楼主| 发表于 2005-5-27 16:05:28 | 显示全部楼层
而且后来的发行版的kudzu包中,都不包括updfstab这个程序了必须自己
make updfstab
make install-updfstab
手动编译和安装
回复

使用道具 举报

发表于 2005-5-28 12:18:45 | 显示全部楼层
支持一下楼主,给了个精华。
回复

使用道具 举报

发表于 2005-5-28 19:42:55 | 显示全部楼层
分析的很细致,好的学习资料。
回复

使用道具 举报

发表于 2005-5-28 21:50:08 | 显示全部楼层
hal 会修改 fstab

而且后来的发行版的kudzu包中,都不包括updfstab这个程序了

那是因为引入了hal 之后 不需要它了
回复

使用道具 举报

发表于 2005-5-29 12:15:34 | 显示全部楼层
这个是原理图。

hal自己不会修改fstab的,它会调用其它程序来接这个请求。目前做这项工作的程序是fstab-sync。

另外,hotplug自己很少会和hal接触,因为hotplug的主要工作是和内核接触,挂上相应的模块。而hal只能在设备创建之后才能够去通知要更新fstab和上层的应用程序。在模块挂上到设备创建之间的过程,一般是通过udev来实现的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2005-8-14 15:11:03 | 显示全部楼层
KDE中支持hal,是在文件kdebase\kioslave\media\kdemodule\halbackend.cpp中,
它在HAL中注册几个回调函数,当HAL发现新硬件会调用这几个函数,然后这几个
函数在根据HAL提供的设备信息创建媒体设备对象,即konqueror左侧设备对象和
桌面设备对象,在kdebase/kioslave/media/services目录中是对该类设备操作服务,
比如:media_mount.desktop为挂载设备,该目录下的服务最终都是调用的同一个
程序:kdebase/kioslave/media/mounthelper/kio_media_mounthelper.cpp,该程
序编译后为/usr/bin/kio_media_mounthelper,该程序负责调用设备的装载和卸载
等操作。它最终调用的都是kdelibs/kio中的mount\umount的操作函数,该函数在
文件:kdelibs\kio\kio\job.cpp中,mount\umount函数不做具体的处理,继续调用
“file:/”文件服务协议,该协议的实现在:kdelibs/kioslave/file/file.cc文件中,该文件
先调用pmount程序挂载设备(传递的参数:pmount /dev/sda1,pmount根据设备
的具体情况去判断挂接点和设备文件系统类型),失败后调用mount程序挂载,这
次会尽量多的把参数传递过去(例如:mount -t vfat /dev/sda1 /media/sda1)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-8 12:06 , Processed in 0.081002 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表