android启动过程配置文件的解析与语法

转载 2012年03月23日 16:47:32

(1)android启动文件系统后调用的第一个应用程序是/init,此文件的很重要的内容是解析了init.rc和init.xxx.rc
两个配置文件,然后执行解析出来的任务。相关代码在android源代码/system/core/init/init.c文件中,如下:
    parse_config_file("/init.rc");

    /* pull the kernel commandline and ramdisk properties file in */
    qemu_init();
    import_kernel_cmdline(0);

    get_hardware_name();
    snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
    parse_config_file(tmp);

(2)从上面代码可以看到,第一个配置文件名称固定为init.rc,而第二个配置文件格式为init.xxx.rc,其中xxx部分的内容
是从内核读取的,具体是读取文件/proc/cpuinfo中的Hardware部分,然后截取其部分内容。Hardware部分是定义在内核的
主板定义文件中,我的平台是定义在内核arch/arm/mach-mmp/merlin.c中,我的平台定义如下:
MACHINE_START(ARDENT_MERLIN, "PXA168-based Merlin Platform")
    .phys_io = APB_PHYS_BASE,
    .boot_params = 0x00000100,
    .io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
    .map_io = pxa_map_io,
    .init_irq = pxa168_init_irq,
    .timer = &pxa168_timer,
    .init_machine = merlin_init,
MACHINE_END
这样截取到的hardware部分的内容就为pxa168-based,也就是说我的平台的第二个配置文件应该命名为init.pxa168-based.rc

(3)从上面看init.xxx.rc中的xxx内容是取决是内核中主板的定义的,如果觉得麻烦,可以将其在代码中写死,例如:
    parse_config_file(“init.merlin.rc”);

(4)配置文件的语法如下:
(a)配置文件的内容包含有4种:
     动作(Action)
     命令(Commands)
     服务(Services)
     选项(Options)
(b)动作和命令一起使用,形式如下:
on <trigger>
  <command>
  <command>
  <command>
其中trigger是触发条件,也就是说在满足触发条件的情况下执行1个或多个相应的命令,举例如下:
on property:persist.service.adb.enable=1
    start adbd

(c)服务和选项一起使用,形式如下:
  service <name> <pathname> [ <argument> ]*
  <option>
  <option>
  ...
上面内容解释为:
  service 服务名称 服务对应的命令的路径 命令的参数
    选项
    选项
  ...
举例如下:
service ril-daemon /system/bin/rild
    socket rild stream 660 root radio
    socket rild-debug stream 660 radio system
    user root
    group radio cache inet misc audio
上面的服务对应到/system/bin/rild命令,没有参数,服务名称为ril-daemon,后面的内容都是服务的选项。

(d)选项是影响服务启动和运行的参数,主要的选项如下:

disabled  禁用服务,此服务开机时不会自动启动,但是可以在应用程序中手动启动它。

socket <type> <name> <perm> [ <user> [ <group> ] ]
套接字    类型        名称           权限           用户           组
创建一个名为/dev/socket/<name>,然后把它的fd传给启动程序
类型type的值为dgram或者stream
perm表示该套接字的访问权限,user和group表示改套接字所属的用户和组,这两个参数默认都是0,因此可以不设置。

user <username>
执行服务前切换到用户<username>,此选项默认是root,因此可以不设置。

group <groupname> [ <groupname> ]*
执行服务前切换到组<groupname>,此选项默认是root,因此可以不设置

capability [ <capability> ]+
执行服务前设置linux capability,没什么用。

oneshot
服务只启动一次,一旦关闭就不能再启动。

class <name>
为服务指定一个类别,默认为"default",同一类别的服务必须一起启动和停止

(e)动作触发条件<trigger>
boot  首个触发条件,初始化开始(载入配置文件)的时候触发

<name>=<value>
当名为<name>的属性(property)的值为<value>的时候触发

device-added-<path>
路径为<path>的设置添加的时候触发

device-removed-<path>
路径为<path>的设置移除的时候触发

service-exited-<name>
名为<name>的服务关闭的时候触发

(f)命令(Command)的形式
exec <path> [ <argument> ]*
复制(fork)和执行路径为<path>的应用程序,<argument>为该应用程序的参数,在该应用程序执行完前,此命令会屏蔽,

export <name> <value>
声明名为<name>的环境变量的值为<value>,声明的环境变量是系统环境变量,启动后一直有效。

ifup <interface>
启动名为<interface>的网络接口

import <filename>
加入新的位置文件,扩展当前的配置。

hostname <name>
设置主机名

class_start <serviceclass>
启动指定类别的所有服务

class_stop <serviceclass>
停止指定类别的所有服务

domainname <name>
设置域名

insmod <path>
加载路径为<path>的内核模块

mkdir <path>
创建路径为<path>目录

