AIL(init.rc)
Init.rc是init进程最重要的环节,init.rc文件并不是普通的配置文件,而是由一种被称为“Android初始化语言”(Android Init Language,这里简称为AIL)的脚本写成的文件。在了解init如何解析init.rc文件之前,先了解AIL非常必要.
AIL由如下4部分组成。
1.动作(Actions)
2.命令(Commands)
3.服务(Services)
4.选项(Options)
这4部分都是面向行的代码,也就是说用回车换行符作为每一条语句的分隔符。如果一行写不下,可以在行尾加上反斜杠,来连接下一行
AIL的注释与很多Shell脚本一行,以#开头。
AIL在编写时需要分成多个部分(Section),而每一部分的开头需要指定Actions或Services。也就是说,每一个Actions或 Services确定一个Section。而所有的Commands和Options只能属于最近定义的Section。如果Commands和 Options在第一个Section之前被定义,它们将被忽略。
Actions和Services的名称必须唯一。如果有两个或多个Action或Service拥有同样的名称,那么init在执行它们时将抛出错误,并忽略这些Action和Service。
l Action:
也就是说Actions是以关键字on开头的,然后跟一个触发器,接是若干命令。例如,下面就是一个标准的Action
on boot
# basic network init
ifup lo
hostname localhost
domainname localdomain
其中boot是触发器,下面三行是command
那么init.rc到底支持哪些触发器呢?这个决定于init.c代码如何写的,
Am335x里的init.c触发器如下:
init_parse_config_file("/init.rc");
action_for_each_trigger("early-init", action_add_queue_tail);
queue_builtin_action(wait_for_coldboot_done_action, "wait_for_coldboot_done");
queue_builtin_action(keychord_init_action, "keychord_init");
queue_builtin_action(console_init_action, "console_init");
/* execute all the boot actions to get us started */
action_for_each_trigger("init", action_add_queue_tail);
/* skip mounting filesystems in charger mode */
if (!is_charger) {
action_for_each_trigger("early-fs", action_add_queue_tail);
action_for_each_trigger("fs", action_add_queue_tail);
action_for_each_trigger("post-fs", action_add_queue_tail);
action_for_each_trigger("post-fs-data", action_add_queue_tail);
}
queue_builtin_action(property_service_init_action, "property_service_init");
queue_builtin_action(signal_init_action, "signal_init");
queue_builtin_action(check_startup_action, "check_startup");
if (is_charger) {
action_for_each_trigger("charger", action_add_queue_tail);
} else {
action_for_each_trigger("early-boot", action_add_queue_tail);
action_for_each_trigger("boot", action_add_queue_tail);
}
queue_builtin_action(queue_property_triggers_action, "queue_property_triggers");
1. init
这是init执行后第一个被触发Trigger,也就是在 /init.rc被装载之后执行该Trigger
2. <name>=<value>
当属性<name>被设置成<value>时被触发。例如,
on property:vold.decrypt=trigger_reset_main
class_reset main
3. device-added-<path>
当设备节点被添加时触发
4. device-removed-<path>
当设备节点被移除时添加
5. service-exited-<name>
会在一个特定的服务退出时触发
l Commands
Actions后需要跟若干个命令,Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是 linux 命令,还有一些是 android 添加的,如:class_start <serviceclass>
这些命令如下:
1. exec <path> [<argument> ]*
创建和执行一个程序(<path>)。在程序完全执行前,init将会阻塞。由于它不是内置命令,应尽量避免使用exec ,它可能会引起init执行超时。
2. export <name> <value>
在全局环境中将 <name>变量的值设为<value>。(这将会被所有在这命令之后运行的进程所继承)
3. ifup <interface>
启动网络接口
4. import <filename>
指定要解析的其他配置文件。常被用于当前配置文件的扩展
5. hostname <name>
设置主机名
6. chdir <directory>
改变工作目录
7. chmod <octal-mode><path>
改变文件的访问权限
8. chown <owner><group> <path>
更改文件的所有者和组
9. chroot <directory>
改变处理根目录
10. class_start<serviceclass>
启动所有指定服务类下的未运行服务。
11 class_stop<serviceclass>
停止指定服务类下的所有已运行的服务。
12. domainname <name>
设置域名
13. insmod <path>
加载<path>指定的驱动模块
14. mkdir <path> [mode][owner] [group]
创建一个目录<path> ,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和 root组。
15. mount <type> <device> <dir> [<mountoption> ]*
试图在目录<dir>挂载指定的设备。<device> 可以是mtd@name的形式指定一个mtd块设备。<mountoption>包括 "ro"、"rw"、"re
16. setkey
保留,暂时未用
17. setprop <name><value>
将系统属性<name>的值设为<value>。
18. setrlimit <resource> <cur> <max>
设置<resource>的rlimit (资源限制)
19. start <service>
启动指定服务(如果此服务还未运行)。
20.stop<service>
停止指定服务(如果此服务在运行中)。
21. symlink <target> <path>
创建一个指向<path>的软连接<target>。
22. sysclktz <mins_west_of_gmt>
设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)
23. trigger <event>
触发一个事件。用于Action排队
24. wait <path> [<timeout> ]
等待一个文件是否存在,当文件存在时立即返回,或到<timeout>指定的超时时间后返回,如果不指定<timeout>,默认超时时间是5秒。
25. write <path> <string> [ <string> ]*
向<path>指定的文件写入一个或多个字符串。
l service
Services (服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。Services (服务)的形式如下
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
l Options
Option 是针对 Service 的选项,可以影响服务如何以及怎样运行。服务支持的选项如下:
1. critical
表明这是一个非常重要的服务。如果该服务4分钟内退出大于4次,系统将会重启并进入 Recovery (恢复)模式。
2. disabled
表明这个服务不会同与他同trigger (触发器)下的服务自动启动。该服务必须被明确的按名启动。
3. setenv <name><value>
在进程启动时将环境变量<name>设置为<value>。
4. socket <name><type> <perm> [ <user> [ <group> ] ]
Create a unix domain socketnamed /dev/socket/<name> and pass
its fd to the launchedprocess. <type> must be"dgram", "stream" or "seqpacket".
User and group default to0.
创建一个unix域的名为/dev/socket/<name> 的套接字,并传递它的文件描述符给已启动的进程。<type> 必须是 "dgram","stream" 或"seqpacket"。用户和组默认是0。
5. user <username>
在启动这个服务前改变该服务的用户名。此时默认为 root。
6. group <groupname> [<groupname> ]*
在启动这个服务前改变该服务的组名。除了(必需的)第一个组名,附加的组名通常被用于设置进程的补充组(通过setgroups函数),档案默认是root。
7. oneshot
服务退出时不重启。
8. class <name>
指定一个服务类。所有同一类的服务可以同时启动和停止。如果不通过class选项指定一个类,则默认为"default"类服务。
9. onrestart
当服务重启,执行一个命令
相关推荐
### Android系统从init进程开始到systemserver启动详细流程 #### 1. 概述 在Android系统的启动过程中,从Linux内核加载完成后,系统将执行第一个用户空间进程——`init`进程,它作为后续所有进程的父进程。`init`...
init.rc 文件并不是普通的配置文件,而是由一种被称为“Android初始化语言”(Android Init Language,这里简称为AIL)的脚本写成的文件。 该文件在ROM中是只读的,即使有了root权限,可以修改该文件也没有。因为...
AIL(可能是Artificial Intelligence Language或某个特定项目的缩写)3.0是专为编程和开发设计的一种语言,它构建于Python虚拟机之上,这表明AIL的核心是用Python语法和特性实现的,但可能扩展了一些特定的功能以...
AIL(Artificial Intelligence Language)是一种面向对象的编程语言,设计目标是提供高级易用的数据结构,并且具有简洁而强大的语法特性。本文将深入探讨AIL的各个方面,帮助你理解并掌握这种新兴的编程语言。 ### ...
标题"Mohmed Ail"可能是指的一个人名或者是一个项目的代号,不过在这个上下文中,它似乎与一个特定的工具或软件相关。描述中的"extractor your mp4 sigmatil by this tools"意味着存在一个工具,能够提取MP4格式的...
AIL 最新发布的 特拉维斯 吉特 贡献者 执照 AIL框架-信息泄漏分析框架 AIL是一个模块化框架,用于分析来自非结构化数据源(例如Pastebin或类似服务的粘贴或非结构化数据流)的潜在信息泄漏。 AIL框架很灵活,...
本设计源码提供了一个基于Python虚拟机的AIL面向对象编程语言,包含230个文件,其中包括102个py源文件,92个ail文件,24个rst文档,2个bat批处理文件,2个vim文件,以及1个gitignore文件,1个LICENSE文件,1个reg...
AIL转换宏 AIL转换宏是 ATL 提供的一组宏函数,用于实现字符串之间的转换,如ANSI 字符串到 UNICODE 字符串、OLE 字符串到 UNICODE 字符串等。这些宏函数的命名规则非常简洁易记,使用 "2" 来表示“转换为、转换到...
标题中的"xfs_trans_ail.rar_it"提示我们这可能与XFS文件系统和事务处理有关。XFS是一种高性能、日志结构的文件系统,广泛应用于Linux操作系统中。它支持大容量存储,具备良好的数据一致性保证,并且在处理大量并发...
企业所得税政策汇编ail.docx
liurui的表白代码_aiL_rui_5201314
AIL 是一门开源的运行在 Python 虚拟机上的面向对象的编程语言。支持 Python 的大多数特性的同时,还额外增加了如 match 表达式,匿名函数,名称空间等 AIL 自身的特性。具有完整标准库的 Python3.8
任何键连发器,只要按Ail+你要连发的键就可以了。
基于Nuxt_+_SpringBoot的前后端分离项目;此处是前端工程,代码开源_AIL510
"7ail"、"ly6"可能是指代课程或学习路径的代码,而"webapi"和"c#_webapi"都指的是WebAPI技术,强调了使用C#编程语言开发WebAPI服务。"postcontroller"则再次强调了我们关注的`PostController`类。 在提供的压缩包...
标题"Ailén-开源"揭示了我们正在讨论的是一款名为"Ailén"的开源软件项目。开源软件意味着源代码是公开的,允许用户查看、修改和分发代码,以促进协作和持续改进。这种开放性使得开发者社区能够共同参与软件的开发...
本文将围绕实验报告"AIL2-2017Z8009061078-李中欢-人工智能概论课程实验报告-Bayes1"展开,深入探讨朴素贝叶斯算法的基本原理、Python实现以及在文本分类中的具体应用。 一、朴素贝叶斯算法基础 朴素贝叶斯算法...
标题中的“Unet带有AIL的火炬”指的是一个融合了Unet神经网络模型和人工智能学习(Artificial Intelligence Learning,AIL)的Pytorch实现项目。这个项目主要是为了处理航拍图像的标注任务,它利用了深度学习技术来...
【标题】"martech-meetigs-ail" 涉及的是营销技术(Martech)与人工智能(AI)的融合应用 【描述】虽然描述简短,但我们可以推测这是一个关于如何利用人工智能提升营销技术效率和效果的会议或讨论记录。Martech结合...