diff --git a/aoc/Android.bp b/aoc/Android.bp new file mode 100644 index 0000000..736f968 --- /dev/null +++ b/aoc/Android.bp @@ -0,0 +1,16 @@ +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +cc_binary { + name: "dump_aoc", + srcs: ["dump_aoc.cpp"], + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + ], + shared_libs: ["libbase"], + vendor: true, + relative_install_path: "dump", +} diff --git a/aoc/aoc.mk b/aoc/aoc.mk new file mode 100644 index 0000000..2bbc8d3 --- /dev/null +++ b/aoc/aoc.mk @@ -0,0 +1,3 @@ +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/aoc/sepolicy + +PRODUCT_PACKAGES += dump_aoc diff --git a/aoc/dump_aoc.cpp b/aoc/dump_aoc.cpp new file mode 100644 index 0000000..a3e0088 --- /dev/null +++ b/aoc/dump_aoc.cpp @@ -0,0 +1,61 @@ +/* + * Copyright 2022 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 +#include +#include +#include +#include + +// Format title and content output. +void dumpFileContent(const char* title, const char* file_path) { + std::string content; + printf("------ %s (%s) ------\n", title, file_path); + if (android::base::ReadFileToString(file_path, &content)) { + printf("%s\n", content.c_str()); + } else { + printf("Unable to read %s\n", file_path); + } + return; +} + +void command(const char* title, const char* cmd){ + printf("------ %s (%s) ------\n", title, cmd); + system(cmd); + return; +} + +// Dump Aoc. +int main() { + setbuf(stdout, NULL); + dumpFileContent("AoC Service Status", "/sys/devices/platform/19000000.aoc/services"); + dumpFileContent("AoC Restarts", "/sys/devices/platform/19000000.aoc/restart_count"); + dumpFileContent("AoC Coredumps", "/sys/devices/platform/19000000.aoc/coredump_count"); + dumpFileContent("AoC ring buf wake", "/sys/devices/platform/19000000.aoc/control/ring_buffer_wakeup"); + dumpFileContent("AoC host ipc wake", "/sys/devices/platform/19000000.aoc/control/host_ipc_wakeup"); + dumpFileContent("AoC usf wake", "/sys/devices/platform/19000000.aoc/control/usf_wakeup"); + dumpFileContent("AoC audio wake", "/sys/devices/platform/19000000.aoc/control/audio_wakeup"); + dumpFileContent("AoC logging wake", "/sys/devices/platform/19000000.aoc/control/logging_wakeup"); + dumpFileContent("AoC hotword wake", "/sys/devices/platform/19000000.aoc/control/hotword_wakeup"); + dumpFileContent("AoC memory exception wake", "/sys/devices/platform/19000000.aoc/control/memory_exception"); + dumpFileContent("AoC memory votes", "/sys/devices/platform/19000000.aoc/control/memory_votes_a32"); + dumpFileContent("AoC memory votes", "/sys/devices/platform/19000000.aoc/control/memory_votes_ff1"); + command("clean AoC buffer","echo ' ' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"); + command("AoC Heap Stats (A32)", "echo 'dbg heap -c 1' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"); + command("AoC Heap Stats (F1)", "echo 'dbg heap -c 2' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"); + command("AoC Heap Stats (HF0)", "echo 'dbg heap -c 3' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"); + command("AoC Heap Stats (HF1)", "echo 'dbg heap -c 4' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"); + return 0; +} diff --git a/aoc/sepolicy/dump_aoc.te b/aoc/sepolicy/dump_aoc.te new file mode 100644 index 0000000..f5f085c --- /dev/null +++ b/aoc/sepolicy/dump_aoc.te @@ -0,0 +1,7 @@ +pixel_bugreport(dump_aoc) +allow dump_aoc sysfs_aoc:dir search; +allow dump_aoc sysfs_aoc_dumpstate:file r_file_perms; +allow dump_aoc aoc_device:chr_file rw_file_perms; +allow dump_aoc vendor_shell_exec:file execute_no_trans; +allow dump_aoc vendor_toolbox_exec:file execute_no_trans; + diff --git a/aoc/sepolicy/file_contexts b/aoc/sepolicy/file_contexts new file mode 100644 index 0000000..bfeb604 --- /dev/null +++ b/aoc/sepolicy/file_contexts @@ -0,0 +1 @@ +/vendor/bin/dump/dump_aoc u:object_r:dump_aoc_exec:s0