分类: LINUX
2008-05-04 22:46:03
freedesktop.org是一个开源项目,他主要针对X-Window系统进行一些技术开发.它们旨在
为Linux/Unix平台的桌面软件建立一个基础平台.使桌面软件在其上层运行.HAL就是这个
项目中的一个软件,HAL的全称是”硬件抽象层(Hardware Abstraction Layer)".它位于操作
系统和桌面软件之间,负责将硬件信息传递给上层的桌面软件.
现在可以连接到Linux上的设备种类繁多,为了可以正常使用这些设备,用户需要有一定的技
术水平才可以.HAL就是为了简化这种操作,将硬件信息分析汇总后,提交给上层桌面软件.桌面
软件根据这些信息,可以判断这个硬件设备的类别和属性,进行相应的操作.从而简化用户自己
去操作的过程.
例如,你在桌面状态下,插入一个U盘后,你会发现,U盘被自动挂载到了/media/usbdisk下,桌面
上还会打开一个窗口,显示U盘中的内容.这个自动挂载功能的实现,就依赖于HAL.
并且,用户可以编制自己的HAL规则,为不同的设备指定不同的实现方法.
Turbolinux 10,10.5和11版本,默认会安装HAL软件包.你也可以手动安装:
# rpm -ivh hal-<版本号>.rpm
你也可以从官方网站下载源码包进行安装.
需要下载2个包,hal和hal-info.hal-info中保存有硬件信息库,hal要使用它来识别
硬件设备.
我们下载了hal-0.5.9.rc3.tar.gz和hal-info-20070618.tar.gz包.
# tar zxf hal-0.5.9.rc3.tar.gz # cd hal-0.5.9 # ./configure # make # make install # tar zxf hal-info-20070618.tar.gz # cd hal-info-20070618 # ./configure # make # make install
HAL规则保存在/etc/hal/fdi/policy和/usr/share/hal/fdi/policy下.下面是一个策略文件的例子.
true true
上面的例子的主要目的是:
策略说明:
block.is_volume 如果这个设备是一个可以被mount的块设备. volume.fsusage 并且块设备包含有一个文件系统. volume.size 文件系统的容量为1047115264字节. volume.policy.mount_option.sync 添加mount选项sync. volume.policy.mount_option.noatime 添加mount选项noatime. volume.policy.desired_mount_point 指定设备mount点是"/media/1g"
在/media下建立1g目录.
# mkdir /media/1g
在桌面环境下,将U盘插入计算机.桌面系统会根据HAL策略将设备挂载到/media/1g下,并打开
一个窗口.
当系统中有新设备连接时,sysfs会通过D-BUS系统信息总线来广播这个消息,并在/sys下建立
该设备的硬件信息.udev会在/dev下建立该设备的设备文件.HAL也会接收到这个信息,它会检查/sys
下的文件,获得硬件信息.然后根据HAL策略,通过D-BUS向上层桌面应用程序提交该硬件的信息.
桌面应用程序会根据这些属性值,做出相应的操作.如:设备若为块设备,则进行挂载等.
工作原理入下图:
新设备 sysfs在/sys下, udev建立设备 HAL根据策略,向 桌面程序 接入系统 -> 建立相应信息 -> 文件,并进行广播 -> 上层桌面软件提交 -> 进行相应 该硬件的信息. 的操作
参考资料: