摘要:比如盤插入,電腦是如何即時(shí)的做出響應(yīng)耳機(jī)插入又是如何做到自動(dòng)關(guān)閉外部音量這些都跟有關(guān)。雖然很強(qiáng)大,功能很多,本來就針對硬盤設(shè)備的插拔做一些經(jīng)驗(yàn)的分享。
Udev 是什么在我入門udev的時(shí)候,看著各種各樣的資料覺得這個(gè)東西很高深的時(shí)候,突然瞄到一篇文章里面說道: 要樹立一個(gè)信念:udev很簡單,當(dāng)時(shí)不以為然,現(xiàn)在能夠理解,其實(shí)稍作研究就能理解了,看起來很高端很遙遠(yuǎn)的Title,比如Linux Kernel,比如軟硬件交互,比如熱插拔等等,其實(shí)掌握幾個(gè)rules,然后再動(dòng)手實(shí)踐實(shí)踐,對比著講解,就能知道七七八八了,想要再深入,就多看看文檔實(shí)現(xiàn)和內(nèi)核源碼,其實(shí)很多東西都是這樣,了解了就很簡單,沒事了解一點(diǎn)就比別人多知道一些,共勉
udev是linux kernel的設(shè)備管理器,處理硬件的添加和刪除,但它的功能遠(yuǎn)遠(yuǎn)不僅于此。比如U盤插入,電腦是如何即時(shí)的做出響應(yīng)?耳機(jī)插入又是如何做到自動(dòng)關(guān)閉外部音量?這些都跟udev有關(guān)。雖然udev很強(qiáng)大,功能很多,本來就針對SCSI硬盤設(shè)備的插拔做一些經(jīng)驗(yàn)的分享。至于為什么我會(huì)研究到這個(gè)東西,是因?yàn)樽罱谧?b>ceph相關(guān)的項(xiàng)目,需要實(shí)現(xiàn)一個(gè)類似熱插拔的feature,懂的人應(yīng)該很清楚,就是拔插硬盤后,osd自動(dòng)恢復(fù),主要應(yīng)用于硬盤壽命即將到期,替換新盤的場景,不明白的同學(xué)也不要緊,因?yàn)楸疚闹饕懻摰氖?b>udev
Udev Rulesudev管理各種各樣的設(shè)備,比如USB,DISK,CD等等,為了區(qū)別設(shè)備類型,精確匹配,udev制定了一套特色的rules,為什么說特色呢?因?yàn)槲矣X得它用最簡潔的語法滿足了方方面面的需求
這里推薦一些有用的link:
UDEV Primer udev入門必讀,可以快速將udev了解一番
Writing udev rules 經(jīng)典文章,看完這個(gè)基本就能掌握udev rules
Writing udev rules 修訂版 國內(nèi)論壇對格式樣式做了一些修改,有潔癖的可以看看
Writing udev rules 譯 翻譯版本,英文不好的可以中英文對比著看
udev 中文手冊 這位金步國先生為開源事業(yè)做出了杰出的貢獻(xiàn),早前就看過他翻譯的Apache的手冊
Writing udev rules and kernel examples 看夠了上面各種規(guī)則,來看看具體的例子吧
Udev 詳解 文章如名,真的很詳細(xì)
Udev 使用方法 一些特殊的技巧
大家看完上面的文章應(yīng)該知道rules文件的位置和規(guī)則,下面我貼一些我實(shí)踐中的代碼和例子
這是兩條分別針對SCSI硬盤設(shè)備的添加和刪除的rules,設(shè)備事件分別會(huì)觸發(fā)相應(yīng)的腳本:
KERNEL=="sd[a-z]", ACTION=="add", SUBSYSTEM=="block", RUN+="/usr/bin/python /root/test.py %k add" KERNEL=="sd[a-z]", ACTION=="remove", SUBSYSTEM=="block", RUN+="/usr/bin/python /root/test.py %k remove"
注意:
執(zhí)行外部命令必須加上環(huán)境變量路徑, 上面的這個(gè)也可以不加/usr/bin/python,但是必須在py腳本頭部加上shebang:#! /usr/bin/python
RUN可以運(yùn)行程序外的程序,而PROGRAM不是做這個(gè)事情的,而是為了生成之后需要的變量
相關(guān) Linkhashtag and shebang
shebang
Udevadmudevadm是一個(gè)udev的管理工具,可以用來獲取設(shè)備信息(info),監(jiān)視和控制udev運(yùn)行時(shí)的行為(control),請求內(nèi)核事件(trigger),管理事件隊(duì)列(settle),以及提供簡單的調(diào)試機(jī)制(test)。很實(shí)用,很好用!!!
推薦 Linkudevadm 中文手冊 很全,很基礎(chǔ) ~~
udevadm command examples 很多udevadm的命令可以借鑒,說不定以后可以用到呢?
介紹幾個(gè)我具體使用過的例子:
udevadm info可以從udev數(shù)據(jù)庫中提取設(shè)備信息,此外,還可以從sysfs中提取設(shè)備的屬性, 以幫助創(chuàng)建與此設(shè)備匹配的udev規(guī)則
獲取/dev/sdb的path信息
udevadm info -q path -n /dev/sdbudevadm test
模擬向udev發(fā)送設(shè)備信息,并不會(huì)真的觸發(fā),而是將觸發(fā)后的過程信息打印出來,對調(diào)試很有幫助, 我用這個(gè)查看腳本是否會(huì)被執(zhí)行
udevadm test --action="add" `udevadm info -q path -n /dev/sdb`
注意: test不會(huì)真正觸發(fā)事件,而trigger可以
udevadm trigger可以真正觸發(fā)udev事件,但是不會(huì)真正改變硬件,只是觸發(fā)kernel和udev的事件,會(huì)觸發(fā)udev rules,我用這個(gè)觸發(fā)事件,校驗(yàn)rules匹配
udevadm trigger -v --action=add --sysname-match=sda
注意:
不加sysname-match那么會(huì)觸發(fā)所有設(shè)備,如果是action=remove,那么則會(huì)移除很多設(shè)備,甚至導(dǎo)致sshd服務(wù)停掉
后面是sda而不是/dev/sda因?yàn)樗歉鶕?jù)pci路徑來定位name的,比如sda的路徑是:
/sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sdaudevadm control
重載udev rules,對之后觸發(fā)的新設(shè)備有效,對之前已經(jīng)觸發(fā)的無效
udevadm control --relaod-rules
更改udev日志等級為info,udev默認(rèn)等級為err,可以在/etc/udev/udev.conf中查看,日志具體信息可以在syslog中查看
udevadm control --log-priority=infoMore about udev
udev還有很多有意思的地方,如果想要更加深入的學(xué)習(xí),那么除了熟練地掌握rules等技巧,還要對其實(shí)現(xiàn)原理有了解,這就得多看文檔,多看源碼了,建議大家有條件的情況下多看源碼,多看原始的東西,因?yàn)榻?jīng)過別人的總結(jié)就可能會(huì)變味,相互對比,不要一味依賴別人總結(jié)的產(chǎn)物
Linux 自動(dòng)掛載usb設(shè)備 小例子 如何在usb設(shè)備插入后自動(dòng)掛載?
udev使用筆記 這篇文章里面那張圖片不錯(cuò)
寫個(gè)程序檢測我們的設(shè)備插拔 模仿內(nèi)核源碼簡單地實(shí)現(xiàn)一個(gè)設(shè)備插拔的檢測
linux下熱插拔事件的產(chǎn)生是怎樣通知到用戶空間 事件傳遞過程,udev源碼解析
熱插拔的工作原理 hotplug機(jī)制和udev udev原理講解
Uevent 上報(bào)event事件給上層的詳細(xì)講解 uevent源碼講解
linux內(nèi)核空間和用戶空間的是怎樣區(qū)別的,如何交互,如何從用戶空間進(jìn)入內(nèi)核空間 內(nèi)核空間和用戶空間的一些剖析
Netlink實(shí)現(xiàn)熱拔插監(jiān)控 消息傳輸用的是什么?Netlink是如何做到的
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/40806.html
摘要:我們就繼續(xù)以此為基礎(chǔ),用保姆級的粒度一步一步操作,來討論一下字符設(shè)備驅(qū)動(dòng)程序的編寫方法。如何使用新的函數(shù)來編寫字符設(shè)備驅(qū)動(dòng)程序,下一篇文章再詳細(xì)討論。 作 者:道哥,10+年嵌入式開發(fā)老兵,專注于:C/C++、嵌入式、Linux。 關(guān)注下方公眾號,回復(fù)【書籍】,獲取 Linux、嵌入式領(lǐng)域經(jīng)典書籍;回復(fù)【PDF】,獲取所有原創(chuàng)文章( PDF 格式)。 目錄 ...
閱讀 1405·2021-11-25 09:43
閱讀 2260·2021-09-27 13:36
閱讀 1114·2021-09-04 16:40
閱讀 1957·2019-08-30 11:12
閱讀 3308·2019-08-29 14:14
閱讀 565·2019-08-28 17:56
閱讀 1320·2019-08-26 13:50
閱讀 1246·2019-08-26 13:29