国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

udev

發(fā)布時(shí)間:2009-12-14 16:16    發(fā)布者:linux_Ultra
關(guān)鍵詞: udev
如果你使用Linux比較長(zhǎng)時(shí)間了,那你就知道,在對(duì)待設(shè)備文件這塊,Linux改變了幾次策略。在Linux早期,設(shè)備文件僅僅是是一些帶有適當(dāng)?shù)膶傩约钠胀ㄎ募,它由mknod命令創(chuàng)建,文件存放在/dev目錄下。后來,采用了devfs,一個(gè)基于內(nèi)核的動(dòng)態(tài)設(shè)備文件系統(tǒng),他首次出現(xiàn)在2.3.46內(nèi)核中。Mandrake,Gentoo等Linux分發(fā)版本采用了這種方式。devfs創(chuàng)建的設(shè)備文件是動(dòng)態(tài)的。但是devfs有一些嚴(yán)重的限制,從2.6.13版本后移走了。目前取代他的便是文本要提到的udev--一個(gè)用戶空間程序。


*/dev目錄下文件太多。一個(gè)系統(tǒng)采用靜態(tài)設(shè)備文件關(guān)聯(lián)的方式,那么這個(gè)目錄下的文件必然是足夠多。而同時(shí)你又不知道在你的系統(tǒng)上到底有那些設(shè)備文件是激活的。

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

*內(nèi)核內(nèi)存使用,devfs特有的另外一個(gè)問題是,作為內(nèi)核驅(qū)動(dòng)模塊,devfs需要消耗大量的內(nèi)存,特別當(dāng)系統(tǒng)上有大量的設(shè)備時(shí)(比如上面我們提到的系統(tǒng)一個(gè)上有好幾千磁盤時(shí))

udev的目標(biāo)是想解決上面提到的這些問題,他通采用用戶空間(user-space)工具來管理/dev/目錄樹,他和文件系統(tǒng)分開。知道如何改變?nèi)笔∨渲媚茏屇阒笕绾味ㄖ谱约旱南到y(tǒng),比如創(chuàng)建設(shè)備字符連接,改變?cè)O(shè)備文件屬組,權(quán)限等。

udev配置文件

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

udev_root=”/dev/”

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

上面的第二行非常重要,因?yàn)樗硎緐dev規(guī)則存儲(chǔ)的目錄,這個(gè)目錄存儲(chǔ)的是以.rules結(jié)束的文件。每一個(gè)文件處理一系列規(guī)則來幫助udev分配名字給設(shè)備文件以保證能被內(nèi)核識(shí)別。
你的/etc/udev/rules.d下面可能有好幾個(gè)udev規(guī)則文件,這些文件一部分是udev包安裝的,另外一部分則是可能是別的硬件或者軟件包生成的。比如在Fedora Core5系統(tǒng)上,sane-backends包就會(huì)安裝60-libsane.rules文件,另外initscripts包會(huì)安裝60-net.rules文件。這些規(guī)則文件的文件名通常是兩個(gè)數(shù)字開頭,它表示系統(tǒng)應(yīng)用該規(guī)則的順序。

規(guī)則文件里的規(guī)則有一系列的鍵/值對(duì)組成,鍵/值對(duì)之間用逗號(hào)(,)分割。每一個(gè)鍵或者是用戶匹配鍵,或者是一個(gè)賦值鍵。匹配鍵確定規(guī)則是否被應(yīng)用,而賦值鍵表示分配某值給該鍵。這些值將影響udev創(chuàng)建的設(shè)備文件。賦值鍵可以處理一個(gè)多值列表。匹配鍵和賦值鍵操作符解釋見下表:


                       udev 鍵/值對(duì)操作符
操作符     匹配或賦值t                         解釋
----------------------------------------
  ==            匹配              相等比較
  !=            匹配             不等比較
  =            賦值              分配一個(gè)特定的值給該鍵,他可以覆蓋之前的賦值。
  +=      賦值              追加特定的值給已經(jīng)存在的鍵
  :=            賦值                  分配一個(gè)特定的值給該鍵,后面的規(guī)則不可能覆蓋它。

這有點(diǎn)類似我們常見的編程語(yǔ)言,比如C語(yǔ)言。只是這里的鍵一次可以處理多個(gè)值。有一些鍵在udev規(guī)則文件里經(jīng)常出現(xiàn),這些鍵的值可以使用通配符(*,?,甚至范圍,比如[0-9]),這些常用鍵列舉如下:


