日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux┊详解udev

發布時間:2024/6/30 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux┊详解udev 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

修改你的udev配置

在修改udev配置之前,我們一定要仔細,通常的考慮是:你最好不要修改系統預置的那些規則,特別不要指定影響非常廣泛的配置,比如上面例子中的第一行。不正確的配置可能會導致嚴重的系統問題或者系統根本就無法這個正確的訪問設備。

而我們正確的做法應該是在/etc/udev/rules.d/下創建一個信的規則文件。確定你給出的文件的后綴是rules文件名給出的數字序列應該比 標準配置文件高。比如,你可以創建一個名為99-my-udev.rules的規則文件。在你的規則文件中,你可以指定任何你想修改的配置,比如,假設你 修改修改floppy設備的所在組,還準備創建一個信的符號連接/dev/floppy,那你可以這么寫:

KERNEL==”fd[0-9]*“, GROUP=“users“,?? SYMLINK+=“floppy“

有些發行版本,比如Fedora,采用了外部腳本來修改某些特定設備的屬組,組關系和權限。因此上面的改動可能并不見得生效。如果你遇到了這個問題,你就需要跟蹤和修改這個腳本來達到你的目的?;蛘吣憧梢孕薷腜ROGRAM或RUN鍵的值來做到這點。

某些規則的修改可能需要更深的挖掘。比如,你可能想在一個設備上使用sysfs信息來唯一標識一個設備。這些信息最好通過udevinfo命令來獲取。

$ udevinfo –a –p $(udevinfo –q path????? –n /dev/hda)上面的命令兩次使用udevinfo:一次是返回sysfs設備路徑(他通常和我們看到的Linux設備文件名所在路徑--/dev/hda--不同);第 二次才是查詢這個設備路徑,結果將是非常常的syfs信息匯總。你可以找到最夠的信息來唯一標志你的設備,你可以采用適當的替換udev配置文件中的 SYSFS選項。下面的結果就是上面的命令輸出

?

[root@localhost rules.d]# udevinfo -a -p $(udevinfo -q path??????? -n????? /dev/hda1)
Udevinfo starts with the device specified by the devpath and then walks up the chain of
parent devices. It prints for every device found,all possible attributes in the udev rules
key format. A rule to match, can be composed by the attributes of the device and the
attributes from one single parent device.

looking at device '/block/hda/hda1':?????
KERNEL=="hda1"???? SUBSYSTEM=="block"???? DRIVER==""????????
ATTR{stat}=="??????? 1133???????? 2268??????????? 2??????????? 4"???????? ATTR{size}=="208782"
ATTR{start}=="63"???????? ATTR{dev}=="3:1"??????? looking at parent device '/block/hda':??

KERNELS=="hda"???? SUBSYSTEMS=="block"???? DRIVERS==""????????
ATTRS{stat}=="28905 18814 1234781 302540 34087 133247 849708 981336 0 218340 1283968"
ATTRS{size}=="117210240"???????? ATTRS{removable}=="0"????????
ATTRS{range}=="64"???????? ATTRS{dev}=="3:0"

looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0/0.0':????

KERNELS=="0.0"???? SUBSYSTEMS=="ide"???? DRIVERS=="ide-disk"????????
ATTRS{modalias}=="ide:m-disk"???????? ATTRS{drivename}=="hda"???????
ATTRS{media}=="disk"???????
looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0':????

KERNELS=="ide0"???? SUBSYSTEMS==""???? DRIVERS==""???????
looking at parent device '/devices/pci0000:00/0000:00:1f.1':?????
KERNELS=="0000:00:1f.1"???? SUBSYSTEMS=="pci"???? DRIVERS=="PIIX_IDE"????????
ATTRS{broken_parity_status}=="0"???????? ATTRS{enable}=="1"????????
ATTRS{modalias}=="pci:v00008086d000024CAsv0000144Dsd0000C009bc01sc01i8a"
ATTRS{local_cpus}=="1"???????? ATTRS{irq}=="11"???????? ATTRS{class}=="0x01018a"
ATTRS{subsystem_device}=="0xc009"???????? ATTRS{subsystem_vendor}=="0x144d"
ATTRS{device}=="0x24ca"???????? ATTRS{vendor}=="0x8086"???????
looking at parent device '/devices/pci0000:00':????

