1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Android Framework】开机执行自定义脚本之Init.rc文件的妙用与如何编写开机脚本?

【Android Framework】开机执行自定义脚本之Init.rc文件的妙用与如何编写开机脚本?

时间:2023-04-04 10:39:04

相关推荐

【Android Framework】开机执行自定义脚本之Init.rc文件的妙用与如何编写开机脚本?

Init.rc妙用及语法说明

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

案例1

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

#add by eliot shao .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/msm8909/msm8909.mk中加入:

#add by eiot shao .11.11 for bug 4612

PRODUCT_COPY_FILES += device/qcom/msm8909/setBKL.sh:system/bin/setBKL.sh

将device/qcom/msm8909/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 and Services implicitly declare a new section. All commands or options belong to the section most recently declared. Commands or options before the first section are ignored.

Actions和Services隐性的声明了一个新的段,所有的commands和options都属于这些最近声明的段。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 <name> <value> 设置环境变量。

4、socket <name> <type> <perm> [ <user> [ <group> [ <context> ] ] ] 创建一个socket接口/dev/socket/<name>,使本地service和java可以通信。

5、user <username> 执行service之前改变用户名。

6、group <groupname> [ <groupname> ]* 执行service之前改变用户组。

7、oneshot 当service退出后不会重启。

8、class <name> 为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、<name>=<value> when the property <name> is set to the specific value <value>. Eg:on property:sys.boot_completed=1

3、device-added-<path> device-removed-<path> 当一个设备节点被删除或者添加的时候,触发。

Eg:

on device-added-/dev/compass

start akmd

4、service-exited-<name> 当制定的service退出的时候触发。

常用Commands说明

1、exec <path> [ <argument> ]* Fork and execute a program (<path>).

2、export <name> <value>

Set the environment variable <name> equal to <value> in the lobal environment

export PATH /sbin:/system/sbin:/system/bin

3、import <filename> 解析init配置文件,扩展当前的init.rc配置

4、chdir <directory> 改变当前的工作路径

5、chmod <octal-mode> <path> 改变文件的访问权限

6、chown <owner> <group> <path> 改变文件拥有者和组

7、class_start <serviceclass> 启动某个class

Eg:

on nonencrypted

class_start main

class_start late_start

8、class_stop <serviceclass> 停止某个class

9、enable <servicename> 使能一个service 如果他是disable的。

10、insmod <path> 安装模块

11、mkdir <path> [mode] [owner] [group] 创建文件夹

12、mount <type> <device> <dir> [ <mountoption> ]* 挂载设备到某个目录

13、setenforce 0|1 设置SELinux system-wide的状态

14、setprop <name> <value> 设置system property

15、start <service> 启动service

16、stop <service> 停止service

17、wait <path> [ <timeout> ] 等待某个文件的出现

18、write <path> <string> 向文件写入字符串

Eg: write /proc/cpu/alignment 4

**selinux问题

新增service遇到selinux问题,可参考如下方法添加规则;

例如:service名为meig_camera_service

1、新建meig_camera_service.te,后续service相关权限都可以在这里添加:

先加入下面内容:

type meig_camera_service, domain, domain_deprecated; # 定义 domain

type meig_camera_service_exec, exec_type, file_type; # 定义 可执行文件类型

init_daemon_domain(meig_camera_service) # 赋权 domain

2、service.te 中添加服务类型定义:

type meig_camera_service_service, service_manager_type;

3、service_contexts中添加 服务 映射规则:

xxx_camera_service u:object_r:xxx_camera_service_service:s0

4、file_contexts中添加 可执行文件 映射规则:

/system/bin/xxx_camera_service u:object_r:xxx_camera_service_exec:s0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。