Android 初始化脚本语法解析

init进程【2】——解析配置文件 在前面的一篇文章中分析了init进程的启动过程和main函数 阅读详情

Android初始化脚本语言包含四种类型的语句:

  • 动作(Actions)
  • 指令(Commands)
  • 服务(Services)
  • 选项(Options)

该语言的语法包括下列约定:

  • 所有类型的语句都是基于行(line-oriented)的, 一个语句包含若干个tokens,token之间通过空格字符分隔. 如果一个token中需要包含空格字符,则需要通过C语言风格的反斜线('/')来转义,或者使用双引号把整个token引起来。反斜线还可以出现在一行 的末尾,表示下一行的内容仍然属于当前语句。
  • 以'#'开始的行是注释行。
  • 动作(Actions)和服务(Services)语句隐含表示一个新的段落(section)的开始。 所有的指令(commands)和选项(options)归属于上方最近的一个段落。在第一个段落之前的指令(commands)和选项 (options)是无效的。
  • 动作(Actions)和服务(Services)拥有唯一性的名字。如果出现重名,那么后出现的定义将被作为错误忽略掉。
动作(Actions)

    动作(Actions)是一个有名字的指令(commands)序列。每个动作(Actions)都定义一个触发条件(trigger),用于指示 什么时候执行这个动作。当与动作的触发器匹配的事件发生时,该动作将被添加到一个即将被执行的队列的队尾(除非它已经在队列中)。队列中的 每一个动作被依次取出执行,动作中的每一个指令也将依次执行。初始化程序(Init)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创 建/销毁,属性设置,进程重启)。

一个动作定义的形式如下:

on <trigger>
  <command>
  <command>
  <command>

服务 ( Services )

    服务是初始化程序需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。Services take 一个服务定义的形式如下:
  service <name> <pathname> [ <argument> ]*
  <option>
  <option>
  ...

选项(Options )

选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。

选项说明
disabled This service will not automatically start with its class. It must be explicitly started by name.
socket <name> <type>  <perm> [ <user> [ <group> ] ] Create a unix domain socket named /dev/socket/<name> and pass its fd to the launched process. Valid <type> values include dgram and stream . user and group default to 0.
user <username> Change to username before exec'ing this service. Currently defaults to root.
group <groupname> [ <groupname> ]* Change to groupname before exec'ing this service.  Additional  groupnames beyond the first, which is required, are used to set additional groups of the process (with setgroups() ). Currently defaults to root.
capability [ <capability> ]+ Set linux capability before exec'ing this service
oneshot Do not restart the service when it exits.
class <name> Specify a class name for the service.  All services in a named class must start and stop together. A service is considered of class "default" if one is not specified via the class option.

 

 触发器(Triggers)

 触发器是一个字符串,用于匹配特定的事件,这些事件将触发触发器所属动作(Actions)的执行。

触发器说明
boot This is the first trigger that occurs when init starts (after /init.conf is loaded).
<name>=<value> Triggers of this form occur when the property <name> is set to the specific value <value> .
device-added-<path>
device-removed-<path>
Triggers of these forms occur when a device node is added or removed.
service-exited-<name> Triggers of this form occur when the specified service exits.


指令(Commands)

CommandDescription
exec <path> [ <argument> ]* Fork and execute a program (<path> ). This will block until the program completes execution. Try to avoid exec. Unlike the builtin commands, it runs the risk of getting init "stuck".
export <name> <value> Set the environment variable <name> equal to <value> in the global environment (which will be inherited by all processes started after this command is executed).
ifup <interface> Bring the network interface <interface> online.
import <filename> Parse an init config file, extending the current configuration.
hostname <name> Set the host name.
class_start <serviceclass> Start all services of the specified class if they are not already running.
class_stop <serviceclass> Stop all services of the specified class if they are currently running.
domainname <name> Set the domain name.
insmod <path> Install the module at <path> .
mkdir <path> Make a directory at <path> .
mount <type> <device> <dir> [ <mountoption> ]* Attempt to mount the named device at the directory <dir> <device> . This may be of the form mtd@name to specify a mtd block device by name.
setkey - currenlty undefined -
setprop <name> <value> Set system property <name> to <value> .
setrlimit <resource> <cur> <max> Set the rlimit for a resource.
start <service> Start a service running if it is not already running.
stop <service> Stop a service from running if it is currently running.
symlink <target> <path> Create a symbolic link at <path> with the value <target> .
write <path> <string> [ <string> ]* Open the file at <path> and write one or more strings to it with write(2).

 