KERNELS=="pci0000:00"???? SUBSYSTEMS==""???? DRIVERS==""???
舉一個例子:假設你想修改USB掃描儀的配置。通過一系列的嘗試,你已經為這個掃描儀標識了Linux設備文件(每次打開掃描儀時,名字都會變)。你可以使 用上面的命令替換這個正確的Linux設備文件名,然后定位輸出的采用SYSFS{idVendor}行和SYSFS{idProduct}行。最后你可 以使用這些信息來為這個掃描儀創建新的選項。

SYSFS{idVendor}=="0686",?? SYSFS{idProduct}=="400e",??
SYMLINK+="scanner", MODE="0664",?? group="scanner"上面的例子表示將掃描儀的組設置為scanner,訪問權限設置為0664,同時創建一個/dev/scanner的符號連接。

udev-FAQ

問:udev是什么? 它的目的何在?

答:udev是一種工具,它能夠根據系統中的硬件設備的狀態動態更新設備文件,包括設備文件的創建,刪除等。設備文件通常放在/dev目錄下。使用udev后,在/dev目錄下就只包含系統中真正存在的設備。

問:udev支持什么內核?

答:udev只支持linux-2.6內核,因為udev嚴重依賴于sysfs文件系統提供的信息,而sysfs文件系統只在linux-2.6內核中才有。

問:udev是一個內核程序還是用戶程序?

答:udev是一個用戶程序(user-mode daemon)。

問:udev和devfs有什么差別?

答:udev能夠實現所有devfs實現的功能。但udev運行在用戶模式中,而devfs運行在內核模式中。據稱:devfs具有一些不太容易解決的先天缺陷。

問:udev的配置文件放在哪里?

答:udev是一個用戶模式程序。它的配置文件是/etc/udev/udev.conf。這個文件一般缺省有這樣幾項:

udev_root=”/dev” ; udev產生的設備文件的根目錄是/dev
udev_db=”/dev/.udevdb” ; 通過udev產生的設備文件形成的數據庫
udev_rules=”/etc/udev/rules.d” ;用于指導udev工作的規則所在目錄。
udev_log=”err” ;當出現錯誤時,用syslog記錄錯誤信息。

問:udev的工作過程是怎樣的?

答:由于沒有研究過udev的源程序,不敢貿然就說udev的工作過程。我只是通過一些網上的資料和udev的說明文檔,大致猜測它的工作過程可能是這樣的。

當內核檢測到在系統中出現了新設備后,內核會在sysfs文件系統中為該新設備生成一項新的記錄,一般sysfs文件系統會被mount到/sys目錄中。新記錄是以一個或多個文件或目錄的方式來表示。每個文件都包含有特定的信息。(信息是如何表述的,還要另外研究?)

udev在系統中是以守護進程的方式udevd在運行,它通過某種途徑(到底什么途徑,目前還沒搞懂。)檢測到新設備的出現,通過查找設備對應的sysfs中的記錄得到設備的一些信息。

udev會根據/etc/udev/udev.conf文件中的udev_rules指定的目錄,逐個檢查該目錄下的文件,這個目錄下的文件都是針對某類或某個設備應該施行什么措施的規則文件。udev讀取文件是按照文件名的ASCII字母順序來讀取的,如果udev一旦找到了與新加入的設備匹配的規則,udev就會根據規則定義的措施對新設備進行配置。同時不再讀后續的規則文件。

問:udev的規則文件的語法是怎樣的?

答:udev的規則文件以行為單位,以”#”開頭的行代表注釋行。其余的每一行代表一個規則。每個規則分成一個或多個“匹配”和“賦值”部分?!捌ヅ洹辈糠钟谩捌ヅ洹皩S玫年P鍵字來表示,相應的“賦值”部分用“賦值”專用的關鍵字來表示。“匹配”關鍵字包括:ACTION,KERNEL,BUS,SYSFS等等,“賦值”關鍵字包括:NAME,SYMLINK,OWNER等等。具體詳細的描述可以閱讀udev的man文檔。

下面舉個例子來說明一下,有這樣一條規則:SUBSYSTEM==”net”, ACTION==”add”, SYSFS{address}==”00:0d:87:f6:59:f3″, IMPORT=”/sbin/rename_netiface %k eth0″
這個規則中的“匹配”部分有三項,分別是SUBSYSTEM,ACTION和SYSFS。而”賦值”部分有一項,是IMPORT。這個規則就是說,當系統中出現的新硬件屬于net子系統范疇,系統對該硬件采取的動作是加入這個硬件,且這個硬件在SYSFS文件系統中的“address”信息等于“00:0d…”時,對這個硬件在udev層次施行的動作是調用外部程序/sbin/rename_netiface,傳遞的參數有兩個,一個是“%k”,代表內核對該新設備定義的名稱。另一個是”eth0“。??? 從上面這個例子中可以看出,udev的規則的寫法比較靈活的,尤其在“匹配”部分中,可以通過諸如”*“, ”?“,[a-c],[1-9]等shell通配符來靈活匹配多個匹配項。具體的語法可以參考udev的man文檔。

問:udev怎樣做到不管設備連接的順序而維持一個統一的設備名?

答:實際上,udev是通過對內核產生的設備名增加別名的方式來達到上述目的的。前面說過,udev是用戶模式程序,不會更改內核的行為。因此,內核依然會我行我素地產生設備名如sda,sdb等。但是,udev可以根據設備的其他信息如總線(bus),生產商(vendor)等不同來區分不同的設備,并產生設備文件。udev只要為這個設備文件取一個固定的文件名就可以解決這個問題。在后續對設備的操作中,只要引用新的設備名就可以了。但為了保證最大限度的兼容,一般來說,新設備名總是作為一個對內核自動產生的設備名的符號鏈接(link)來使用的。

例如:內核產生了sda設備名,而根據信息,這個設備對應于是我的內置硬盤,那我就可以制定udev規則,讓udev除了產生/dev/sda設備文件外,另外創建一個符號鏈接叫/dev/internalHD。這樣,我在fstab文件中,就可以用/dev/internalHD來代替原來的/dev/sda了。下次,由于某些原因,這個硬盤在內核中變成了sdb設備名了,那也不用著急,udev還會自動產生/dev/internalHD這個鏈接,并指向正確的/dev/sdb設備。所有其他的文件像fstab等都不用修改。

問:怎樣才能找到這些設備信息,并把他們放到udev的規則文件中來匹配呢?

答:這個問題比較難,網上資料不多,我只找到一篇文章來介紹如何寫udev的規則。他的基本方法是通過udevinfo這個實用程序來找到那些可以作為規則文件里的匹配項的項目。有這樣兩種情況可以使用這個工具:

第一種情況是,當你把設備插入系統后,系統為設備產生了設備名(如/dev/sda)。那樣的
話,你先用udevinfo -q path -n/dev/sda,命令會產生一個該設備名對應的在sysfs下的路徑,如/block/sda。然后,你再用udevinfo -a -p/sys/block/sda,這個命令會顯示一堆信息,信息分成很多塊。這些信息實際來自于操作系統維護的sysfs鏈表,不同的塊對應不同的路徑。你就可以用這些信息來作為udev規則文件中的匹配項。但需要注意的是,同一個規則只能使用同一塊中顯示的信息,不能跨塊書寫規則。

第二種情況是,不知道系統產生的設備名,那就只有到/sys目錄下去逐個目錄查找了,反復用udevinfo -a -p/sys/path…這個命令看信息,如果對應的信息是這個設備的,那就恭喜你。否則就再換個目錄。當然,在這種情況下,成功的可能性比較小。

問: udev和devfs是什么關系
答: udev完全在用戶態(userspace)工作,利用設備加入或移除時內核所發送的hotplug事件(event)來工作。關于設備的詳細信息是由內核輸出(export)到位于/sys的sysfs文件系統的。所有的設備命名策略、權限控制和事件處理都是在用戶態下完成的。與此相反,devfs是作為內核的一部分工作的。

問: 如果udev不能完成所有devfs的工作的話,為什么把devfs標記為OBSOLETE/removed?

答: 引用 Al Viro (Linux VFS 內核維護者):

-devfs所做的工作被確信可以在用戶態來完成。
-devfs被加入內核之時,大家寄望它的質量可以迎頭趕上。
-devfs被發現了一些可修復和無法修復的 bug。
-對于可修復的 bug,幾個月前就已經被修復了,其維護者認為一切良好。
-對于后者,同樣是相當常一段時間以來沒有改觀了。
-devfs的維護者和作者對它感到失望并且已經停止了對代碼的維護工作。

問: 但是當一個并不存在的/dev節點被打開的時候,udev并不能如devfs一樣自動加載驅動程序。
答: 的確如此,但Linux的設計是在設備被發現的時候加載模塊,而不是當它被訪問的時候。

問: 不過等等,我確實希望 udev 可以在不存在的節點被打開的時候自動加載驅動。這是我使用devfs的唯一原因了。給udev 增加這個功能吧。
答: 不,udev 是用來管理/dev 的,不是用來加載內核驅動的。

問: 嗨,求你們了。這不難做到的。
答: 這么個功能對于一個配置正確的計算機是多余的。系統中所有的設備都應該產生hotplug 事件、加載恰當的驅動,而 udev 將會注意到這點并且為它創建對應的設備節點。如果你不想讓所有的設備驅動停留在內存之中,應該使用其它東西來管理你的模塊(如腳本, modules.conf, 等等) 這不是udev 的工作。

問: 但是我真的喜歡那個功能,還是加上吧
答: devfs用的方法導致了大量無用的modprobe嘗試,以此程序探測設備是否存在。每個試探性探測都新建一個運行 modprobe 的進程,而幾乎所有這些都是無用的。

問: 我喜歡devfs的設備文件命名方式,udev 可以這樣命名么?
答: 可以,udev 可以使用 /dev 的命名策略來創建節點。通過一個配置文件,可以把內核缺省的名字映射到 devfs 的名字??梢钥纯磚dev 中帶的 udev.rules.devfs 文件。注意: devfs 的命名方式是不被建議并且不被官方支持的,因為它所用的簡單枚舉設備的方式在設備可能被隨時加入或刪除的情況下確實是一個比較笨的方法。這些編號代給你的將只有麻煩,而并不能用來確定設備??纯茨莻€永久性磁盤 (persistentdisk) 的規則就知道如何在用戶態下正確的做這件事,而不是傻傻地列出設備。

問: udev 可以為哪些設備創建節點?
答: 所有在 sysfs 中顯示的設備都可以由 udev 來創建節點。如果內核中增加了其它設備的支持,udev 也就自動地可以為它們工作了。現在所有的塊設備都在被支持之列,大部分的主字符設備也是被支持的。內核開發者們正致力于讓所有的字符設備都被支持??梢缘絣inux-kernel郵件列表上尋找補丁或是查看補丁的狀態。

問: udev 是否會去掉匿名設備數量的限制?
答: udev 完全工作于用戶態。如果內核支持了更多的匿名設備,udev就會支持。

問: udev 是否會支持符號鏈接?
答: udev 現在就支持符號鏈接,每個設備節點擁有多個符號鏈接也是被支持的。

問: udev如何處理/dev文件系統?
答: 建議使用一個每次啟動系統的時候重新創建的 tmpfs 作為 /dev 的文件系統。不過實際上udev并不關心那種文件系統在被使用。

問: 在 init 運行之前,udev 如何處理設備?
答: udev 可以被放入 initramfs 之中,并在每個設備被發現的時候運行。也可以讓udev 工作在一個真的根分區被加載之后根據 /sys 的內容創建的初始/dev目錄之中。

