init anchor.png

Linuxで最初に起動されるプロセスが"init"。このプロセスがファイルをmountしたり,deamonを起動したりしている。

Page Top

Android init Language anchor.png

アクション,コマンド,サービス,オプションのクラスがある。

  • これらの全ては,行単位で空白で区切られたトークンから構成される。
  • Cスタイルのバックスラッシュエスケープが,トークンに空白を挿入するために使用される。
  • ダブルクォートは,複数トークンに分割したテキストから空白を防止するために使用される。
  • バックスラッシュが行の最後の文字であるときは,行を折りたたむために使用される。
  • #(先頭の空白は許可します)で始まる行はコメントになる。
  • アクションとサービスは暗黙的に新しいセクションを宣言する。
  • 全てのコマンドあるいはオプションは,直近に宣言されたセクションに所属する。
  • 最初のセクションより前のコマンドとオプションは,無視される。

アクションとサービスは一意の名前を持つ。もし二番目のアクションもしくはサービスが 既に存在するものと同じ名前を宣言したら,エラーとして無視される。

Page Top

アクション anchor.png

アクションは,コマンドのシーケンスで名づけられる。アクションはトリガを持っている。
トリガはアクションがいつ発生するべきかを決定するために使用される。
アクションのトリガに一致したイベントが発生した時,アクションは実行されるキューの末尾に追加される。(それアクションが既にキュー上に存在しない限りは)

キュー内のそれぞれのアクションは,順に取り出され,各コマンドは順に実行されて行く。
initは,アクティビティ内のコマンドの実行する間に,他のアクティビティ(デバイスの作成/破棄,プロパティの設定,プロセスの再起動)を処理する。

アクションは以下の形をとる。

on <trigger>
<command>
<command>
<command>
Page Top

サービス anchor.png

サービスは,initが起動して,サービスが終了したときに再起動させるプログラムです。
サービスは以下の形をとります。

service <name> <pathname> [ <argument> ]
<option>
<option>
...
Page Top

オプション anchor.png

オプションは,サービスへの修飾子です。オプションは,initがサービスをいつ,どのように実行するかに影響を与える。

  • critical
    これはデバイスクリティカルサービスです。4分間に4回以上終了した場合,その装置はリカバリーモードで再起動する。
  • disable
    このサービスは,そのクラスと共に自動で起動しません。これは明示的に名前で起動しなければならない。
  • setenv <name> <value>
    プロセスの起動時に,環境変数<name>に<value>を設定する。
  • socket <name> <type> <perm> [ <user> [ <group> ] ]
    /dev/socket/<name>という名称のUNIXドメインソケットを作成し,起動したプロセスにソケットのfdを渡す。
    <type>は"dgram"か"stream"にしなければなりません。<user>と<group>は,デフォルト0です。
  • user <username>
    このサービスを<username>で実行する。デフォルトはrootになると思う。(ほんとうはデフォルトは,nobodyにすべき)
  • group <groupname> [ <groupname> ]
    このサービスを<groupname>で実行する。追加の<groupname>は,最初のグループ(必須)を超えてプロセスの補助グループを設定(setgroups()を介して)するために使われる。
    デフォルトは,rootになると思う。(デフォルトは,nobodyにすべき)
  • oneshot
    サービスが終了した場合に,再起動をさせないようにする。
  • class <name>
    サービスのクラス名を指定する。同じクラス名の全てのサービスは,一緒にスタートあるいは停止すると思われる。
    classオプションを指定されていないサービスのクラスは,"default"。
  • onrestart
    サービスを再起動するようにする。
Page Top

トリガー anchor.png

トリガーは,文字列です。
アクションを発生させるためのトリガーとして指定する。特定種類のイベントを使うことが出来る。

  • boot
    initが起動した時に発生する最初のトリガー。この後で,/init.confが読み込まれる。
  • <name>=<value>
    プロパティ<name>に<vlaue>で指定した値が設定された時に,発生する。
  • device-added-<path>,device-removed-<path>
    デバイスノードが追加あるいは削除された時に発生する。
  • service-exited-<name>
    指定したサービスが終了した時に発生する。
Page Top

コマンド anchor.png

  • exec <path> [ <argument> ]
    forkしてプログラムを実行します(<path>で指定した)。プログラムが実行を完了を待つ。
    組み込みコマンドとは異なり,使用を避けることを勧める。initのスタックを取得するリスクを冒すんで。
  • export <name> <value>
    グローバル環境の中の環境変数<name>に<value>を設定する。このコマンドを実行した後に,起動する全てのプロセスに継承される。
  • ifup <interface>
    ネットワークインターフェース<interface>を,オンラインにする。
  • import <filename>
    初期設定ファイルを解析し,現在の設定を拡張する。
  • hostname <name>
    ホスト名を設定する。
  • chdir <directory>
    作業ディレクトリを移動する。
  • chmod <octal-mode> <path>
    ファイルのパーミッションを変更する。
  • chown <owner> <group> <path>
    ファイルのオーナーとグループ権を変更する。
  • chroot <directory>
    プロセスのルートディレクトリを変更する。
  • class_start <serviceclass>
    既に実行中でなければ,指定したクラスのサービスを起動する。
  • class_stop <serviceclass>
    現在実行中であれば,指定したクラスの全てのサービスを停止する。
  • domainname <name>
    ドメイン名を設定する。
  • insmod <path>
    <path>のモジュールを読み込む。
  • mkdir <path> [mode] [owner] [group]
    <path>にディレクトリを作成する。オプションで,モード,オーナー,グループを指定する。
    ディレクトリは,パーミッション755で作成される。また,rootユーザとrootグループで作成される。
  • mount <type> <device> <dir> [ <mountoption> ]
    <device>を<dir>にマウントする。<device>はmtd@nameという形で,名前でmtdブロックを 指定することが可能。<mountoption>は,"ro","rw","remount","noatime"などがある。
  • setkey
    TBD
  • setprop <name> <value>
    システムプロパティ<name>に,<value>を設定する。
  • setrlimit <resource> <cur> <max>
    リソースに,rlimitを設定する。
  • start <service>
    既に実行していなければ,サービスを実行する。
  • stop <service>
    現在実行中であれば,サービスを停止する。
  • symlink <target> <path>
    <path>に,<target>のシンボリックリンクを作成する。
  • sysclktz <mins_west_of_gmt>
    システムクロックベースを設定する。(0は,システムクロックがGMT)
  • trigger <event>
    トリガーとなるイベント。他のアクションからのキューアクションとして使われる。
  • write <path> <string> [ <string> ]
    <path>のファイルを開いて,文字列を書き込む。
Page Top

プロパティ anchor.png

initは,いくつかのシステムプロパティを更新する。それは,それが何をしているかの足跡を残すため。

  • init.action
    アクション名と等しいプロパティは,現在実行されているか。
  • init.command
    コマンドと等しいプロパティは,実行されているか。
  • init.svc.<name>
    サービスの状態。("stopped","running","restarting")
Page Top

init.confの例 anchor.png

# not complete -- just providing some examples of usage
#
on boot
export PATH /sbin:/system/sbin:/system/bin
export LD_LIBRARY_PATH /system/lib

mkdir /dev
mkdir /proc
mkdir /sys

mount tmpfs tmpfs /dev
mkdir /dev/pts
mkdir /dev/socket
mount devpts devpts /dev/pts
mount proc proc /proc
mount sysfs sysfs /sys

write /proc/cpu/alignment 4

ifup lo

hostname localhost
domainname localhost

mount yaffs2 mtd@system /system
mount yaffs2 mtd@userdata /data

import /system/etc/init.conf

class_start default

service adbd /sbin/adbd
user adb
group adb

service usbd /system/bin/usbd -r
user usbd
group usbd
socket usbd 666

service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666

service runtime /system/bin/runtime
user system
group system

on device-added-/dev/compass
start akmd

on device-removed-/dev/compass
stop akmd

service akmd /sbin/akmd
disabled
user akmd
group akmd

Debugging notes

デフォルトでは,initにより実行されたプログラムは,標準出力と標準エラー出力を,/dev/nullに捨てる。
デバッグの為に,自分のプログラムをAndroid program logwrapperを介して,起動することが出来る。これは,標準出力/標準エラー出力を,Android logging system(logcatを介してアクセス可能)にリダイレクトする。

例えば,

service akmd /system/bin/logwrapper /sbin/akmd

ていうように使用する。


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 577, today: 1, yesterday: 1
最終更新: 2020-12-26 (土) 16:08:10 (JST) (1215d) by yuji