發表文章

目前顯示的是 3月, 2017的文章

Linux: udev 介紹

在談論udev之前,先要知道/dev這目錄. /dev在linux用途是存放device node(file-like device nodes). 程式可以透過device node來與系統上的裝置溝通. e.g. /dev/input/mice 為滑鼠 那誰負責管理/dev底下的device node? 沒錯,那就是udev最主要的工作. kernel會把裝置相關的events(add/remove/etc.)傳送至udev(藉由netlink). udev根據寫好的rules,在/dev底下建立對應的device node. 而這些rules會根據裝置的屬性去撰寫相關設定條件. 針對符合規則的裝置做對應的處理 到這時候應該會好奇要怎麼去得知道裝置的屬性呢? 而這邊就要談到 /sys (file type: sysfs), 這個是由kernel所維護的device資訊, kernel會把連接上的裝置資訊給放在這邊. udev在建立device node的時候也會參考這邊相關的屬性 e.g. udevadm info -a --name /dev/input/mice or udevadm info -a --path $(udevadm info --query=path --name=/dev/input/mice) 接下來談的部分是udev rules. 基本上rule是由 match keys 和 assignment keys 這兩個部分構成. match key主要是作為條件判斷用. assignment keys則是用來設定數值與執行相關操作. 每一條rule至少都要有一個 match key 和 assignment key. 在 rule 中的這些keys則使用逗號(,)來做隔離, 並不允許由多行的keys來成一條rule. 這意味著udev rule file中的每一行就是一條rule . KERNEL=="sda", ATTR{size}=="234441648", NAME="sda", SYMLINK+=disk/by-id/ata-VBOX_HARDDISK_VBa2440069-7fdbc2ad 這一個例子是判斷KERNEL是否符合