カーネルの初期のprintkが期待どおりに動作しないようです。

カーネルの初期のprintkが期待どおりに動作しないようです。

私は組み込みLinuxシステム(kernel-5.10.24)を開発しており、できるだけ早くカーネルログを取得したいので、CONFIG_EARLY_PRINTKカーネル設定を有効にしました。

U-bootを使用してカーネルを起動したときに最初に取得されるカーネルログは、カーネルバナーではなく次のようになります。

....
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK

Starting kernel ...

[    2.243226] printk: console [ttyS0] enabled
[    2.247565] printk: bootconsole [early0] disabled
......

初期のprintkが期待どおりに機能していないようです。
カーネルのコマンドラインは次のとおりです。

console=ttyS0,115200 loglevel=8 init=/bin/bash root=ubi0:rootfs log_buf_len=32K

カーネルからできるだけ早くログを印刷するには、特定の設定が必要ですか?

答え1

CONFIG_EARLY_PRINTKオプションのヘルプテキスト説明する:

カーネルの低レベルデバッグ機能を使用する初期コンソールが必要な場合は、ここでYと言います。earlyprintkカーネルパラメータに追加このコンソールを有効にします。

カーネルコマンドラインにはこのearlyprintkパラメータは含まれていません。追加してみてください。

さらに、ARM用Early_printk.c使用printascii()CONFIG_DEBUG_UART_FLOW_CONTROLこのオプションの影響を受けるように見える機能です。このオプションが設定されている場合、シリアルコンソールケーブルは組み込みシステムにCTSフロー制御信号を提供しますか?

UART初期化コードがないように見えるため、ボーレートやその他の設定はまだu-bootで設定されている可能性があります。

答え2

Earlyprintkを見ることができるヒントを与えたレビューを共有してくれたtelcoMに感謝します。

それから調べました。
ドライバearlyprintkは、自分のシステムに接続されていない最初のシリアルコンソールを使用するようにハードコーディングされているため(別のシリアルポートを使用しているため)、正しいシリアルポートを使用するようにコードを変更すると、期待どおりに動作する可能性がearlyprintkあります。

earlyprintk次に、シリアルポートをハードコーディングする代わりに設定できることを確認します。

関連情報