Udev

是否有 udev 內置的文件?

  • October 19, 2019

udev 的手冊頁在幾個地方提到某些規則選項可用於呼叫“內置”命令,這些命令顯然是內置在 udev 程序本身中的。但是,我還沒有找到任何可以清楚地解釋 udev 內置函式可用的參考文件;他們做什麼以及如何使用它們。

我在網上搜尋過,但沒有成功。有誰知道是否有任何地方提供有關這些內置命令的詳細資訊的參考?

不幸的是,聯機幫助頁上缺少此資訊,即使知道如何閱讀它們(見下文),您在嘗試查找該資訊時也會遇到麻煩。

然而,開源的美妙之處在於擁有閱讀原始碼的能力。如果您查看/ 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
};

struct包含所有內置類型,它們根據源文件的類型映射源文件。例子:

有關的:

如果您只是udevadm test-builtin不帶參數執行,它將列出內置命令以及每個命令的簡短描述:

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}"

引用自:https://unix.stackexchange.com/questions/493771