android6.0 mount failed

mount失败有两个原因:

1)配置文件配置出错

android6.0 vold进程中会读取配置文件 /fstab.XXX

 if (process_config(vm)) {
        PLOG(ERROR) << "Error reading configuration... continuing anyways";
    }


std::string DefaultFstabPath() {
    char hardware[PROPERTY_VALUE_MAX];
    property_get("ro.hardware", hardware, "");
    return StringPrintf("/fstab.%s", hardware);
}


把路径加到一个集合中:

void VolumeManager::addDiskSource(const std::shared_ptr& diskSource) {
    mDiskSources.push_back(diskSource);
}

当插入一个设备时,vold会检测这个设备的是否与配置文件中的设备一值,一致才会进行后续的mount操作。主要检测'DEVPATH=/devices/soc0/soc.0/2100000.aips-bus/2190000.usdhc/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1'

04-23 20:12:56.923   186   211 V vold    : ----------------
04-23 20:12:56.923   186   211 V vold    : handleBlockEvent with action 2
04-23 20:12:56.923   186   211 D NetlinkEvent: NL param 'DEVPATH=/devices/soc0/soc.0/2100000.aips-bus/2190000.usdhc/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1'
04-23 20:12:56.923   186   211 D NetlinkEvent: NL param 'MAJOR=179'
04-23 20:12:56.923   186   211 D NetlinkEvent: NL param 'MINOR=1'
04-23 20:12:56.923   186   211 D NetlinkEvent: NL param 'DEVNAME=mmcblk0p1'
04-23 20:12:56.923   186   211 D NetlinkEvent: NL param 'DEVTYPE=partition'
04-23 20:12:56.923   186   211 D NetlinkEvent: NL param 'PARTN=1'

而我的配置文件内容如下:

/devices/soc0/soc.0/2100000.aips-bus/2198000.usdhc/mmc_host* auto auto defaults voldmanaged=sdcard:auto,encryptable=userdata 修改即可


2)setexeccon()函数报错,这个函数跟selinux相关,已经把selinux功能整个去掉了,但是这里还是报错。不知道为什么,没有找到函数实现。屏蔽这个函数就可以了。

if (setexeccon(context)) {
        LOG(ERROR) << "Failed to setexeccon";
        abort();
    }


你可能感兴趣的:(android)