- 根據 /system/etc/vold.fstab 去monitor可移除裝置。dev_mount label 掛載點 auto或第n個partition /sys下的路徑,要扣掉/sys
- NetlinkManager以netlink和kernel建立溝通管道以取得裝置insert/remove事件並做處置(NetlinkHandler)。
- NetlinkHandler內實際上是呼叫VolumeManager做進一步處理
- VolumeManager
- 管理的是Volume,DirectVolume是其子類別,這裡用了template pattern
- 負責mount/umount/share/unshare/format以及secure container
- 以CommandListener去listen以接收指令,也就是跟上層溝通的管道。(CommandListener, VoldCommand, Process, ResponseCode)。
- Volume/DirectVolume::mountVol 看來是個適合填 android usb gadget 所需資訊的地方。因為
- 有檢查狀態
- 可知道是哪一個partition或disk
- 可得知insert/remove狀態
- 需要/dev/device-mapper,所以kernel要把此部份打勾。這邊的設定還蠻多的:
CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_DEBUG=y
CONFIG_DM_CRYPT=y
CONFIG_DM_UEVENT=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AUTHENC=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_PCBC=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_DES=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_TWOFISH_COMMON=y
參考資料:
沒有留言:
張貼留言