|
現: 2020-12-26 (土) 15:08:10 yuji |
| + | *init [#m2845645] |
| + | Linuxで最初に起動されるプロセスが"init"。このプロセスがファイルをmountしたり,deamonを起動したりしている。 |
| | | |
| + | **Android init Language [#ic841b51] |
| + | アクション,コマンド,サービス,オプションのクラスがある。~ |
| + | -これらの全ては,行単位で空白で区切られたトークンから構成される。~ |
| + | -Cスタイルのバックスラッシュエスケープが,トークンに空白を挿入するために使用される。~ |
| + | -ダブルクォートは,複数トークンに分割したテキストから空白を防止するために使用される。~ |
| + | -バックスラッシュが行の最後の文字であるときは,行を折りたたむために使用される。~ |
| + | -#(先頭の空白は許可します)で始まる行はコメントになる。~ |
| + | |
| + | -アクションとサービスは暗黙的に新しいセクションを宣言する。 |
| + | -全てのコマンドあるいはオプションは,直近に宣言されたセクションに所属する。 |
| + | -最初のセクションより前のコマンドとオプションは,無視される。 |
| + | |
| + | アクションとサービスは一意の名前を持つ。もし二番目のアクションもしくはサービスが |
| + | 既に存在するものと同じ名前を宣言したら,エラーとして無視される。 |
| + | |
| + | ***アクション [#tca6a1d3] |
| + | アクションは,コマンドのシーケンスで名づけられる。アクションはトリガを持っている。~ |
| + | トリガはアクションがいつ発生するべきかを決定するために使用される。~ |
| + | アクションのトリガに一致したイベントが発生した時,アクションは実行されるキューの末尾に追加される。(それアクションが既にキュー上に存在しない限りは)~ |
| + | ~ |
| + | キュー内のそれぞれのアクションは,順に取り出され,各コマンドは順に実行されて行く。 |
| + | ~ |
| + | initは,アクティビティ内のコマンドの実行する間に,他のアクティビティ(デバイスの作成/破棄,プロパティの設定,プロセスの再起動)を処理する。~ |
| + | ~ |
| + | アクションは以下の形をとる。 |
| + | on <trigger> |
| + | <command> |
| + | <command> |
| + | <command> |
| + | |
| + | ***サービス [#i389b457] |
| + | サービスは,initが起動して,サービスが終了したときに再起動させるプログラムです。~ |
| + | サービスは以下の形をとります。 |
| + | service <name> <pathname> [ <argument> ] |
| + | <option> |
| + | <option> |
| + | ... |
| + | |
| + | ***オプション [#r2d9112b] |
| + | オプションは,サービスへの修飾子です。オプションは,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~ |
| + | サービスを再起動するようにする。 |
| + | |
| + | ***トリガー [#h6ddeba0] |
| + | トリガーは,文字列です。~ |
| + | アクションを発生させるためのトリガーとして指定する。特定種類のイベントを使うことが出来る。~ |
| + | |
| + | -boot~ |
| + | initが起動した時に発生する最初のトリガー。この後で,/init.confが読み込まれる。~ |
| + | |
| + | -<name>=<value>~ |
| + | プロパティ<name>に<vlaue>で指定した値が設定された時に,発生する。~ |
| + | |
| + | -device-added-<path>,device-removed-<path>~ |
| + | デバイスノードが追加あるいは削除された時に発生する。~ |
| + | |
| + | -service-exited-<name>~ |
| + | 指定したサービスが終了した時に発生する。 |
| + | |
| + | ***コマンド [#lc40fab3] |
| + | |
| + | -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>のファイルを開いて,文字列を書き込む。~ |
| + | |
| + | ***プロパティ [#b2f3328d] |
| + | initは,いくつかのシステムプロパティを更新する。それは,それが何をしているかの足跡を残すため。~ |
| + | |
| + | -init.action~ |
| + | アクション名と等しいプロパティは,現在実行されているか。~ |
| + | |
| + | -init.command~ |
| + | コマンドと等しいプロパティは,実行されているか。~ |
| + | |
| + | -init.svc.<name>~ |
| + | サービスの状態。("stopped","running","restarting") |
| + | |
| + | ***init.confの例 [#sa3ef1ec] |
| + | # 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 |
| + | ていうように使用する。 |