【Linux驱动调试技巧】Init.rc文件的妙用与如何编写开机脚本?

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 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
init.rc 是 Android 系统启动时使用的一个脚本文件,通常位于系统的 /system/core/rootdir/ 目录下。如果您想要修改 init.rc 文件,可以按照以下步骤进行: 1. 获取 root 权限。在 Android 设备上,修改 init.rc 文件需要 root 权限,因此您需要先获取 root 权限。 2. 使用 adb 命令将 init.rc 文件从设备中复制到电脑上。例如,可以使用以下命令将 init.rc 复制到当前目录下: ``` adb pull /system/core/rootdir/init.rc ``` 3. 使用文本编辑器(如 Notepad++、Sublime Text 等)打开 init.rc 文件。在编辑 init.rc 文件时,需要注意以下几点: - 不要删除或修改文件中任何已有的内容,否则可能会导致系统无法正常启动。如果您需要修改某个选项,可以尝试注释掉该选项并添加新的选项。 - 在修改 init.rc 文件时,需要特别注意语法问题。init.rc 文件的语法相对比较复杂,如果语法出现问题,可能会导致系统启动失败。 4. 修改完 init.rc 文件后,使用 adb 命令将文件上传到设备上。例如,可以使用以下命令将修改后的 init.rc 文件上传到 /sdcard/ 目录下: ``` adb push init.rc /sdcard/ ``` 5. 在设备上使用 root 权限将修改后的 init.rc 文件复制到 /system/core/rootdir/ 目录下,覆盖原来的 init.rc 文件。例如,可以使用以下命令将文件复制到目标目录下: ``` su cp /sdcard/init.rc /system/core/rootdir/ ``` 6. 重启 Android 设备,让修改生效。例如,可以使用以下命令重启设备: ``` adb reboot ``` 请注意,修改 init.rc 文件需要非常谨慎,因为错误的修改可能会导致系统无法启动。如果您不确定自己的修改是否正确,建议先备份原始的 init.rc 文件,以便在修改出现问题时可以还原。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值