From 39143a941fcf8b252b2fcafb3fd0aa67c8f16ded Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Mon, 26 Oct 2020 12:43:12 -0700 Subject: [PATCH] Fix path conflict for vendor_ramdisk_available ... and ramdisk_available modules. If a module is both vendor_ramdisk_available and ramdisk_available, on a device that mark recovery_as_boot and move_recovery_resources_to_vendor_boot simultaneously (and incorrectly), both will be installed to recovery/root/first_stage_ramdisk. Fix the path conflict of the two variants by moving the vendor_ramdisk variant to vendor-ramdisk/first_stage_ramdisk instead. Also update comments for Vendor_ramdisk_available. Test: m nothing -j Bug: 156098440 Change-Id: I2b776b6fd8f5a2c361c0f6a89231e3cebc2646f0 --- android/paths.go | 6 +++++- cc/cc.go | 12 ++++++++++-- etc/prebuilt_etc.go | 8 ++++++++ sh/sh_binary.go | 8 ++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/android/paths.go b/android/paths.go index 4eb9d2030..c0d6a6947 100644 --- a/android/paths.go +++ b/android/paths.go @@ -1378,8 +1378,12 @@ func modulePartition(ctx ModuleInstallPathContext, os OsType) string { partition += "/system" } } else if ctx.InstallInVendorRamdisk() { + // The module is only available after switching root into + // /first_stage_ramdisk. To expose the module before switching root + // on a device without a dedicated recovery partition, install the + // recovery variant. if ctx.DeviceConfig().BoardMoveRecoveryResourcesToVendorBoot() { - partition = "recovery/root/first_stage_ramdisk" + partition = "vendor-ramdisk/first_stage_ramdisk" } else { partition = "vendor-ramdisk" } diff --git a/cc/cc.go b/cc/cc.go index c1a432743..c93bdebb5 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -255,10 +255,18 @@ type BaseProperties struct { // file Logtags []string - // Make this module available when building for ramdisk + // Make this module available when building for ramdisk. + // On device without a dedicated recovery partition, the module is only + // available after switching root into + // /first_stage_ramdisk. To expose the module before switching root, install + // the recovery variant instead. Ramdisk_available *bool - // Make this module available when building for vendor ramdisk + // Make this module available when building for vendor ramdisk. + // On device without a dedicated recovery partition, the module is only + // available after switching root into + // /first_stage_ramdisk. To expose the module before switching root, install + // the recovery variant instead. Vendor_ramdisk_available *bool // Make this module available when building for recovery diff --git a/etc/prebuilt_etc.go b/etc/prebuilt_etc.go index 337ad88f2..44b814954 100644 --- a/etc/prebuilt_etc.go +++ b/etc/prebuilt_etc.go @@ -59,9 +59,17 @@ type prebuiltEtcProperties struct { Filename_from_src *bool `android:"arch_variant"` // Make this module available when building for ramdisk. + // On device without a dedicated recovery partition, the module is only + // available after switching root into + // /first_stage_ramdisk. To expose the module before switching root, install + // the recovery variant instead. Ramdisk_available *bool // Make this module available when building for vendor ramdisk. + // On device without a dedicated recovery partition, the module is only + // available after switching root into + // /first_stage_ramdisk. To expose the module before switching root, install + // the recovery variant instead. Vendor_ramdisk_available *bool // Make this module available when building for recovery. diff --git a/sh/sh_binary.go b/sh/sh_binary.go index 6f40ae489..7e5c3440a 100644 --- a/sh/sh_binary.go +++ b/sh/sh_binary.go @@ -66,9 +66,17 @@ type shBinaryProperties struct { Symlinks []string `android:"arch_variant"` // Make this module available when building for ramdisk. + // On device without a dedicated recovery partition, the module is only + // available after switching root into + // /first_stage_ramdisk. To expose the module before switching root, install + // the recovery variant instead. Ramdisk_available *bool // Make this module available when building for vendor ramdisk. + // On device without a dedicated recovery partition, the module is only + // available after switching root into + // /first_stage_ramdisk. To expose the module before switching root, install + // the recovery variant instead. Vendor_ramdisk_available *bool // Make this module available when building for recovery.