私は組み込み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
次に、シリアルポートをハードコーディングする代わりに設定できることを確認します。