属性(Properties)

初始化程序(Init)可以根据需要修改一些系统的属性。

属性说明
init.action Equal to the name of the action currently being executed or "" if none.
init.command Equal to the command being executed or "" if none.
init.svc.<name> State of a named service ("stopped", "running", or "restarting").

init.rc文件示例

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 default
service adbd /sbin/adbd
user adb
group adb
service usbd /system/bin/usbd -r
user usbd
group usbd
socket usbd 666
service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666
service runtime /system/bin/runtime
user system
group system
on device-added-/dev/compass
start akmd
on device-removed-/dev/compass
stop akmd
service akmd /sbin/akmd
disabled
user akmd
group akmd

http://blogold.chinaunix.net/u3/103613/showart_2237012.html
imx6qSBP的jlink初始化脚本 imx6qSBP的jlink初始化脚本,在通用jlink脚本的基础上增加关cache、MMU及DDR初始化功能,可直接使用Eclipse+Jlink在windows环境下使用CodeSourcery gcc/gdb进行裸板开发调试 立即下载

相关推荐

I.MX6ULL终结者开发板裸机仿真jlink调试.pdf

I.MX6ULL‘终结者’开发板预留了JTAG仿真接口,并给出了开发文档,可以实现在JLINK仿真器条件下的单步跟踪、断点调试等功能,使得开发研究i.MX6ULL处理器的相关技术更加直观便利。

关于patch ROM最后签名的问题。

不知道最近怎么的,总有人问我一些patch ROM的问题,近期问得特别多的就是 下面这个错误信息: ERROR: no key specified for:   BaiduVoiceAssistant.apk   OupengBrowser.apk   BaiduMap.apk   Calendar365.apk   iReader.apk   BaiduSearch.apk   Stat

风之子和代码的故事 1211

Android的初始化语言脚本init.rc解析.pdf

Android的初始化语言脚本init.rc解析.pdf

Android apk系列2-------系统签名(生成release版本的系统)

通过make -j4编译出来的system.img使用的是test key,这种类型的key只适用于开发阶段,而且这种秘钥是公开的,谁都可以使用。当发布一款android产品,就需要另外给整个系统签个名,防止被别人盗用。这种系统就是release版本的Android系统。  下面就详细介绍下整个过程。 1、生成加密key文件 要对Android系统进行签名,需要生成四种类型的key文件。

9165

利用按键精灵实现批量截图与智能命名的高效工作流

本文详细介绍了如何利用按键精灵软件构建高效的批量截图与智能命名自动化工作流。通过基础脚本编写、循环逻辑实现及高级命名策略,解决手动操作耗时易错的问题,帮助用户实现一键自动截图、智能保存与文件重命名,大幅提升软件测试、教程制作及数据报告等场景的工作效率。

weixin_29268267的博客 569

eMMC数据擦除的方式

接下来主要是讲解erase、trim、discard的差异,涉及的command有CMD35、CMD36、CMD38。一般用来擦除整卡或者某些分区,如果只想擦除一个。以下是device status的部分解释。eMMC的数据擦除方式有6种,分别是。将会跳过写保护,只执行其他的范围。Discard的命令序列是。Erase的命令序列是。的范围有包含写保护,Trim的命令序列是。

DPJimmy的博客 1764

第一个Android工程

<br />创建一个 Android工程<br />搭建好开发环境之后,我们来创建一个 Hello World工程,体验一下 Android的开发。<br />1 选择【 File】 >【 New】 >【 Project】<br />2 选择【 Android】 >【 Android Project】,点击【 Next】<br />3 创建一个新的 Android工程<br />       Project name(在计算机中存储工程的目录名 ):               

sanfengshou的专栏 862

inferCNVpy分析流程学习

