Linux 下監控USB裝置拔插事件

2021-10-07 00:23:03 字數 1409 閱讀 5037

使用udev的規則來實現

自2.6 核心開始,就可以使用udev 協助管理系統中各裝置名稱。例如,磁碟裝置排序、網絡卡裝置排序等。udev能動態地在/dev目錄裡產生自定義的、標識性強的裝置檔案或裝置鏈結。udev依賴核心中的sysfs的支援。 自2.6 核心開始,引入了sysfs 檔案系統。sysfs把連線在系統上的裝置和匯流排組織成乙個分級的檔案,並提供給使用者空間訪問使用。udev 執行在使用者模式,而非核心中。udev的初始化指令碼在系統啟動時建立裝置節點,並且當插入新裝置——加入驅動模組——在sysfs上註冊新的資料後,udev會創新新的裝置節點。

udev 是乙個工作在使用者空間的工具,它能根據系統中硬體裝置的狀態動態的更新裝置檔案,包括裝置檔案的建立,刪除,許可權等。這些檔案通常都定義在/dev

目錄下,但也可以在配置檔案中指定。udev 必須核心中的sysfs和tmpfs支援,sysfs 為udev 提供裝置入口和uevent 通道,tmpfs

為udev 裝置檔案提供存放空間。

注意,udev 是通過對核心產生的裝置檔案修改,或增加別名的方式來達到自定義裝置檔案的目的。但是,udev

是使用者模式程式,其不會更改核心行為。也就是說,核心仍然會建立sda,sdb等裝置檔案,而udev可根據裝置的唯一資訊來區分不同的裝置,並產生新的裝置檔案(或鏈結)。而在使用者的應用中,只要使用新產生的裝置檔案即可。

udev 的工作流程圖:

相關例項如下:

在/etc/udev/rules.d資料夾下建立相關規則檔案,內容如下:

當插入裝置(action==「add」)在kernel中裝置名為sdb4(kernel==「sdc1」),且為塊裝置(subsystem==「block」),滿足以上三個條件時,對裝置檔案命名為myusb(name=「myusb」),並建立軟鏈結myusb_link(symlink+=「myusb_link」),同時執行/home/usbadd.sh指令碼(run+="/home/usbadd.sh")。

其中sdc1就是通過fdisk

-l檢視得到的,軟鏈結會在/dev下建立,名字可以自定義(以後無論插入任何u盤都可以以同一名字來訪問),usbadd.sh指令碼中可以編寫你想實現的任何內容,我的內容是將u盤掛載到/mnt/usb目錄下:

當裝置拔出時,執行/home/usbremove.sh指令碼解除安裝u盤:

USB熱拔插事件

usb universal serial bus 通用序列匯流排 的縮寫,是乙個 外部匯流排 標準,用於規範主機與 外圍裝置 的連線以及通訊,目前使用較多的版本有 usb1.1 usb2.0 usb3.0 等。usb 介面常用在諸如 usb序列裝置驅動 3g 4g 上網絡卡 藍芽裝置 串列埠裝置 u...

Wince 檢測 SD卡 USB 拔插

在wince系統中,如何檢測usb sd卡的拔插呢?可能有的會寫乙個執行緒專門去偵察usb sd 的拔插情況,我覺得這樣又費資源又費時間,很不划算,有沒有更好的辦法呢?當然有,今天我就介紹一種新的方法 wm devicechange,如下 cpp view plain copy lresult c ...

C 監控USB裝置

程式稍微修改便能用作一般性的處理,目前實現的功能類似於監控windows usb裝置的插拔操作。可以直接注釋掉cstring的使用後使用 cl ehsc w4 zi 編譯,或貼上到任意的vs中做編譯。include include include include include include cs...