1. 总体架构
2. 流程概览
2.1 开启Vold
2.2 引导Uevent
2.3 处理事件
static const char *stateToStr(int state) {
if (state == Volume::State_Init)
return "Initializing";
else if (state == Volume::State_NoMedia)
return "No-Media";
else if (state == Volume::State_Idle)
return "Idle-Unmounted";
else if (state == Volume::State_Pending)
return "Pending";
else if (state == Volume::State_Mounted)
return "Mounted";
else if (state == Volume::State_Unmounting)
return "Unmounting";
else if (state == Volume::State_Checking)
return "Checking";
else if (state == Volume::State_Formatting)
return "Formatting";
else if (state == Volume::State_Shared)
return "Shared-Unmounted";
else if (state == Volume::State_SharedMnt)
return "Shared-Mounted";
else
return "Unknown-Error";
}
TF 插入状态:
from 0 (No-Media) to 2 (Pending)
from 0 (No-Media) to 2 (Pending)
from 2 (Pending) to 1 (Idle-Unmounted)
from 1 (Idle-Unmounted) to 3 (Checking)
from 2 (Pending) to 1 (Idle-Unmounted)
from 1 (Idle-Unmounted) to 3 (Checking)
from 3 (Checking) to 4 (Mounted)
from 3 (Checking) to 4 (Mounted)
Vold - Volume Daemon存储类的守护进程,作为Android的一个本地服务,负责处理诸如SD、USB等存储类设备的插拔等事件。
1. 总体架构
Vold服务由volumeManager统一管控,它将具体任务分别分派给netlinkManager, commandListener, directVolume, Volume去完成。
Vold服务向下通过socket机制与底层驱动交互,向上通过JNI, intent, socket, doCommand等机制与Java Framework交互。
2 流程概览
2.1 开启服务
初始化Android系统时开启Vold本地服务,
Vold在/dev/block下创建vold文件夹,开启VolumeManager, NetlinkManager, CommandListener。
2.2 引导Uevent
NetlinkManager负责监听底层Linux上报的uevent事件。
系统的SocketListner统一管理所有socket事件。
NetlinkListner负责解析socket事件。
最后由onEvent()将vold事件交还给NetlinkManager处理。
2.3 处理Block和Switch事件
NetlinkManager调用VolumeManager中处理vold事件的类。
handleBlockEvent()完成SD的挂载和卸载,具体交由DirectVolume完成。
handleSwitchEvent()完成由USB实现的U盘的连接。
两者最后都是通过setBroadcast()将ResponsibleCode经过nativeDaemonConnector的socket监听机制,最终上传到MountService作统一规划。
MountService里的onEvent()得到解析后的事件,完成两大任务,
-> 发送命令doCommand()通过commandListener传递给volumeManager
-> 将事件信息广播给相关服务,供上层应用使用。
插入TF card log:
root@xxxdroid:/ # [ 2160.195060] [mmc]: mmc 0 detect change, present 1
[ 2160.700078] [mmc]: sdc0 set ios: clk 0Hz bm PP pm UP vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2160.711484] [mmc]: sdc0 power_supply is null
[ 2160.740049] [mmc]: sdc0 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2160.772396] [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 52, RTO !!
[ 2160.781740] [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 52, RTO !!
[ 2160.790158] [mmc]: sdc0 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2160.810274] [mmc]: sdc0 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2160.827984] *******************Try sdio*******************
[ 2160.835223] [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 5, RTO !!
[ 2160.844305] [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 5, RTO !!
[ 2160.855896] [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 5, RTO !!
[ 2160.865189] [mmc]: *** sunxi_mci_dump_errinfo(L826): smc 0 err, cmd 5, RTO !!
[ 2160.873522] *******************Try sd *******************
[ 2160.880366] [mmc]: sdc0 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2160.892015] [mmc]: sdc0 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2160.909979] [mmc]: sdc0 set ios: clk 400000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2161.061552] [mmc]: sdc0 set ios: clk 25000000Hz bm PP pm ON vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 2161.073742] [mmc]: sdc0 set ios: clk 25000000Hz bm PP pm ON vdd 3.3V width 1 timing SD-HS(SDR25) dt B
[ 2161.090552] [mmc]: sdc0 set ios: clk 50000000Hz bm PP pm ON vdd 3.3V width 1 timing SD-HS(SDR25) dt B
[ 2161.106316] [mmc]: sdc0 set ios: clk 50000000Hz bm PP pm ON vdd 3.3V width 4 timing SD-HS(SDR25) dt B
[ 2161.118127] mmc0: new high speed SDHC card at address 1234
--------- beginning of /dev/log/[ 2161.128164] mmcblk0: mmc0:1234 SA04G 3.63 GiB
main
V/EventManager( 60): <line[0643] ueventLoop()> uevent_lo[ 2161.137952] mmcblk0: p1
op add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmc0:1234
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/platform/sunxi-mmc.0/[ 2161.161573] mmcblk mmc0:1234: Card claimed for testing.
mmc_host/mmc0/mmc0:1234
V/Event[ 2161.168581] mmc0:1234: SA04G 3.63 GiB
Manager( 60): <line[0598] chec[ 2161.177640] *******************sd init ok*******************
kTFCard()> tmp_end:c0:1234
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmc0:1234
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:c0:1234
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/virtual/bdi/179:0
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :179:0
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/virtual/bdi/179:0
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:i/179:0
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/virtual/bdi/179:0
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :179:0
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/virtual/bdi/179:0
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:i/179:0
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmcblk0
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmcblk0
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:mmcblk0
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:mmcblk0
D/CedarXRecorder( 58): (f:setSdcardState, l:676) mbSdCardState[1]
D/VolumeManager( 57): VolumeManager----------------
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
D/Volume ( 57): ---createDeviceNode---path=/dev/block/vold/179:0
E/Volume ( 57): line=205,setState oldState=0,state=2
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/DirectVolume( 57): line=128,devtype=disk
D/DirectVolume( 57): line=179,handleDiskAdded mDiskNumParts=1
E/Volume ( 57): line=205,setState oldState=2,state=2
W/Volume ( 57): line=207,Duplicate state (2)
D/Volume ( 57): line=198,mState=2
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:74):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 0 (No-Media) to 2 (Pending)
V/StorageMonitor( 60): line=166, notify: mStatus = 2, mPath = /mnt/extsd
D/CedarXRecorder( 58): (f:setSdcardState, l:676) mbSdCardState[1]
D/VolumeManager( 57): VolumeManager----------------
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
D/Volume ( 57): ---createDeviceNode---path=/dev/block/vold/179:0
E/Volume ( 57): line=205,setState oldState=0,state=2
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/DirectVolume( 57): line=128,devtype=disk
D/DirectVolume( 57): line=179,handleDiskAdded mDiskNumParts=1
E/Volume ( 57): line=205,setState oldState=2,state=2
W/Volume ( 57): line=207,Duplicate state (2)
D/Volume ( 57): line=198,mState=2
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:74):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 0 (No-Media) to 2 (Pending)
V/StorageMonitor( 60): line=166, notify: mStatus = 2, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 2, mInserted = 1, mPath = /mnt/extsd.
D/VolumeManager( 57): VolumeManager----------------
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
D/Volume ( 57): ---createDeviceNode---path=/dev/block/vold/179:1
E/Volume ( 57): line=205,setState oldState=2,state=2
W/Volume ( 57): line=207,Duplicate state (2)
D/DirectVolume( 57): line=131,devtype=partition
D/DirectVolume( 57): handlePartitionAdded devpath=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1,mPartsEventCnt=0
D/DirectVolume( 57): handlePartitionAdded mDiskNumParts=1,mPartsEventCnt=1
D/Volume ( 57): line=198,mState=2
E/Volume ( 57): line=205,setState oldState=2,state=1
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/Volume ( 57): getShareFlags mShareFlags = 1
D/Volume ( 57): line=198,mState=1
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:80):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 2 (Pending) to 1 (Idle-Unmounted)
V/StorageMonitor( 60): line=166, notify: mStatus = 1, mPath = /mnt/extsd
D/StorageMonitor( 60): line=174,mShared=0, mSharing = 0, mFormated=0, mFormating = 0, mInserted = 1
D/StorageMonitor( 60): call mListener->notify, mStatus = 1, mInserted = 1, mPath = /mnt/extsd.
D/CommandListener( 57): CommandListener::VolumeCmd::runCommand
D/CommandListener( 57): argv[1]=mount
D/CommandListener( 57): 3333argv[1]=mount,argc=3
D/VolumeManager( 57): line=1116,mountVolume label=/mnt/extsd
D/Volume ( 57): line=198,mState=1
D/Volume ( 57): line=477,mountVol state : 1
D/Volume ( 57): line=198,mState=1
D/Volume ( 57): line=198,mState=1
D/DirectVolume( 57): getDeviceNodes mPartIdx=-1,mDiskNumParts=1
D/Volume ( 57): line=566,Volume::mountVol: mMountpoint /mnt/extsd
I/Volume ( 57): line=573,mountVol: n=1
I/Volume ( 57): line=581,/dev/block/vold/179:1 being considered for volume extsd
E/Volume ( 57): line=205,setState oldState=1,state=3
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:49):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=630 Volume extsd /mnt/extsd disk inserted (179:0)
W/StorageMonitor( 60): Error parsing status
V/StorageMonitor( 60): line=166, notify: mStatus = -1, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = -1, mInserted = 1, mPath = /mnt/extsd.
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:81):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 1 (Idle-Unmounted) to 3 (Checking)
V/StorageMonitor( 60): line=166, notify: mStatus = 3, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 3, mInserted = 1, mPath = /mnt/extsd.
D/StorageMonitor( 60): updateLoop finished
V/Menu.cpp( 60): <line[0079] MenuProc()> ******[debug_jaosn]:this message is STBM_MOUNT_TFCARD *******
V/Menu.cpp( 60): <line[0080] MenuProc()> ******[debug_jaosn]:this message is wParam :1*******
V/Menu.cpp( 60): <line[0084] MenuProc()> /mnt/extsd/full_img.fex not exist
V/Menu.cpp( 60): <line[0294] getMenuObj()> index is 0, current MenuObj is 0x0x40b4afc0
V/MenuSystem( 60): <line[0338] HandleSubMenuChange()> menuObj 1, set menuIndex false
V/ResourceManager.cpp( 60): <line[1787] setResBoolValue()> setResBoolValue: resID: 44, value: 0
I/ResourceManager.cpp( 60): <line[1845] setResBoolValue()> FIRMWARE: value is 0
V/Menu.cpp( 60): <line[0854] getFirstValueImages()> ************************MenuObj 1, getFirstValueImages menuIndex is 13
V/ResourceManager.cpp( 60): <line[1611] getResBmpSubMenuCheckbox()> 0:/full_img.fex not exist
V/MenuSystem( 60): <line[0376] HandleSubMenuChange()> xxxxxxxx
V/MenuSystem( 60): <line[0378] HandleSubMenuChange()> xxxxxxxx
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmcblk0p1
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:cblk0p1
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/Dialog.cpp( 60): <line[0081] ShowTipLabel()> <***ShowTipLabel ***>, labelIndex 14
V/Dialog.cpp( 60): <line[0064] getTipLabelData()> titleHeight is 40
V/Dialog.cpp( 60): <line[0141] ShowTipLabel()> ****************ptext:(null)
V/Dialog.cpp( 60): <line[0162] ShowTipLabel()> *****************text:妫€娴嬪埌SD鍗″凡鎻掑叆
V/TipLabel.cpp( 60): <line[0091] DialogProc()> set timeOut 3000 ms
I//system/bin/fsck_msdos( 57): ** /dev/block/vold/179:1
I//system/bin/fsck_msdos( 57): /dev/block/vold/179:1: FILESYSTEM CLEAN; SKIPPING CHECKS
D/Volume ( 57): line=619,FS checks /dev/block/vold/179:1
D/StorageMonitor( 60): call mListener->notify, mStatus = 2, mInserted = 1, mPath = /mnt/extsd.
D/VolumeManager( 57): VolumeManager----------------
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
D/Volume ( 57): ---createDeviceNode---path=/dev/block/vold/179:1
E/Volume ( 57): line=205,setState oldState=2,state=2
W/Volume ( 57): line=207,Duplicate state (2)
D/DirectVolume( 57): line=131,devtype=partition
D/DirectVolume( 57): handlePartitionAdded devpath=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1,mPartsEventCnt=0
D/DirectVolume( 57): handlePartitionAdded mDiskNumParts=1,mPartsEventCnt=1
D/Volume ( 57): line=198,mState=2
E/Volume ( 57): line=205,setState oldState=2,state=1
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/Volume ( 57): getShareFlags mShareFlags = 1
D/Volume ( 57): line=198,mState=1
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:80):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 2 (Pending) to 1 (Idle-Unmounted)
V/StorageMonitor( 60): line=166, notify: mStatus = 1, mPath = /mnt/extsd
D/StorageMonitor( 60): line=174,mShared=0, mSharing = 0, mFormated=0, mFormating = 0, mInserted = 1
D/StorageMonitor( 60): call mListener->notify, mStatus = 1, mInserted = 1, mPath = /mnt/extsd.
D/CommandListener( 57): CommandListener::VolumeCmd::runCommand
D/CommandListener( 57): argv[1]=mount
D/CommandListener( 57): 3333argv[1]=mount,argc=3
D/VolumeManager( 57): line=1116,mountVolume label=/mnt/extsd
D/Volume ( 57): line=198,mState=1
D/Volume ( 57): line=477,mountVol state : 1
D/Volume ( 57): line=198,mState=1
D/Volume ( 57): line=198,mState=1
D/DirectVolume( 57): getDeviceNodes mPartIdx=-1,mDiskNumParts=1
D/Volume ( 57): line=566,Volume::mountVol: mMountpoint /mnt/extsd
I/Volume ( 57): line=573,mountVol: n=1
I/Volume ( 57): line=581,/dev/block/vold/179:1 being considered for volume extsd
E/Volume ( 57): line=205,setState oldState=1,state=3
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:49):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=630 Volume extsd /mnt/extsd disk inserted (179:0)
W/StorageMonitor( 60): Error parsing status
V/StorageMonitor( 60): line=166, notify: mStatus = -1, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = -1, mInserted = 1, mPath = /mnt/extsd.
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:81):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 1 (Idle-Unmounted) to 3 (Checking)
V/StorageMonitor( 60): line=166, notify: mStatus = 3, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 3, mInserted = 1, mPath = /mnt/extsd.
D/StorageMonitor( 60): updateLoop finished
V/Menu.cpp( 60): <line[0079] MenuProc()> ******[debug_jaosn]:this message is STBM_MOUNT_TFCARD *******
V/Menu.cpp( 60): <line[0080] MenuProc()> ******[debug_jaosn]:this message is wParam :1*******
V/Menu.cpp( 60): <line[0084] MenuProc()> /mnt/extsd/full_img.fex not exist
V/Menu.cpp( 60): <line[0294] getMenuObj()> index is 0, current MenuObj is 0x0x40b4afc0
V/MenuSystem( 60): <line[0338] HandleSubMenuChange()> menuObj 1, set menuIndex false
V/ResourceManager.cpp( 60): <line[1787] setResBoolValue()> setResBoolValue: resID: 44, value: 0
I/ResourceManager.cpp( 60): <line[1845] setResBoolValue()> FIRMWARE: value is 0
V/Menu.cpp( 60): <line[0854] getFirstValueImages()> ************************MenuObj 1, getFirstValueImages menuIndex is 13
V/ResourceManager.cpp( 60): <line[1611] getResBmpSubMenuCheckbox()> 0:/full_img.fex not exist
V/MenuSystem( 60): <line[0376] HandleSubMenuChange()> xxxxxxxx
V/MenuSystem( 60): <line[0378] HandleSubMenuChange()> xxxxxxxx
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmcblk0p1
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:add@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:cblk0p1
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/Dialog.cpp( 60): <line[0081] ShowTipLabel()> <***ShowTipLabel ***>, labelIndex 14
V/Dialog.cpp( 60): <line[0064] getTipLabelData()> titleHeight is 40
V/Dialog.cpp( 60): <line[0141] ShowTipLabel()> ****************ptext:(null)
V/Dialog.cpp( 60): <line[0162] ShowTipLabel()> *****************text:妫€娴嬪埌SD鍗″凡鎻掑叆
V/TipLabel.cpp( 60): <line[0091] DialogProc()> set timeOut 3000 ms
I//system/bin/fsck_msdos( 57): ** /dev/block/vold/179:1
I//system/bin/fsck_msdos( 57): /dev/block/vold/179:1: FILESYSTEM CLEAN; SKIPPING CHECKS
D/Volume ( 57): line=619,FS checks /dev/block/vold/179:1
--------- beginning of /dev/log/system
I/Vold ( 57): Filesystem check completed OK
D/Vold ( 57): line=126,mount ret=0
E/Volume ( 57): line=642,Device /dev/block/vold/179:1, target /mnt/extsd mounted @ /mnt/secure/staging
E/Volume ( 57): line=205,setState oldState=3,state=4
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:74):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 3 (Checking) to 4 (Mounted)
V/StorageMonitor( 60): line=166, notify: mStatus = 4, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 4, mInserted = 1, mPath = /mnt/extsd.
V/StorageManager( 60): <line[0138] notify()> ~~mounted
D/StorageManager( 60): <line[0868] dbReset()> dbReset 868 0x40b5ef60
D/CedarXRecorder( 58): (f:setSdcardState, l:676) mbSdCardState[1]
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:33):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=200 11 volume operation succeeded
W/StorageMonitor( 60): Error parsing status
V/StorageMonitor( 60): line=166, notify: mStatus = -1, mPath = operation
D/StorageMonitor( 60): call mListener->notify, mStatus = -1, mInserted = 1, mPath = operation.
E/StorageManager( 60): <line[0846] getFiles()> /mnt/extsd/video/.thumb is not a regular file
E/StorageManager( 60): <line[0846] getFiles()> /mnt/extsd/photo/.thumb is not a regular file
D/StorageMonitor( 60): updateLoop finished
I/Vold ( 57): Filesystem check completed OK
D/Vold ( 57): line=126,mount ret=0
E/Volume ( 57): line=642,Device /dev/block/vold/179:1, target /mnt/extsd mounted @ /mnt/secure/staging
E/Volume ( 57): line=205,setState oldState=3,state=4
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x417c50b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:74):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 3 (Checking) to 4 (Mounted)
V/StorageMonitor( 60): line=166, notify: mStatus = 4, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 4, mInserted = 1, mPath = /mnt/extsd.
V/StorageManager( 60): <line[0138] notify()> ~~mounted
D/StorageManager( 60): <line[0868] dbReset()> dbReset 868 0x40b5ef60
D/CedarXRecorder( 58): (f:setSdcardState, l:676) mbSdCardState[1]
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:33):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=200 11 volume operation succeeded
W/StorageMonitor( 60): Error parsing status
V/StorageMonitor( 60): line=166, notify: mStatus = -1, mPath = operation
D/StorageMonitor( 60): call mListener->notify, mStatus = -1, mInserted = 1, mPath = operation.
E/StorageManager( 60): <line[0846] getFiles()> /mnt/extsd/video/.thumb is not a regular file
E/StorageManager( 60): <line[0846] getFiles()> /mnt/extsd/photo/.thumb is not a regular file
D/StorageMonitor( 60): updateLoop finished
log : 移除TF卡
root@camdroid:/ # [ 39.315047] [mmc]: mmc 0 detect change, present 0
[ 39.370116] mmc0: card 1234 removed
--------- beginning of /dev/log/main
[ 39.394177] [mmc]: sdc0 set ios: clk 0Hz bm OD pm OFF vdd 3.3V width 1 timing LEGACY(SDR12) dt B
[ 39.418076] [mmc]: sdc0 power_supply is null
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop remove@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmcblk0p1
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:remove@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:cblk0p1
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
D/VolumeManager( 57): VolumeManager----------------
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1
D/DirectVolume( 57): Volume extsd /mnt/extsd partition 179:1 removed
D/Volume ( 57): line=198,mState=4
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop remove@/devices/virtual/bdi/179:0
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :179:0
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:remove@/devices/virtual/bdi/179:0
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:i/179:0
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop remove@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmcblk0
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:remove@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:mmcblk0
D/CedarXRecorder( 58): (f:setSdcardState, l:676) mbSdCardState[0]
V/RecordPreview( 60): <line[1427] stopRecord()> mCamExist recorder_idx :0
E/RecordPreview( 60): <line[1433] stopRecord()> !!!!!cam_type: 0, recording is stopped
V/RecordPreview( 60): <line[1485] stopRecord()> fail to stop recorder csi
V/RecordPreview( 60): <line[1427] stopRecord()> mCamExist recorder_idx :1
V/RecordPreview( 60): <line[1429] stopRecord()> mRecorder[1] is NULL
V/StorageManager( 60): <line[1575] startSyncThread()> !!mSST is not null
D/Volume ( 57): Volume::unmountVol
D/Volume ( 57): line=198,mState=4
E/Volume ( 57): line=205,setState oldState=4,state=5
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x41d130b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:76):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 4 (Mounted) to 5 (Unmounting)
V/StorageMonitor( 60): line=166, notify: mStatus = 5, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 5, mInserted = 1, mPath = /mnt/extsd.
V/StorageManager( 60): <line[0116] notify()> ~~unmounting
V/StorageManager( 60): <line[0170] isInsert()> ------------checkPath = /dev/block/mmcblk0p1
V/StorageManager( 60): <line[0172] isInsert()> isInsert fopen fail, checkPath = /dev/block/mmcblk0p1
D/CedarXRecorder( 58): (f:setSdcardState, l:676) mbSdCardState[0]
V/RecordPreview( 60): <line[1427] stopRecord()> mCamExist recorder_idx :0
E/RecordPreview( 60): <line[1433] stopRecord()> !!!!!cam_type: 0, recording is stopped
V/RecordPreview( 60): <line[1485] stopRecord()> fail to stop recorder csi
V/RecordPreview( 60): <line[1427] stopRecord()> mCamExist recorder_idx :1
V/RecordPreview( 60): <line[1429] stopRecord()> mRecorder[1] is NULL
V/StorageManager( 60): <line[1575] startSyncThread()> !!mSST is not null
V/MainWindow.cpp( 60): <line[1334] notify()> -----------umount, stopRecord and setSdcardState(false)
E/Volume ( 57): line=227,sendBroadcast end
D/StorageMonitor( 60): updateLoop finished
V/Menu.cpp( 60): <line[0079] MenuProc()> ******[debug_jaosn]:this message is STBM_MOUNT_TFCARD *******
V/Menu.cpp( 60): <line[0080] MenuProc()> ******[debug_jaosn]:this message is wParam :0*******
V/Menu.cpp( 60): <line[0084] MenuProc()> /mnt/extsd/full_img.fex not exist
V/Menu.cpp( 60): <line[0294] getMenuObj()> index is 0, current MenuObj is 0x0x4203d220
V/MenuSystem( 60): <line[0338] HandleSubMenuChange()> menuObj 1, set menuIndex false
V/ResourceManager.cpp( 60): <line[1787] setResBoolValue()> setResBoolValue: resID: 44, value: 0
I/ResourceManager.cpp( 60): <line[1845] setResBoolValue()> FIRMWARE: value is 0
V/Menu.cpp( 60): <line[0854] getFirstValueImages()> ************************MenuObj 1, getFirstValueImages menuIndex is 13
V/ResourceManager.cpp( 60): <line[1611] getResBmpSubMenuCheckbox()> 0:/full_img.fex not exist
V/MenuSystem( 60): <line[0376] HandleSubMenuChange()> xxxxxxxx
V/MenuSystem( 60): <line[0378] HandleSubMenuChange()> xxxxxxxx
V/EventManager( 60): <line[0643] ueventLoop()> uevent_loop remove@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234
V/EventManager( 60): <line[0367] isUVCStr()> isUVCstr :mmc0:1234
V/EventManager( 60): <line[0597] checkTFCard()> tmp_start:remove@/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234
V/EventManager( 60): <line[0598] checkTFCard()> tmp_end:c0:1234
V/EventManager( 60): <line[0693] ueventLoop()> The event is not handled
V/Dialog.cpp( 60): <line[0081] ShowTipLabel()> <***ShowTipLabel ***>, labelIndex 15
V/Dialog.cpp( 60): <line[0064] getTipLabelData()> titleHeight is 40
V/Dialog.cpp( 60): <line[0141] ShowTipLabel()> ****************ptext:(null)
V/Dialog.cpp( 60): <line[0162] ShowTipLabel()> *****************text:妫€娴嬪埌SD鍗″凡鎷斿嚭
V/TipLabel.cpp( 60): <line[0091] DialogProc()> set timeOut 3000 ms
D/Volume ( 57): mPartIdx = -1, mMountedPartNum = 1
D/Volume ( 57): Volume::unmountVol 3333333
D/Volume ( 57): Unmounting---------- {/mnt/extsd}, force = 1
D/Volume ( 57): Unmounting {/mnt/extsd}, force = 1
I/Volume ( 57): /mnt/extsd sucessfully unmounted
D/Volume ( 57): /mnt/extsd unmounted sucessfully
E/Volume ( 57): line=205,setState oldState=5,state=1
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x41d130b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
D/DirectVolume( 57): Crisis averted
D/VolumeManager( 57): VolumeManager----------------
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
D/DirectVolume( 57): line=94,dp=/devices/platform/sunxi-mmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0
D/Volume ( 57): line=198,mState=1
D/Volume ( 57): line=198,mState=1
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x41d130b8 ++++++++++++
D/Volume ( 57): Volume::unmountVol
D/Volume ( 57): line=198,mState=1
E/Volume ( 57): Volume extsd unmount request when not mounted
E/Volume ( 57): line=205,setState oldState=1,state=0
E/VolumeManager( 57): +++++VolumeManager:: mBroadcaster=0x41d130b8 ++++++++++++
E/Volume ( 57): line=224,sendBroadcast start
E/Volume ( 57): line=227,sendBroadcast end
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:83):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 5 (Unmounting) to 1 (Idle-Unmounted)
V/StorageMonitor( 60): line=166, notify: mStatus = 1, mPath = /mnt/extsd
D/StorageMonitor( 60): line=174,mShared=0, mSharing = 0, mFormated=0, mFormating = 0, mInserted = 1
E/StorageMonitor( 60): line=205,Status=5
D/StorageMonitor( 60): call mListener->notify, mStatus = 1, mInserted = 1, mPath = /mnt/extsd.
D/CommandListener( 57): CommandListener::VolumeCmd::runCommand
D/CommandListener( 57): argv[1]=share
D/VolumeManager( 57): VolumeManager shareVolume label=/mnt/extsd
D/Volume ( 57): line=198,mState=0
E/VolumeManager( 57): VolumeManager shareVolume State_NoMedia444
E/CommandListener( 57): 22222VolumeCmd::runCommand volume operation failed
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:74):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=631 Volume extsd /mnt/extsd state changed from 1 (somestate) to 9 (Remove)
V/StorageMonitor( 60): line=166, notify: mStatus = 9, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 9, mInserted = 0, mPath = /mnt/extsd.
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:81):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=605 Volume extsd /mnt/extsd state changed from 1 (Idle-Unmounted) to 0 (No-Media)
V/StorageMonitor( 60): line=166, notify: mStatus = 0, mPath = /mnt/extsd
D/StorageMonitor( 60): call mListener->notify, mStatus = 0, mInserted = 0, mPath = /mnt/extsd.
V/StorageManager( 60): <line[0116] notify()> ~~unmounting
D/StorageMonitor( 60): updateLoop finished
V/StorageMonitor( 60): StorageMonitor::updateLoop read snd_buf(ret:47):
E/StorageMonitor( 60): 33333333aaaaaaaaaaaa src=401 13 volume operation failed (No such device)
W/StorageMonitor( 60): Error parsing status
V/StorageMonitor( 60): line=166, notify: mStatus = -1, mPath = operation
D/StorageMonitor( 60): call mListener->notify, mStatus = -1, mInserted = 0, mPath = operation.
D/StorageMonitor( 60): updateLoop finished
V/TipLabel.cpp( 60): <line[0049] timerCallback()> timerCallback
V/TipLabel.cpp( 60): <line[0056] timerCallback()> timeout timer timerCallback
I/TipLabel.cpp( 60): <line[0164] DialogProc()> MSG_CLOSE_LOWPOWER_DIALOG