發現系統啓動後,同一個usb設備被掛載了多次,導致文件管理器相關應用顯示出現問題。usb設備掛載的流程在android/system/vold/Volume.cpp中,由Volume::mountUdiskVol函數處理。在mount前判斷該設備是否已被掛載,可解決該問題:
bool isUsbDeviceMounted(const char *path) {
char device[256];
char mount_path[256];
char rest[256];
FILE *fp;
char line[1024];
if (!(fp = fopen("/proc/mounts", "r"))) {
SLOGE("Error opening /proc/mounts (%s)", strerror(errno));
return false;
}
while(fgets(line, sizeof(line), fp)) {
line[strlen(line)-1] = '\0';
sscanf(line, "%255s %255s %255s\n", device, mount_path, rest);
if (!strcmp(device, path)) {
fclose(fp);
return true;
}
}
fclose(fp);
return false;
}
int Volume::mountUdiskVol() {
...
for (it = mUdiskPartition->begin(); it != mUdiskPartition->end();it++)
{
imajor =(*it)->imajor;
iminor =(*it)->iminor;
sprintf(devicePath, "/dev/block/vold/%d:%d", imajor,iminor);
if (isUsbDeviceMounted(devicePath))
continue;
...
}
...
}