diff options
author | Steven Moreland <smoreland@google.com> | 2024-02-22 19:16:46 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2024-02-22 19:16:46 +0000 |
commit | 8f3eb1eb69fbe6718d15c14851efce006ab68fea (patch) | |
tree | 804861929c10d000c314282e51d66700f3a290e3 | |
parent | 75ee54143178cc843e44b69d5f318c3795950d1d (diff) | |
parent | 1dba6a8129672af9fffcbda45c9c7bc3cbc69aa1 (diff) | |
download | recovery-8f3eb1eb69fbe6718d15c14851efce006ab68fea.tar.gz |
intro misctrl am: 1dba6a8129
Original change: https://android-review.googlesource.com/c/platform/bootable/recovery/+/2966070
Change-Id: I39bc4b1309e82064234a8f6d3c63e91e8e98d4ba
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | bootloader_message/Android.bp | 11 | ||||
-rw-r--r-- | bootloader_message/bootloader_message.cpp | 18 | ||||
-rw-r--r-- | bootloader_message/include/bootloader_message/bootloader_message.h | 4 | ||||
-rw-r--r-- | bootloader_message/misctrl.rc | 4 | ||||
-rw-r--r-- | bootloader_message/misctrl_main.cpp | 61 |
5 files changed, 98 insertions, 0 deletions
diff --git a/bootloader_message/Android.bp b/bootloader_message/Android.bp index 76226773..dcb6c3c2 100644 --- a/bootloader_message/Android.bp +++ b/bootloader_message/Android.bp @@ -39,6 +39,17 @@ cc_defaults { export_include_dirs: ["include"], } +cc_binary { + name: "misctrl", + shared_libs: [ + "libbase", + "libbootloader_message", + "liblog", + ], + init_rc: ["misctrl.rc"], + srcs: ["misctrl_main.cpp"], +} + cc_library { name: "libbootloader_message", defaults: [ diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp index e9dd0d4d..734ead12 100644 --- a/bootloader_message/bootloader_message.cpp +++ b/bootloader_message/bootloader_message.cpp @@ -26,6 +26,7 @@ #include <vector> #include <android-base/file.h> +#include <android-base/hex.h> #include <android-base/properties.h> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> @@ -324,6 +325,23 @@ bool WriteMiscKcmdlineMessage(const misc_kcmdline_message& message, std::string* offsetof(misc_system_space_layout, kcmdline_message), err); } +bool CheckReservedSystemSpaceEmpty(bool* empty, std::string* err) { + constexpr size_t kReservedSize = SYSTEM_SPACE_SIZE_IN_MISC - sizeof(misc_system_space_layout); + + uint8_t space[kReservedSize]; + if (!ReadMiscPartitionSystemSpace(&space, kReservedSize, sizeof(misc_system_space_layout), err)) { + return false; + } + + *empty = space[0] == 0 && 0 == memcmp(space, space + 1, kReservedSize - 1); + + if (!*empty) { + *err = android::base::HexString(space, kReservedSize); + } + + return true; +} + extern "C" bool write_reboot_bootloader(void) { std::string err; return write_reboot_bootloader(&err); diff --git a/bootloader_message/include/bootloader_message/bootloader_message.h b/bootloader_message/include/bootloader_message/bootloader_message.h index 642f6533..39d3da9c 100644 --- a/bootloader_message/include/bootloader_message/bootloader_message.h +++ b/bootloader_message/include/bootloader_message/bootloader_message.h @@ -216,6 +216,10 @@ bool WriteMiscMemtagMessage(const misc_memtag_message& message, std::string* err // Read or write the kcmdline message from system space in /misc. bool ReadMiscKcmdlineMessage(misc_kcmdline_message* message, std::string* err); bool WriteMiscKcmdlineMessage(const misc_kcmdline_message& message, std::string* err); + +// Check reserved system space. +bool CheckReservedSystemSpaceEmpty(bool* empty, std::string* err); + #else #include <stdbool.h> diff --git a/bootloader_message/misctrl.rc b/bootloader_message/misctrl.rc new file mode 100644 index 00000000..5293bf2d --- /dev/null +++ b/bootloader_message/misctrl.rc @@ -0,0 +1,4 @@ +service misctrl /system/bin/misctrl + user root # for misc partition access + class core + oneshot diff --git a/bootloader_message/misctrl_main.cpp b/bootloader_message/misctrl_main.cpp new file mode 100644 index 00000000..ddaa999a --- /dev/null +++ b/bootloader_message/misctrl_main.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2024 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. + */ +#include <bootloader_message/bootloader_message.h> +#include <log/log.h> + +#include <string> + +#include <cstdio> + +static void log(const char* fmt, ...) __attribute__((format(printf, 1, 2))); +static void log(const char* fmt, ...) { + va_list va; + va_start(va, fmt); + + va_list vb; + va_copy(vb, va); + + __android_log_vprint(ANDROID_LOG_ERROR, "misctrl", fmt, va); + va_end(va); + + vfprintf(stderr, fmt, vb); + fprintf(stderr, "\n"); + va_end(vb); +} + +static int check_reserved_space() { + bool empty; + std::string err; + bool success = CheckReservedSystemSpaceEmpty(&empty, &err); + if (!success) { + log("Could not read reserved space: %s", err.c_str()); + return 1; + } + log("System reserved space empty? %d.", empty); + + if (!err.empty()) { + constexpr size_t kPrintChunkSize = 256; + for (size_t i = 0; i < err.size(); i += kPrintChunkSize) { + log("DATA: %s", err.substr(i, kPrintChunkSize).c_str()); + } + } + + return empty ? 0 : 1; +} + +int main() { + return check_reserved_space(); +} |