init.rc的使用
来源:互联网 发布:qq网络硬盘在哪里找 编辑:程序博客网 时间:2024/06/05 15:21
参考:system\core\init\readme.txt
案例1:
当开机启动完毕,写入mpp2的寄存器,使其设置为PWM模式。
#add by eliot shao 2016.11.03 for mmp2-pwm functionon property:sys.boot_completed=1 write /sys/kernel/debug/spmi/spmi-0/address 0xa140write /sys/kernel/debug/spmi/spmi-0/data 0x1a
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
案例2:
创建一个native service,在系统启动完毕后执行某脚本,完成一个简单的任务。
步骤:①在system/core/rootdir/init.rc中加入:
on property:sys.boot_completed=1start service_set_bklservice service_set_bkl /system/bin/setBKL.sh user root group root disabledoneshot
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
② 在device/qcom/slm753/slm753.mk中加入:
#add by eiot shao 2016.11.11 for bug 4612PRODUCT_COPY_FILES += device/qcom/slm753/setBKL.sh:system/bin/setBKL.sh
- 1
- 2
- 1
- 2
将device/qcom/slm753/setBKL.sh脚本拷贝到system/bin/setBKL.sh
③ 在device/qcom/slm753/创建需要执行的脚本setBKL.sh
setBKL.sh脚本内容如下:
#!/system/bin/shbusybox 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/brightnessbusybox echo "eliot shao !!!native service for backlight setting!"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
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 defaultservice adbd /sbin/adbd user adb group adbservice usbd /system/bin/usbd -r user usbd group usbd socket usbd 666service zygote /system/bin/app_process -Xzygote /system/bin --zygote socket zygote 666service runtime /system/bin/runtime user system group systemon device-added-/dev/compass start akmdon device-removed-/dev/compass stop akmdservice akmd /sbin/akmd disabled user akmd group akmd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
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).
- init.rc的使用
- init RC 的讲解
- android 的init.rc
- Android的init.rc
- init.rc的语法分析
- init.rc中语言使用
- [RK3399][Android7.1] 调试笔记 --- 系统使用的init.rc
- init 进程的配置文件init.rc
- init 进程的配置文件init.rc
- init.rc的disabled含义
- Android init.rc 的執行順序
- init.rc文件的分析
- init.rc的执行顺序
- init.rc的触发顺序
- Android init.rc 的生成
- android init.rc 的 service
- init.rc
- init.rc
- 树的重心
- Spring中如何装配Bean(一)
- 关于 iOS UITextView 的各种陨石坑 (一) !
- 关于函数返回局部变量的问题
- Go语言学习之ioutil包(The way to go)
- init.rc的使用
- cas4.2.x修改支持http协议
- matlab实现数组的累加求和
- Redis主从配置及使用KeepAlived实现Redis高可用(亲测可用
- Decorator装饰器定义可选参数
- LeetCode 88. Merge Sorted Array
- context 详解
- 利用AO3401A实现电路电源防反接和电池充电管理功能
- 一个简单的关于去掉出现重复字符的程序