問: 我是否可以利用 udev 在一個 USB 設備被加載的時候自動加載上這個設備?
答: 技術上講是可以的,但是 udev 不是用于這個工作的。所有的主流發布版 (distro)都包含了 HAL (http://freedesktop.org/wiki/Software_2fhal) 用于這個工作,它也是專門用于監視設備變更的,并且集成進入了桌面軟件。

換個角度說,這可以簡單的通過 fstab 來實現:/dev/disk/by-label/PENDRIVE /media/PENDRIVE vfat user,noauto 0 0
這樣,用戶可以用如下命令來訪問設備:
$mount /media/PENDRIVE
同樣不需要管理員權限,但卻擁有了設備的全部訪問權限。使用永久性磁盤鏈接(label, uuid) 將可以指定同一設備,無論其實際上的內核名字是什么。

問: 有什么我需要注意的安全問題么?
答: 當使用動態設備編號的時候,一個給定的主/從設備號可能在不同時間對應不同的設備,如果一個用戶擁有對這個節點的訪問權限,并且可以創建一個到這個節點的硬鏈接,他就可以如此得到一個這個設備節點的拷貝。當設備被移除之后,udev 刪除了設備節點,但硬鏈接依然存在。如果這個設備節點之后被重新使用不同的訪問權限被創建的時候,其硬鏈接仍然可以使用先前的訪問權限來訪問。(同樣的問題也存在在使用 PAM 改變訪問權限的 login 上。)

簡單的解決方案就是通過把 /dev 放在 tmpfs 這樣的單獨的文件系統之上來防止建立硬鏈接。

轉載于:https://www.cnblogs.com/lvdongjie/p/7053716.html

總結

以上是生活随笔為你收集整理的Linux┊详解udev的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性史性农村dvd毛片 日韩精品在线视频观看 | 日本黄色不卡视频 | 亚洲四虎影院 | a视频免费在线观看 | 用力抵着尿进去了h | av高清一区 | 一区视频免费观看 | 色哟哟网站在线观看 | 黄色的网站免费观看 | 久久久久久网站 | 欧美极品喷水 | 香蕉伊思人视频 | 天天插夜夜 | 中文一区在线 | 天堂在线中文字幕 | 国产日韩视频 | 精品人妻一区二区三区视频 | 亚洲精品在线免费看 | 婷婷久久一区 | 亚洲成年人网站在线观看 | 夜夜嗨av一区二区三区网页 | 欧美激情国产精品 | 深夜精品福利 | 被黑人猛躁10次高潮视频 | 黑料视频在线观看 | 性久久久 | 亚洲天堂网视频 | 蜜臀久久99精品久久久无需会员 | 黄色高清在线观看 | 一级a性色生活片久久无 | 亚洲黄色在线免费观看 | 精品无码国产一区二区三区av | va视频在线 | 欧美xxxx中国 | 欧美日韩在线a | 自偷自拍亚洲 | 欧美怡红院视频一区二区三区 | 国产一级久久久 | 欧美黑人性受xxxx精品 | 亚洲一区二区动漫 | 超碰综合在线 | 男女日批视频 | 天天色天天操天天射 | 一级黄色a | 国产精品免费一区二区三区在线观看 | 精品中文字幕视频 | 全部免费毛片在线播放 | 91看黄| 亚洲乱码国产乱码精品精剪 | av观看免费| 99久久国产宗和精品1上映 | 激情av在线播放 | 北条麻妃一区二区三区免费 | 国产特黄 | 亚洲码中文 | 亚洲一区二区三区人妻 | 日韩不卡av在线 | 中文字幕在线第一页 | 日韩电影在线观看一区 | 三级免费观看 | 与亲女洗澡时伦了毛片 | 黑人玩弄人妻一区二区三区影院 | 日韩中文字幕视频在线 | 亚洲天堂中文字幕 | 欧美精品一区二区三区在线播放 | 日本天堂网在线 | 亚洲成人第一网站 | 少妇精品在线 | 国产精品免费看久久久无码 | 亚洲黄色自拍 | 午夜狠狠干 | 中文字幕一区二区三区在线视频 | 老熟妻内射精品一区 | 手机福利在线 | 国产精品自拍区 | 超碰2019| 一区二区三区视频免费视 | 超碰2025 | 一区二区三区精品在线 | 可以免费看黄的网站 | 波多野结衣电车 | 欧美成人一区二区视频 | 公交上高潮的丁芷晴 | 少妇一级淫片 | 免费观看一级黄色片 | 黄色一级大片免费版 | 久久久精品日韩 | 日本黄色网页 | 黄色av免费观看 | 日韩欧美中文 | 九九视频在线观看 | 日韩综合在线观看 | 日本精品一区二区三区四区的功能 | 欧美日韩久久久久久 | 国产99热 | 精品一区二区三区四 | 亚洲妇女av| 污视频在线观看免费 | 国产夫妻在线观看 |