当前位置:首页 > 嵌入式 > 嵌入式云IOT技术圈
[导读][概述] 用于指导init进程如何启动Android系统,由若干个段(Sections)组成; init进程解析/init.rc脚本 [功能] [1] 控制init进程何时如何执行某个动作 [2] 控制init进程何时如何启动某个服务 [语法] init rc脚本包含导入(import)、动作(Actions)、命令(Command

[概述]

用于指导init进程如何启动Android系统,由若干个段(Sections)组成;

init进程解析/init.rc脚本


[功能]

[1] 控制init进程何时如何执行某个动作

[2] 控制init进程何时如何启动某个服务


[语法]

init rc脚本包含导入(import)、动作(Actions)、命令(Commands)、服务(Service)和选项(Options)五种语句,语法如下:[1] 基本语法 1. 每个语句占一行,由若干个空格分隔的标记组成,标记之间用空格或TAB分割,若标记中存在空格需要用'\'转义(或使用"单词 单词"形式) 例:init.rc文件 export xxy /system/frame\ work export xxy /system/"frame work"  2. 语句太长,一行写不下,可以用'\'将多行连接成一行, '\'字符后不能有任何字符,包括空格 :  service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 \ -c/data/misc/wifi/wpa_supplicant.conf -e/data/misc/wifi/entropy.bin  3. 以'#'打头的行为注释行 : # setup the global environment  4. 一个导入(import)、动作(Actions)或服务(Service)语句是一个段(Sections) 命令(Commands)属于上面离它最近的动作(Actions),单独的命令将被忽略 选项(Options)属于上面离它最近的服务(Service),单独的选项将被忽略  [2] 语句 导入(import) ------------ 包含其他init.rc脚本文件, 组成: import <filename> 1. filename rc脚本文件  :  import init.sun5i.usb.rc  动作(Actions) ------------- 动作是给一个命令序列取一个名字(name)或提供一个促发表达式(trigger), 组成: on <name or trigger> <command> < ... > <command>  1. on 动作的关键字  2. 名字(name)  也称事件(event),在init rc脚本中必须唯一,如果存在相同名字(name)的动作,只有第一个动作有效, init进程或其他动作(Actions)的trigger命令可以通过名字促发动作(Actions),init进程可以促发如下动作: (1) early-init init进程启动后,挂载虚拟文件系统及/dev目录之后促发,通常用于完成冷启动设备文件建立  (2) init 完成默认属性(/default.prop)、logo显示和设置硬件只读属性,冷启动设备文件建立完成之后,文件系统挂载之前,通常用于完成文件系统目录结构的建立  4.4版本以下支持: (3) early-fs、fs、post-fs和post-fs-data init动作执行完成之后促发,用于挂载各种类型的文件系统  (4) early-boot和boot 完成post-fs-data动作、系统属性(/system/build.prop和/system/default.prop文件)加载和用户属性(/data/local.prop文件和data/property目录下文件中)加载、信号初始化之后, 用于完成设备使能和shell环境初始化  5.0版本支持: (3) late-init 相当于early-fs、fs、post-fs、post-fs-data、early-boot和boot动作的合并  促发表达式(trigger)  (5) property:属性名=属性值 属性被设置成"属性值"时促发  : init.rc文件的306行 on property:prop.test=test_value mkdir /data/temp 0775 root system   3. command 命令,属于上面离它最近的动作(Actions),单独的命令将被忽略  4. 执行 当动作被促发时,动作将会被添加到动作执行队列,当动作中的所有命令依次执行完毕时,动作从执行队列中删除; init程序还添加了一些内部动作,详细见第二天《课堂笔记》  命令(Commands) ------------- 1. exec <path> [ argument ... ] fork + exec 执行指定程序,init进程会阻塞等待程序执行完成 path 带路径的程序名 argument 程序参数  2. export <name> <value> 设置init进程环境变量,完成后会被所有init启动的新进程继承 name 环境变量名 value 环境变量的值 :  export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin  3. ifup <interface> 使能网卡 interface 网卡设备名 :  ifup lo  4. hostname <name> 设置主机名 name 主机名 :  hostname localhost  5. chmod <octal-mode> <path> 修改文件或目录的模式(通常指权限) octal-mode 8进制的数表示的权限 path 带路径的文件或目录 :  chmod 0664 /sys/module/lowmemorykiller/parameters/adj  6. chown <owner> <group> <path> 修改文件或目录的所有者和组 owner 所有者 group  path 带路径的文件或目录 :  chown root system /sys/module/lowmemorykiller/parameters/minfree  7. class_start <serviceclass> 启动某一类的服务 serviceclass 服务类 :  class_start core  8. class_stop <serviceclass> 停止某一类的服务 serviceclass 服务类  9.domainname <name> 设置域名(一组计算机的集合)  10.insmod <path> 加载内核驱动模块 path 带路径的内核驱动模块 : insmod /system/vendor/modules/gslX680.ko  11.mkdir <path> [mode owner group] 新建目录 path 带路径的命令名 mode 文件模式(通常指权限) owner 文件所有者 group 文件组 mode owner group为选择指定,不指定为0755 root root  :  mkdir /mnt 0775 root system   12.mount <type> <device> <dir> [ mountoption ... ] 挂载文件系统 type 文件系统类型 device 文件系统所在设备 dir 挂载目录 mountoption 参数和Linux的mount命令类似 :  mount cgroup none /acct cpuacct  13.setprop <name> <value> 设置属性值 name 属性名 value 属性值 :  setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208  14.setrlimit <resource> <cur> <max> 设置系统资源限制 resource 资源编号 cur 资源当前(软件)限制值 max 资源最大(硬件)限制值 :  setrlimit 13 40 40  15.start <service> 启动服务 service 服务名 :  start ueventd  16.stop <service> 停止服务 service 服务名 :  stop adbd  17.symlink <target> <path> 建立软链接文件 target 软链接文件 path 带路径的源文件 :  symlink /system/etc /etc  18.sysclktz <mins_west_of_gmt> 设置系统基准时间 mins_west_of_gmt 设置格林尼治时间差几分钟,一般为0 :  sysclktz 0  19.trigger <event> 促发一个动作 event 动作 :  trigger post-fs-data  20.write <path> <string> [ string ... ] 写字符串到文件中 path 带路径的文件名 string 字符串,可以有多个 :  write /proc/sys/kernel/panic_on_oops 1  21.chdir <path> 修改init进程的当前目录  22.rm <path> 删除文件 path 带路径的文件名  23.rmdir <path> 删除目录 path 带路径的目录名  24.wait <path> 等待文件被创建 path 带路径的文件名   25.loglevel <level> 设置内核的log级别 level 内核级别(0-7) : init.rc文件中的7行 loglevel 6  以上是常用的命令,不同版本可能命令有区别,具体可以查看Android源代码的以下文件确定: system/core/init/builtins.c 所有命令的执行函数 system/core/init/keywords.h 所有动作、服务、命令和选项列表  服务(Service) ------------- 服务(Service)是由init进程启动并且保证其一直运行的程序,组成如下: service <name> <pathname> [argument ...] <option> < ... > <option>  1. name 服务的名字,在init rc脚本中必须唯一  2. pathname [argument ...] 带路径的服务程序名及参数  3. option 说明服务的选项  选项(Options) ------------- 用于告诉init进程什么时候如何启动服务,存在如下选项: 1. critical 4分钟之内重启了4次该服务,重启Android系统进入recovery模式  2. disabled 服务不能使用start_class命令启动,必须通过服务名称启动  3. setenv <name> <value> 设置环境变量,并且将其做为服务进程的环境变量 name 环境变量名 value 设置的值  4. socket <name> <type> <perm> [user [group]] 创建unix域socket(即创建文件/dev/socket/<name>),并且打开,将文件描述符传给服务 文件描述符存在ANDROID_SOCKET_<name>的环境变量中 name socket名 type socket类型,只能dgram、stream和seqpacket dgram 无序报文传送,不保证可靠 seqpacket 顺序报文传送,不保证可靠 stream 流传送,保证可靠 perm 指定权限(八进制的数表示) user 指定所属用户, 默认root用户 group 指定所属主,默认root组  5. user <username> 指定服务进程所属用户,默认root username 用户名  6. group <groupname> [groupname] [...] 指定服务进程组, 默认root groupname 组名  7. oneshot 服务进程退出时,不重启  8. class <name> 指定服务所属类,这样可以使用class_start命令启动同一类的多个服务 如果没有指定,服务属于默认(default)类 name 类名  9. onrestart <command> 服务重启时,运行指定程序 command 命令及其参数  例:在init.rc和init.sun5i.rc中寻找  调试注意:默认Android系统会将进程的标准输出和标准错误重定位到/dev/null(没有设置console)或/dev/console(有设置console) 如果想看到进程输出,请使用logwrapper程序启动进程,如: service akmd /system/bin/logwrapper /sbin/akmd  Properties ---------- init进程的属性值,使别的进程可以看到init进程当前的运行状态: 1. init.action init进程当前正在执行的动作的名称  2. init.command init进程当前正在执行的命令的名称  3. init.svc.<name> 指定服务的状态(stopped、running和restarting),name为服务名  :  getprop init.svc.zygote 返回running


韦东山嵌入式Android课程推荐

01









nitial;box-sizing: border-box;">
支持我请给我在看!
rc="https://img.21ic.com/weixin/2020/9/6vAFvy.gif">









免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