2,580 瀏覽數

Linux – udev(1) 什麼是 udev?

什麼是 udev?

老實說是最近遇到一個問題 "網絡介面卡的順序與名稱" 才開始接觸 udev 這個東西的,雖然他在 kernel 2.6.15 就開始使用了.目前我的 RHEL5 已經用到 kernel 2.6.18,先來看一下 devfs(dev) 和 sysfs(udev) 的不同.

有上過 Linux 課的,還記得老師的第一句話就是 Linux 下所有的東西都是以檔案的模式存在,這也包括了硬體裝置.

所以在最早的 Linux 裝置通通存放在 /dev/ 目錄下,名稱的命名很簡單.

  • /dev/fb: frame buffer
  • /dev/fd: floppy disks
  • /dev/hd: hda 就是 IDE 的硬碟
  • /dev/lp: printers (compare lp)
  • /dev/par: parallel ports
  • /dev/pt: pseudo-terminals (virtual terminals)
  • /dev/sd: sda 就是 SCSI 的硬碟. (but also SATA and USB disks)

    • scd: SCSI audio-oriented optical disc drives
    • sd: SCSI hard disks (also SATA or USB disks)
    • sg: SCSI generic devices
    • sr: SCSI data-oriented optical disc drives
    • st: SCSI magnetic tapes
  • /dev/tty: (physical) terminals

    • ttyS: ttyS0 就是serial port.

其他的虛擬裝置 (Pseudo-devices)

  • /dev/null: Accepts and discards all input; produces no output.
  • /dev/full: Always full device.
  • /dev/loop: loop device
  • /dev/zero: Produces a continuous stream of NUL (zero value) characters.
  • /dev/random: Produces a variable-length stream of pseudo-random (random in Linux) characters. (Blocking)
  • /dev/urandom: Produces a variable-length stream of pseudo-random characters. (Non-Blocking)

使用者如果要對硬體進行存取,很簡單的只要針對 /dev/ 檔案作存取即可.但是缺點就是系統一開始就必須先將所以的裝置先預備好.假如你的系統明明只有一顆硬碟 sda 但是 /dev/ 目錄下可早就已經預備好了 sdb , sdc …. 不同的硬碟裝置在做準備.所以 /dev/ 會相當龐大,都是因為儲存了一些不是真實存在的裝置.

舊時代的 Linux 2.4 – 2.6.18 採用 /dev/ (devfs) + hotplug

在核心 Linux 2.4–2.6.18  ,devfs(device file system) 這樣的模式就是將所有的裝置沒有規則可循的直接存放在 /dev/ 目錄下面加上動態可以偵測 USB 裝置的 hotplug.devfs 所有的裝置都必須在關機狀態才能才能插上裝置,但是因為USB 裝置的產生.Linux 使用一種  hotplug 來動態增減裝置,但是實際上 /dev/ 目錄還是一開始就必須有相對應的裝置才可以.

/dev/ 的文件都是以靜態的方式存在,如果系統的裝置不夠用時還需要自行增加(#mknod).加上所有的 device 都有它的 [MAJOR MINOR] number 至於 number 要怎麼看請自行參考裝置的參數表 /usr/src/linux-kernel-version/Documentation/devices.txt 使用上不是很方便,所以在 2.6.15 kernel 就採用了 udev 的方式.

從核心 Linux 2.6.15 版後,Linux 全面採用 sysfs 取代過去的 devfs

裝置還是存放在 /dev/ 目錄下但是多了一個 /sys/ 的目錄存放動態設備節點 udev (sysfs)
優點是 /dev/ 不再需要預先產生很多不必要的裝置.有需要時系統在自行產生.udev則提供了,並以規則式的方式來存放.

參考文件:
http://reactivated.net/writing_udev_rules.html

網友的想法

  1. 自動參照通知: Linux – udev | Benjr.tw

發表迴響