AOSP - 如何使用root访问权限运行可执行文件?

时间:2017-06-09 10:13:14

标签: android root android-source firmware

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

我的想法或事情已经用尽了。我还可以做些什么 ?

修改
我无法以root身份运行二进制文件,但能够从 init.rc 启动后运行shell脚本,其中有root访问权限,并导出/更改特定gpio的权限我需要。这样就可以在以后无需root权限的情况下访问它。

2 个答案:

答案 0 :(得分:2)

亚历克斯·科恩(Alex Cohn)的答案https://stackoverflow.com/a/44456378/215266是正确的,但是这里有更多详细信息。

init进程以root身份运行,并且可以生成其他root进程。您可以使用oneshot服务,该服务默认情况下处于禁用状态,并且可以通过将系统属性设置为某个值(例如1)来启动。

例如在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 [ "$1" != "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

答案 1 :(得分:-1)

您可以从init.rc启动您的应用,服务或可执行文件。