adb: Fix the 'adb reboot sideload' for A/B devices.
We used to write the command file (/cache/recovery/command) to trigger the sideload mode. A/B devices don't support that (may not have /cache paritition). This CL switches to using libbootloader_message which writes the command to BCB (bootloader control block) instead. Test: "adb root && adb reboot sideload" reboots sailfish into recovery sideload mode. Change-Id: I158fd7cbcfa9a5d0609f1f684a2d03675217628f
This commit is contained in:
parent
491c3871a0
commit
40e0ec918e
2 changed files with 8 additions and 11 deletions
|
@ -330,6 +330,7 @@ LOCAL_STRIP_MODULE := keep_symbols
|
|||
LOCAL_STATIC_LIBRARIES := \
|
||||
libadbd \
|
||||
libbase \
|
||||
libbootloader_message \
|
||||
libfs_mgr \
|
||||
libfec \
|
||||
libfec_rs \
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
#if !ADB_HOST
|
||||
#include <android-base/properties.h>
|
||||
#include <bootloader_message/bootloader_message.h>
|
||||
#include <cutils/android_reboot.h>
|
||||
#include <private/android_logger.h>
|
||||
#endif
|
||||
|
@ -133,17 +134,12 @@ static bool reboot_service_impl(int fd, const char* arg) {
|
|||
return false;
|
||||
}
|
||||
|
||||
const char* const recovery_dir = "/cache/recovery";
|
||||
const char* const command_file = "/cache/recovery/command";
|
||||
// Ensure /cache/recovery exists.
|
||||
if (adb_mkdir(recovery_dir, 0770) == -1 && errno != EEXIST) {
|
||||
D("Failed to create directory '%s': %s", recovery_dir, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
bool write_status = android::base::WriteStringToFile(
|
||||
auto_reboot ? "--sideload_auto_reboot" : "--sideload", command_file);
|
||||
if (!write_status) {
|
||||
const std::vector<std::string> options = {
|
||||
auto_reboot ? "--sideload_auto_reboot" : "--sideload"
|
||||
};
|
||||
std::string err;
|
||||
if (!write_bootloader_message(options, &err)) {
|
||||
D("Failed to set bootloader message: %s", err.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue