SlideShare a Scribd company logo
Android Storage
- Vold (Honeycomb 3.2)
William.L
wiliwe@gmail.com
2011-11-25
Outline
What is Vold?
Components
Communication
Vold Init Flow
Volume State Machine
Example : SD Card Insert
Appendix A- An issue in Google original code
Appendix B- How to read Microsoft NTFS format
storage?
Reference
What is Vold?
Volume daemon
The same as Mountd before Donut (Android 1.7)
Vold 2.0 since Froyo (Android 2.2)
As the role of Udev in the desktop Linux distro
Lisenting Netlink socket for volume changing Uevent
Ineteract with MountService (Java layer)
As a slave to MountService which is the decision maker
Notify volume status changing events to MountService
Execute commands issued from MountService
Communicates with MountService through unix domain(POSIX
Local IPC) socket
Folder : AndroidSrc/system/vold
Main Entry
main.c : main()
Components (1/12)
Vold is composed of
VolumeManager
NetlinkManager
NetlinkHandler
NetlinkEvent
CommandListener
Volume / DirectVolume
vold.fstab file
Fat
fsck_msdos , newfs_msdos executables
Components (2/12)
MountService
vold
(local socket )
CommandListener
VolumeManager
Send
command
Notify volume
events
Netlink socket
Notify volume events
Dispatch
Command
Notify volume
events
NetlinkManager
NetlinkHandler
Linux Kernel
Notify UEVENT
Vold
VolumeCollection <List>
DirectVolume-USB
DirectVolume-
External SD Card
.
.
.
After parsing
vold.fstab,
add
DirectVolume
to
VolumeCollecti
on list
Vold Architecture
(Java layer)
(C/C++ app layer)
Components (3/12)
VolumeManager
VolumeManager.cpp/.h
Provides corresponding command handlers called by
CommandListener for ASEC/OBB/MountService
commands
Store volume informations retrieved from vold.fstab
Notify MountService status changing of volumes
Components (4/12)
NetlinkManager
NetlinkManager.cpp/.h
Open the socket listening to kernel Netlink Kobject
Uevent
Create a NetlinkHandler instance with the opened
socket and activate it to start to listen to the Netlink
socket
Components (5/12)
NetlinkHandler
NetlinkHandler.cpp/.h
Wait for Netlink Kobject Uevent
Process Uevent in NetlinkHandler::onEvent()
Call proper command handlers(defined in VolumeManager)
corresponding to the “action” type of uevent
Components (6/12)
NetlinkEvent
AndroidSrc/system/core/include/sysutils/NetlinkEvent.h
Encapsulate Uevent information
Passed to NetlinkHandler::onEvent()
Components (7/12)
CommandListener
CommandListener.cpp/.h
Using socket(vold) to communicate with MountService
Wait for commands from MountService
Dispatch received MountService commands to
corresponding executor
CommandListener::VolumeCmd::runCommand()
Components (8/12)
Volume / DirectVolume
Volume.cpp/.h , DirectVolume.cpp/.h
DirectVolume is a subclass of Volume
To store volume informations retreiving from vold.fstab
Volume do the actual actions(mount, unmount, etc)
corresponding to the commands(doMount, doUnmount, etc)
from MountService
Components (9/12)
vold.fstab
AndroidSrc/device/nvidia/ventana [nVidia solution]
Describe what storages will be added into system
Processed by process_config()
AndroidSrc/system/vold/main.cpp
Example:
dev_mount usbdrive /mnt/usbdrive auto /devices/platform/tegra-ehci.2/usb2
dev_mount - Means mounting devices
usbdrive - Label for the USB volume
/mnt/usbdrive - Where the USB volume will be mounted
auto - Partition number (1 based). 'auto' for first usable partition
/devices/platform/tegra-ehci.2/usb2 - The sysfs path to external USB device
Components (10/12)
Fat
Fat.cpp/.h
Validate if the filesystem of the new added volume is FAT
Mount the new volume whose filesystem type is FAT
Format specified volume’s filesystem to FAT
Components (11/12)
fsck_msdos exectutable
AndroidSrc/external/fsck_msdos/main.c
To validate if the filesystem in new adding volume is MS-
DOS FAT 16 or 32
Called by Fat::check()
Components (12/12)
newfs_msdos exectutable
AndroidSrc/system/core/toolbox/newfs_msdos.c
To format a specified volume to MS-DOS FAT 32 type
filesystem
Called by Fat::format()
Communication
Netlink Socket
Passes informations between Kernel space and User
space
Protocol : NETLINK_KOBJECT_UEVENT
Defined in KernelSrc/include/linux/netlink.h
KernelSrc/lib/kobject_uevent.c : kobject_uevent_env()
Unix Domain/POSIX Local IPC Socket
For the communication between Vold & MountService
Created in init.rc
socket vold stream 0660 root mount
mount is MountService process
AndroidSrc/system/core/rootdir/init.rc
Vold Init Flow
Init.rc invoke “/system/bin/vold” &
create local socket “vold”
vold/main()
Create instance of
VolumeManager, CommandListener,
NetlinkManager separately
Set CommandLisener instance
to be the broadcaster of
VolumeManager/NetlinkManager to notify
volume changing event to MountService
through local socket
Activate the VolumeManager instance to run
Create the folder “/dev/block/vold” for device
node of new added volume
Acitvate the NetlinkManager instance to
listen to netlink uevent
Call coldboot() to monitor if there has
any volume(insternal/external storage)
has existed before booting
start
Activate CommandLinstener instance to
to listen “vold” local socket
Loop forever
Parse vold.fstab and store possible adding
storages’ Information using DirectVolume
Volume State Machine (1/4)
10 volume states (enum-value)
Init (-1)
NoMedia/Removed (0)
Idle/Unmounted (1)
Pending (2)
Waiting for the report of the number of volume partition
Chencking (3)
Checking filesystem type
Mounted (4)
Unmounting (5)
Formatting (6)
Shared(Unmounted) (7)
ShareMnt (8)
Volume State Machine (2/4)
Init NoMediaInitial
System initialize done
Attach storage to the device
NoMedia
Idle(Unmounted)
Pending
CheckingMounted
Initial
Volume State Machine (3/4)
NoMedia Idle(Unmounted)
Initial
Deattach storage from the device
Mounted Unmounting
Formatting
Idle(Unmounted)
Initial
Format the storage
Mounted Unmounting
(1)
(2) (3)
(4)(5)
CheckingMounted
(6)
Volume State Machine (4/4)
Idle(Unmounted)
Initial
Storage(SD card) Unsharing
SharedMnt Shared-Unmounted
CheckingMounted
Shared-Unmounted
Initial
Storage(SD card) Sharing
Mounted Unmounting
Idle(Unmounted)
SharedMnt
From Honeycomb with
MTP, these two cases
will not happen!
When access USB
mass-storage through
MTP, it need not to
unmount SD card.
Example: SD Card Insert (1/3)
[Honeycomb MR2]
Volume information for SD card in vold.fstab :
dev_mount sdcard /sdcard2 auto /devices/platform/sdhci-tegra.2/mmc_host/mmc1
When Vold init, a DirectVolume instance will be created to store SD card volume
informations
The stored informations are:
Label : sdcard
MountPoint : /sdcard2
DevPath(sysfs) : /devices/platform/sdhci-tegra.2/mmc_host/mmc1
Example: SD Card Insert (2/3)
Kernel detect a mmc
medium (sd card) insert
Kernel send Netlink Kobject Uevent :
ACTION : add
DEVPATH : /devices/platform/sdhci-
tegra.2/mmc_host/mmc1/mmc1:e624/block/mmcblk1
DEVTYPE : disk
SUBSYS : block
ACTION : add
DEVPATH : /devices/platform/sdhci-
tegra.2/mmc_host/mmc1/mmc1:e624/block/mmcblk1/mmcblk1p1
DEVTYPE : partition
SUBSYS : block
NetlinkHanlder detect Uevent with “block” subsys type,
then call VolumeManager::handleBlockEvent()
In VolumeManager::handleBlockEvent(), it iterate all
stored DirectVolume instances and call their
handleBolckEvent() method
In DirectVolume::handleBolckEvent(), it compares
passed in devPath with the one retrieved from vold.fstab.
In this example, if it found the string
“/devices/platform/sdhci-tegra.2/mmc_host/mmc1” in
devPath, it will create a device node under
/dev/block/vold/MajrID:MinrID for the new added volume
and then send notification,
“ResponseCode::VolumeDiskInserted”, to
MountService with Label & MountPoint (from vold.fstab)
as parameters
Continued to the
next slide
Insert
Android Device
Example: SD Card Insert (3/3)
On MountService receiving notification from
Vold, “ResponseCode::VolumeDiskInserted”,
it send “volume mount” command back to Vold
with “MountPoint” as the parameter named
Label
Continued from the previous slide
In Vold, CommandListener receive ”volume
mount” command, it execute
VolumeManager::mountVolume() with
parameter, Label, from MountService
In VolumeManager::mountVolume(), it
compare parameter, Label, with “Label” or
“MountPoint” informations retrieved from
vold.fstab.
If it match one of two information, it will call
Volume::mountVol() to subsequtial operations
for mounting
In Volume::mountVol(), it does FAT filesystem
checking operation by calling Fat::check().
If the new added volume is FAT filesystem, it
will try to mount new volume with VFAT type
using Fat::doMount() and
Volume::doMoveMount()
The new added volume has been mounted,
and the user can use this new
volume/storage (^o^)
Appendix A-
An issue in Google original code:
video/image files in external storage will be deleted
when un-mounting external storage
2011-10-14
Problem Description
After user pressing “Unmount” button in
Settings>Storage menu to unmount an
external storage, all video/image files on that
external storage will be deleted immediately
without any warning message
This problem will shock users!!!
Root Cause (1/2)
After user pressing “Unmount” button in
Settings>Storage menu, the system will send
ACTION_MEDIA_EJECT and
ACTION_MEDIA_UNMOUNTED Intents (events)
in sequence
When the member "mUnmountReceiver“
(BroadcastReceiver) of the class MediaProvider
(MediaProvider.java) receiving the
ACTION_MEDIA_EJECT Intent, it will call
delete() of SQLiteDatabase class to
prune/remove invalid entries in thumbnail table
representing video/image files on the
unmounted external storage
Root Cause (2/2)
delete() of SQLiteDatabase class will delete the
(video/image) files corresponding to invalid
entries in the thumbnail table eventually
Please refer to the Google Android issue
http://code.google.com/p/android/issues/detail?id=3692
Search the keyword “delete()”
Solution
To change the Intent type the member
"mUnmountReceiver“ monitors to
ACTION_MEDIA_UNMOUNTED and
ACTION_MEDIA_BAD_REMOVAL
So MediaProvider will prune/remove invalid
entries in thumbnail table only when it receives
Unmounted or Bad-Removal events
e.g. the external storage has been detached from the
file system actually!
Appendix B-
How to read Microsoft NTFS
format storage?
2011-12-27
Problem Description
Originally, Google Android only supports
Microsoft FAT format storage
Android Vold (Volume.cpp) checks the format
of a new inserted storage when trying to do
mounting. If it is not FAT format, it will skip this
storage and check the next found storage
Storages in NTFS format are so common, so it is
better for an Android device to be capable of
reading NTFS format storage
Solution (1/2)
TuxEra’s NTFS-3G is a stable, full-featured
solution to address the requirement of reading
NTFS format storage
This is a file system driver for NTFS format
After installing this into Linux system, it will add a file
system type option “ntfs” of “mount” system command
and “mount()” API
NTFS-3G official site
http://www.tuxera.com/community/ntfs-3g-download/
Solution (2/2)
In the method mountVol() of Volume class
(Volume.cpp)
“if ( Fat::check(devicePath) )” block will enter when the
checking status is non-zero, e.g. the current storage is
NOT FAT format
It could add codes to calling mount() with “ntfs” option
in this block to try to mount current storage and to see if
it is NTFS format through the return value of mount()
Also, it needs to check the storage is in Read-Only
mode
Reference
Kobject Uevent socket – Chapter 17, Linux 核
心開發指南 (Linux Kernel Development, 2/e)
Robert Love 著, 沈中庸、沈彥男 譯, 維科出版社
Unix Domain Socket – Chapter 15, Unix
Network Programming, Volume 1: The Sockets
Networking API, 3/e W. Richard Stevens
Netlink in Kernel –
http://www.linuxjournal.com/article/7356

More Related Content

What's hot

Android crash debugging
Android crash debuggingAndroid crash debugging
Android crash debugging
Ashish Agrawal
 
Project meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture Overview
Yu-Hsin Hung
 
Android Internals
Android InternalsAndroid Internals
Android Internals
Opersys inc.
 
Android Booting Sequence
Android Booting SequenceAndroid Booting Sequence
Android Booting Sequence
Jayanta Ghoshal
 
Android 10
Android 10Android 10
Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updates
Gary Bisson
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
National Cheng Kung University
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
Nanik Tolaram
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Bin Chen
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux Developers
Opersys inc.
 
Embedded Android : System Development - Part IV
Embedded Android : System Development - Part IVEmbedded Android : System Development - Part IV
Embedded Android : System Development - Part IV
Emertxe Information Technologies Pvt Ltd
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HAL
Opersys inc.
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
National Cheng Kung University
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
Cheng Wig
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)
Xavier Hallade
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
Chris Simmonds
 
Hacking and securing ios applications
Hacking and securing ios applicationsHacking and securing ios applications
Hacking and securing ios applicationsSatish b
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
National Cheng Kung University
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
Emertxe Information Technologies Pvt Ltd
 
Android IPC Mechanism
Android IPC MechanismAndroid IPC Mechanism
Android IPC Mechanism
National Cheng Kung University
 

