Japanese Stable CLIP を試してみた

カーネルビルド(一応)OK

 

自分でビルドしたカーネルで起動できました。

前回はうまくいきませんでしたが、ここからいろいろ試しました。

boot パーティションにフラッシュしてみる

以前、TWRP を fastboot boot でフラッシュせずに起動しようとするとうまく起動しなかったので、フラッシュすると起動するかも、と思いました。
どうやら、boot.img の編集は Android Image Kitchen(AIK) を使うとよさそうです。
Stock Firmware をダウンロードしてきて、AIK で分解。boot.img-zImage をビルドしたカーネルの Image.gz-dtb で置き換えて、再度 boot.img に固める。
それを fastboot でフラッシュしてみましたが、やはり起動しませんでした。状況としては、ブートローダーから処理が進まない感じ。それも、ブートループではなく fastboot モードに戻ってしまっているので、カーネルをロードできていない雰囲気です。

dtb について詳しく調べてみる

どうやら、プラットフォームごとの微妙な差を吸収するための部品をカーネル本体から外だしするための仕組みのようです。なので、これも重要そうです。
では、この dtb ファイルはどう作られるのでしょうか?
out/arch/arm64/boot には、Image、Image.gz、Image.gz-dtb の3つのファイルができています。少し気になったのがファイルサイズ。Image.gz は 14MB 程、Image.gz-dtb になると 48MB 程に膨れ上がります。
AIK で分解した際に、boot.img-zImage のサイズが 13MB ぐらいでしたので、dtb ファイルがかなり大きい気がします。

dtb ファイルを取り出してみる

extract-dtb というのがありました。カーネルイメージから dtb を取り出すことができるようです。これで自分でビルドしたカーネルの Image.gz-dtb と、boot.img から抽出した zImage からそれぞれ dtb ファイルを取り出すと、全然数が違います。zImage のほうは4ファイルのみ。

取り出した dtb ファイルを結合してみる

カーネルに dtb を結合するのは、cat コマンドでできるようですので、
cat Image.gz 01_dtbdump_Qualcomm_Technologies,_Inc._SDM_660_PM660_+_PM660L_MTP.dtb 02_dtbdump_pQualcomm_Technologies,_Inc._SDM_636_PM660_+_PM660L_MTP.dtb 03_dtbdump_WQualcomm_Technologies,_Inc._SDM_660_PM660_+_PM660L_MTP.dtb 04_dtbdump_Qualcomm_Technologies,_Inc._SDM_636_PM660_+_PM660L_MTP.dtb > Image.gz-dtb
この Image.gz-dtb を、AIK で再度イメージ化して、fastboot でフラッシュしてみると、ブートループするようになりました。これは、カーネルがイケてなくてブートしないだけに進展したように思います。

コンパイラを gcc に変えてみる

最初は gcc でやろうとしたのですが、エラーがでたので今時は clang でコンパイルするものだと思ってそうしてました。
gcc だとエラーになるのはメッセージが表示されるからなので、それを表示する"print_deprecation_warning"をコメントアウトすれば問題なさそうです。そうしたうえで、
PATH=/mnt/f/build/phh/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/:$PATH make -j4 O=out ARCH=arm64 CROSS_COMPILE=aarch64-linux-android-
と実行すれば gcc でビルドできます。これでできた Image.gz を、先ほどと同じように boot.img から取り出した dtb を結合して、AIK で boot.img を作って fastboot でフラッシュすると、無事起動しました。
起動後に、システム情報からカーネルバージョンを見てみると、ビルドした日時になっていたのでおそらく自分でビルドしたカーネルで起動しました。

コメント