executing static program from android init.rc

2020-07-25 10:16发布

问题:

I want to start a custom program in the init process. I compiled this program statically that run fine from my booted up android stock ROM.

From the android init.rc docs I read that the exec command is what I need.
BTW all I can see in dmesg is that my program exit with code -1 (I can't return that).

init.rc snippet:

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

All I see in dmesg is this:

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

Here you are the executable source code: http://pastebin.com/Hym1APWx


UPDATE

I tried to statically compile and run this program:

int main(){return 0; }

But the result is always command 'exec' r=-1. Maybe user uselen are right, maybe I cannot run executables from /data in the early-boot phase.

回答1:

As christian said, it looks like exec isn't even implemented. I'm beginning to think that a lot of features documented for init.rc aren't implemented. Here's a way you can get your program to launch however.

Instead of running this as an "exec" command, set this up as a service instead.

In your init.rc, or another file included by it:

service my_service /data/test
    class main
    oneshot 

If it's in class main, and not disabled, it should run after /data is mounted.



回答2:

I had the same issue today. In my case the solution was simple: The exec function wasn't implemented yet and contained just a return -1. You should take a look at builtin.c and search for do_exec(). This code is executed when init.rc contains an exec statement.