2008年6月7日 星期六

利用 busybox 實作熱插拔機制

目前在 PC 系統下的 Linux 2.6 熱插拔機制是採用 udev 來實作;核心在偵測到硬體插入/移除時,會發出事件通知 udev daemon,udev 則根據事先設定好的規則來建立裝置檔案、symlink 或做其他處理。

在嵌入式系統中,當然也可以使用 udev 來設定當硬體熱插拔時要做那些處理,不過若你的目的相對比較單純時,其實 busybox 也提供了名叫 mdev 的 applet 來達成相同的功能。mdev 可以說是精簡版本的 udev,其設定檔相較於 udev,規則簡單,但也犧牲了一些 udev 才有的彈性。

要使用 mdev,只需在 kernel 啟動後的初始化程式(如 linuxrc 或是 /etc/init.d/ 下的 scripts),先掛載 /dev 及 /sys,接著下指令:
mdev -s
以建立裝置檔案,然後再設定使用 mdev 程式做為核心熱插拔事件的處理程式:
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
如此,在核心熱插拔事件發生時,mdev 就可根據核心傳入的參數來建立對應的裝置檔案。

若你有在 busybox 中勾選 mdev 設定檔的支援,你還可以透過撰寫設定檔來客制化你的熱插拔機制。該檔案位於 /etc/mdev.conf,其語法如下:
<device name regex> <uid>:<gid> <umask> [<@|$|*> command]
例如要設定當 MMC 卡插入時要執行自定的 script 時,可以這樣寫:
mmcblk[0-9]p[0-9]* 0:0 660 *myscript

除 mdev 外,busybox 也提供許多有用的工具以方便嵌入式系統的開發,非常值得開發人員好好地玩玩。

相關連結:
busybox:http://busybox.net/
udev:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html

沒有留言: