2012-08-17 76 views
1

我有一個驅動程序加載作爲啓動的一部分使用一些initcall級別(比如late_initcall)。作爲init模塊的一部分,它向udev註冊以創建設備節點auto-ma(t | g)。問題是模塊如何知道udev守護進程是否在引導過程中的那個點上運行。如果不是,用戶空間將無法使用設備文件,導致驅動程序和設備無用。udevd和initcall依賴

謝謝。

回答

3

首先udev只是創建設備節點的一種機制。你的代碼應該是在內核設備模型中創建一個設備,然後會爲你的設備在/dev中創建一個設備節點。在可能只是一個簡單的shell腳本的嵌入式系統上。

就時序而言,如果您的設備是在啓動早期創建的,則udev和內核將在udev啓動並運行後處理重播創建事件。這通過udev掃描/sys並將"add"寫入每個設備的uevent文件來實現。這告訴內核發送創建事件,udev通過netlink接收(或使用uevent_helper)。

即使沒有udev,您的設備也會出現在/sys的某處,您可以在其中查詢其主要和次要號碼並手動創建設備節點。