中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

UDEV規則參數詳細解釋使用

發布時間:2020-08-04 18:51:47 來源:ITPUB博客 閱讀:391 作者:路途中的人2012 欄目:建站服務器

Udev 的使用--linux系統創建設備節點
 
Linux 里都是以設備文件的形式存在。在早期的 Linux 版本中,/dev目錄包含了所有可能出現的設備的設備文件。但因為這樣 Linux 用戶很難在這些大量的設備文件中找到匹配條件的設備文件。現在 udev 只為那些連接到 Linux 操作系統的設備產生設備文件。并且 udev 能通過定義一個 udev 規則 (rule) 來產生匹配設備屬性的設備文件,這些設備屬性可以是內核設備名稱、總線路徑、廠商名稱、型號、序列號或者磁盤大小等等。
 
動態自動管理設備信息:當有設備添加 / 刪除時,udev 的守護進程偵聽到來自內核的 uevent 的事件,用來添加或者刪除 /dev下的設備文件,所以 udev 可以只為已經連接的設備產生設備文件,而不會象 2.4 內核一樣在 /dev下產生大量設備文件。另外可以使用這個功能 ,當有設備加入時運行外部的程序,比如鼠標加入時自動禁用觸摸板之類
使用自定義命名和管理設備:使用 Udev 規則文件,udev 在 /dev/ 里為所有的設備定義了內核設備名稱,比如 /dev /sda、/dev/hda、/dev/fd等等。由于 udev 是在用戶空間 (user space) 運行,Linux 用戶可以接下來對這些信息進行操作,比如可以通過自定義的規則文件,生成人性的設備標識,比如 /dev/my_disk、/dev/nameusb 等,還能對設置進行參數成員用戶組權限之類的修改。
 
開始之類需要了解
  ? sysfs:sysfs是 Linux 2.6 內核里的一個虛擬文件系統 (/sys)。它把設備和驅動的信息從內核的設備模塊導出到用戶空間 (userspace)。從該文件系統中,Linux 用戶可以獲取很多設備的屬性。
  ? devpath:本文的 devpath是指一個設備在 sysfs文件系統 (/sys)下的相對路徑,該路徑包含了該設備的屬性文件。udev 里的多數命令都是針對 devpath操作的。例如:sda的 devpath是 /block/sda,sda2 的 devpath是 /block/sda/sda2。
  ? 內核設備名稱:設備在 sysfs里的名稱,是 udev 默認使用的設備文件名。
 
udev 主配置文件
 
主要的udev 主配置文件是 /etc/udev/udev.conf。這個文件通常很短,他可能只是包含幾行#開頭的注釋,然后有幾行選項:
 

 


 

udev_root=/dev/  # 設置的絕對路徑,相當于創建 chroot 的根。
 
udev_rules=/etc/udev/rules.d/    #規則的存放地址
 
udev_log=err      # 日志的輸入級別
 

 
 
udev 的規則配置文件實例
 
 
默認的規則配置文件存放在 /etc/udev/rules.d/ 中,我們進入這個可以看到 RedHat 默認對設備建好的一些規則和一些硬件公司寫好的規則。
進入目錄,可以見到以二位數字開頭的前綴的配置文件,可以使用 vi 進入配置文件中查看,一行是一條規則,默認是從小數字到大數字,這些表示生效的順序。
 
我們在使用 udev 寫規則前,先來看一個例子
 

 


 KERNEL==sd*, PROGRAM=/lib/udev/scsi_id -g -s %p, RESULT==123456, SYMLINK=%k_%c
 
 

 
 
該規則的執行:如果有一個內核設備名稱以 sd 開頭,且 SCSI ID 為 123456,則為設備文件產生一個符號鏈接“sda_123456”.  %p %k %c 請看后面的“udev 的值和可調用的替換操作符 ”
 
 
 
 
udev 的規則配置文件
 
在規則文件里,除了以“#”開頭的行(注釋),所有的非空行都被視為一條規則,但是一條規則不能擴展到多行。規則都是由多個 鍵值對(key-value pairs)組成,并由逗號隔開,鍵值對可以分為 條件匹配鍵值對( 以下簡稱“匹配鍵 ”) 和 賦值鍵值對( 以下簡稱“賦值鍵 ”),一條規則可以有多條匹配鍵和多條賦值鍵。匹配鍵是匹配一個設備屬性的所有條件,當一個設備的屬性匹配了該規則里所有的匹配鍵,就認為這條規則生效,然后按照賦值鍵的內容,執行該規則的賦值。
規則文件里的規則有一系列的鍵/值對組成,鍵/值對之間用逗號(,)分割。
 
