私は組み込みLinux(kernel-5.10.24)で開発中で、カーネルのデバッグを支援するためにカーネル設定でEarly_printkを有効にしました。
通常、カーネルコマンドラインが設定されており、console=ttyS0,115200 ....
カーネルで初期のprintkログを表示できます。
ところで、今日誤ってコマンドラインを次に変更しましたが、console=ttyS1,115200 ....
カーネルの起動中にカーネルログが表示されないようです。
驚くべきことに、最初のprintkが完了したカーネルログの最初の部分はまだ見ることができ、それ以降は他のログはありません。
だから私の質問は、存在しないデバイス(または間違ったシリアルコンソール)に設定されていても、right
カーネルログをコンソールに出力するために最初のprintkをどのように取得できますか?console=
答え1
コンソール起動パラメータの値を考慮すると、端末がシリアルラインを介してシステムに接続されていると仮定します。
console =が存在しないデバイスに設定されていても、printk出力カーネルはどのようにして正しいコンソールに早く記録されますか?
理由は簡単です。端末初期起動メッセージは、一部の端末に関係なく出力されます。快適開始パラメータ値ですが、早期印刷ただし、開始パラメータ。
これ快適実行パラメータは「実際の」コンソールのみを決定します。 vg標準のLinuxドライバが適切に初期化されると(つまり、初期化ステップの開始時に)、この端末がコンソールとして使用されます。
設定が間違っている場合、論理起動後にシステムコンソールに出力がありません。
Linuxでは、カーネルEarly_printkのコンソール設定は何ですか?
読むことができるようにカーネルコマンドラインパラメータ:
earlyprintk =vgaearlyprintk
=sclpearlyprintk
=xenearlyprintk
=シリアル[,ttySn[,転送速度]]
earlyprintk=シリアル[,0x...[,転送速度]]
earlyprintk=ttySn[,転送速度]
earlyprintk=dbgp[ debugController#]
pciserial[,force],bus:device.function[,baud rate]
Earlyprintk=xdbc[xhciController#]earlyprintkは、一般的なコンソール初期化前にカーネルがクラッシュするときに便利です。いくつかの外観上の問題があるため、デフォルトでは有効になっていません。
実際のコンソールが引き継がれたときに無効にしたくない場合は、「、keep」を追加してください。
vga、efi、シリアル、またはUSBデバッグポートのいずれかを一度に使用できます。
現在、ttyS0とttyS1のみを名前で指定できます。他のI / Oポートは、ttySnをI / Oポートアドレスに置き換えることで、いくつかのアーキテクチャ(最小x86およびARM)で明示的に指定できます。earlyprintk = serial、0x1008、115200で行うことができます。ドライバ/シリアル: 2: uart:ST16650V2 ポート:00001008 irq:18 ...
標準シリアルドライバとの相互作用はあまり良くありません。
VGAおよびEFI出力は最終的に実際のコンソールで上書きされます。
xen出力はXen PVゲストのみ使用できます。
sclp 出力は s390 でのみ使用できます。
「pciserial」のオプションの「force」を使用すると、そのクラスコードがUARTクラスに属していなくてもPCIデバイスを使用できます。