Linux 下監控USB設備拔插事件

原文鏈接:添加鏈接描述

使用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盤:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章