当前位置:首页 > 公众号精选 > 嵌入式云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获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