system udev原理分析

2021-08-01 15:38:22 字數 2893 閱讀 4499

一.udev簡介 在

linux

系統中,/dev目錄用來儲存裝置檔案的.每個檔案指向乙個系統裝置.使用者的程式可以通過使用這些裝置檔案, 對真實的硬體的裝置進行操作.如: hda是第1個ide硬碟,sda是第1個scsi硬碟. 

在2.4核心時代, 在/dev下儲存了所有kernel可以支援的硬體裝置的裝置檔案,將近有1萬個.而這些裝置中,大多數是沒有連線的裝置

.這樣就大大的浪費了系統資源,而且/dev目錄也顯得非常混亂.

udev就是用了解決這些問題的.在2.6核心中,採用udev方式來管理/dev目錄.它可以動態的建立/刪除裝置檔案(裝置連線到系統時,它會自動建立相應的裝置檔案,裝置斷開連線後,它會自動刪除相應的裝置檔案).這樣使/dev目錄簡化了許多.而且,udev還可以允許使用者編寫命名規則,為不同裝置指定裝置檔名.這樣,對裝置的管理也方便了許多.

例如:你有2個u盤,1個容量是1g的,1個容量是2g的.一般情況下,你先接上的u盤會是sdb,後接上的u盤會是sdc.這樣對使用很不方便.每次u盤的裝置名可能不一樣.但通過udev命名規則,你可以自己指定的裝置命名,可以將1g的u盤命名為1g,將2g的u盤命名為2g.裝置名不會再變化.使用和管理都會很方便.

二.udev安裝

1.turbolinux發行版

在turbolinux 10,10.5和11等版本中,都已整合了udev包.你也可以手動安裝udev的rpm包.

# rpm -ivh udev-《版本號》.rpm

2.從原始碼包安裝

#tar jxf udev-039.tar.bz2# cd udev-039# make# make install

三.udev命名規則

1.檢視硬體資訊

當你將乙個硬體連線到系統時,會在/sys下生成這個裝置的相應資訊.u盤資訊會儲存在/sys/block下,usb印表機則會儲存在

/sys/class/usb下.使用udevinfo命令可以檢視硬體的相關資訊.

# udevinfo -a -p /sys/block/sda/sda1 looking at class device '/sys/block/sda/sda1': sysfs="8:1" sysfs="2045147" sysfs="61" sysfs=" 0 0 0 0"follow the class device's "device" looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host2/target2:0:0/2:0:0:0': bus="scsi" id="2:0:0:0" sysfs="0" sysfs="0" sysfs="240" sysfs="flash disk " sysfs="1" sysfs="4.00" sysfs="3" sysfs="running" sysfs="30" sysfs="0" sysfs=" "

輸出資訊包括硬體的產品型別,廠商資訊,序列號等,依據這些資訊,你就可以編寫命名規則了.

2.命名規則

udev的命名規則儲存在/etc/udev/rules.d中,指令碼按照檔案的編號順序,由小到大執行.當規則匹配時,將不再繼續向下

執行.下面以turbolinux 10為例,編寫乙個u盤命名規則.

# vi /etc/udev/rules.d/05-users.rules

根據硬體的序列號(serial)編寫規則.在檔案中新增下面內容:

bus="usb", sysfs="033446747503", kernel="sd?1", name="bruce-%k", symlink="bruce3-%n"

bus 表示裝置使用的匯流排.

sysfs 表示指定硬體資訊中,我們需要使用的哪一項值,這裡我們使用u盤的序列號作為識別.

kernel 表示核心對這個裝置進行的命名.核心對u盤的命名為sda1,sdb1…,所以這裡我們使用」sd?1」.

name 裝置名,即我們要改變的裝置名稱.我們使用bruce-%k.%k代表核心對這個裝置的命名.

symlink 表示建立乙個連線,連線到這個裝置上.這個連線的名稱是」bruce3-%n」.%n代表kernel號,即裝置名後面的數字.

現在將u盤拔出,然後再重新連線到計算機上.

# ls /dev/sd* -hlbrw-rw---- 1 root disk 8, 0 aug 17 20:11 /dev/sda# ls /dev/bruce* -hllrwxrwxrwx 1 root root 10 aug 17 20:11 /dev/bruce3-1 -> bruce-sda1brw------- 1 root root 8, 1 aug 17 20:11 /dev/bruce-sda1

可以看到,u盤裝置名變成了bruce-sda1,並且有乙個bruce3-1的連線指向它.

四.udev工作原理

當系統新增裝置時,/sys目錄下會生成裝置的相應資訊.udev就是通過讀取/sys下的資訊來識別硬體裝置的.

udev有3部分組成: namedev,libsysfs,udev

namedev 負責解析/etc/udev/rules.d中的命名規則,遇到匹配規則後,會返回乙個裝置名.

libsysfs 負責讀取/sys下的硬體資訊.

udev程式負責協調namedev和libsysfs,來完成指定的命名策略.

當有裝置新增或移出時,/sbin/hotplug由核心呼叫.提供相應裝置的特徵資訊.如:裝置型別,sysfs中的哪個裝置等.

udev獲得這些資訊,然後呼叫namedev,為裝置指定乙個名稱.如果這是乙個已經增加的新裝置,則udev使用

libsysfs來獲得裝置的主從裝置號,然後在/dev下建立裝置檔案.如果這個裝置已經移出,則將從/dev下刪除

它的裝置檔案.

原理分析 煙氣分析儀工作原理

煙氣分析儀的工作原理常用兩種,一種是電化學工作原理,另一種是紅外工作原理。目前市場上的可攜式煙氣分析儀通常是這兩種原理相結合,電化學煙氣分析儀一般有德國菲索 德國mru德國德圖,國產的有天虹嶗應等,紅外煙氣分析儀廠家一般有德國mru,德國西門子等。以下是這兩種煙氣分析儀的工作原理介紹 電化學氣體感測...

fork原理分析

note4 首先必須有一點要清楚,函式的返回值是儲存在暫存器eax中的。其次,當fork返回時,新程序會返回0是因為在初始化任務結構時,將eax設定為0 在fork中,把子程序加入到可執行的佇列中,由程序排程程式在適當的時機排程執行。也就是從此時開始,當前程序 為兩個併發的程序。無論哪個程序被排程執...

Android root原理分析

綜合多篇文章,記錄備忘 步驟 1 通過漏洞獲得root許可權 2 獲得root許可權後,複製su檔案到,system xbin目錄下 su檔案時特殊定製的 3 安裝superuser.apk到手機 和su協作完成使用者的許可權確認 有的手機在每次重啟是都會檢查su問件,看它是否有變化 檔案本身和許可...