在 Linux kernel 2.6 之後,Linux 已經採用 udev 來管理各種 device 的新增、移除,但是在 Android 中,Google 並未使用 udev 的機制,而是採用 vold 來取代 udev的工作。

Vold 的trace 可以參考下面文章的分析,trace 跟原理都寫得很詳細。

http://blog.csdn.net/datangsoc/article/details/5928132

PS: 最早的 Android 並沒有 vold,而是更單純的 mountd

 

udev/vold 的架構簡單來說就是,kernel 會在新增 device 時,透過socket 發出 uevent 到 userspace, vold 則是負責去接收這些 event 並且做出相對應的處理。

Google 之所以不在 Android 採用 udev 的原因,可能是因為早期的 Android 最多也只能插入 SD card,所以 vold 內,主要負責的是 SD card 的處理。

在 Android Tablet 推出後,許多廠商加入了標準 USB port,這樣一來,可以使用的 device 就更多了,只是由於缺乏 udev的機制,實作上就會比較混亂。

 

參考文章:

* Volume service
* udev 官網: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
udev - 強大的 device node 管理系統
* uevent 分析
* udev rules
* mastering udev

huenlil 發表在 痞客邦 PIXNET 留言(0) 人氣()