Udev
是否有 udev 內置的文件?
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
包含所有內置類型,它們根據源文件的類型映射源文件。例子:
udev-builtin-kmod.c
- 核心模組載入器。udev-builtin-keyboard.c
- 鍵盤處理程序。udev-builtin-usb_id.c
- 將設置 USB 類型並初始化設備的 USB 處理程序。有關的:
如果您只是
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}"