recovery: Map logical partitions before installation
Change-Id: I785b49086a2baf462e97be831b495d7db72f7a42
This commit is contained in:
parent
426398f75b
commit
2034cc3d05
3 changed files with 20 additions and 1 deletions
|
@ -583,7 +583,7 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
case Device::ENTER_FASTBOOT:
|
case Device::ENTER_FASTBOOT:
|
||||||
if (android::fs_mgr::LogicalPartitionsMapped()) {
|
if (logical_partitions_mapped()) {
|
||||||
ui->Print("Partitions may be mounted - rebooting to enter fastboot.");
|
ui->Print("Partitions may be mounted - rebooting to enter fastboot.");
|
||||||
Reboot("fastboot");
|
Reboot("fastboot");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -61,3 +61,5 @@ int setup_install_mounts();
|
||||||
|
|
||||||
// Returns true if there is /cache in the volumes.
|
// Returns true if there is /cache in the volumes.
|
||||||
bool HasCache();
|
bool HasCache();
|
||||||
|
|
||||||
|
bool logical_partitions_mapped();
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <ext4_utils/wipe.h>
|
#include <ext4_utils/wipe.h>
|
||||||
#include <fs_mgr.h>
|
#include <fs_mgr.h>
|
||||||
#include <fs_mgr/roots.h>
|
#include <fs_mgr/roots.h>
|
||||||
|
#include <fs_mgr_dm_linear.h>
|
||||||
|
|
||||||
#include "otautil/sysutil.h"
|
#include "otautil/sysutil.h"
|
||||||
|
|
||||||
|
@ -371,6 +372,8 @@ int format_volume(const std::string& volume) {
|
||||||
return format_volume(volume, "", "");
|
return format_volume(volume, "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool logical_partitions_auto_mapped = false;
|
||||||
|
|
||||||
int setup_install_mounts() {
|
int setup_install_mounts() {
|
||||||
if (fstab.empty()) {
|
if (fstab.empty()) {
|
||||||
LOG(ERROR) << "can't set up install mounts: no fstab loaded";
|
LOG(ERROR) << "can't set up install mounts: no fstab loaded";
|
||||||
|
@ -394,6 +397,16 @@ int setup_install_mounts() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Map logical partitions
|
||||||
|
if (android::base::GetBoolProperty("ro.boot.dynamic_partitions", false) &&
|
||||||
|
!logical_partitions_mapped()) {
|
||||||
|
std::string super_name = fs_mgr_get_super_partition_name();
|
||||||
|
if (!android::fs_mgr::CreateLogicalPartitions("/dev/block/by-name/" + super_name)) {
|
||||||
|
LOG(ERROR) << "Failed to map logical partitions";
|
||||||
|
} else {
|
||||||
|
logical_partitions_auto_mapped = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,3 +415,7 @@ bool HasCache() {
|
||||||
static bool has_cache = volume_for_mount_point(CACHE_ROOT) != nullptr;
|
static bool has_cache = volume_for_mount_point(CACHE_ROOT) != nullptr;
|
||||||
return has_cache;
|
return has_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool logical_partitions_mapped() {
|
||||||
|
return android::fs_mgr::LogicalPartitionsMapped() || logical_partitions_auto_mapped;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue