歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 紅旗Linux工程師大講堂:掌握udev

紅旗Linux工程師大講堂:掌握udev

日期:2017/2/28 16:47:33   编辑:Linux教程

  如果你使用Linux比較長時間了,那你就知道,在對待設備文件這塊,Linux改變了幾次策略。在Linux早期,設備文件僅僅是是一些帶有適當 的屬性集的普通文件,它由mknod命令創建,文件存放在/dev目錄下。

  如果你使用Linux比較長時間了,那你就知道,在對待設備文件這塊,Linux改變了幾次策略。在Linux早期,設備文件僅僅是是一些帶有適當 的屬性集的普通文件,它由mknod命令創建,文件存放在/dev目錄下。後來,采用了devfs,一個基於內核的動態設備文件系統,他首次出現在 2.3.46內核中。Mandrake,Gentoo等Linux分發版本采用了這種方式。devfs創建的設備文件是動態的。但是devfs有一些嚴重 的限制,從2.6.13版本後移走了。目前取代他的便是文本要提到的udev--一個用戶空間程序。

  目前很多的Linux分發版本采納了udev的方式,因為它在Linux設備訪問,特別是那些對設備有極端需求的站點(比如需要控制上千個硬盤)和熱插拔設備(比如USB攝像頭和MP3播放器)上解決了幾個問題。下面我我們來看看如何管理udev設備。

  實 際上,對於那些為磁盤,終端設備等准備的標准配置文件而言,你不需要修改什麼。但是,你需要了解udev配置來使用新的或者外來設備,如果不修改配置,這些設備可能無法訪問,或者說Linux可能會采用不恰當的名字,屬組或權限來創建這些設備文件。你可能也想知道如何修改RS-232串口,音頻設備等文件 的屬組或者權限。這點在實際的Linux實施中是會遇到的。

  為什麼使用udev

  在此之前的設備文件管理方法(靜態文件和devfs)有幾個缺點:

  ◆不確定的設備映射。特別是那些動態設備,比如USB設備,設備文件到實際設備的映射並不可靠和確定。舉一個例子:如果你有兩個USB打印機。一個可能稱為 /dev/usb/lp0,另外一個便是/dev/usb/lp1。但是到底哪個是哪個並不清楚,lp0,lp1和實際的設備沒有一一對應的關系,因為他可能因為發現設備的順序,打印機本身關閉等原因而導致這種映射並不確定。理想的方式應該是:兩個打印機應該采用基於他們的序列號或者其他標識信息的唯一設 備文件來映射。但是靜態文件和devfs都無法做到這點。

  ◆沒有足夠的主/輔設備號。我們知道,每一個設備文件是有兩個8位的數字:一個是主設備號,另外一個是輔設備號來分配的。這兩個8位的數字加上設備類型(塊設備或者字符設備)來唯一標識一個設備。不幸的是,關聯這些身邊的的數字並不足夠。

  ◆/dev目錄下文件太多。一個系統采用靜態設備文件關聯的方式,那麼這個目錄下的文件必然是足夠多。而同時你又不知道在你的系統上到底有那些設備文件是激活的。

  ◆命名不夠靈活。盡管devfs解決了以前的一些問題,但是它自身又帶來了一些問題。其中一個就是命名不夠靈活;你別想非常簡單的就能修改設備文件的名字。缺省的devfs命令機制本身也很奇怪,他需要修改大量的配置文件和程序。;

  ◆內核內存使用,devfs特有的另外一個問題是,作為內核驅動模塊,devfs需要消耗大量的內存,特別當系統上有大量的設備時(比如上面我們提到的系統一個上有好幾千磁盤時)

  udev的目標是想解決上面提到的這些問題,他通采用用戶空間(user-space)工具來管理/dev/目錄樹,他和文件系統分開。知道如何改變缺省配置能讓你之大如何定制自己的系統,比如創建設備字符連接,改變設備文件屬組,權限等。

  udev配置文件

  主要的udev配置文件是/etc/udev/udev.conf。這個文件通常很短,他可能只是包含幾行#開頭的注釋,然後有幾行選項:

  udev_root=”/dev/”

  udev_rules=”/etc/udev/rules.d/”

  udev_log=”err”

  上面的第二行非常重要,因為他表示udev規則存儲的目錄,這個目錄存儲的是以.rules結束的文件。每一個文件處理一系列規則來幫助udev分配名字給設備文件以保證能被內核識別。

  你的/etc/udev/rules.d下面可能有好幾個udev規則文件,這些文件一部分是udev包安裝的,另外一部分則是可能是別的硬件或者軟件包生 成的。比如在Fedora Core 5系統上,sane-backends包就會安裝60-libsane.rules文件,另外initscripts包會安裝60-net.rules文件。這些規則文件的文件名通常是兩個數字開頭,它表示系統應用該規則的順序。

Copyright © Linux教程網 All Rights Reserved