2012-07-17 43 views
0

我正在使用嵌入式平臺。該設備中的典型軟件是Linux 2.6 + Busybox,因此資源有限。我需要在每次連接USB設備時執行用戶空間應用程序

我需要在每次連接USB設備時運行用戶空間應用程序。我需要將參數傳遞給此用戶空間應用程序的DeviceID和ProductID。

我真的不知道我應該遵循哪些策略來實現這一目標:

  • 編寫一個Linux內核模塊。
  • 從做它的內核(USB驅動器)內我正在這樣做,但我不認爲它的最好辦法做到這一點
  • 用戶空間的應用程序,「民意調查」爲USB連接的設備。?

哪一個應該是最好的方法?

感謝您的回答!

+0

有非常類似的問題你的http://stackoverflow.com/questions/7115731/linux-usb-connect-disconnect-event希望它可以幫助 – aisbaa 2012-07-17 07:13:28

+0

RegisterDeviceNotification有點API可以幫助你嗎? – 2vision2 2012-07-17 09:13:26

+1

[udev可以做到這一點](http://superuser.com/questions/305723/using-udev-rules-to-run-a-script-on-usb-insertion),是要走的路。根本不需要使用內核級別的東西。 – Flexo 2012-07-17 17:42:43

回答

0

即使像@aisbaa提到的其他選項,修改內核也很有趣且具有挑戰性。我建議你修改USB驅動程序。原因是,您需要將參數發送到用戶空間應用程序(產品ID,設備ID)。

這些ID將在驅動程序中獲得。所以用這些ID調用用戶空間應用程序是我的選擇。

用於調用用戶空間應用程序很好的解釋可用here

+0

當設備連接時,已經有一種運行用戶程序的機制。重塑車輪可能很有趣,但這不是真正解決這個問題的方法。 – Flexo 2012-07-17 17:44:00

0

據我所知,內核中有USB熱插拔機制。 發生熱插拔事件時,可以通知用戶。不幸的是,我對細節不是很熟悉。

也許linux-3.3.5/samples/kobject/kset-example.c會給你一些想法。

1

如果你想留在用戶空間,那麼你可以使用libudev。你有一個例子here。您可以從中提取產品ID和設備ID。

相關問題