Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1112815
  • 博文数量: 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 [ ]*
        打开路径为的一个文件,并写入一个或多个字符串。

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