在udev中替换hal-get-property和hal-find-by-capability?

时间:2012-11-08 11:35:09

标签: linux porting udev hal

我需要移植一个bash脚本,该脚本使用弃用的HAL工具,如hal-get-propertyhal-find-by-capability来udev。 HAL声明HAL已合并到udev中,但我找不到有关如何将此脚本正确移植到udev的有用信息。

实施例: 如果我想要所有存储硬件的列表(使用HAL),我可以运行

hal-find-by-capability --capability storage

这将给我一个UDI的列表(唯一设备标识符),如下所示:

/org/freedesktop/Hal/devices/storage_model_Virtual_disk
/org/freedesktop/Hal/devices/storage_serial_00000000000000000001
/org/freedesktop/Hal/devices/platform_floppy_0_storage

如果我现在想知道/org/freedesktop/Hal/devices/storage_model_Virtual_disk是否可移除,我可以发出以下查询

hal-get-property --udi /org/freedesktop/Hal/devices/storage_model_Virtual_disk --key storage.removable

它会回答truefalse

所以我的问题是:
我怎么能用HAL做那些事呢? sysfsutils(systool)可以工作,但它似乎不是一个合适的替代品 这适用于udevadm info吗?

1 个答案:

答案 0 :(得分:0)

编辑完成后,您要做的就是更清晰。首先,您必须找到要查询的设备。最简单的方法是扫描sysfs。如果要查询特定设备,只需将udev指向sysfs中描述设备的位置即可。因此,如果您正在寻找sdb,您可以通过/block/sdb或从/dev/block或类似的地方选择正确的节点。如果您有设备路径,请说$DEVPATH,您可以执行以下操作:

udevadm info --attribute-walk --name=$DEVPATH

这会泄露很多信息,包括可移动性。如果您将attribute-walk替换为query=property,则会显示另一组信息,但我无法在那里找到可移除性信息。

如果您想为多台设备执行此操作,findxargs将成为您的朋友,这基本上是您的hal-find-by-capability替代品,因为您只需找到正确的文件夹sysfs中。


根据您要做的事情,您可能还需要阅读udev rules,这允许您在连接设备时触发脚本的执行(通过匹配{给出的值) {1}})。您还可以轻松设置所有权和权限等。