Tim*_*Tea 11 documentation udev reference
udev 的手册页在多处提到某些规则选项可用于调用“内置”命令,这些命令显然内置于 udev 程序本身。但是,我找不到任何参考文档清楚地解释了可用的 udev 内置函数;它们做什么以及如何使用它们。
我在网上搜索过,但没有取得多大成功。有谁知道是否有任何地方提供有关这些内置命令的详细信息的参考?
don*_*sti 10
如果你只是udevadm test-builtin
不带参数运行,它会列出内置命令以及每个命令的简短描述:
udevadm test-builtin --help
Run Code Online (Sandbox Code Playgroud)
调用:测试内置 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}"
Run Code Online (Sandbox Code Playgroud)
小智 6
不幸的是,联机帮助页上缺少此信息,即使知道如何阅读它们(见下文),您也会在尝试查找该信息时遇到麻烦。
然而,开源的美妙之处在于拥有阅读源代码的能力。如果您查看/ repository中的udev-builtin.c
源文件并具有基本的C 语言知识,您会发现以下代码片段: 映射所有现有内置类型的结构。systemd
udev
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
};
Run Code Online (Sandbox Code Playgroud)
这struct
包含所有内置类型,它们根据类型映射源文件。例子:
udev-builtin-kmod.c
- 内核模块加载器。udev-builtin-keyboard.c
- 键盘处理程序。udev-builtin-usb_id.c
- 将设置 USB 类型并初始化设备的 USB 处理程序。有关的: