From 2470b456ef79d7227b8d20309cf0b207060a8666 Mon Sep 17 00:00:00 2001 From: Adam Shih Date: Wed, 8 Mar 2023 12:47:26 +0800 Subject: [PATCH] Create RIL dump in gs-common Bug: 240530709 Test: adb bugreport Change-Id: Ibf1e3c35725f9ccdc5361aa079b6cb11cef32440 --- radio/Android.bp | 20 ++++++++++++++++ radio/dump.mk | 4 ++++ radio/dump_radio.cpp | 46 ++++++++++++++++++++++++++++++++++++ radio/sepolicy/dump_radio.te | 7 ++++++ radio/sepolicy/file_contexts | 1 + 5 files changed, 78 insertions(+) create mode 100644 radio/Android.bp create mode 100644 radio/dump.mk create mode 100644 radio/dump_radio.cpp create mode 100644 radio/sepolicy/dump_radio.te create mode 100644 radio/sepolicy/file_contexts diff --git a/radio/Android.bp b/radio/Android.bp new file mode 100644 index 0000000..29b0f16 --- /dev/null +++ b/radio/Android.bp @@ -0,0 +1,20 @@ +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +cc_binary { + name: "dump_radio", + srcs: ["dump_radio.cpp"], + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + ], + shared_libs: [ + "libbase", + "libdump", + ], + vendor: true, + relative_install_path: "dump", +} + diff --git a/radio/dump.mk b/radio/dump.mk new file mode 100644 index 0000000..0c4d09d --- /dev/null +++ b/radio/dump.mk @@ -0,0 +1,4 @@ +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/radio/sepolicy/ + +PRODUCT_PACKAGES_DEBUG += dump_radio + diff --git a/radio/dump_radio.cpp b/radio/dump_radio.cpp new file mode 100644 index 0000000..64d137e --- /dev/null +++ b/radio/dump_radio.cpp @@ -0,0 +1,46 @@ +/* + * 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 + +#define RIL_LOG_DIRECTORY "/data/vendor/radio" +#define RIL_LOG_DIRECTORY_PROPERTY "persist.vendor.ril.log.base_dir" +#define RIL_LOG_NUMBER_PROPERTY "persist.vendor.ril.log.num_file" +#define RIL_LOG_PREFIX "rild.log." + +int main() { + std::string rilLogDir = ::android::base::GetProperty(RIL_LOG_DIRECTORY_PROPERTY, RIL_LOG_DIRECTORY); + + int maxFileNum = ::android::base::GetIntProperty(RIL_LOG_NUMBER_PROPERTY, 50); + + const std::string currentLogDir = concatenatePath(rilLogDir.c_str(), "/cur"); + const std::string previousLogDir = concatenatePath(rilLogDir.c_str(), "/prev"); + const std::string currentDestDir = concatenatePath(BUGREPORT_PACKING_DIR, "cur"); + const std::string previousDestDir = concatenatePath(BUGREPORT_PACKING_DIR, "prev"); + if (mkdir(currentDestDir.c_str(), 0777) == -1) { + printf("Unable to create folder: %s\n", currentDestDir.c_str()); + return 0; + } + if (mkdir(previousDestDir.c_str(), 0777) == -1) { + printf("Unable to create folder: %s\n", previousDestDir.c_str()); + return 0; + } + + dumpLogs(currentLogDir.c_str(), currentDestDir.c_str(), maxFileNum, RIL_LOG_PREFIX); + dumpLogs(previousLogDir.c_str(), previousDestDir.c_str(), maxFileNum, RIL_LOG_PREFIX); + return 0; +} diff --git a/radio/sepolicy/dump_radio.te b/radio/sepolicy/dump_radio.te new file mode 100644 index 0000000..3fe29c9 --- /dev/null +++ b/radio/sepolicy/dump_radio.te @@ -0,0 +1,7 @@ +pixel_bugreport(dump_radio) + +userdebug_or_eng(` + allow dump_radio radio_vendor_data_file:dir create_dir_perms; + allow dump_radio radio_vendor_data_file:file create_file_perms; + get_prop(dump_radio, vendor_rild_prop) +') diff --git a/radio/sepolicy/file_contexts b/radio/sepolicy/file_contexts new file mode 100644 index 0000000..558beb3 --- /dev/null +++ b/radio/sepolicy/file_contexts @@ -0,0 +1 @@ +/vendor/bin/dump/dump_radio u:object_r:dump_radio_exec:s0