2015-10-29 51 views
0
  1. 我正在爲Linux的用戶空間編寫一個C程序。當我插入我的SBC的USB端口時,我想要檢測pendrive。我正在運行Lubuntu。所以它沒有udev庫。當我嘗試在SBC上安裝udev時,它要求提供依賴關係,版本兼容性問題即將到來。有沒有其他方法可以檢測用戶空間中的Pendrive插入。
  2. 當我將一個設備ex:/ dev/sdc1(pendrive)掛載到一個特定的文件夾ex:/ mnt/vj時,它正在正確安裝。如果我在未卸下pendrive的情況下卸下它,則在下次掛入pendrive時將其檢測爲/ dev/sdd1。在這種情況下如何解決pendrive的邏輯名稱。我希望它始終是/ dev/sdc1。可能嗎?

感謝預期。Linux上的USB插件檢測用戶空間

+0

的使用信息,請分享你做了些什麼! –

+0

截至目前,我寫了一些不值得填寫的膠合邏輯。我只是使用system()系統調用定期監視/ sys/block文件夾。每當文件夾發生更改時,我都會將檢測到的設備安裝到指定位置。 – user5501409

回答

1
  1. 你可以實現你自己的事件監聽守護進程而不是udev。你需要創建一個類型爲NETLINK_KOBJECT_UEVENT的netlink套接字。通過解析事件,您將能夠檢測到驅動器的插入。

  2. 無法確保名稱始終相同,但您可能可以在檢測到事件後創建符號鏈接到適當的塊設備。

+0

謝謝..我可以使用Netlink襪子檢測USB插頭。如何知道它是否插入了pendrive或USB鍵盤或鼠標?以及如何獲得驅動器的邏輯名稱(即/ dev/sdX)? – user5501409

+0

事件的一部分,你會得到主要和次要的數字。主要應該是8.每個磁盤可以有多達15個分區加上整個磁盤,這使得16個。所以sda和sda [1-15]是從0到15的小數,sdb有16到31,... –

0

檢查鏈路ubuntu 12.04 libudev-dev won't install because of dependencies如果涉及到它應該主要解決您的udev安裝/依賴性問題。

udev是檢測硬件插件和獲取設備信息的最簡單方法之一。 Checkout libudev是udev的一部分(Linux內核的設備管理器)。除了在將硬件設備添加到系統中或從中刪除硬件設備的同時管理/ dev目錄中的設備節點之外,udev還處理在各種操作(例如添加/刪除)期間引發的所有相關用戶空間事件。

libudev允許訪問設備信息並且還提供了監控接口像連接到設備事件源udev_monitor。 udev_monitor_get_fd提供文件描述符,可用於選擇系統調用進行監視。

檢查這個環節有相關libudev http://www.signal11.us/oss/udev/