1.init.rc文件结构
文件位置:
init.c: /system/core/init
init.rc: /system/core/rootdir

首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on、serviceimport。
我们可以看下init.rc文件是怎么写的:
1.import

import /init.usb.rc

import /init.${ro.hardware}.rc

import /init.trace.rc


上面的内容很容易懂,就是导入其他的.rc文件,所以当你在android源码里添加了产品并要添加开机启动项时,就可以往这里添加。


2.on
一般on类型都是做一些chown、mkdir、write、export、symlink等简单的shell指令
而且init.rc本身带了些注释,比较好懂。

on post-fs-data

# We chown/chmod /data again so because mount is run as root + defaults

chown system system /data

chmod 0771 /data



3.service
service类型的模块表示一个可执行程序,例如:

service bootanim /system/bin/bootanimation

class main

user graphics

group graphics

disabled

oneshot


bootanim为模块名
/system/bin/bootanimation为可执行文件的路径
class、user、group、onrestart这些关键字所对应的行是用来描述service一些特点。,不同的service有着不同的特点。

init.rc的结构大概就如此,那么这个init.rc是如何运行起来的呢?这个就要看init.c文件了
首先我们知道每个on模块都有自己的名字,如上边post-fs-data。然后你可以在init.c里发现这样一句:

action_for_each_trigger("post-fs-data", action_add_queue_tail);

这就把 ” onpost-fs-data“开始的这样一个section里的所有命令加入到一个执行队列,在未来的某个时候会顺序执行队列里的命令,所以调用action_for_each_trigger()的先后决定了命令执行的先后。
那这个service什么时候被执行呢?
在某个on模块的指令里会存在“class_start”,例如:

class_start core

class_start main

on nonencrypted

class_start late_start


当执行到这里是service模块就会被调用。

最后关于init.c就不分析了,有兴趣的朋友应该可以通过函数名和注释很好的理解里面的内容是做些什么的。


原文作者:android_fans

原文链接:http://forum.cubietech.com/forum.php?mod=viewthread&tid=1118&extra=page%3D1


更多相关文章

  1. phonegap2.5在android开发平台的环境搭建及插件安装
  2. android2.2 2.3状态栏区别
  3. android 反编译 整理
  4. Android第三方文件选择器aFileChooser使用方法详解
  5. 通过apk签名使应用程序有系统权限
  6. Android反编译工具简介
  7. 在ubuntu操作系统下配置android开发环境
  8. 导出已安装到手机中程序的apk文件
  9. android 新建工程,没R.java 文件

随机推荐

  1. 【eoeAndroid社区索引】android源码开发
  2. Android之常用adb指令
  3. Android的Activity动画切换
  4. Android(安卓)自定义线程池
  5. Android注解-编译时生成代码 (APT)
  6. 在本地UI使用webview,在html页面用js与and
  7. 自动批改android模拟器的imei的小程序 和
  8. android Ant批打包学习(二)---生成有签名
  9. android一些坑与小技巧
  10. Android Studio——Android TextUtils类