从android init.rc执行静态程序

时间:2012-12-28 13:22:41

标签: android initialization

我想在init进程中启动自定义程序。我静态地编译了这个程序,从我启动的android stock ROM中运行良好。

从android init.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运行可执行文件。

2 个答案:

答案 0 :(得分:8)

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

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

在init.rc或其中包含的其他文件中:

service my_service /data/test
    class main
    oneshot 

如果它在类main中,而不是禁用,则它应该在/ data挂载后运行。

答案 1 :(得分:2)

我今天遇到了同样的问题。在我的例子中,解决方案很简单:exec函数尚未实现,只包含return -1。您应该查看builtin.c并搜索do_exec()。当init.rc包含exec语句时,将执行此代码。