mount <type> <device> <dir> [ <mountoption> ]*
挂载类型为<type>的设备<device>到目录<dir>,<mountoption>为挂载参数,距离如下:
    mount ubifs ubi1_0 /data nosuid nodev

setkey
暂时未定义

setprop <name> <value>
设置名为<name>的系统属性的值为<value>

setrlimit <resource> <cur> <max>
设置资源限制,举例:
# set RLIMIT_NICE to allow priorities from 19 to -20
    setrlimit 13 40 40
没看懂是什么意思。

start <service>
启动服务(如果服务未运行)

stop <service>
停止服务(如果服务正在运行)

symlink <target> <path>
创建一个从<path>指向<target>的符号链接,举例:
    symlink /system/etc /etc

write <path> <string> [ <string> ]*
打开路径为<path>的文件并将一个多这多个字符串写入到该文件中。

(g)系统属性(Property)
android初始化过程中会修改一些属性,通过getprop命令我们可以看到属性值,这些属性指示了某些动作或者服务的状态,主要如下:
init.action      如果当前某个动作正在执行则init.action属性的值等于该动作的名称,否则为""
init.command     如果当前某个命令正在执行则init.command属性的值等于该命令的名称,否则为""
init.svc.<name>  此属性指示个名为<name>的服务的状态("stopped", "running", 或者 "restarting").

转自:http://blog.csdn.net/jiajie961/article/details/6002871

Android读取配置文件的两种方法

梦想还是有的,成功的人不多,因为没有那么多人会坚持下来。。。加油!!! 在src下创建一个配置文件  以.properties结尾的文件 该类型的文件的内容的格式类似为: some_key = ...
  • shuai370982
  • shuai370982
  • 2016年01月26日 18:55
  • 4454

android启动过程配置文件的解析与语法 .

(1)android启动文件系统后调用的第一个应用程序是/init,此文件的很重要的内容是解析了init.rc和init.xxx.rc 两个配置文件,然后执行解析出来的任务。相关代码在android...
  • tronteng
  • tronteng
  • 2012年02月01日 14:21
  • 232

Android应用启动流程分析

版权声明:本文图文为博主原创,未经博主允许不得转载。 大家有没有好奇过点击 Launcher 图标时,到唤起一个应用页面,这个流程会是怎么样的?本文的目的就是尽可能梳理清楚流程,能够让大家对整个流程...
  • bfboys
  • bfboys
  • 2016年09月17日 19:13
  • 156

使用groovy理解gradle配置文件

groovy语言特点: 1、动态弱类型,不需要明确指定类型,也就是说变量可以以多种方式使用,变量和方法的定义使用的都是def关键字。 2、groovy是动态类型语言,也就是说具体的类型取决于对象本...
  • hp910315
  • hp910315
  • 2017年06月18日 15:49
  • 653

Linux启动流程-bootloader至kernel的过程--android系统启动流程

1 Bootloader 对于一般的ARM处理器,CPU上电或复位执行第一条指令所在地址,即第一段程序Bootloader的开始地址,Bootloader一般存于Nor-flash(XIP),支持芯片...
  • tianshiyalin
  • tianshiyalin
  • 2013年12月10日 20:55
  • 1687

nginx的基本配置--配置文件语法和配置指令

配置文件语法配置文件一般是一个文本文件,可以由程序解析,通过为一组指令指定值便定义了程序的行为,配置nginx只需要掌握一些机制:指令、区段(block)和整体逻辑结构,实际配置过程中,大多为指令填写...
  • zsl10
  • zsl10
  • 2016年08月15日 10:16
  • 2562

Android 启动过程的简述

1. Bootloader 引导 当我们按下手机的电源键时,首先会运行bootloader,bootloader的主要作用是初始化基本的硬件设备(例如 CPU 内存 Flash等),并且建立空间映射...
  • u010018855
  • u010018855
  • 2015年11月24日 15:19
  • 317

详细讲解Linux启动流程及启动用到的配置文件及脚本

《一》:详解Linux启动流程及需要使用到的配置文件 POST加电自检-->BIOS(Boot Sequence)->MBR(bootloader)->Kernel->initrd->rootf...
  • jsh13417
  • jsh13417
  • 2014年03月16日 11:18
  • 2235

flex和bison的用于加载和解析配置文件(参考freeDiameter用法)

http://gmd20.blog.163.com/blog/static/16843923201331664345310/   freeDiameter的主配置文件还有那些extensio...
  • ncepubdtb
  • ncepubdtb
  • 2015年01月14日 11:11
  • 2139

Linux显示检查设置文件中的语法是否正确

Linux显示检查设置文件中的语法是否正确 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ apachectl [conflgtest] 程序“apa...
  • you23hai45
  • you23hai45
  • 2015年01月31日 18:45
  • 2164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android启动过程配置文件的解析与语法
举报原因:
原因补充:

(最多只允许输入30个字)