From 2c356bb91ebf146489913cef713392987c3e811b Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Tue, 22 Oct 2019 12:30:36 -0700 Subject: [PATCH] adb: replace reboot service with exec of /system/bin/reboot. Test: adb reboot Test: adb reboot fastboot Change-Id: Ia4146dde7ef3ae00a782dbe68aff166d63eabdb9 --- adb/Android.bp | 5 +-- adb/daemon/reboot_service.cpp | 84 ----------------------------------- adb/daemon/reboot_service.h | 25 ----------- adb/daemon/services.cpp | 7 ++- reboot/Android.bp | 1 + 5 files changed, 6 insertions(+), 116 deletions(-) delete mode 100644 adb/daemon/reboot_service.cpp delete mode 100644 adb/daemon/reboot_service.h diff --git a/adb/Android.bp b/adb/Android.bp index d79a97fc4..d14fe56bb 100644 --- a/adb/Android.bp +++ b/adb/Android.bp @@ -428,11 +428,9 @@ cc_library { "daemon/abb_service.cpp", "daemon/framebuffer_service.cpp", "daemon/mdns.cpp", - "daemon/reboot_service.cpp", "daemon/restart_service.cpp", ], shared_libs: [ - "libbootloader_message", "libmdnssd", "libselinux", ], @@ -511,6 +509,7 @@ phony { name: "adbd_system_binaries", required: [ "abb", + "reboot", "set-verity-state", ] } @@ -518,6 +517,7 @@ phony { phony { name: "adbd_system_binaries_recovery", required: [ + "reboot.recovery", ], } @@ -616,7 +616,6 @@ cc_test { static_libs: [ "libadbd", "libbase", - "libbootloader_message", "libcutils", "libcrypto_utils", "libcrypto_static", diff --git a/adb/daemon/reboot_service.cpp b/adb/daemon/reboot_service.cpp deleted file mode 100644 index 13398af46..000000000 --- a/adb/daemon/reboot_service.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define TRACE_TAG SERVICES - -#include "sysdeps.h" - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include "adb_io.h" -#include "adb_unique_fd.h" - -void reboot_service(unique_fd fd, const std::string& arg) { - std::string reboot_arg = arg; - sync(); - - if (reboot_arg.empty()) reboot_arg = "adb"; - std::string reboot_string = android::base::StringPrintf("reboot,%s", reboot_arg.c_str()); - - if (reboot_arg == "fastboot" && - android::base::GetBoolProperty("ro.boot.dynamic_partitions", false) && - access("/dev/socket/recovery", F_OK) == 0) { - LOG(INFO) << "Recovery specific reboot fastboot"; - /* - * The socket is created to allow switching between recovery and - * fastboot. - */ - android::base::unique_fd sock(socket(AF_UNIX, SOCK_STREAM, 0)); - if (sock < 0) { - WriteFdFmt(fd, "reboot (%s) create\n", strerror(errno)); - PLOG(ERROR) << "Creating recovery socket failed"; - return; - } - - sockaddr_un addr = {.sun_family = AF_UNIX}; - strncpy(addr.sun_path, "/dev/socket/recovery", sizeof(addr.sun_path) - 1); - if (connect(sock.get(), reinterpret_cast(&addr), sizeof(addr)) == -1) { - WriteFdFmt(fd, "reboot (%s) connect\n", strerror(errno)); - PLOG(ERROR) << "Couldn't connect to recovery socket"; - return; - } - const char msg_switch_to_fastboot = 'f'; - auto ret = adb_write(sock, &msg_switch_to_fastboot, sizeof(msg_switch_to_fastboot)); - if (ret != sizeof(msg_switch_to_fastboot)) { - WriteFdFmt(fd, "reboot (%s) write\n", strerror(errno)); - PLOG(ERROR) << "Couldn't write message to recovery socket to switch to fastboot"; - return; - } - } else { - if (!android::base::SetProperty(ANDROID_RB_PROPERTY, reboot_string)) { - WriteFdFmt(fd.get(), "reboot (%s) failed\n", reboot_string.c_str()); - return; - } - } - // Don't return early. Give the reboot command time to take effect - // to avoid messing up scripts which do "adb reboot && adb wait-for-device" - while (true) { - pause(); - } -} diff --git a/adb/daemon/reboot_service.h b/adb/daemon/reboot_service.h deleted file mode 100644 index f68913e83..000000000 --- a/adb/daemon/reboot_service.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -#include "adb_unique_fd.h" - -#if defined(__ANDROID__) -void reboot_service(unique_fd fd, const std::string& arg); -#endif diff --git a/adb/daemon/services.cpp b/adb/daemon/services.cpp index e38bb0053..a44c10bb7 100644 --- a/adb/daemon/services.cpp +++ b/adb/daemon/services.cpp @@ -53,7 +53,6 @@ #include "daemon/file_sync_service.h" #include "daemon/framebuffer_service.h" -#include "daemon/reboot_service.h" #include "daemon/restart_service.h" #include "daemon/shell_service.h" @@ -253,9 +252,9 @@ unique_fd daemon_service_to_fd(std::string_view name, atransport* transport) { cmd += name; return StartSubprocess(cmd, nullptr, SubprocessType::kRaw, SubprocessProtocol::kNone); } else if (android::base::ConsumePrefix(&name, "reboot:")) { - std::string arg(name); - return create_service_thread("reboot", - std::bind(reboot_service, std::placeholders::_1, arg)); + std::string cmd = "/system/bin/reboot "; + cmd += name; + return StartSubprocess(cmd, nullptr, SubprocessType::kRaw, SubprocessProtocol::kNone); } else if (name.starts_with("root:")) { return create_service_thread("root", restart_root_service); } else if (name.starts_with("unroot:")) { diff --git a/reboot/Android.bp b/reboot/Android.bp index 805fd9a1b..cc717234e 100644 --- a/reboot/Android.bp +++ b/reboot/Android.bp @@ -5,4 +5,5 @@ cc_binary { srcs: ["reboot.c"], shared_libs: ["libcutils"], cflags: ["-Werror"], + recovery_available: true, }