fastbootd: Add command to remove GSI installs
Note: this only removes the bootable marker, since we're unable to remove the userdata files within recovery. Bug: 121210348 Test: fastboot gsi wipe fastboot gsi disable Change-Id: I64fe848c787d426ae9d18a1557a9d6b340bfc2cf
This commit is contained in:
parent
0e330f12bc
commit
1d504e3342
|
@ -132,6 +132,7 @@ cc_binary {
|
|||
"libext2_uuid",
|
||||
"libext4_utils",
|
||||
"libfs_mgr",
|
||||
"libgsi",
|
||||
"libhidlbase",
|
||||
"libhidltransport",
|
||||
"libhwbinder",
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#define FB_CMD_RESIZE_PARTITION "resize-logical-partition"
|
||||
#define FB_CMD_UPDATE_SUPER "update-super"
|
||||
#define FB_CMD_OEM "oem"
|
||||
#define FB_CMD_GSI "gsi"
|
||||
|
||||
#define RESPONSE_OKAY "OKAY"
|
||||
#define RESPONSE_FAIL "FAIL"
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <cutils/android_reboot.h>
|
||||
#include <ext4_utils/wipe.h>
|
||||
#include <fs_mgr.h>
|
||||
#include <libgsi/libgsi.h>
|
||||
#include <liblp/builder.h>
|
||||
#include <liblp/liblp.h>
|
||||
#include <uuid/uuid.h>
|
||||
|
@ -460,3 +461,22 @@ bool UpdateSuperHandler(FastbootDevice* device, const std::vector<std::string>&
|
|||
bool wipe = (args.size() >= 3 && args[2] == "wipe");
|
||||
return UpdateSuper(device, args[1], wipe);
|
||||
}
|
||||
|
||||
bool GsiHandler(FastbootDevice* device, const std::vector<std::string>& args) {
|
||||
if (!android::gsi::IsGsiInstalled()) {
|
||||
return device->WriteStatus(FastbootResult::FAIL, "No GSI is installed");
|
||||
}
|
||||
if (args.size() != 2) {
|
||||
return device->WriteFail("Invalid arguments");
|
||||
}
|
||||
if (args[1] == "wipe") {
|
||||
if (!android::gsi::UninstallGsi()) {
|
||||
return device->WriteStatus(FastbootResult::FAIL, strerror(errno));
|
||||
}
|
||||
} else if (args[1] == "disable") {
|
||||
if (!android::gsi::DisableGsi()) {
|
||||
return device->WriteStatus(FastbootResult::FAIL, strerror(errno));
|
||||
}
|
||||
}
|
||||
return device->WriteStatus(FastbootResult::OKAY, "Success");
|
||||
}
|
||||
|
|
|
@ -48,3 +48,4 @@ bool DeletePartitionHandler(FastbootDevice* device, const std::vector<std::strin
|
|||
bool ResizePartitionHandler(FastbootDevice* device, const std::vector<std::string>& args);
|
||||
bool UpdateSuperHandler(FastbootDevice* device, const std::vector<std::string>& args);
|
||||
bool OemCmdHandler(FastbootDevice* device, const std::vector<std::string>& args);
|
||||
bool GsiHandler(FastbootDevice* device, const std::vector<std::string>& args);
|
||||
|
|
|
@ -53,6 +53,7 @@ FastbootDevice::FastbootDevice()
|
|||
{FB_CMD_RESIZE_PARTITION, ResizePartitionHandler},
|
||||
{FB_CMD_UPDATE_SUPER, UpdateSuperHandler},
|
||||
{FB_CMD_OEM, OemCmdHandler},
|
||||
{FB_CMD_GSI, GsiHandler},
|
||||
}),
|
||||
transport_(std::make_unique<ClientUsbTransport>()),
|
||||
boot_control_hal_(IBootControl::getService()),
|
||||
|
|
|
@ -387,6 +387,7 @@ static int show_help() {
|
|||
" Format a flash partition.\n"
|
||||
" set_active SLOT Set the active slot.\n"
|
||||
" oem [COMMAND...] Execute OEM-specific command.\n"
|
||||
" gsi wipe|disable Wipe or disable a GSI installation (fastbootd only).\n"
|
||||
"\n"
|
||||
"boot image:\n"
|
||||
" boot KERNEL [RAMDISK [SECOND]]\n"
|
||||
|
@ -1926,6 +1927,16 @@ int FastBootTool::Main(int argc, char* argv[]) {
|
|||
std::string partition = next_arg(&args);
|
||||
std::string size = next_arg(&args);
|
||||
fb->ResizePartition(partition, size);
|
||||
} else if (command == "gsi") {
|
||||
if (args.empty()) {
|
||||
syntax_error("missing 'wipe' or 'disable' argument");
|
||||
} else if (args.size() == 1 && args[0] == "wipe") {
|
||||
fb->RawCommand("gsi:wipe", "wiping GSI");
|
||||
} else if (args.size() == 1 && args[0] == "disable") {
|
||||
fb->RawCommand("gsi:disable", "disabling GSI");
|
||||
} else {
|
||||
syntax_error("expected 'wipe' or 'disable'");
|
||||
}
|
||||
} else {
|
||||
syntax_error("unknown command %s", command.c_str());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue