/*****************************************************************************
* Android init.rc文件格式解析
* 声明:
* 当我们需要对Android进行一些module移植的时候,往往会涉及到init.rc文件的
* 修改,譬如权限、运行service程序等等,于是理解文件格式就成了需求。
*
* 2015-12-31 深圳 南山平山村 曾剑锋
****************************************************************************/ 一、参考文章:
. Android init.rc文件解析过程详解(一)
http://blog.itpub.net/7232789/viewspace-758162/
. Android系统init.rc分析
http://blog.csdn.net/zhenwenxian/article/details/7506392 二、init.rc文件结构介绍
. init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字即每一行的第一列)来区分,这三个关键字是on、service、import。 . on类型的section表示一系列命令的组合, 例如:
on init
export PATH /sbin:/system/sbin:/system/bin
export ANDROID_ROOT /system
export ANDROID_DATA /data
这样一个section包含了三个export命令,命令的执行是以section为单位的,所以这三个命令是一起执行的,不会单独执行, 那什么时候执行呢? 这是由init.c的main()所决定的,main()里在某个时间会调用 action_for_each_trigger("init", action_add_queue_tail); 这就把on init开始的这样一个section里的所有命令加入到一个执行队列,在未来的某个时候会顺序执行队列里的命令,所以调用action_for_each_trigger的先后决定了命令执行的先后。
. service类型的section表示一个可执行程序,例如:
service surfaceflinger /system/bin/surfaceflinger
class main
user system
group graphics drmrpc
onrestart restart zygote
surfaceflinger作为一个名字标识了这个service, /system/bin/surfaceflinger表示可执行文件的位置, class、user、group、onrestart这些关键字所对应的行都被称为options, options是用来描述的service一些特点,不同的service有着不同的options。 service类型的section标识了一个service(或者说可执行程序), 那这个service什么时候被执行呢?是在class_start这个命令被执行的时候,class_start命令行总是存在于某个on类型的section中,"class_start core"这样一条命令被执行,就会启动类型为core的所有service。 所以可以看出android的启动过程主要就是on类型的section被执行的过程。
. import类型的section表示引入另外一个.rc文件,例如:
import init.test.rc
相当包含另外一些section, 在解析完init.rc文件后继续会调用init_parse_config_file来解析引入的.rc文件。 三、参考init.rc:
# Copyright (C) The Android Open Source Project
#
# IMPORTANT: Do not create world writable files or directories.
# This is a common source of Android security bugs.
# import /init.usb.rc
import /init.${ro.hardware}.rc
import /init.trace.rc on early-init
# Set init and its forked children's oom_adj.
write /proc//oom_adj - # Set the security context for the init process.
# This should occur before anything else (e.g. ueventd) is started.
setcon u:r:init:s0 start ueventd # create mountpoints
mkdir /mnt root system on init
chmod /dev/ttymxc0
chmod /dev/ttymxc1
chmod /dev/ttymxc2
chmod /dev/ttymxc3
chmod /dev/ttymxc4
chmod /dev/i2c-
chmod /dev/i2c-
......
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /vendor/lib:/system/lib
export ANDROID_BOOTLOGO
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
......
......
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm service vold /system/bin/vold
class core
socket vold stream root mount
ioprio be
......

Android init.rc文件格式解析的更多相关文章

  1. Android init.rc解析【转】

    转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. ...

  2. Android系统init进程启动及init.rc全解析

    转:https://blog.csdn.net/zhonglunshun/article/details/78615980 服务启动机制system/core/init/init.c文件main函数中 ...

  3. Android init.rc文件浅析

    Android init.rc文件浅析 分类: Android2012-04-13 18:00 13149人阅读 评论(2) 收藏 举报 androidservicepathactionsocketc ...

  4. Android的init过程(二):初始化语言(init.rc)解析

    Android的init过程(一) 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 在上一篇文章中介绍了init的初始化第一阶段,也就是处理各种属性.在本文将会详细分析i ...

  5. Android的init过程(二):初始化语言(init.rc)解析【转】

    转自:http://www.cnblogs.com/nokiaguy/p/3164799.html Android的init过程(一) 本文使用的软件版本 Android:4.2.2 Linux内核: ...

  6. init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...

  7. android init.rc 语法分析

    此文来自于对http://source.android.com/porting/index.html中bring up段的简译.其中有一处与源码的 system/core/init/readme.tx ...

  8. MTK(android init.rc) 写一个开机启动的服务

    在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的. 假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(androi ...

  9. android init.rc命令快速对照表

    注1:另外还讲述了怎样输出log: Debugging notes---------------By default, programs executed by init will drop stdo ...

随机推荐

  1. 只 一行显示可左右滚动的文本(UITextField中文限制)

    // // ViewController.m // 一行显示可滚动的文本 // // Created by apple on 15-5-8. // Copyright (c) 2015年 apple. ...

  2. 深入浅出ES6(十二):代理 Proxies

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 请看这样一段代码: var obj = new Proxy({}, { get: ...

  3. AutoCompleteTextView的应用

    现在我们上网几乎都会用百度或者谷歌搜索信息,当我们在输入框里输入一两个字后,就会自动提示我们想要的信息,这种效果在Android 里是如何实现的呢? 事实上,Android 的AutoComplete ...

  4. HDU 4169 树形DP

    Wealthy Family Problem Description While studying the history of royal families, you want to know ho ...

  5. BestCoder 1st Anniversary($) 1003 Sequence

    题目传送门 /* 官方题解: 这个题看上去是一个贪心, 但是这个贪心显然是错的. 事实上这道题目很简单, 先判断1个是否可以, 然后判断2个是否可以. 之后找到最小的k(k>2), 使得(m-k ...

  6. php with bootstrap

    最近用ThinkPHP+bootstrap3写的后台 用bootstrap结合php搭建MIS系统框架 Free Bootstrap Themes & Templates pgoa盘古OA开发 ...

  7. nodejs上传图片并显示的例子

    目标 1. 在浏览器地址栏输入“http://demos/start”,进入欢迎页面,页面有一个文件上传表单: 2. 选择一张图片并提交表单,文件被上传到"http://demos/uplo ...

  8. iOS sqlite3数据库解析

    看来从版本3.3.1基本上已经支持线程句柄的传递功能.具体限制我标记了一下.(6) Is SQLite threadsafe?SQLite is threadsafe. We make this co ...

  9. Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误

    原因:某个项目需要的jar包没有导入 参考文章:http://www.blogjava.net/zJun/archive/2007/10/16/153374.html

  10. 短信发送AZDG加密算法

    public static string passport_encrypt(string txt, string key)         {             //   使用随机数发生器产生  ...