前言node
在上篇中的內核模塊管理講解中,最後或多或少會留下一些疑問,那麼這些疑問就是內核模塊的參數是怎麼和對應的硬件所匹配上的,而硬件又是怎麼被內核識別,而且一個個都映射成實際存在的文件,而這些文件之間的關係及做用。固然在最後瞭解到,這些硬件設備的探測信息是經過一個叫udev的工具來實現的,經過udev中配置的規則能夠頗有效的識別每個硬件,並配合sysfs文件系統,將每一個探測到的硬件信息導入到/sys目錄中,那麼與/proc目錄對與內核系統信息的映射悄悄互補,/sys目錄中則專門存放於硬件相關的數據。linux
使用管理和探測設備屬性信息的命令:udevadmweb
udevadm 命令shell
udev - Dynamic device management #動態設備管理工具數據庫
提示:通常狀況下要設置udev命令規則會使用到udevadm命令來獲取規則中須要設置的鍵的對應值,也就是設備的完整數據,而udev配置中剛好須要這,固然,下面介紹udevadm管理工具的一些基本常見用戶,本篇主要以講解udev內部的配置爲主。數組
基本用法例子:bash
#先來查看當前系統識別了多少個磁盤網絡
[root@mzf test]# fdisk -l | grep -o '^Disk /dev/[sh]d[a-z]\>' Disk /dev/sdb Disk /dev/sda
說明:通常狀況下從CentOS6版本之後,不管IDE接口仍是SCSI接口的都會被識別爲sd*開頭的設備名稱。這裏顯示目錄系統上有兩塊磁盤。ide
固然若是須要再次插入一塊磁盤,可能會識別爲sdc,固然這也不必定。由於這要取決於udev中默認配置。那麼就查看第一個磁盤/dev/sda 的信息吧。工具
設備信相關信息的查看
#顯示/dev/sda磁盤路徑硬件點
[root@mzf test]# udevadm info -q path -n /dev/sda /devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda
說明:/dev/sda難道不是自己的路徑嗎?通常須要掛載的時候經常使用的磁盤設備基本都是塊設備文件,由於linux內核對文件進行了分類,而這些塊設備文件爲了便於識別,每一個快設備都會有相應的主設備號、次設備號,所以對其操做直接指定對應的塊設備文件路徑。而設備只是提供訪問,輸出信息固然不行。
#顯示於設備相關的完整信息,包括其父級parent device設備
[root@mzf myusb]# udevadm info -a -p $(udevadm info -q path -n /dev/sda)
解析:這裏會顯示全部與磁盤相關的信息,好比磁盤自己的屬性,磁盤的設備類型等,在下面會列出全部parent device列表屬性,這些都是此磁盤的父級或上級設備,好比磁盤的接口點,磁盤的標記,磁盤接口的主板插槽等,關於設備的上下級下面會講。
提示:固然若是不知道設備自己的設備數據存放路徑,也能夠經過-name或-n選項來指設備命令進行特定的設備屬性查詢,入下:
#只顯示設備自己的完整信息
[root@localhost ~]# udevadm info --query=property --name=/dev/sda
解析:這裏/dev/sda做爲一個標準的塊設備,其主設備號、此設備號等信息完整顯示,並且在下面顯示其屬性的鏈接路徑。這裏能夠發現其爲塊設備,那麼其對其的塊設備等信息都是按照設備的設備號去創建的鏈接路徑,而不是徹底安裝設備名。
列出設備的具體屬性
udevadm info -a -p [device name] #這裏的device name表示目前識別的規則NAME
例如:查看video設備,注意這裏的路徑是已經指定的數據存放目錄
udevadm info -a -p /sys/class/backlight/acpi_video0
加載新規則前測試規則
udevadm test $(udevadm info -q path -n [device name]) 2>&1
例如:主要檢查配置的語法以及匹配對應檢測硬件
udevadm test /sys/class/bakcklight/acpi_video0/
加載udev新規則
方法1:規則自動重載識別
udevadm control --reload
方法2:自動重載可能失敗,入股失敗能夠手工強制觸發規則
udevadm tigger
檢查新的eSATA (磁盤)設備
#若是在平時插入的磁盤而沒有被內核識別,那麼可使用下面裏的命名:
echo 0 0 0 | tee /sys/class/scsi_host/host*/scan echo 「- - -」 > /sys/class/csci_host/host*/scan
解析:host目錄名通常根數字,通常爲host[0-9]這裏顯示爲scsi接口下的熱存儲設備,每一個磁盤都會在一個熱存儲口下。
#也能夠經過安裝scsiaddAUR(自己,此工具爲專門解決新磁盤設備從新檢查)並嘗試命令
scsiadd -s
#但願你設備如今/dev設備裏,若是不是,你能夠試試上面的命令在運行
udevadm moitor
Udev淺談
前面介紹了udevadm命令,好像具體和開始說的udev自己機率沒有什麼關係,下面來談一談來由。在kernel2.4以前,Linux內核中採用devfs文件系統機制,使用了傳統意義上的是靜態設備建立方法,及在/dev目錄下不斷的建立大量設備節點,且無論相應的設備是否真的存在,我想多是由於預期越越多識別問題就會少吧。關於設備節點的機率這裏用一個命令來表示:
#使用mknod建立一個塊(b)設備和字符(c)設備
[root@mzf test]# mknod myblock b 10 1 [root@mzf test]# mknod mychar c 12 2
#查看其設備的主設備號和次設備號
[root@mzf test]# ls -l /test/my* brw-r--r--. 1 root root 10, 1 Aug 22 05:28 /test/myblock crw-r--r--. 1 root root 12, 2 Aug 22 05:28 /test/mychar
解析:雖然設備文件只有設備號,可是不斷調用mknod命令多少存在一些問題,及每一個設備文件不佔用磁盤空間,可是卻佔用了一個inode節點,這樣即便不多的設備,也會有一些徹底用不上的inode節點被佔用,而且管理和查找變得沒有具體的分類。
解決靜態的大量無腦建立
固然,在kernel2.4之後爲了改變這種靜態調用mknod命令的預留建立方法及devfs機制,出現了一種新的文件系統sysfs文件系統,這種機制會在內核加載和啓動時自動把識別到的設備信息導入到/sys目錄下,而且隨之的/dev目錄下的設備節點也會隨之動態改變。固然,由於識別機制並建立階段是有必定的前後順序,並且這些順序並不能手動設定,很確定是隨機的。下面用一個例子說明:
開始磁盤有一個磁盤,而且設備節點被自動建立爲/dev/sda,那麼若是加載了一個設備,通過從新掃描後,可能會使/dev/sdb,可是在一次重啓時,以前的/dev/sdb設備自己可能由於一些不肯定特性而被優先識別,那麼進入系統以後,可能會發現,/dev/sda變成了/dev/sdb,而/dev/sdb纔是最開始使用的磁盤設備。在這時確定想若是手動自定節點的命令規則就行了。
設備規則自我掌控
sysfs只是把以前devfs在系統內存空間中執行的過程一部分放到用戶空間中使用,而調用的機制也只是devfs內部的機制,最重要的設備的檢測、建立、命名一切變得動態。可是隻有sysfs自身才能控制。而用戶想要本身有個獨立或者穩定的設備節點,同時又不會大規模的建立,甚至是用到纔會自動建立節點。這時udev機制出現,經過自身的程序與配置,來將匹配內部預留機制的設備經過事件檢查識別硬件設備,而後將這些設備信息再導入到sysfs文件系統中,並根據符號的屬性及對應的設備號等,最後在/dev目錄下建立歸檔的節點名稱,固然這些只是預留的配置,須要更改,只須要添加配置。
udev規則的的做用:
一、重命名設備節點的缺省名字爲其餘名字
二、經過建立符號連接到缺省設備階段來提供一個可選的固定設備節點命令
三、基於程序的輸出命令設備節點
四、改變設備節點的權限和全部權
五、但設備節點被建立或刪除時(一般是添加設備或拔出設備時)執行的一個腳本
六、重命令網絡接口
內置固定名方法:
一開始安裝了udev後,固然是沒有任何配置的,但udev爲系統外的一些設備提供了固定命名,即便不用自定義任何規則配置,也會有一些默認的內置配置。udev爲存儲設備提供了系統外命令方法,這些命令的文件聯繫保存在/dev/disk目錄下。
使用命令 ls -lR /dev/disk 能夠查看,其中by-label目錄下就有明顯的名稱顯示,例如:
[root@mzf ~]# ls /dev/disk/ by-id by-label by-path by-uuid
解析:這些目錄下的文件都是連接文件,這裏的id、label、path、by-uuid都是與其設備相對於的具體的設備規則屬性的值。
規則的定義與書寫:
提示:
1、通常默認都會保存在 /etc/udev/rules.c/目錄下並以filename.rules命令,必須是.rules結尾,否則udev機制沒法識。
2、在安裝的新版本的udev可能會有一些規則案例,好比在/etc/udev/50.udev.rules文件下,能夠用來參考。
3、在每個規則文件中,以 # 或者 ; 開頭的行都被認爲是註釋,每個非空白行都是一條規則,規則必須在一行寫完,不能換行或跨行。
4 、一個設備是能夠被多條規則同時匹配的,所以能夠利用這點來建立多個命令節點,設置NAME,所以就能夠有多個可選節點能夠建立。
語法規則:
每條規則都一系列的鍵值對來建立,這些鍵值對經過逗號分隔,鍵分爲匹配鍵和賦值鍵,當此條匹配鍵的逐個被匹配後,將使用賦值鍵使用的賦值用來建立對應的命令節點或者連接,而後進行下一條進行處理,每條規則至少有一個匹配件和賦值鍵。
匹配鍵和賦值鍵:
舉例說明:
KERNEL=="sdc",NAME="my_usb_disk"
解析:這裏有一個匹配鍵及KERNEL爲sdc的設備,還有一個賦值鍵(NAME),及節點命令設置爲my_usb_disk。
注意:
1、這裏匹配鍵一般使用key==value,及鍵與值之間使用==及兩個等號鏈接,而賦值鍵則要使用一個=號表示對其賦值,有點相似於shell或常見變成語言中的匹配字符或對象相對以及對變量或對象賦值。
2、再次強調每一行的爲一條完整的規則配置,不能使用平時在shell腳步裏或配置文件中的 \ 來續行,也不要進行換行,必需要寫爲一行,否則就會認爲是分開的兩條或多條規則。
常見的基本的規則鍵值:
匹配鍵
KERNEL - #匹配系統定義s的設備在內置中的名稱,好比默認定義的sda、sdb2等 SUBSYSTEM - #匹配設備的子系統,好比block等 DRIVER - #匹配設備支持的驅動名稱
提示:
一、每個匹配鍵都會決定着匹配的設備,若是一個設備有不少設備,有可變的有不可變的(可能在某些環境下),那麼就能夠直接設置爲多個匹配鍵進行,而後再賦值鍵的值設置爲相同,這樣能夠確保這個設備的節點名會更加穩定。
二、可是若是有多個設備有不少相同的屬性特徵,這時就能夠進行設置極少的相同匹配鍵,並使用更多的不一樣的屬性匹配鍵來匹配,一樣設置多行,這樣匹配時就能夠不一樣的賦值鍵的值來區分不一樣的設備。
賦值鍵
NAME - #根據匹配鍵找出對應的設備,並對其進行進行設置命令節點,也就是設備應該使用的名稱 SYMLINK - #一個設備節點的可選名字的符號連接
提示:
不管是本身配置規則仍是不寫,被識別到的設備都會被udev建立一個命令節點,這時若是再次設置條目節點,那麼就會覆蓋掉以前的節點名。若是想要有多個不一樣節點名來訪問設備,可使用SYMLINK+="aa bb cc",這樣能夠對設備建立符號連接名稱,一樣使用這些名稱同樣能夠訪問和使用此設備,注意,多個要是使用+=符號,且裏面的多個值使用空格隔開。
例以下列幾條規則配置:
KERNEL=="sdc",NAME="my_usb_disk"
解析:匹配設備名爲sdc的設備,並從新設置其設備名爲my_usb_disk,訪問此設備節點爲/dev/my_usb_disk
KERNEL=="sdc",DRIVER=="usb-storage",SYMLINK+="myusb_link"
解析:匹配設備名爲sdc,且驅動爲usb-storage的設備,添加一個符號連接命名爲myusb_link,並對現有的命令節點進行連接,沒有指定NAME賦值鍵及設備名裏的定義,設備使用默認缺省的設備來命令設備名,默認不寫NAME爲/dev/sdc,及對/dev/sdc建立符號連接。須要使用此符號連接名訪問設備,則訪問/dev/myusb_link。
KERNEL=="sdc",SYSMLINK+="myusb myusb0"
解析:匹配設備名爲sdc,並追加兩個設備符號連接名各爲myusb、myusb0。一樣指向的是匹配sdc的設備及/dev/sdc。
關於命名鏈接和命名節點的配置注意:
命名連接:能夠有多個,比較相似符號連接文件而已。
命名節點:只能有一個,若是指定了命令節點,且原有的節點默認將被覆蓋掉。如:
對/dev/sdc1 的信息來配置一條規則,NAME="my_usb_disk",那麼最後/dev下只會顯示/dev/my_usb_disk,而繼承原來/dev/sdc1塊設備文件的主設備號、次設備號,至關於直接提供了系統與硬件自己的一個聯絡點名稱。
注意:再次強調,不管使用NAME仍是SYSMLINK,最後都必需要至少設置一個。
高級規則匹配(sysfs屬性)
基本匹配鍵沒法精準對多個硬件類型相同的設備設備進行過濾匹配,所以要更精準的匹配,能夠經過硬件的一些高級屬性信息來完成,如硬件的供應商編號、廠商編號、序列號、存儲能力、分區數等一些硬件驅動會自動將這些屬性信息存放到sysfs文件系統中,可使用udev規則中的ATTR匹配鍵來進行匹配。
配置規則例子:
SUBSYSTEM=="block",ATTR{size}=="30310400",SYTEMLINK+="myusb2"
解析:此規則匹配爲設備子系統類型爲block及塊設備,而後此設備的size及大小屬性爲30310400,這些熟悉能夠經過命令查看,好比,要匹配sdc1的屬性,能夠查看其屬性:
udevadm info -a -p $( udevadm info -q path -n /dev/sdc2)
設置級聯匹配
linux內核對於設備的展現其實是有相似樹狀的結構展現,這個信息一樣經過sysfs來提供,所謂的級聯在不少領域都會用到,通常最會聯想到的就是數據庫中的表與表之間的關聯,及單個或多個主表、從表之間的關係,不過數據庫表的級聯關係相對來講比較複雜。那麼udev來使用級聯連映射各個硬件設備一樣也是按照這種思路,好比一個磁盤設備節點爲一個SCSI硬盤的子級,而SCSI硬盤又是一個SCSI控制器的子級,那麼此磁盤設備有了分區後,對應的分區則也屬於此磁盤設備節點的子級。
簡要理解:級聯關係及一個設備於其父級相關設備的關係。
在上面使用的幾個基本匹配鍵及(KERNEL SUBSYSTEMS DRIVERS ATTRS)中,此匹配鍵只是對其匹配的惟一設備屬性作匹配,而不是對其配備到的級聯關係的其它設備同時作匹配,所以下面 udev 提供了用於級聯的匹配鍵:
級聯匹配鍵:
KERNELS - #匹配設備及其全部父設備的內核名稱 SUBSYSTEMS - #匹配設備及其全部父設備的內核名稱 DRIVERS - #匹配設備及其全部父設備的驅動名稱 ATTRS - #匹配設備及其全部父設備在sysfs中的屬性值。若是指定了多個ATTRS匹配,那麼必須在同一設備上所有匹配成功,纔算最終匹配成功。
注意:屬性值中的尾部空白會被忽略,除非指定的值就包含尾部空白。
字符串替換:可用於相似bash中的glob風格通配符
* - #匹配任意數字的字符,包括0次 ? - #匹配單獨一個字符 [] - #匹配括號內任意一個字符 | - #用於分隔兩個可互相替代的匹配模式,如"ab|x*",則匹配ax或者x*(及x開頭的字符)
使用配分符模糊匹配:
例子1:
KERNEL=="[hs]dc[1-9]",SUBSYSTEM=="block",DRIVER=="usb",SYMLINK+="myusb_%n"
解析:匹配設備名爲sdc或hdc,後面跟一個非0數字,好比sdc一、hdc2,可是要是block及塊設備,而且驅動類型爲usb的設備,而後設置一個符號設備鏈接節點爲myusb_dev後跟設備內核名稱,好比KERNEL=sdc1,那麼連接點爲/dev/myusb_sdc1
例子2:
KERNEL=="video*",SUBSYSTEM=="usb",SYSTELINK+="usb_%k"
解析:匹配一個開頭爲video後面跟任意個字符的設備名,而且爲usb子系統的設備,建立一個符號設備連接,好比爲/dev/usb_video-2。
例子3:
KERNEL=="fd[0-9]",NAME=="floppy/%n",SYMLINK+="%k"
解析: 匹配fd開頭後面一個數字,通常爲軟盤,而後其節點路徑放置在/dev/floppy/目錄下,例如/dev/floppy/fd1,而且對此NAME節點設備建立一個符號連接節點爲/dev/fd1。
高級特殊屬性sysfs
磁盤的直接命令節點路徑大多會選擇在/dev,通常最多見的爲塊文件,在/dev目錄下通常都是一個設備的命令節點表示或者連接節點表示,通常在系統啓動過程當中加載全部的文件系統驅動以及所需模塊以後,udev機制會經過驅動模塊驅動對應的硬件,而後獲得每一個硬件設備的相應的屬性信息,最終這些設備信息被存放內存中導入到sysfs文件系統中。
例子:查看/sys/下結構
#/sys/將於已經識別的硬件相關信息保存到/sys/目錄中
[root@mzf ~]# ls /sys/ block bus class dev devices firmware fs hypervisor kernel module power
#查看size屬性
[root@mzf ~]# cat /sys/block/sda/size 41943040
例子:如上述若是要對sda作一個精確匹配udev規則,能夠根據其size屬性配置規則:
KERNEL="sda",ATTR{size}="41943040",SYMLINK+="scsi_sda"
說明:詳細的屬性信息會在對於的/sys/block/dev_name下有各類說明,但這裏指的是block設備,固然若是有其它設備須要再/sys下找相應的SUBSYSTEM屬性來肯定,固然也有命令能夠來幫助實現如,查/dev/sda設備屬性:
例子:獲取更多的指定設備信息
#查看全部與/dev/sda其相關的設備的屬性
[root@mzf ~]# udevadm info --query=property --name=/dev/sda
#只查詢屬性正在對應的設備/dev/sda1設備數據存放路徑
[root@mzf ~]# udevadm info --query=path --name=/dev/sda1 /devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda/sda1
#顯示更多的樣例格式屬性
[root@mzf ~]# udevadm info -a -p `udevadm info --query=path --name=/dev/sda1`
注意:/dev/sda不是設備信息的存放路徑,而是一個設備的命令節點也就是設備的個體表示具體的相關設備信息會存放在/sys/devices/device_nam或 /sys/block/device_name 下,這裏纔是sysfs文件系統真正導入的硬件信息存放路徑。
簡單小案例:
usb flash設備,如U盤、讀卡器
注:由於這些設備通常會存儲數據,因此通常會有文件系統,那麼若是是設備插入後沒有很好的識別,頗有可能會是當前系統內核模塊沒有對此文件系統的支持,所以須要先加載設備須要的文件系統模塊。可以使用下列方式來解決:
準備工做:
一、lsmod 或 lsusb來查看是否已經有接口被新設備使用,若是沒有就手動加載驅動
[root@mzf ~]# lsmod | grep 'driver_name'
二、查看當前系統支持的文件系統列表
[root@mzf ~]# cat /proc/filesystems
注意:若是發現沒有加載對應設備的文件系統,能夠先加載對應的文件系統模塊文件:
[root@mzf ~]# modprobe mod_name
解析:mod_name通常存放在對於版本系統版本的模塊文件存放路徑,好比/usr/lib/modules/3.2.89/kernel/下有對應模塊的模塊,而文件系統模塊通常在fs目錄下。
注意:有時候可能modprobe並不能識別到模塊名,可能由於對應的配置文件沒有保存/etc/modules.d/*.conf配置,也多是/usr/lib//modules/$(uname -r)/modules.dep已經其次各類配置中未讀取,此係統版本的模塊路徑,可使用下面命令從新生成模塊模塊依賴配置:
[root@mzf ~]# depmod -a
三、再次使用下面命令來查看模塊是否加載
lsmod mod_name | grep '\<mod_name\>' cat /proc/modules | grep '\<mod_name\>'
注意:可能任然不行,那麼在編譯內核模塊時,那麼能夠經過/user/lib/modules/$(uname -r)/kernel/fs/查找須要的文件系統支持模塊,而後使用insmod 加載,如fat格式U盤:
insmod /usr/lib/modules/$(uname -r)/kernel/fs/fat.ko insmod /usr/lib/modules/$(uname -r)/kernel/fs/vfat.ko
提示:具體的模塊問題處理在上一篇有也案例以及講解,這裏以udev爲主要因此再也不作過多說明。
具體規則的配置:
#在設備被識別後,能夠經過lsusb命令來查看一些惟一性的屬性,來接下來的匹配作準備
[root@mzf ~]# lsusb -v | grep -A 5 '\<idVendor\>' -- idVendor 0x1d6b Linux Foundation idProduct 0x0001 1.1 root hub bcdDevice 2.06 iManufacturer 3 Linux 2.6.32-642.el6.x86_64 uhci_hcd iProduct 2 UHCI Host Controller iSerial 1 0000:02:00.0
說明:idVendor爲出廠號,而idProduct爲產品號,通常電子產品此項都會惟一。
#usb接口的磁盤設備通常會被識別爲/dev/sd開頭的設備,全部能夠經過此kernel設備命名來匹配此設備:
KERNEL=="sd*",SUBSYSTEM=="block",ATTR{ipVendor}=="4a3gb3",ATTR{idProduct}=="445566",name=="/myusb/usb_%n" KERNEL=="sdc1",SUBSYSTEM=="block",ATTR{size}=="30310400",SYMLINK+="usb" KERNEL=="sdc[0-9]",SUBSYSTEM=="block",SUBSYSTEMS=="scsi",ATTRS{model}=="USB Flash Drive ",NAME="my_usb_disk"
#在配置完成後能夠手動強制掃描udev配置
[root@mzf ~]# udevadm trigger
#而後在/dev/目錄查看或搜索匹配的設備是否已經被配置命令
[root@mzf ~]# ls /dev [root@mzf ~]# find /dev/ -name "*dev_name*"
多媒體設備
假設有有不少的媒體設備,好比usb的外置攝像頭、播放器、智能手機、mb4等。能夠經過其設備的子系統類型、廠商編號、以及其對應的商品惟一發行編號的精良具備惟一性的設備屬性信息來匹配多個設備。
具體規則配置:
新建一個配置規則文件/etc/udev/rules.d/69-webcam.rules,配置以下:
KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="05a9", ATTRS{idProduct}=="4519", SYMLINK+="video-cam1" KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="08f6", SYMLINK+="video-cam2" KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0840", SYMLINK+="video-cam3"
提示:注意每一行都是一條規則,不要續行,不然會致使匹配出錯或者直接致使udev讀取配置格式出錯。
配置網卡設備命令
#顯示對應網卡的具體硬件全部相關信息
[root@mzf ~]# udevadm info -a -p /sys/class/net/eth0
#只查看此網卡具體相關信息
[root@mzf ~]# udevadm info -a -p /sys/class/net/eth0 | sed -n '/eth0/,/^[[:space:]]*$/p' looking at device '/devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/eth0': KERNEL=="eth0" SUBSYSTEM=="net" DRIVER=="" ATTR{addr_assign_type}=="0" ATTR{addr_len}=="6" ATTR{dev_id}=="0x0" ATTR{ifalias}=="" ATTR{iflink}=="2" ATTR{ifindex}=="2" ATTR{features}=="0x14b89" ATTR{type}=="1" ATTR{link_mode}=="0" ATTR{address}=="00:0c:29:a3:5d:d7"
解析:上面能夠看到address表示網卡硬件地址,及常說的MAC的地址,此地址經過6段16進制數組成,有惟一性。
#根據上面來配置命令,好比eth0改成game_lan,表示玩遊戲專用於鏈接外網的網卡設備。
KERNEL=="eth*",SUBSYSTEM=="net",ATTR{type}=="1",ATTR{address}=="00:0c:29:a3:5d:d7",name="game_lan"
補充:
默認的/etc/udev/rules.d/70-persistent-net.rules網卡命令規則配置文件例子:
# PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:a3:5d:d7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
解析:這裏涉及到了ACTION動做,add表示及設備鏈接時會自動檢測設備並設置訪問節點。怪不得有時候查上網卡添加配置文件就會自動識別,是會自動添加的。