我想在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
运行可执行文件。
答案 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
语句时,将执行此代码。