rc 파일을 이용하여 Android 부팅시 특정 명령어 실행
Android에서는 rc 파일들이 존재하며 부팅 시 이 rc 파일을 이용하여 특정 명령이나 서비스를 실행시킬 수 있다. rc 파일은 /(root), /system/etc/init, /system/vendoor/ect/init 의 directory에 존재할 수 있다.
구분
-
/system/etc/init: 모든 안드로이드 기기에서 공통적으로 필요한 핵심 시스템 기능들을 정의한다. 예를 들어, 그래픽을 담당하는 surfaceflinger.rc나 앱 실행의 모태가 되는 zygote.rc 등이 이곳에 위치한다.
-
/system/vendor/etc/init: 특정 스마트폰 모델의 센서, 카메라, 오디오 같은 하드웨어를 구동하기 위한 HAL(Hardware Abstraction Layer) 서비스를 정의한다. 이는 제조사나 칩셋 모델마다 내용이 완전히 다르다.
my_script.rc
- vim /system/etc/init/my_script.rc
#!/system/bin/sh on property:sys.boot_completed=1 exec - root root -- /data/local/tmp/my_script.sh - chmod 644 /system/etc/init/my_script.rc
my_script.sh
- vim /data/local/tmp/my_script.sh
#!/system/bin/sh echo my_script $(date) >> /data/local/tmp/my_script.txt - chmod +x /data/local/tmp/my_script.sh
test
- 재부팅 이후 my_script.txt 파일이 존재하는지 확인한다.
cat /data/local/tmp/my_script.txt - 부팅 이후 dmesg 명령어를 통하여 로그를 확인해 보도록 한다.
dmesg | grep my_
SELinux
-
SELinux 설정이 Enforcing인 경우 (getenforce 명령어 결과 1) 해당 my_script.sh 파일이 제대로 실행되지 않을 수 있다. 이 경우 SELinux 설정을 Prermissive(getenforce 명령어 결과 0)값이 되도록 rc 파일을 추가한다.
- vim /system/etc/init/my_selinux.rc
on init write /sys/fs/selinux/enforce 0혹은
on post-fs-data write /sys/fs/selinux/enforce 0 - chmod 644 /system/etc/init/my_selinux.rc
uninstall
rm /system/etc/init/my_script.rc
rm /system/etc/init/my_selinux.rc
rm /data/local/tmp/my_script.sh
rm /data/local/tmp/my_script.txt