Let init mount/unmount debugfs for non-user builds

This change will help non-user builds with keeping debugfs
disabled during run time. Instead, debugfs will be mounted by init
to enable boot time initializations to set up vendor debug data
collection and unmounted after boot. It will be also be mounted by
dumpstate for bug report generation and unmounted after.

This change is only intended to help vendors (who depend on debugfs to
collect debug information from userdebug/eng builds) keep debugfs
disabled during runtime. Platform code must not depend on debugfs at all.

Test: manual
Bug: 176936478
Change-Id: I2e89d5b9540e3de094976563682d4b8c5c125876
This commit is contained in:
Hridya Valsaraju 2020-09-12 15:37:57 -07:00
parent 5266e041ef
commit fb921a1c4e
2 changed files with 22 additions and 0 deletions

View File

@ -872,6 +872,21 @@ int SecondStageMain(int argc, char** argv) {
auto is_installed = android::gsi::IsGsiInstalled() ? "1" : "0";
SetProperty(gsi::kGsiInstalledProp, is_installed);
/*
* For debug builds of S launching devices, init mounts debugfs for
* enabling vendor debug data collection setup at boot time. Init will unmount it on
* boot-complete after vendor code has performed the required initializations
* during boot. Dumpstate will then mount debugfs in order to read data
* from the same using the dumpstate HAL during bugreport creation.
* Dumpstate will also unmount debugfs after bugreport creation.
* first_api_level comparison is done here instead
* of init.rc since init.rc parser does not support >/< operators.
*/
auto api_level = android::base::GetIntProperty("ro.product.first_api_level", 0);
bool is_debuggable = android::base::GetBoolProperty("ro.debuggable", false);
auto mount_debugfs = (is_debuggable && (api_level >= 31)) ? "1" : "0";
SetProperty("init.mount_debugfs", mount_debugfs);
am.QueueBuiltinAction(SetupCgroupsAction, "SetupCgroups");
am.QueueBuiltinAction(SetKptrRestrictAction, "SetKptrRestrict");
am.QueueBuiltinAction(TestPerfEventSelinuxAction, "TestPerfEventSelinux");

View File

@ -933,6 +933,9 @@ on boot && property:ro.config.low_ram=true
write /proc/sys/vm/dirty_expire_centisecs 200
write /proc/sys/vm/dirty_background_ratio 5
on property:sys.boot_completed=1 && property:init.mount_debugfs=1
umount /sys/kernel/debug
on boot
# basic network init
ifup lo
@ -1201,6 +1204,10 @@ on userspace-reboot-resume
on property:sys.boot_completed=1 && property:sys.init.userspace_reboot.in_progress=1
setprop sys.init.userspace_reboot.in_progress ""
on early-init && property:init.mount_debugfs=1
mount debugfs debugfs /sys/kernel/debug
chmod 0755 /sys/kernel/debug
# Migrate tasks again in case kernel threads are created during boot
on property:sys.boot_completed=1
copy_per_line /dev/cpuctl/tasks /dev/cpuctl/system/tasks