2

我想在这个过程中启动一个自定义程序init。我静态编译了这个程序,它从我启动的 android 库存 ROM 中运行良好。

从 androidinit.rc文档中我读到该exec命令是我需要的。
顺便说一句,我只能看到dmesg我的程序退出代码-1(我无法返回)。

init.rc片段:

on post-fs-data
write /dev/kmsg "launching test"
exec /data/test

我看到的dmesg是这样的:

<4>[    6.336816] launching test
<6>[    6.336902] init: command 'write' r=0
<6>[    6.337115] init: command 'exec' r=-1

这是可执行的源代码: http: //pastebin.com/Hym1APWx


更新

我试图静态编译并运行这个程序:

int main(){return 0; }

但结果总是command 'exec' r=-1。也许用户uselen是对的,也许我无法/data在早期启动阶段运行可执行文件。

4

2 回答 2

8

正如克里斯蒂安所说,看起来 exec 甚至没有实现。我开始认为为 init.rc 记录的许多功能都没有实现。然而,这是一种让您的程序启动的方法。

与其将其作为“exec”命令运行,不如将其设置为服务。

在您的 init.rc 或它包含的另一个文件中:

service my_service /data/test
    class main
    oneshot 

如果它在 main 类中,并且没有被禁用,它应该在 /data 挂载后运行。

于 2013-03-20T22:02:48.073 回答
2

我今天有同样的问题。就我而言,解决方案很简单:该exec功能尚未实现,仅包含一个return -1. 您应该查看builtin.c并搜索do_exec(). 此代码在init.rc包含exec语句时执行。

于 2013-03-20T16:06:21.063 回答