What's hot (20)

Android crash debugging
Android crash debuggingAndroid crash debugging
Android crash debugging
 
Project meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture Overview
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Android Booting Sequence
Android Booting SequenceAndroid Booting Sequence
Android Booting Sequence
 
Android 10
Android 10Android 10
Android 10
 
Android OTA updates
Android OTA updatesAndroid OTA updates
Android OTA updates
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux Developers
 
Embedded Android : System Development - Part IV
Embedded Android : System Development - Part IVEmbedded Android : System Development - Part IV
Embedded Android : System Development - Part IV
 
Android's HIDL: Treble in the HAL
Android's HIDL: Treble in the HALAndroid's HIDL: Treble in the HAL
Android's HIDL: Treble in the HAL
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)
 
Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
 
Hacking and securing ios applications
Hacking and securing ios applicationsHacking and securing ios applications
Hacking and securing ios applications
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Android IPC Mechanism
Android IPC MechanismAndroid IPC Mechanism
Android IPC Mechanism
 

Similar to Android Storage - Vold

Monky vold extension
Monky vold extensionMonky vold extension
Monky vold extensionmamahow
 
Let’s talk virtualization
Let’s talk virtualizationLet’s talk virtualization
Let’s talk virtualization
Etienne Tremblay
 
Mirroring the root_disk under solaris SVM
Mirroring the root_disk under solaris SVMMirroring the root_disk under solaris SVM
Mirroring the root_disk under solaris SVM
Kazimal Abed Mohammed
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot)
Omkar Rane
 
The Holy Grail of Deployment
The Holy Grail of DeploymentThe Holy Grail of Deployment
The Holy Grail of DeploymentStuart King
 
I/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
I/O, You Own: Regaining Control of Your Disk in the Presence of BootkitsI/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
I/O, You Own: Regaining Control of Your Disk in the Presence of BootkitsCrowdStrike
 
Bootkits: Past, Present & Future - Virus Bulletin
Bootkits: Past, Present & Future - Virus BulletinBootkits: Past, Present & Future - Virus Bulletin
Bootkits: Past, Present & Future - Virus Bulletin
ESET
 
R12 d49656 gc10-apps dba 01
R12 d49656 gc10-apps dba 01R12 d49656 gc10-apps dba 01
R12 d49656 gc10-apps dba 01
zeesniper
 
WinFE: The (Almost) Perfect Triage Tool
WinFE: The (Almost) Perfect Triage ToolWinFE: The (Almost) Perfect Triage Tool
WinFE: The (Almost) Perfect Triage Tool
Brent Muir
 
dokumen.tips_aix-presentation.ppt
dokumen.tips_aix-presentation.pptdokumen.tips_aix-presentation.ppt
dokumen.tips_aix-presentation.ppt
AhmedFawzy916524
 
Logical volume manager xfs
Logical volume manager xfsLogical volume manager xfs
Logical volume manager xfs
Sarwar Javaid
 
VDCF Overview
VDCF OverviewVDCF Overview
VDCF Overview
JomaSoft
 
X64 Workshop Linux Information Gathering
X64 Workshop Linux Information GatheringX64 Workshop Linux Information Gathering
X64 Workshop Linux Information GatheringAero Plane
 

Similar to Android Storage - Vold (20)

Ch12 system administration
Ch12 system administration Ch12 system administration
Ch12 system administration
 
Ch04
Ch04Ch04
Ch04
 
Ch04 system administration
Ch04 system administration Ch04 system administration
Ch04 system administration
 
Monky vold extension
Monky vold extensionMonky vold extension
Monky vold extension
 
Let’s talk virtualization
Let’s talk virtualizationLet’s talk virtualization
Let’s talk virtualization
 
Mirroring the root_disk under solaris SVM
Mirroring the root_disk under solaris SVMMirroring the root_disk under solaris SVM
Mirroring the root_disk under solaris SVM
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot)
 
The Holy Grail of Deployment
The Holy Grail of DeploymentThe Holy Grail of Deployment
The Holy Grail of Deployment
 
I/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
I/O, You Own: Regaining Control of Your Disk in the Presence of BootkitsI/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
I/O, You Own: Regaining Control of Your Disk in the Presence of Bootkits
 
Ch12
Ch12Ch12
Ch12
 
Bootkits: Past, Present & Future - Virus Bulletin
Bootkits: Past, Present & Future - Virus BulletinBootkits: Past, Present & Future - Virus Bulletin
Bootkits: Past, Present & Future - Virus Bulletin
 
R12 d49656 gc10-apps dba 01
R12 d49656 gc10-apps dba 01R12 d49656 gc10-apps dba 01
R12 d49656 gc10-apps dba 01
 
WinFE: The (Almost) Perfect Triage Tool
WinFE: The (Almost) Perfect Triage ToolWinFE: The (Almost) Perfect Triage Tool
WinFE: The (Almost) Perfect Triage Tool
 
dokumen.tips_aix-presentation.ppt
dokumen.tips_aix-presentation.pptdokumen.tips_aix-presentation.ppt
dokumen.tips_aix-presentation.ppt
 
Logical volume manager xfs
Logical volume manager xfsLogical volume manager xfs
Logical volume manager xfs
 
Red Hat Training
Red Hat   TrainingRed Hat   Training
Red Hat Training
 
1 04 rao
1 04 rao1 04 rao
1 04 rao
 
VDCF Overview
VDCF OverviewVDCF Overview
VDCF Overview
 
Basic Linux Internals
Basic Linux InternalsBasic Linux Internals
Basic Linux Internals
 
X64 Workshop Linux Information Gathering
X64 Workshop Linux Information GatheringX64 Workshop Linux Information Gathering
X64 Workshop Linux Information Gathering
 

More from William Lee

Usage Note of Apache Thrift for C++ Java PHP Languages
Usage Note of Apache Thrift for C++ Java PHP LanguagesUsage Note of Apache Thrift for C++ Java PHP Languages
Usage Note of Apache Thrift for C++ Java PHP Languages
William Lee
 
Usage Note of Qt ODBC Database Access on Linux
Usage Note of Qt ODBC Database Access on LinuxUsage Note of Qt ODBC Database Access on Linux
Usage Note of Qt ODBC Database Access on Linux
William Lee
 
Usage Note of SWIG for PHP
Usage Note of SWIG for PHPUsage Note of SWIG for PHP
Usage Note of SWIG for PHP
William Lee
 
Upgrade GCC & Install Qt 5.4 on CentOS 6.5
Upgrade GCC & Install Qt 5.4 on CentOS 6.5 Upgrade GCC & Install Qt 5.4 on CentOS 6.5
Upgrade GCC & Install Qt 5.4 on CentOS 6.5
William Lee
 
Usage Notes of The Bro 2.2 / 2.3
Usage Notes of The Bro 2.2 / 2.3Usage Notes of The Bro 2.2 / 2.3
Usage Notes of The Bro 2.2 / 2.3
William Lee
 
Viewing Android Source Files in Eclipse (Chinese)
Viewing Android Source Files in Eclipse  (Chinese)Viewing Android Source Files in Eclipse  (Chinese)
Viewing Android Source Files in Eclipse (Chinese)
William Lee
 
Usage Note of Microsoft Dependency Walker
Usage Note of Microsoft Dependency WalkerUsage Note of Microsoft Dependency Walker
Usage Note of Microsoft Dependency Walker
William Lee
 
Usage Note of PlayCap
Usage Note of PlayCapUsage Note of PlayCap
Usage Note of PlayCap
William Lee
 
Qt4 App - Sliding Window
Qt4 App - Sliding WindowQt4 App - Sliding Window
Qt4 App - Sliding Window
William Lee
 
GTK+ 2.0 App - Desktop App Chooser
GTK+ 2.0 App - Desktop App ChooserGTK+ 2.0 App - Desktop App Chooser
GTK+ 2.0 App - Desktop App Chooser
William Lee
 
GTK+ 2.0 App - Icon Chooser
GTK+ 2.0 App - Icon ChooserGTK+ 2.0 App - Icon Chooser
GTK+ 2.0 App - Icon Chooser
William Lee
 
Note of CGI and ASP
Note of CGI and ASPNote of CGI and ASP
Note of CGI and ASP
William Lee
 
Moblin2 - Window Manager(Mutter) Plugin
Moblin2 - Window Manager(Mutter) PluginMoblin2 - Window Manager(Mutter) Plugin
Moblin2 - Window Manager(Mutter) Plugin
William Lee
 
MGCP Overview
MGCP OverviewMGCP Overview
MGCP Overview
William Lee
 
Asterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log RotationAsterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log Rotation
William Lee
 
L.A.M.P Installation Note --- CentOS 6.5
L.A.M.P Installation Note --- CentOS 6.5L.A.M.P Installation Note --- CentOS 6.5
L.A.M.P Installation Note --- CentOS 6.5
William Lee
 
C Program Runs on Wrong Target Platform(CPU Architecture)
C Program Runs on Wrong Target Platform(CPU Architecture)C Program Runs on Wrong Target Platform(CPU Architecture)
C Program Runs on Wrong Target Platform(CPU Architecture)
William Lee
 
Internationalization(i18n) of Web Page
Internationalization(i18n) of Web PageInternationalization(i18n) of Web Page
Internationalization(i18n) of Web Page
William Lee
 
Notes for SQLite3 Usage
Notes for SQLite3 UsageNotes for SQLite3 Usage
Notes for SQLite3 Usage
William Lee
 
Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)
William Lee
 

More from William Lee (20)

Usage Note of Apache Thrift for C++ Java PHP Languages
Usage Note of Apache Thrift for C++ Java PHP LanguagesUsage Note of Apache Thrift for C++ Java PHP Languages
Usage Note of Apache Thrift for C++ Java PHP Languages
 
Usage Note of Qt ODBC Database Access on Linux
Usage Note of Qt ODBC Database Access on LinuxUsage Note of Qt ODBC Database Access on Linux
Usage Note of Qt ODBC Database Access on Linux
 
Usage Note of SWIG for PHP
Usage Note of SWIG for PHPUsage Note of SWIG for PHP
Usage Note of SWIG for PHP
 
Upgrade GCC & Install Qt 5.4 on CentOS 6.5
Upgrade GCC & Install Qt 5.4 on CentOS 6.5 Upgrade GCC & Install Qt 5.4 on CentOS 6.5
Upgrade GCC & Install Qt 5.4 on CentOS 6.5
 
Usage Notes of The Bro 2.2 / 2.3
Usage Notes of The Bro 2.2 / 2.3Usage Notes of The Bro 2.2 / 2.3
Usage Notes of The Bro 2.2 / 2.3
 
Viewing Android Source Files in Eclipse (Chinese)
Viewing Android Source Files in Eclipse  (Chinese)Viewing Android Source Files in Eclipse  (Chinese)
Viewing Android Source Files in Eclipse (Chinese)
 
Usage Note of Microsoft Dependency Walker
Usage Note of Microsoft Dependency WalkerUsage Note of Microsoft Dependency Walker
Usage Note of Microsoft Dependency Walker
 
Usage Note of PlayCap
Usage Note of PlayCapUsage Note of PlayCap
Usage Note of PlayCap
 
Qt4 App - Sliding Window
Qt4 App - Sliding WindowQt4 App - Sliding Window
Qt4 App - Sliding Window
 
GTK+ 2.0 App - Desktop App Chooser
GTK+ 2.0 App - Desktop App ChooserGTK+ 2.0 App - Desktop App Chooser
GTK+ 2.0 App - Desktop App Chooser
 
GTK+ 2.0 App - Icon Chooser
GTK+ 2.0 App - Icon ChooserGTK+ 2.0 App - Icon Chooser
GTK+ 2.0 App - Icon Chooser
 
Note of CGI and ASP
Note of CGI and ASPNote of CGI and ASP
Note of CGI and ASP
 
Moblin2 - Window Manager(Mutter) Plugin
Moblin2 - Window Manager(Mutter) PluginMoblin2 - Window Manager(Mutter) Plugin
Moblin2 - Window Manager(Mutter) Plugin
 
MGCP Overview
MGCP OverviewMGCP Overview
MGCP Overview
 
Asterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log RotationAsterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log Rotation
 
L.A.M.P Installation Note --- CentOS 6.5
L.A.M.P Installation Note --- CentOS 6.5L.A.M.P Installation Note --- CentOS 6.5
L.A.M.P Installation Note --- CentOS 6.5
 
C Program Runs on Wrong Target Platform(CPU Architecture)
C Program Runs on Wrong Target Platform(CPU Architecture)C Program Runs on Wrong Target Platform(CPU Architecture)
C Program Runs on Wrong Target Platform(CPU Architecture)
 
Internationalization(i18n) of Web Page
Internationalization(i18n) of Web PageInternationalization(i18n) of Web Page
Internationalization(i18n) of Web Page
 
Notes for SQLite3 Usage
Notes for SQLite3 UsageNotes for SQLite3 Usage
Notes for SQLite3 Usage
 
Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)
 

Recently uploaded

Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 

Recently uploaded (20)

Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 

Android Storage - Vold

  • 1. Android Storage - Vold (Honeycomb 3.2) William.L wiliwe@gmail.com 2011-11-25
  • 2. Outline What is Vold? Components Communication Vold Init Flow Volume State Machine Example : SD Card Insert Appendix A- An issue in Google original code Appendix B- How to read Microsoft NTFS format storage? Reference
  • 3. What is Vold? Volume daemon The same as Mountd before Donut (Android 1.7) Vold 2.0 since Froyo (Android 2.2) As the role of Udev in the desktop Linux distro Lisenting Netlink socket for volume changing Uevent Ineteract with MountService (Java layer) As a slave to MountService which is the decision maker Notify volume status changing events to MountService Execute commands issued from MountService Communicates with MountService through unix domain(POSIX Local IPC) socket Folder : AndroidSrc/system/vold Main Entry main.c : main()
  • 4. Components (1/12) Vold is composed of VolumeManager NetlinkManager NetlinkHandler NetlinkEvent CommandListener Volume / DirectVolume vold.fstab file Fat fsck_msdos , newfs_msdos executables
  • 5. Components (2/12) MountService vold (local socket ) CommandListener VolumeManager Send command Notify volume events Netlink socket Notify volume events Dispatch Command Notify volume events NetlinkManager NetlinkHandler Linux Kernel Notify UEVENT Vold VolumeCollection <List> DirectVolume-USB DirectVolume- External SD Card . . . After parsing vold.fstab, add DirectVolume to VolumeCollecti on list Vold Architecture (Java layer) (C/C++ app layer)
  • 6. Components (3/12) VolumeManager VolumeManager.cpp/.h Provides corresponding command handlers called by CommandListener for ASEC/OBB/MountService commands Store volume informations retrieved from vold.fstab Notify MountService status changing of volumes
  • 7. Components (4/12) NetlinkManager NetlinkManager.cpp/.h Open the socket listening to kernel Netlink Kobject Uevent Create a NetlinkHandler instance with the opened socket and activate it to start to listen to the Netlink socket
  • 8. Components (5/12) NetlinkHandler NetlinkHandler.cpp/.h Wait for Netlink Kobject Uevent Process Uevent in NetlinkHandler::onEvent() Call proper command handlers(defined in VolumeManager) corresponding to the “action” type of uevent
  • 10. Components (7/12) CommandListener CommandListener.cpp/.h Using socket(vold) to communicate with MountService Wait for commands from MountService Dispatch received MountService commands to corresponding executor CommandListener::VolumeCmd::runCommand()
  • 11. Components (8/12) Volume / DirectVolume Volume.cpp/.h , DirectVolume.cpp/.h DirectVolume is a subclass of Volume To store volume informations retreiving from vold.fstab Volume do the actual actions(mount, unmount, etc) corresponding to the commands(doMount, doUnmount, etc) from MountService
  • 12. Components (9/12) vold.fstab AndroidSrc/device/nvidia/ventana [nVidia solution] Describe what storages will be added into system Processed by process_config() AndroidSrc/system/vold/main.cpp Example: dev_mount usbdrive /mnt/usbdrive auto /devices/platform/tegra-ehci.2/usb2 dev_mount - Means mounting devices usbdrive - Label for the USB volume /mnt/usbdrive - Where the USB volume will be mounted auto - Partition number (1 based). 'auto' for first usable partition /devices/platform/tegra-ehci.2/usb2 - The sysfs path to external USB device
  • 13. Components (10/12) Fat Fat.cpp/.h Validate if the filesystem of the new added volume is FAT Mount the new volume whose filesystem type is FAT Format specified volume’s filesystem to FAT
  • 14. Components (11/12) fsck_msdos exectutable AndroidSrc/external/fsck_msdos/main.c To validate if the filesystem in new adding volume is MS- DOS FAT 16 or 32 Called by Fat::check()
  • 15. Components (12/12) newfs_msdos exectutable AndroidSrc/system/core/toolbox/newfs_msdos.c To format a specified volume to MS-DOS FAT 32 type filesystem Called by Fat::format()
  • 16. Communication Netlink Socket Passes informations between Kernel space and User space Protocol : NETLINK_KOBJECT_UEVENT Defined in KernelSrc/include/linux/netlink.h KernelSrc/lib/kobject_uevent.c : kobject_uevent_env() Unix Domain/POSIX Local IPC Socket For the communication between Vold & MountService Created in init.rc socket vold stream 0660 root mount mount is MountService process AndroidSrc/system/core/rootdir/init.rc
  • 17. Vold Init Flow Init.rc invoke “/system/bin/vold” & create local socket “vold” vold/main() Create instance of VolumeManager, CommandListener, NetlinkManager separately Set CommandLisener instance to be the broadcaster of VolumeManager/NetlinkManager to notify volume changing event to MountService through local socket Activate the VolumeManager instance to run Create the folder “/dev/block/vold” for device node of new added volume Acitvate the NetlinkManager instance to listen to netlink uevent Call coldboot() to monitor if there has any volume(insternal/external storage) has existed before booting start Activate CommandLinstener instance to to listen “vold” local socket Loop forever Parse vold.fstab and store possible adding storages’ Information using DirectVolume
  • 18. Volume State Machine (1/4) 10 volume states (enum-value) Init (-1) NoMedia/Removed (0) Idle/Unmounted (1) Pending (2) Waiting for the report of the number of volume partition Chencking (3) Checking filesystem type Mounted (4) Unmounting (5) Formatting (6) Shared(Unmounted) (7) ShareMnt (8)
  • 19. Volume State Machine (2/4) Init NoMediaInitial System initialize done Attach storage to the device NoMedia Idle(Unmounted) Pending CheckingMounted Initial
  • 20. Volume State Machine (3/4) NoMedia Idle(Unmounted) Initial Deattach storage from the device Mounted Unmounting Formatting Idle(Unmounted) Initial Format the storage Mounted Unmounting (1) (2) (3) (4)(5) CheckingMounted (6)
  • 21. Volume State Machine (4/4) Idle(Unmounted) Initial Storage(SD card) Unsharing SharedMnt Shared-Unmounted CheckingMounted Shared-Unmounted Initial Storage(SD card) Sharing Mounted Unmounting Idle(Unmounted) SharedMnt From Honeycomb with MTP, these two cases will not happen! When access USB mass-storage through MTP, it need not to unmount SD card.
  • 22. Example: SD Card Insert (1/3) [Honeycomb MR2] Volume information for SD card in vold.fstab : dev_mount sdcard /sdcard2 auto /devices/platform/sdhci-tegra.2/mmc_host/mmc1 When Vold init, a DirectVolume instance will be created to store SD card volume informations The stored informations are: Label : sdcard MountPoint : /sdcard2 DevPath(sysfs) : /devices/platform/sdhci-tegra.2/mmc_host/mmc1
  • 23. Example: SD Card Insert (2/3) Kernel detect a mmc medium (sd card) insert Kernel send Netlink Kobject Uevent : ACTION : add DEVPATH : /devices/platform/sdhci- tegra.2/mmc_host/mmc1/mmc1:e624/block/mmcblk1 DEVTYPE : disk SUBSYS : block ACTION : add DEVPATH : /devices/platform/sdhci- tegra.2/mmc_host/mmc1/mmc1:e624/block/mmcblk1/mmcblk1p1 DEVTYPE : partition SUBSYS : block NetlinkHanlder detect Uevent with “block” subsys type, then call VolumeManager::handleBlockEvent() In VolumeManager::handleBlockEvent(), it iterate all stored DirectVolume instances and call their handleBolckEvent() method In DirectVolume::handleBolckEvent(), it compares passed in devPath with the one retrieved from vold.fstab. In this example, if it found the string “/devices/platform/sdhci-tegra.2/mmc_host/mmc1” in devPath, it will create a device node under /dev/block/vold/MajrID:MinrID for the new added volume and then send notification, “ResponseCode::VolumeDiskInserted”, to MountService with Label & MountPoint (from vold.fstab) as parameters Continued to the next slide Insert Android Device
  • 24. Example: SD Card Insert (3/3) On MountService receiving notification from Vold, “ResponseCode::VolumeDiskInserted”, it send “volume mount” command back to Vold with “MountPoint” as the parameter named Label Continued from the previous slide In Vold, CommandListener receive ”volume mount” command, it execute VolumeManager::mountVolume() with parameter, Label, from MountService In VolumeManager::mountVolume(), it compare parameter, Label, with “Label” or “MountPoint” informations retrieved from vold.fstab. If it match one of two information, it will call Volume::mountVol() to subsequtial operations for mounting In Volume::mountVol(), it does FAT filesystem checking operation by calling Fat::check(). If the new added volume is FAT filesystem, it will try to mount new volume with VFAT type using Fat::doMount() and Volume::doMoveMount() The new added volume has been mounted, and the user can use this new volume/storage (^o^)
  • 25. Appendix A- An issue in Google original code: video/image files in external storage will be deleted when un-mounting external storage 2011-10-14
  • 26. Problem Description After user pressing “Unmount” button in Settings>Storage menu to unmount an external storage, all video/image files on that external storage will be deleted immediately without any warning message This problem will shock users!!!
  • 27. Root Cause (1/2) After user pressing “Unmount” button in Settings>Storage menu, the system will send ACTION_MEDIA_EJECT and ACTION_MEDIA_UNMOUNTED Intents (events) in sequence When the member "mUnmountReceiver“ (BroadcastReceiver) of the class MediaProvider (MediaProvider.java) receiving the ACTION_MEDIA_EJECT Intent, it will call delete() of SQLiteDatabase class to prune/remove invalid entries in thumbnail table representing video/image files on the unmounted external storage
  • 28. Root Cause (2/2) delete() of SQLiteDatabase class will delete the (video/image) files corresponding to invalid entries in the thumbnail table eventually Please refer to the Google Android issue http://code.google.com/p/android/issues/detail?id=3692 Search the keyword “delete()”
  • 29. Solution To change the Intent type the member "mUnmountReceiver“ monitors to ACTION_MEDIA_UNMOUNTED and ACTION_MEDIA_BAD_REMOVAL So MediaProvider will prune/remove invalid entries in thumbnail table only when it receives Unmounted or Bad-Removal events e.g. the external storage has been detached from the file system actually!
  • 30. Appendix B- How to read Microsoft NTFS format storage? 2011-12-27
  • 31. Problem Description Originally, Google Android only supports Microsoft FAT format storage Android Vold (Volume.cpp) checks the format of a new inserted storage when trying to do mounting. If it is not FAT format, it will skip this storage and check the next found storage Storages in NTFS format are so common, so it is better for an Android device to be capable of reading NTFS format storage
  • 32. Solution (1/2) TuxEra’s NTFS-3G is a stable, full-featured solution to address the requirement of reading NTFS format storage This is a file system driver for NTFS format After installing this into Linux system, it will add a file system type option “ntfs” of “mount” system command and “mount()” API NTFS-3G official site http://www.tuxera.com/community/ntfs-3g-download/
  • 33. Solution (2/2) In the method mountVol() of Volume class (Volume.cpp) “if ( Fat::check(devicePath) )” block will enter when the checking status is non-zero, e.g. the current storage is NOT FAT format It could add codes to calling mount() with “ntfs” option in this block to try to mount current storage and to see if it is NTFS format through the return value of mount() Also, it needs to check the storage is in Read-Only mode
  • 34. Reference Kobject Uevent socket – Chapter 17, Linux 核 心開發指南 (Linux Kernel Development, 2/e) Robert Love 著, 沈中庸、沈彥男 譯, 維科出版社 Unix Domain Socket – Chapter 15, Unix Network Programming, Volume 1: The Sockets Networking API, 3/e W. Richard Stevens Netlink in Kernel – http://www.linuxjournal.com/article/7356