2012-08-05 26 views
0

我正在創建一個程序來列出Linux中的所有USB設備(在我的情況下是Ubuntu)。 我一直在關注本教程http://www.signal11.us/oss/udev/並將子系統從「hidraw」更改爲「usb」。libudev返回重複的USB設備

它列出的設備很好,但它包含重複。

我可以明顯地刪除與我的代碼重複,但我想知道如果你知道如何設置設備枚舉的方式,不會返回重複。

如果你想看看我的代碼(沒有太大變化),它在https://github.com/DiogoNeves/LinuxUsbTest

謝謝!

回答

1

對於我的系統,我看到我的USB攝像頭重複,但這是正確的行爲,因爲它佔用了udev中的多個插槽。當我做udevadm info --attribute-walk --name=video0時,我看到一個USB端點條目和一個USB設備條目。如果一個設備有很多端點,那麼無疑會在udev中列出多次。要刪除「重複項」,您可以過濾僅存在於父USB設備而不是端點的其他屬性。

如果您正在掃描USB設備,使用libusb-1.0可能更有意義,因爲它具有USB設備的「更好」視圖。

+0

謝謝,看着常見的屬性,並會後來看看libusb :) – DiogoNeves 2012-08-05 12:11:13

+0

我發現我在尋找一個共同的屬性,如果我搜索屬性'''maxchild = 0''',它幾乎使感覺在我的腦海中,但我不喜歡巧合編程......你知道它的實際意義嗎?謝謝 – DiogoNeves 2012-08-05 12:26:57

+1

'maxchild'是當前USB設備的數量。查看'linux/drivers/usb/core/devices.c'。我不確定這些文件中的任何內容是否記錄在內核源碼或USB描述符規範以外的任何地方。 – apmasell 2012-08-05 14:52:24