initについて補足

initについて

initが読み込むファイルについて…

初期に画面を出した後、イロイロマージする中でwikiで触れていない項目があった。
それで、wlan が起動せずご迷惑を掛けたようだ。ここでお詫びしたい。すみません。。。。。

boot.img を本wikiの方法で生成すると、起動時に
init.qcom.rc
を読み込み処理します。
1.6の init.qcom.rc を ramdisk 内にマージ(コピー)して下さい。

詳細は以下の通り。

init はカーネルから起動されるプロセス番号1のプログラムである。

まず init のソースコードを一部抜粋する。
int main(int argc, char **argv)
{
(省略)
     INFO("reading config file\n");
    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);

    action_for_each_trigger("early-init", action_add_queue_tail);
    drain_action_queue();

    INFO("device init\n");
    device_fd = device_init();

    property_init();
(省略)

特にこの部分
     get_hardware_name();
     snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
     parse_config_file(tmp);
に触れる事を失念していた。

boot.img を作る際に、
--cmdline "console=ttyMSM2,115200n8 androidboot.hardware=qcom"
を指定した。
# cat /proc/cmdline 
とすれば確認できるが、
それを、init内の
static void import_kernel_cmdline(int in_qemu)
で読み込んでいる。
その後、
static void import_kernel_nv(char *name, int in_qemu)
において、解析し
if (!strcmp(name,"androidboot.hardware")) {
           strlcpy(hardware, value, sizeof(hardware));
と代入している。その結果、
hardware="qcom"
となり、先に書いた、
snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
parse_config_file(tmp);
において、
/init.qcom.rc
を読み込む次第である。
その後、
action_for_each_trigger("early-init", action_add_queue_tail);
drain_action_queue();
により、キューに積まれ後で実行される部分もある。

間違いなど有ればご指摘頂ければ幸いです。
コメント
名前:
コメント:











(2011/01/20 3:21 公開)
最終更新:2011年01月22日 00:21
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。