通過上面例子中也能看出,這些配置,但我想大家可能會產生疑惑,為什么 KERNEL 是匹配鍵,而 NAME 和 MODE 是賦值鍵呢?這由中間的操作符 (operator) 決定。
 
僅當操作符是“==”或者“!=”時,其為匹配鍵;若為其他操作符時,都是賦值鍵。

匹配鍵和賦值鍵操作符解釋見下表:
 

 


 操作符     匹配或賦值t                         解釋
----------------------------------------
==            匹配              相等比較
!=            匹配             不等比較
=            賦值              分配一個特定的值給該鍵,他可以覆蓋之前的賦值。
+=          賦值              追加特定的值給已經存在的鍵
:=            賦值                  分配一個特定的值給該鍵,后面的規則不可能覆蓋它。
 
 

udev 規則的匹配鍵 :
 

 


 

鍵        含義
 
----------------------------------------
 
ACTION         事件 (uevent) 的行為,例如:add( 添加設備 )、remove( 刪除設備 )。
 
KERNEL         在內核里看到的設備名字,比如sd*表示任意SCSI磁盤設備
 
DEVPATH       內核設備錄進,比如/devices/*
 
SUBSYSTEM       子系統名字,例如:sda 的子系統為 block。
 
BUS         總線的名字,比如IDE,USB
 
DRIVER         設備驅動的名字,比如ide-cdrom
 
ID           獨立于內核名字的設備名字
 
SYSFS{ value}       sysfs屬性值,他可以表示任意
 
ENV{ key}       環境變量,可以表示任意
 
PROGRAM       可執行的外部程序,如果程序返回0值,該鍵則認為為真(true)
 
RESULT         上一個PROGRAM調用返回的標準輸出。
 
NAME         根據這個規則創建的設備文件的文件名。
 
注意:僅僅第一行的NAME描述是有效的,后面的均忽略。  

    如果你想使用使用兩個以上的名字來訪問一個設備的話,可以考慮SYMLINK鍵。
 
SYMLINK       為 /dev/下的設備文件產生符號鏈接。由于 udev 只能為某個設備產生一個設備文件,
 
    所以為了不覆蓋系統默認的 udev 規則所產生的文件,推薦使用符號鏈接。
 
OWNER         設備文件的屬組
 
GROUP         設備文件所在的組。
 
MODE         設備文件的權限,采用8進制
 
RUN         為設備而執行的程序列表
 
LABEL         在配置文件里為內部控制而采用的名字標簽(下下面的GOTO服務)
 
GOTO         跳到匹配的規則(通過LABEL來標識),有點類似程序語言中的GOTO
 
IMPORT{ type}     導入一個文件或者一個程序執行后而生成的規則集到當前文件
 
WAIT_FOR_SYSFS   等待一個特定的設備文件的創建。主要是用作時序和依賴問題。
 
PTIONS         特定的選項:

last_rule 對這類設備終端規則執行;
 
ignore_device 忽略當前規則;
 
ignore_remove 忽略接下來的并移走請求。
 
all_partitions 為所有的磁盤分區創建設備文件。

----------------------------------------

udev 的重要賦值鍵

引用
NAME:在 /dev下產生的設備文件名。只有第一次對某個設備的 NAME 的賦值行為生效,之后匹配的規則再對該設備的 NAME 賦值行為將被忽略。如果沒有任何規則對設備的 NAME 賦值,udev 將使用內核設備名稱來產生設備文件。
SYMLINK:為 /dev/下的設備文件產生符號鏈接。由于 udev 只能為某個設備產生一個設備文件,所以為了不覆蓋系統默認的 udev 規則所產生的文件,推薦使用符號鏈接。
OWNER, GROUP, MODE:為設備設定權限。
ENV{key}:導入一個環境變量。

----------------------------------------
 
 我們給出一個列子來解釋如何使用這些鍵。下面的例子來自Fedora Core 5系統的標準配置文件。

KERNEL==”*”, OWNER=”root” GROUP=”root”, MODE=”0600″
KERNEL==”tty”, NAME=”%k”, GROUP=”tty”, MODE=”0666″, OPTIONS=”last_rule”
KERNEL==”scd[0-9]*”, SYMLINK+=”cdrom cdrom-%k”
KERNEL==”hd[a-z]”, BUS==”ide”, SYSFS{removable}==”1″, SYSFS{device/media}==”cdrom”, SYMLINK+=”cdrom cdrom-%k”
ACTION==”add”, SUBSYSTEM==”scsi_device”, RUN+=”/sbin/modprobe sg”

上面的例子給出了5個規則,每一個都是KERNEL或者ACTION鍵開頭:

*第一個規則是缺省的,他匹配任意被內核識別到的設備,然后設定這些設備的屬組是root,組是root,訪問權限模式是0600(-rw——-)。這也是一個安全的缺省設置保證所有的設備在默認情況下只有root可以讀寫。
*第二個規則也是比較典型的規則了。它匹配終端設備(tty),然后設置新的權限為0600,所在的組是tty。它也設置了一個特別的設備文件名:%K。在這里例子里,%k代表設備的內核名字。那也就意味著內核識別出這些設備是什么名字,就創建什么樣的設備文件名。

*第三行開始的KERNEL==”scd[0-9]*”,表示 SCSI CD-ROM 驅動. 它創建一對設備符號連接:cdrom和cdrom-%k。

*第四行,開始的 KERNEL==”hd[a-z]“, 表示ATA CDROM驅動器。這個規則創建和上面的規則相同的符號連接。ATA CDROM驅動器需要sysfs值以來區別別的ATA設備,因為SCSI CDROM可以被內核唯一識別。.

*第五行以 ACTION==”add”開始,它告訴udev增加 /sbin/modprobe sg 到命令列表,當任意SCSI設備增加到系統后,這些命令將執行。其效果就是計算機應該會增加sg內核模塊來偵測新的SCSI設備。

當然,上面僅僅是一小部分例子,如果你的系統采用了udev方式,那你應該可以看到更多的規則。如果你想修改設備的權限或者創建信的符號連接,那么你需要熟讀這些規則,特別是要仔細注意你修改的那些與之相關的設備。
 
udev 的值和可調用的替換操作符

 

 

 

在鍵值對中的鍵和操作符都介紹完了,最后是值 (value)。Linux 用戶可以隨意地定制 udev 規則文件的值。
 
例如:my_root_disk, my_printer。同時也可以引用下面的替換操作符:
 
----------------------------------------
 
$kernel, %k:設備的內核設備名稱,例如:sda、cdrom。
 
$number, %n:設備的內核號碼,例如:sda3 的內核號碼是 3。
 
$devpath, %p:設備的 devpath路徑。
 
$id, %b:設備在 devpath里的 ID 號。
 
$sysfs{file}, %s{file}:設備的 sysfs里 file 的內容。其實就是設備的屬性值。
 
例如:$sysfs{size} 表示該設備 ( 磁盤 ) 的大小。
 
$env{key}, %E{key}:一個環境變量的值。
 
$major, %M:設備的 major 號。
 
$minor %m:設備的 minor 號。
 
$result, %c:PROGRAM 返回的結果
 
$parent, %P:父設備的設備文件名。
 
$root, %r:udev_root的值,默認是 /dev/。
 
$tempnode, %N:臨時設備名。
 
%%:符號 % 本身。
 
$$:符號 $ 本身。
 

 
 

 
 
udev 規則所需要信息的查詢
 
常用的查上面匹配鍵信息的命令
 

 


 

udevinfo -a -p $(udevinfo  -q path -n /dev/sda1 )
 
上面的命令兩次使用udevinfo:
 
  第一次是返回sysfs設備路徑(他通常和我們看到的Linux設備文件名所在路徑--/dev/hda--不同);
 
  第二次才是查詢這個設備路徑,結果將是非常常的syfs信息匯總
 
udevinfo -a -p /sys/class/net/eth0
 
scsi_id -g -s /block/sda
 
scsi_id -g -x -s /block/sda/sda3
 
ata_id /dev/hda
 

 
 

 
 
udev 信息的測試和生效
 
查出來后,根據上面文件中的內容寫規則后,怎么測試
 

 


udevtest /block/sda
 
start_dev #命令重啟 udev守護進程
 
本操作會對所有的設備重新查詢規則目錄下所有的規則文件,然后執行所匹配的規則里的行為。
 
通常使用該命令讓新的規則文件立即生效。
 ------------------------------------   資料整理網絡   ---------------------------------------------

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民乐县| 闽清县| 泰兴市| 黄冈市| 延川县| 泽普县| 巴南区| 拉孜县| 清流县| 达日县| 登封市| 游戏| 桃园市| 松溪县| 沧州市| 北京市| 定西市| 登封市| 马龙县| 永泰县| 婺源县| 西宁市| 文安县| 黑龙江省| 武平县| 青田县| 鄂州市| 牡丹江市| 井陉县| 夏河县| 登封市| 江都市| 罗城| 临夏县| 德昌县| 青岛市| 澜沧| 曲水县| 阜阳市| 敦煌市| 册亨县|