inferCNV的用途大家都已经很清楚了,接下来就走一下流程,试一试Python版的inferCNV。使用的数据集为:GSE188711,既往推文可见:Scanpy分析全流程(含harmonypy整合/细胞周期矫正/双细胞检测及去除)(

zfyyzhys的博客 1295

Android:Namespace not specified. Please specify a namespace in the module‘s build.gradle file like

在多次修改项目目录下的build.gradle文件无效后,我通过参考链接中的描述修改了app目录下的build.gradle文件。com.example.namespace可以随意修改为不起冲突的其他名称。在android的大括号内,增加了对于命名空间的描述。而后,项目可以重新导入gradle项目。

Aer_7z的博客 1万+

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

Redis 可视化工具 RedisInsight 的保姆级安装以及使用(最新)

一名全栈小白的博客 1万+

国外无人机蜂群作战典型战例及发展趋势

参与袭击的无人机为简易组装的固定翼飞机,采用小排量活塞发动机和手机GPS通信模块零件,机翼为轻木加泡沫板混合结构,尾梁为铝合金方管,主要依靠胶带粘接,以上全部配件均可在商用市场买到,成本较低,可在短时间内装配完成。③战场纵深短、瞬时性强。蜂群作战的参战数量显著增加,这一方面得益于无人机技术的飞速发展使得廉价无人机可以大量生产和仿制,另一方面凭借迅速发展的投放和回收技术以及集群控制技术,使得无人机蜂群可在极短时间内实现编队饱和攻击,在快速消耗敌方高价值防空武器系统的同时,保证己方物资系统的突防概率。

renhongxia1的博客 2479

android 初始化 脚本,Android 初始化脚本语法解析

Android初始化脚本语言包含四种类型的语句:动作(Actions)指令(Commands)服务(Services)选项(Options)该语言的语法包括下列约定:所有类型的语句都是基于行(line-oriented)的, 一个语句包含若干个tokens,token之间通过空格字符分隔.如果一个token中需要包含空格字符,则需要通过C语言风格的反斜线('\')来转义,或者使用双引号把整个tok...

weixin_29596485的博客 335

银河麒麟V10 SP3离线安装Nginx1.21.5全记录(附11个rpm包下载清单)

本文详细记录了在银河麒麟V10 SP3操作系统上离线安装Nginx 1.21.5的全过程,包括11个必备rpm包的下载清单。通过分步骤的实战指南,帮助用户在国产化环境中高效部署Nginx服务,涵盖安装、配置、调优及故障排查等关键环节,特别适合金融、政务等对安全性要求高的场景。

weixin_30872337的博客 604

android 初始化 脚本,Android init language与init.rc初始化脚本

微信公众号:杨源鑫如果你觉得文章对你有帮助,欢迎在评论区交流讨论参考: android源码目录里的system/core/init/readme.txt.Android系统里以*.rc为扩展名为系统初始化脚本,脚本里就是使用安卓初始化语言.语句都是一行为一条语句,没有符号分隔. 语句里的每个词用空格隔开.如: service ueventd /sbin/ueventd备注语句以符号”#”作为注释....

weixin_33292780的博客 312

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3199

全球、中国各省市县等行政区划(含十段线)shape及geosjon数据免费下载

免费下载全球、中国各省市县等行政区划(含十段线)shape及geosjon数据

mhf403445651的博客 3459

android 初始化语言,Android Init Language(安卓初始化语言)

android源码学习目录了解Android init进程的都知道,启动 init进程之前会解析init.rc文件,init.rc是Android的配置文件脚本,它由一种被称为"Android初始化语言"--Android init Language 编写。1. android init language(简称 AIL)组成动作--(Actions)命令--(Commands)服务--(Servi...

weixin_36374105的博客 372

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android启动脚本init.rc

<br />摘自《Android系统原理及开发要点详解》<br />Android启动脚本init.rc<br />在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下内容:<br />Commands:命令<br /> Actions: 动作<br /> Triggers:触发条件<br /> Services:

tanxs001的专栏 849

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android init.rc 语法介绍

1. init 由如下四种类型语句组成:    Actionn       :行为 Commands   Services Options 语法(language syntax)结构如下: - 每一个语句占据一行,并且各个关键字被空格分开。c规范中的(如 \n)反斜杠将被忽略(backslash escapes)而被认为是一个空格 ,双引号用来保证空格不会把一个文字串分分为多个关键字。行最...

King_Guo的博客 722

android的init.rc文件的语法

android的init.rc文件的语法Android初始化脚本语言包含四种类型的语句:    * 动作(Actions)    * 指令(Commands)    * 服务(Services)    * 选项(Options)该语言的语法包括下列约定:    * 所有类型的语句

frenst2008的专栏 225

Android init 启动过程分析1

  未完 资料:Simple Guide for Porting Android Kernelhttp://feixf1974.javaeye.com/blog/187773分析android的启动过程,从内核之上,我们首先应该从文件系统的init开始,因为 init 是内核进入文件系统后第一个运行的程序,通常我们可以在linux的命令行中指定内核第一个调用谁,如果没指定那么内

ruixj的专栏 2462
上一篇: 关于Android系统中system.img和data.img中文件系统的权限设置
下一篇: 如何让 Android 自动挂载 SD 卡
eustoma
博客等级 码龄18年 79粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值