![有 udev 内置的任何文档吗?](https://linux22.com/image/146045/%E6%9C%89%20udev%20%E5%86%85%E7%BD%AE%E7%9A%84%E4%BB%BB%E4%BD%95%E6%96%87%E6%A1%A3%E5%90%97%EF%BC%9F.png)
udev 的手册页在多处提到某些规则选项可用于调用“内置”命令,这些命令显然内置于 udev 程序本身中。但是,我还没有找到任何参考文档来清楚地解释 udev 内置函数的可用情况;它们的作用以及如何使用它们。
我在网上搜索过但没有成功。有谁知道是否有任何地方提供有关这些内置命令的详细信息的参考?
答案1
如果您只是运行,udevadm test-builtin --help
它将列出内置命令以及每个命令的简短描述:
udevadm test-builtin --help
udevadm test-builtin [选项] 命令 DEVPATH 测试内置命令。 -h --help 打印此消息 -V --version 程序的打印版本 命令: blkid 文件系统和分区探测 btrfs btrfs 卷管理 hwdb 硬件数据库 input_id 输入设备属性 键盘 键盘扫描码到按键映射 kmod 内核模块加载器 net_id 网络设备属性 net_setup_link 配置网络链接 path_id 组成持久设备路径 usb_id USB 设备属性 uaccess 管理设备节点用户ACL
不幸的是,正如您所注意到的,手册中仅简要解释了内置函数的用法。可以在系统上的可用
文件(在 下)中找到一个实际示例,其中包含以下内容:50-udev-default.rules
/lib/udev/rules.d/
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id"
ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"
答案2
不幸的是,手册页上缺少此信息,即使知道如何阅读它们(见下文),您在尝试查找该信息时也会遇到麻烦。
然而,开源的美妙之处在于拥有阅读源代码的能力。如果你看一下udev-builtin.c
systemd
/存储库内的源文件udev
并具有基本的C语言知识,您将找到以下代码片段:映射所有现有内置类型的结构。
static const struct udev_builtin *builtins[_UDEV_BUILTIN_MAX] = {
#if HAVE_BLKID
[UDEV_BUILTIN_BLKID] = &udev_builtin_blkid,
#endif
[UDEV_BUILTIN_BTRFS] = &udev_builtin_btrfs,
[UDEV_BUILTIN_HWDB] = &udev_builtin_hwdb,
[UDEV_BUILTIN_INPUT_ID] = &udev_builtin_input_id,
[UDEV_BUILTIN_KEYBOARD] = &udev_builtin_keyboard,
#if HAVE_KMOD
[UDEV_BUILTIN_KMOD] = &udev_builtin_kmod,
#endif
[UDEV_BUILTIN_NET_ID] = &udev_builtin_net_id,
[UDEV_BUILTIN_NET_LINK] = &udev_builtin_net_setup_link,
[UDEV_BUILTIN_PATH_ID] = &udev_builtin_path_id,
[UDEV_BUILTIN_USB_ID] = &udev_builtin_usb_id,
#if HAVE_ACL
[UDEV_BUILTIN_UACCESS] = &udev_builtin_uaccess,
#endif
};
它struct
包含所有内置类型,并且它们根据其类型映射源文件。例子:
udev-builtin-kmod.c
- 内核模块加载器。udev-builtin-keyboard.c
- 键盘处理程序。udev-builtin-usb_id.c
- USB 处理程序,用于设置 USB 类型并初始化设备。
有关的:
答案3
不确定,如果您没有找到更好的东西,也许可以尝试探索源代码中直接可用的内置函数:查找以“udev-builtin”开头的文件