Udev

如何找出核心或udev是否創建了設備節點?

  • April 16, 2019

有沒有辦法找出誰創建了設備節點?如果它已經udev或核心本身?

在我的具體情況下,我有兩個網路攝像頭。為它們創建的節點是 /dev/video0/dev/video1。不幸的是,這不是一個固定的分配。現在udev我認為使用. _ _udev``video0``video1``udev``/dev/videoLogitech

我需要一些關於哪個日誌文件或哪個命令可以幫助我了解這裡發生的事情的建議。

如果要檢查操作順序,請使用:

udevadm monitor --property

通過這樣做,您將獲得操作列表。當您添加相機時,第一個條目可能類似於:

KERNEL[110935.814197] add      /devices/.../video4linux/video1 (video4linux)
ACTION=add
DEVNAME=/dev/video1  <<<<---- devname

正如@goldilocks 所指出的

不幸的是,如果您使用的是 systemd,它的 udev 版本有一個複雜的“持久命名方案”,它被硬編碼到 udevd中,所以你是對的,只是解析這些rules.d東西可能會留下很多謎團。

同樣來自man udevsystemd:

以下鍵可以獲得分配的值:

NAME 用於網路介面的名稱。有關設置介面名稱的更高級別機制,請參見 systemd.link(5)。udev 不能更改設備節點的名稱,只能創建附加符號連結。


命名和調試

您最好的選擇可能是使用類似的東西:

udevadm test $(udevadm info -q path -n video1)

它為您的規則提供“測試執行”並報告任何錯誤。

添加/更改規則後,請記住重新載入:

udevadm control --reload-rules

命名設備時,您可能會得到以下資訊:

NAME="smile2thecamera" ignored, kernel device nodes can not be renamed; 
     please fix it in /etc/udev/rules.d/83-webcam.rules:6

您可以改為使用 SYMLINK(如果足夠的話),如下所示:

KERNEL=="video[0-9]", .... SYMLINK+="video-logitech"

在測試中應該給你這樣的東西:

creating link '/dev/video-logitech' to '/dev/video1'
creating symlink '/dev/video-logitech' to 'video1'

DEVLINKS=.... /dev/video-logitech

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