Linuxカーネルinitramfsでシェルへのttyアクセスを有効にするために必要な設定は何ですか?

Linuxカーネルinitramfsでシェルへのttyアクセスを有効にするために必要な設定は何ですか?

たとえば、エコーされると、arm64プラットフォームの/ dev / ram0にロードされたLinux initramfsにシリアルコンソール端末の出力が表示されますが、たとえばを使用して/ initスクリプトでこのシェルを起動したり、echo "serial tx to ttyAMA0" > /dev/ttyAMA0シェルに接続したりしません。shbash/bin/busybox sh

カーネルコマンドライン:
root=/dev/ram0 rw earlyprintk console=ttyAMA0,115200 console=tty0,115200 initcall_debug=1

(ユーザープログラムのシリアルポートプロンプトと対話しようとする唯一の成功した試みは、ログインプロンプトを表示し、/bin/busybox getty 115200 ttyAMA0キーボード文字入力に応答してgetty設定が有効になっていないため、シリアルポートttyAMA0に「ログインエラー」を印刷する端末を使用することでした。これ/sbin/ttyは、起動時にメンテナンス/構造シェルには必要ないため、指定されたユーザーアカウントにログインする方法がないためですScreen。ですが、バージョンを試してみましたが、initramfsへのシリアルコマンドラインアクセスを有効にすることはできません。問題に対する「類似の質問」のどれも、これに対する解決策を提案していない。minicomshbash

調整後最小initramfsこれまでの例は、シリアル端末にアクセスすることなくテストされています。

ありがとう

ベストアンサー1

カーネルブートオプションを使用してください。

console=ttyAMA0,115200 console=tty0,115200

カーネルは、メッセージをシリアルポートttyAMA0tty0通常のLinux KVMコンソール)に出力します。

ただし、最初のプロセスが開始されると標準入力であるため、2つの別々のTTYデバイスを持つことはできません(標準出力と標準エラーも同じです)。すべてのプロセスと同様に、最大1つのstdin、1つのstdout、および1つのstderrのみを持つことができます。デバイスは次のとおりですメインコンソールそして、次のように構成される。最後 console=カーネルコマンドラインのオプション。

/initinitramfsにスクリプトがある場合、スクリプトが実行するコマンドはデフォルトのコンソールを継承します。ただこれは、スクリプトが明示的に他のデバイスを割り当てない限り、標準の入力/出力/エラーとして機能します。

したがって、問題に対する最も簡単な解決策は、console=オプションを逆順に指定することです。

console=tty0 console=ttyAMA0,115200

(実際には転送速度はシリアルポート接続を含まないため、指定する必要はありません。tty0ただし、指定しても何の害もありません。)

おすすめ記事