
たとえば、エコーされると、arm64プラットフォームの/ dev / ram0にロードされたLinux initramfsにシリアルコンソール端末の出力が表示されますが、たとえばを使用して/ initスクリプトでこのシェルを起動したり、echo "serial tx to ttyAMA0" > /dev/ttyAMA0
シェルに接続したりしません。sh
bash
/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へのシリアルコマンドラインアクセスを有効にすることはできません。問題に対する「類似の質問」のどれも、これに対する解決策を提案していない。minicom
sh
bash
調整後最小initramfsこれまでの例は、シリアル端末にアクセスすることなくテストされています。
ありがとう
答え1
カーネルブートオプションを使用してください。
console=ttyAMA0,115200 console=tty0,115200
カーネルは、メッセージをシリアルポートttyAMA0
(tty0
通常のLinux KVMコンソール)に出力します。
ただし、最初のプロセスが開始されると標準入力であるため、2つの別々のTTYデバイスを持つことはできません(標準出力と標準エラーも同じです)。すべてのプロセスと同様に、最大1つのstdin、1つのstdout、および1つのstderrのみを持つことができます。デバイスは次のとおりですメインコンソールそして、次のように構成される。最後 console=
カーネルコマンドラインのオプション。
/init
initramfsにスクリプトがある場合、スクリプトが実行するコマンドはデフォルトのコンソールを継承します。ただこれは、スクリプトが明示的に他のデバイスを割り当てない限り、標準の入力/出力/エラーとして機能します。
したがって、問題に対する最も簡単な解決策は、console=
オプションを逆順に指定することです。
console=tty0 console=ttyAMA0,115200
(実際には転送速度はシリアルポート接続を含まないため、指定する必要はありません。tty0
ただし、指定しても何の害もありません。)
答え2
解決済みxuancong84の答え同様の質問について:
setsid sh -c 'exec sh </dev/ttyAMA0 >/dev/ttyAMA0 2>&1'