Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1077453
  • 博文数量: 104
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(9)

2011年(41)

2010年(3)

2009年(3)

2008年(47)

分类: LINUX

2011-01-14 10:26:58

    本文用于说明android的init.rc中使用的mini-language。主要的参考资料是代码目录中的readme(
其实只是做了个翻译,方便查询)。

* 总体规则
    init语言是面向行的,每一行包括一个语句。语句包含由空白字符分隔的多个token。如果想在一个token
中包含空白字符,可以用`\’转义,或者将包含空白字符的token包含在双引号中。在行末的`\'用于折行。
    以`#'开始的行(前面可以有空白字符)表示注释。
    语句大体上分为四类:
    1.  动作(action);
    2.  命令(Command);
    3.  服务(Service);
    4.  选项(Option);
    Action和Service的声明会开始一个新的区段(section),后续所有command和option语句都属于最近的那个
区段,在第一个区段之前的语句被忽略;动作和服务的名字应该保持唯一。

* 动作
    动作是一个命名的命令组。动作有一个触发器,该触发器决定了这组命令什么时候应该执行。动作的形式
类似于:
    on
        
        
        ...

* 服务
    服务是这样一类程序,它们由init启动,并且,如果它们退出,init会重启它们。它们形如:
    service []*
        
        
        ...

* 选项
    选项是服务的修饰符,它们决定了init什么时候、怎么样运行被修饰的服务。
** 常见选项
    1.  cirtical:关键服务,如果这种服务在4分钟内退出的次数超过了4次,设备将会被重启到recovery模式;
    2.  disabled:禁用的服务,不会被自动启动。
    3.  setenv :启动时为这个服务设置环境变量。
    4.  socket [ []]:创建一个unix socket,路径为
        /dev/socket/,并且将该socket的fd传递给被启动的进程。用户和组默认为01;
    5.  user :使用指定的用户执行服务;
    6.  grou []*:使用指定的组来执行服务;
    7.  oneshot:如果服务退出,不要自动重启它;
    8.  class :为该服务指定一个类别名。一个类别中的服务可以被同时启动或者停止,如果没有指定,
        则服务的类别是default。
    9.  onrestart:重启服务之前执行一个命令。

* 触发器
    触发器用于匹配某些事件,当时间发生时,出发命令的执行。
** 常见触发器
    1.  boot:在init加载init.rc之后的第一个事件;
    2.  =:当属性被设置为值时;
    3.  device-added-/device-removed-:当指定的设备节点被创建或删除时;
    4.  service-exited-:当指定的服务退出时

* 属性
    这是init支持的一些“系统属性”,不同于环境变量。init会自动更新一些系统属性:
    1.  init.action:等于当前正在执行的action或"";
    2.  init.command:等于当前正在执行的command或"";
    3.  init.svc.:指定服务的状态,如running, stopped, restarting;

* 命令
    init支持一组命令:
    1.  exec [ ]*
        创建一个新进程并执行一个程序()。在程序完全执行前,init将会阻塞等待。注意,这可能
        一起init永远阻塞等待,应尽量避免使用exec。
    2.  export
        在全局环境变量中设在环境变量
    3   ifup
        启动网络接口
    4.  import
        解析一个init配置文件,扩展当前配置。
    5.  hostname
        设置主机名。
    6.  chmod
        更改文件访问权限。
    7.  chown
        更改文件的所有者和组。
    8.  class_start
        启动所有指定服务类下的未运行服务。
    9.  class_stop
        停止指定服务类下的所有已运行的服务。
    9.  domainname
        设置域名。
    10. insmod
        加载中的模块。
    11. mkdir [mode] [owner] [group]
        创建一个目录,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,
        并属于root用户和root组。
    12. mount [ ]*
        试图在目录挂载指定的设备。 可以是以 mtd@name 的形式指定一个mtd块设备。
        包括 "ro"、"rw"、"remount"、"noatime"、 ...
    13. setkey
        目前不可用
    14. setprop
        设置系统属性 值.
    15. setrlimit
        设置的rlimit(资源限制)。
    16. start
        启动指定服务(如果此服务还未运行)。
    17. stop
        停止指定服务(如果此服务在运行中)。
    18. symlink
        创建一个指向的软连接
    19. sysclktz
        设置系统时钟基准(0代表时钟滴答以格林威治时(GMT)为准)
    20. trigger
        触发一个事件。
    21. write [ ]*
        打开路径为的一个文件,并写入一个或多个字符串。

阅读(1384) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~