AOSP - 如何获得具有 root 访问权限的可执行文件 运行?

AOSP - How to have an executable run with root access?

我正在构建一个"embedded"系统,基于Android,目前我正在尝试实现更新音频模块的固件。
有一个二进制文件可以执行此操作,但要注意的是它需要 root 访问权限才能执行此操作(否则无法访问 GPIO)。
所以现在的问题已经转移到给可执行文件(而且只是那个可执行文件,不能完全root)root访问权限。
我已经做了几天了,尝试了很多东西,但都没有成功。
我已经尝试过的事情:

我 运行 没有想法或事情可以尝试。我还可以做些什么 ?

编辑
我无法将二进制 运行 作为 root,但能够 运行 从 init.rc 启动后的 shell 脚本,那里有 root 访问权限,并且 export/change 我需要的特定 gpio 的权限。这使得以后无需根访问就可以访问它。

您可以从 init.rc.

启动您的应用、服务或可执行文件

Alex Cohn 的回答 是正确的,但这里有更多详细信息。

init 进程以 root 身份运行,并且可以产生其他 root 进程。您可以使用默认情况下禁用并通过将系统 属性 设置为某个值(例如 1.

来启动的 oneshot 服务

例如https://android.googlesource.com/device/google/marlin/+/refs/heads/android10-mainline-a-release/init.common.rc

service vendor.power_sh /vendor/bin/init.power.sh
    class main
    user root
    group root system
    disabled
    oneshot

on property:sys.boot_completed=1
    start vendor.power_sh

init 启动的程序不是 Android 服务,它们是传统的命令行应用程序。上面的示例是一个 shell 脚本,但您可以根据需要使用 C/C++ 或 Java。例如 am 命令主要写成 Java,如果你这样做 adb shell cat /system/bin/am 你会看到:

#!/system/bin/sh

if [ "" != "instrument" ] ; then
    cmd activity "$@"
else
    base=/system
    export CLASSPATH=$base/framework/am.jar
    exec app_process $base/bin com.android.commands.am.Am "$@"
fi

Am 代码的源代码在这里,您可以看到它有一个传统的 main 方法:https://android.googlesource.com/platform/frameworks/base/+/742a67127366c376fdf188ff99ba30b27d3bf90c/cmds/am/src/com/android/commands/am/Am.java