Androidデバイスのブートアニメーションを、Linuxカーネルのログのちらつきに置き換えます

携帯電話用のカスタムブートローダーを開発した後、デスクトップLinuxディストリビューションでできるように、ディスプレイに核ログの表示を実装したいと考えました。 個人的には、携帯電話を起動するとき、最初にブートローダーのロゴを見てからAndroidシステムの起動アニメーションを見るよりも、点滅しているkmsgログを見るほうがはるかに興味深いからです。 2年間、「退屈な壁紙」は退屈になりました。



次に、ディスプレイへのkmsgログの低レベル出力を実装するAndroidカーネル用のLLCONモジュールについて簡単に説明します。



Linuxカーネルには、核ログを画面に表示するモジュールがあります。 このカーネルメカニズムは、FRAMEBUFFER_CONSOLEオプションを指定することで有効になります。 ただし、このメカニズムは、通常最後のターン(late_initステージ)で初期化されるディスプレイドライバーを介してのみ機能します。 この機能により、ブートローダーのプライマリロゴがしばらく表示されます。



「低レベルの結論」という言葉は私が普段使っているものではありません LLCONモジュールはビデオメモリと直接連動し(MS-DOSの若い工芸品をすぐに思い出します)、同時に内部Linuxカーネルドライバー(early_init)を初期化する前に作業を開始します。 これらの機能により、LLCONはできるだけ早く画面にカーネルログの表示を開始できます。



LLCONモジュールを追加した後、次のオプションをカーネル構成に追加する必要があります。

CONFIG_VT=y CONFIG_LLCON=y CONFIG_FONTS=y CONFIG_FONT_6x11=y CONFIG_FONT_8x16=y CONFIG_FONT_SUN12x22=y
      
      





この場合、3つの異なるフォントを指定しました。 私が使用するブートローダーでは、任意のフォントを選択できます。 ただし、カーネルイメージの最小サイズを確認する必要がある場合は、1つのフォントのみを指定する必要があります。



変更されたカーネルのアセンブリを開始する前に、最初にBoardConfigに新しいカーネルオプションを追加することを忘れないでください。

 androidboot.llcon=<mode>,<delay>,<textwrap>,<fb_addr>,<fb_bpp>,<fb_height>,<fb_width>,<fb_stride>,<font_size>,<font_color>
      
      





パラメータのデコード
  • モード:

    0 = LLCONは無効です

    1 =同期ログ出力(ページング)

    2 =非同期ログ出力(行ごとのスクロール)
  • 遅延:

    ミリ秒単位の遅延(画面にグラフィックを表示するストリームで使用。推奨値は100)
  • textwrap:

    0 =行の折り返しは許可されません

    1 =テキストの折り返しを許可
  • fb_addr:

    FrameBufferの物理アドレス
  • fb_bpp:

    表示ピクセル形式(現在は無視されます)
  • fb_height:

    ピクセル単位の表示の高さ
  • fb_width:

    ピクセル単位の表示幅
  • fb_stride:

    ピクセルまたはバイト単位の1行のサイズ
  • font_size:

    フォントサイズ(サポートされる値:6、8、10、12)
  • font_color:

    HEX形式の文字色


例:

 androidboot.llcon=2,100,0,0x03200000,24,1280,720,720,8,0xFFFFFF
      
      





fb_addrパラメーターの値を見つける方法
FrameBufferの物理アドレスは、アセンブルされたカーネルのDeviceTreeでスパイできます。 これを行うには、ブランチ「qcom、mdss_fb_primary」でパラメーター「qcom、memblock-reserve」を探します。 また、非常に頻繁に、FrameBufferのアドレスがカーネルのkmsgログに表示されます。




ここではLLCONモジュールのソースコードを完全にはコピーしません。対応するパッチへのリンクのみを示します。



また、initサブシステム(ramdiskにある)をファイナライズせずに、Androidサブシステムを初期化するときに、ブートアニメーションの再生が開始されることにも注意してください。 したがって、LLCONを使用する場合、このパッチを実行するブートアニメーションの無効化を自動化する必要があります。



LLCONモジュールの動作のデモ:







LLCONモジュールには、次の用途に役立つ追加機能もあります。



しかし、次回LLCONのこれらの可能性についてお話します。



All Articles