안드로이드가 올라간 보드에서 개발한 C 프로그램을 자동으로 실행시키기 위해서

 

서비스를 등록하는 방법이 있습니다.

 

서비스 등록은 /init.rc, /init.XXX,rc 에서 할 수 있습니다.

 

XXX 는 보드마다 다를 수 있습니다. falinux 의 s5pv210 보드에서는 init.ezs5pv210.rc 입니다.

 

init 파일에서 service 라는 항목을 추가하면 됩니다.

$ cat init.rc
on early-init
start ueventd

on init

sysclktz 0

loglevel 3

# setup the global environment
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /vendor/lib:/system/lib
export ANDROID_BOOTLOGO 1

....

service telnetd /system/xbin/telnetd.sh
oneshot

# service add.
service test-main /sbin/test-main
user root
console
onrestart restart test-net
service test-net /sbin/test-net
user root
console

"# service add" 부분이 추가된 서비스입니다.

 

"test-main" 는 서비스의 이름이고 "/sbin/test-main"는 서비스의 실행 파일 경로입니다.

 

안드로이드 init 는 서비스에 등록된 process 를 자동을 실행시켜 줄뿐만 아니라,

 

process 가 kill 되면 다시 실행시켜주기도 합니다.

 

그 외에 여러가지 속성을 부여할 수 있는데,

 

"user root"는 root user 권한으로 실행한다는 것이고, "console" 은 콘솔 메세지를 stdout 으로 출력하겠다는 내용입니다.

 

"onrestart restart test-net" 는 해당 서비스가 다시 실행될 경우 "test-net" 서비스도 다시 시작시키겠다는 의미입니다.

 

그 외에 부팅 후 초기화 단계에서만 한번 실행시킬 경우에는 "oneshot" 속성을 주면 됩니다.

 

"oneshot" 은 해당 프로세스가 kill 되도 다시 실행시켜주지 않습니다.

 

필요한 기능을 C 프로그램으로 구현하고 서비스로 등록시켜놓으면 부팅시 실행과 재실행까지 init 에서 알아서 해주기 때문에 매우 편리합니다.

 

그 외의 ini.rc 에서 사용에서 사용되는 문법은 더 많지만 자주 사용하는 것 위주로 정리해 보았습니다.