boot.img の作成

boot.img の作成

boot.img の作成について

ramdhiskイメージ

まず、起動時に / に作成される RAMDISK イメージを作成する。
ディレクトリ、ramdisk の様なモノを作成して、make が完了したらできる、rootディレクトリで作業を行う。
$ANDROID_SRC/out/target/product/generic/root/

ここにある、
init.rc
が起動時に各ディレクトリの自動作成、ファイルの所有者・パーミッション、
立ち上げるサービス、初期化プログラムなどを決定するスクリプトとなる。
また、
init
というファイルはプログラムで、カーネルが起動完了した後に最初に実行される、
プロセス番号1番のプログラムである。
$ANDROID_SRC/out/target/product/generic/root/
makeされた素の root は取っておきたいので、
$ cp -a root ramdisk
などして、複製を作り以降 ramdisk ディレクトリで作業を行う。
ファイル init.rc さえちゃんと編集しておけ普通に起動してくると思う。

ramdiskを fs イメージにする。

書式は
mkbootfs $(RAMDISKDIR) > $(RAMDISK)
のような形になる。
実行例:
$ mkbootfs ramdisk > my_ramdisk.img

ブートイメージ(一歩手前)を作成する

mkbootimg は先に patch を当てて make してできた、mkbootimg を利用する。
書式はこのような感じ
mkbootimg --kernel $(KERNEL) --ramdisk $(RAMDISK) --cmdline $(CMDLINE) --base 0x20000000  -o $(mkbootimg.img)
実行例:
$ mkbootimg --kernel boot_orig.bin.out-kernel --ramdisk my_ramdisk.img  \
 --cmdline "console=ttyMSM2,115200n8 androidboot.hardware=qcom" --base 0x20000000 -o my_mkboot.img
折り返しのため、\を入れたが、一行で入力する際は、\は必要ない。

bootイメージを ubi に変換する

書式
ubinize -o $(my_boot) -p 128KiB -m 2048 -O 256 $(ubi)
そして、設定ファイル ubi.cfg 必要である。
下記のようなテキストを作成し、ubi.cfg として保存する。
[boot]
mode=ubi
image=my_mkboot.img
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=boot
vol_flags=autoresize

最終行は改行を忘れないように!
実行例:
$ ubinize -o my_boot.img -p 128KiB -m 2048 -O 256 ubi.cfg
以上で実機に転送できる、boot.img の作成完了。

検証したい場合

新規に適当なディレクトリを作成してからの方が良い。
上記操作ディレクトリと同じ場所で行うと混乱する。
$ unubize.pl my_boot.img
これで、my_boot.img.out と言うファイルが出力される。
これは、ubi化する逆で 出てくるのは先の説明の my_mkboot.img に該当する。

次に、my_boot.img.out を kernel と ramdisk イメージに分離する。
$ split_bootimg.pl my_boot.img.out
を実行する。
次の、2つのファイルが出力される。
my_boot.img.out-kernel
my_boot.img.out-ramdisk.cpio
my_boot.img.out-kernel はそのままの kernel である。
my_boot.img.out-ramdisk.cpio は ramdisk ディレクトリ内を cpio でまとめたものである。
my_boot.img.out-ramdisk.cpio を展開するには、
$ cat my_boot.img.out-ramdisk.cpio | cpio -i
等として展開できるがカレントディレクトリに展開されるので、何かディレクトリを作成し、
$ cat ../my_boot.img.out-ramdisk.cpio | cpio -i
としたほうが良いかと思う。

unubize.pl、split_bootimg.pl は本スレにリンクが有りました。
もしくは、「ubiイメージを変換してkernelとramdisk.cpioを抽出」でgoogleで検索するとよいでしょう。

間違いなど有れば指摘して頂ければ幸いです
  • froyonomake -f build/core/main.mk mkbootimg -- makeneko (2011-01-03 18:51:39)
  • 途中で書き込んじゃったorz 初心者のためいきなりのfroyoのfull buildは敷居が高かったので、repo sync>パッチ当て後にmkbootimgを単品compileしてhacked kernel作りました:) -- makeneko (2011-01-03 18:59:04)
  • makenekoさん、うまくいきましたでしょうか? 成功されたなら幸いです。 -- is01rebuild (2011-01-04 03:00:06)
  • 上の-f を使ったmakeでmkbootimgだけ作って、ubiイメージ作成→flash_image→起動まで行けました。その後froyoをfull buildしましたが、思った以上にメモリを要求されて手間取りました(つω<; -- makeneko (2011-01-04 17:37:19)
  • 良かったです。make にはメモリもCPUパワーも消費しますね。wiki上に間違いなど有りましたらご指摘下さい。 -- is01rebuild (2011-01-04 18:09:13)
名前:
コメント:













最終更新:2011年01月04日 18:09
ツールボックス

下から選んでください:

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