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