常用udev鍵
鍵        含義
ACTION         一個(gè)時(shí)間活動(dòng)的名字,比如add,當(dāng)設(shè)備增加的時(shí)候
KERNEL         在內(nèi)核里看到的設(shè)備名字,比如sd*表示任意SCSI磁盤設(shè)備
DEVPATH       內(nèi)核設(shè)備錄進(jìn),比如/devices/*
SUBSYSTEM       子系統(tǒng)名字,比如sound,net
BUS         總線的名字,比如IDE,USB
DRIVER         設(shè)備驅(qū)動(dòng)的名字,比如ide-cdrom
ID           獨(dú)立于內(nèi)核名字的設(shè)備名字
SYSFS{ value}       sysfs屬性值,他可以表示任意
ENV{ key}       環(huán)境變量,可以表示任意
PROGRAM       可執(zhí)行的外部程序,如果程序返回0值,該鍵則認(rèn)為為真(true)
RESULT         上一個(gè)PROGRAM調(diào)用返回的標(biāo)準(zhǔn)輸出。
NAME         根據(jù)這個(gè)規(guī)則創(chuàng)建的設(shè)備文件的文件名。注意:僅僅第一行的NAME描述是有效的,后面的均忽略。
                                  如果你想使用使用兩個(gè)以上的名字來訪問一個(gè)設(shè)備的話,可以考慮SYMLINK鍵。
SYMLINK       根據(jù)規(guī)則創(chuàng)建的字符連接名
OWNER         設(shè)備文件的屬組
GROUP         設(shè)備文件所在的組。
MODE         設(shè)備文件的權(quán)限,采用8進(jìn)制
RUN         為設(shè)備而執(zhí)行的程序列表
LABEL         在配置文件里為內(nèi)部控制而采用的名字標(biāo)簽(下下面的GOTO服務(wù))
GOTO         跳到匹配的規(guī)則(通過LABEL來標(biāo)識(shí)),有點(diǎn)類似程序語(yǔ)言中的GOTO
IMPORT{ type}     導(dǎo)入一個(gè)文件或者一個(gè)程序執(zhí)行后而生成的規(guī)則集到當(dāng)前文件
WAIT_FOR_SYSFS   等待一個(gè)特定的設(shè)備文件的創(chuàng)建。主要是用作時(shí)序和依賴問題。
PTIONS         特定的選項(xiàng): last_rule 對(duì)這類設(shè)備終端規(guī)則執(zhí)行; ignore_device 忽略當(dāng)前規(guī)則; ignore_remove 忽略接下來的并移走請(qǐng)求。
           all_partitions 為所有的磁盤分區(qū)創(chuàng)建設(shè)備文件。

我們給出一個(gè)列子來解釋如何使用這些鍵。下面的例子來自Fedora Core 5系統(tǒng)的標(biāo)準(zhǔn)配置文件。

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個(gè)規(guī)則,每一個(gè)都是KERNEL或者ACTION鍵開頭:

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

*第三行開始的KERNEL==”scd[0-9]*”,表示 SCSI CD-ROM 驅(qū)動(dòng). 它創(chuàng)建一對(duì)設(shè)備符號(hào)連接:cdrom和cdrom-%k。

*第四行,開始的 KERNEL==”hd[a-z]“, 表示ATA CDROM驅(qū)動(dòng)器。這個(gè)規(guī)則創(chuàng)建和上面的規(guī)則相同的符號(hào)連接。ATA CDROM驅(qū)動(dòng)器需要sysfs值以來區(qū)別別的ATA設(shè)備,因?yàn)镾CSI CDROM可以被內(nèi)核唯一識(shí)別。.

*第五行以 ACTION==”add”開始,它告訴udev增加 /sbin/modprobe sg 到命令列表,當(dāng)任意SCSI設(shè)備增加到系統(tǒng)后,這些命令將執(zhí)行。其效果就是計(jì)算機(jī)應(yīng)該會(huì)增加sg內(nèi)核模塊來偵測(cè)新的SCSI設(shè)備。

當(dāng)然,上面僅僅是一小部分例子,如果你的系統(tǒng)采用了udev方式,那你應(yīng)該可以看到更多的規(guī)則。如果你想修改設(shè)備的權(quán)限或者創(chuàng)建信的符號(hào)連接,那么你需要熟讀這些規(guī)則,特別是要仔細(xì)注意你修改的那些與之相關(guān)的設(shè)備。

修改你的udev配置

在修改udev配置之前,我們一定要仔細(xì),通常的考慮是:你最好不要修改系統(tǒng)預(yù)置的那些規(guī)則,特別不要指定影響非常廣泛的配置,比如上面例子中的第一行。不正確的配置可能會(huì)導(dǎo)致嚴(yán)重的系統(tǒng)問題或者系統(tǒng)根本就無法這個(gè)正確的訪問設(shè)備。

而我們正確的做法應(yīng)該是在/etc/udev/rules.d/下創(chuàng)建一個(gè)信的規(guī)則文件。確定你給出的文件的后綴是rules文件名給出的數(shù)字序列應(yīng)該比標(biāo)準(zhǔn)配置文件高。比如,你可以創(chuàng)建一個(gè)名為99-my-udev.rules的規(guī)則文件。在你的規(guī)則文件中,你可以指定任何你想修改的配置,比如,假設(shè)你修改修改floppy設(shè)備的所在組,還準(zhǔn)備創(chuàng)建一個(gè)信的符號(hào)連接/dev/floppy,那你可以這么寫:
KERNEL==”fd[0-9]*”, GROUP=”users”, SYMLINK+=”floppy”

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

某些規(guī)則的修改可能需要更深的挖掘。比如,你可能想在一個(gè)設(shè)備上使用sysfs信息來唯一標(biāo)識(shí)一個(gè)設(shè)備。這些信息最好通過udevinfo命令來獲取。
$ udevinfo –a –p $(udevinfo –q path –n /dev/hda)
上面的命令兩次使用udevinfo:一次是返回sysfs設(shè)備路徑(他通常和我們看到的Linux設(shè)備文件名所在路徑--/dev/hda--不同);第二次才是查詢這個(gè)設(shè)備路徑,結(jié)果將是非常常的syfs信息匯總。你可以找到最夠的信息來唯一標(biāo)志你的設(shè)備,你可以采用適當(dāng)?shù)奶鎿Qudev配置文件中的SYSFS選項(xiàng)。下面的結(jié)果就是上面的命令輸出

[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}==”0×01018a”
ATTRS{subsystem_device}==”0xc009″
ATTRS{subsystem_vendor}==”0×144d”
ATTRS{device}==”0×24ca”
ATTRS{vendor}==”0×8086″

looking at parent device '/devices/pci0000:00':
KERNELS==”pci0000:00″
SUBSYSTEMS==”"
DRIVERS==”"


舉一個(gè)例子:假設(shè)你想修改USB掃描儀的配置。通過一系列的嘗試,你已經(jīng)為這個(gè)掃描儀標(biāo)識(shí)了Linux設(shè)備文件(每次打開掃描儀時(shí),名字都會(huì)變)。你可以使用上面的命令替換這個(gè)正確的Linux設(shè)備文件名,然后定位輸出的采用SYSFS{idVendor}行和SYSFS{idProduct}行。最后你可以使用這些信息來為這個(gè)掃描儀創(chuàng)建新的選項(xiàng)。


SYSFS{idVendor}==”0686″, \

SYSFS{idProduct}==”400e”, \
SYMLINK+=”scanner”, MODE=”0664″, \
group=”scanner”

上面的例子表示將掃描儀的組設(shè)置為scanner,訪問權(quán)限設(shè)置為0664,同時(shí)創(chuàng)建一個(gè)/dev/scanner的符號(hào)連接。
本文地址:http://m.qingdxww.cn/thread-6523-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
geyingzhen 發(fā)表于 2009-12-15 15:20:46
頂!
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线观看免费精品国自产 | 在线观看精品视频一区二区三区 | 国产日韩中文字幕 | 欧美成人免费香蕉 | 久久亚洲国产午夜精品理论片 | 日本不卡在线播放 | 欧美日韩三级在线 | 奶茶视频有容乃大 | 国产在线日本 | 丁香色婷婷国产精品视频 | 日本精品一区二区三区在线 | 国产一级做a爰大片免费久久 | 欧美日韩视频一区二区在线观看 | 青娱乐自拍视频 | 亚洲一级毛片在线播放 | 香蕉视频国产精品人 | www操操操| 亚洲 日本 欧美 中文幕 | 久久香蕉国产精品一区二区三 | 亚州毛色毛片免费观看 | 精品国产香蕉 | 五月天综合网站 | 偷偷碰偷偷鲁免费视频 | 久久国产精品超级碰碰热 | 自拍偷拍欧美图片 | 国产成人午夜精品5599 | 国产高清自拍 | 久草com| 成人性生免费视频 | 黑人一区二区三区中文字幕 | 国产麻豆果冻传媒 | 国内永久第一免费福利视频 | 男人香蕉好大好爽视频 | 日韩视频免费在线 | 天天爽夜夜春 | 七月婷婷精品视频在线观看 | 日本在线天堂 | 青草青青产国视频在线 | 亚洲成人毛片 | 日日摸人人看97人人澡 | 色九九亚洲偷偷动态图 |