Init.rc妙用及语法说明

参考:system\core\init\readme.txt

案例1:

当开机启动完毕,写入mpp2的寄存器,使其设置为PWM模式。

#add by eliot shao 2016.11.03 for mmp2-pwm function
on property:sys.boot_completed=1
    write /sys/kernel/debug/spmi/spmi-0/address 0xa140
write /sys/kernel/debug/spmi/spmi-0/data 0x1a

案例2:

创建一个native service,在系统启动完毕后执行某脚本,完成一个简单的任务。
步骤:①在system/core/rootdir/init.rc中加入:

on property:sys.boot_completed=1
start service_set_bkl
service service_set_bkl /system/bin/setBKL.sh
    user root
    group root
    disabled
oneshot

② 在device/qcom/slm753/slm753.mk中加入:

#add by eiot shao 2016.11.11 for bug 4612
PRODUCT_COPY_FILES += device/qcom/slm753/setBKL.sh:system/bin/setBKL.sh

将device/qcom/slm753/setBKL.sh脚本拷贝到system/bin/setBKL.sh
③ 在device/qcom/slm753/创建需要执行的脚本setBKL.sh
setBKL.sh脚本内容如下:

#!/system/bin/sh
busybox echo "eliot shao !!!native service for backlight setting!!for bug 4612"
#busybox echo 255 >/sys/class/leds/lcd-backlight/brightness
#sleep 2
#you can add some register setting such as:
busybox cat /sys/class/leds/lcd-backlight/brightness > /sys/class/leds/lcd-backlight/brightness
busybox echo "eliot shao !!!native service for backlight setting!"

Init语言包含了四个大类的声明:

Actions, Commands, Services, and Options.

Actions和Services隐性的声明了一个新的段,所有的commands和options都属于这些最近声明的段。

Actions take the form of:
on < trigger>
< command>
< command>
< command>

Services take the form of:
service < name> < pathname> [ < argument> ]*
< option>
< option>

常用Options(用于修饰service)

1、critical 表示这是一个关键的service,4分钟内退出4次,则系统重启进入recovery mode。
2、disabled 这个服务不会随着它的类启动而自动启动,必须明确指定服务名称启动。
3、setenv 设置环境变量。
4、socket [ [ [ ] ] ]
创建一个socket接口/dev/socket/,使本地service和java可以通信。详见
http://blog.csdn.net/eliot_shao/article/details/53159989
5、user 执行service之前改变用户名。
6、group [ ]* 执行service之前改变用户组。
7、oneshot 当service退出后不会重启。
8、class 为service指定一个类名,具有相同类名的service可以一起启动和停止。
9、onrestart 启动一个Command,当service重新启动的时候。
Eg:
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart healthd
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm

常用Triggers说明:

1、boot eg: on boot 这是第一个触发的,当init进程启动时候。
2、= when the property is set to the specific value .
Eg:on property:sys.boot_completed=1
3、device-added- device-removed-
当一个设备节点被删除或者添加的时候,触发。
Eg:
on device-added-/dev/compass
start akmd
4、service-exited- 当制定的service退出的时候触发。

常用Commands说明

1、exec [ ]* Fork and execute a program ().
2、export
Set the environment variable equal to in the lobal environment
export PATH /sbin:/system/sbin:/system/bin
3、import 解析init配置文件,扩展当前的init.rc配置
4、chdir 改变当前的工作路径
5、chmod 改变文件的访问权限
6、chown 改变文件拥有者和组
7、class_start 启动某个class
Eg:
on nonencrypted
class_start main
class_start late_start
8、class_stop 停止某个class
9、enable 使能一个service 如果他是disable的。
10、insmod 安装模块
11、mkdir [mode] [owner] [group] 创建文件夹
12、mount

[ ]* 挂载设备到某个目录
13、setenforce 0|1 设置SELinux system-wide的状态
14、setprop 设置system property
15、start 启动service
16、stop 停止service
17、wait [ ] 等待某个文件的出现
18、write 向文件写入字符串
Eg: write /proc/cpu/alignment 4

一个Init.conf的例子

Example init.conf
-----------------

# not complete -- just providing some examples of usage
#
on boot
   export PATH /sbin:/system/sbin:/system/bin
   export LD_LIBRARY_PATH /system/lib

   mkdir /dev
   mkdir /proc
   mkdir /sys

   mount tmpfs tmpfs /dev
   mkdir /dev/pts
   mkdir /dev/socket
   mount devpts devpts /dev/pts
   mount proc proc /proc
   mount sysfs sysfs /sys

   write /proc/cpu/alignment 4

   ifup lo

   hostname localhost
   domainname localhost

   mount yaffs2 mtd@system /system
   mount yaffs2 mtd@userdata /data

   import /system/etc/init.conf

   class_start default

service adbd /sbin/adbd
   user adb
   group adb

service usbd /system/bin/usbd -r
   user usbd
   group usbd
   socket usbd 666

service zygote /system/bin/app_process -Xzygote /system/bin --zygote
   socket zygote 666

service runtime /system/bin/runtime
   user system
   group system

on device-added-/dev/compass
   start akmd

on device-removed-/dev/compass
   stop akmd

service akmd /sbin/akmd
   disabled
   user akmd
   group akmd

Debugging notes

By default, programs executed by init will drop stdout and stderr into
/dev/null. To help with debugging, you can execute your program via the
Andoird program logwrapper. This will redirect stdout/stderr into the
Android logging system (accessed via logcat).

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读