【问题标题】:Replacement for hal-get-property and hal-find-by-capability in udev?在 udev 中替换 hal-get-property 和 hal-find-by-capability?
【发布时间】:2012-11-08 11:35:09
【问题描述】:

我需要将使用不推荐使用的 HAL 工具(如 hal-get-propertyhal-find-by-capability)的 bash 脚本移植到 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 有效吗?

【问题讨论】:

  • udevadm info --query=property 您要查找的内容,可能采用 udevadm info --query=property --name=$2 和其他一些参数的形式来选择设备。由于我没有 hal,我不知道 --udi 参数采用什么形式,请告诉我们。
  • 我编辑了我原来的问题。这能回答你的问题吗?

标签: linux porting udev hal


【解决方案1】:

编辑后,您要做的事情会更加清晰。首先,您必须找到要查询的设备。最简单的方法是扫描 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,它允许您在连接设备时触发脚本的执行(通过匹配--attribute-walk 给出的值)。您还可以轻松设置所有权和权限等。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2017-04-07
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多