initramfsで起動するときに「Unreachable tty; job control is off」を防ぐ方法

initramfsで起動するときに「Unreachable tty; job control is off」を防ぐ方法

今はカスタムinitramfsをテストしていますが、ログにエラーがあるたびに

「ttyにアクセスできません。ジョブ制御がオフになっています。」

initramfsの/ devにはnull、sda1、ttyS0という4つのファイルがあります。カーネルパラメータは「console = ttyS0」です。

また、ctrl + cをテストしましたが、うまく動作します。それでは、この問題はどのように発生しますか?ビジボックス文書では、

"sh:ttyにアクセスできません。ジョブ制御がオフになっています。"エラーが発生し続けるのはなぜですか?私のシェルでControl-Cが機能しないのはなぜですか?これは実際にはuClibcの質問ではありませんが、とにかくここで答えます。シェルが制御端末を取得できないため、ジョブ制御はオフになります。これは通常/dev/consoleでシェルを実行したときに発生します。カーネルは /dev/console デバイスに制御端末を提供しません。通常の tty (例えば tty1 や ttyS0) でシェルを実行する必要があり、すべてが完璧に動作します。シェルを/ dev / consoleで実行したい場合は、drivers / char / tty_io.cを変更して「noctty = 1;」を設定する行を変更してカーネルをハッキングできます。 ”を“0”に設定してください。実際のコンソールでシェルを実行することをお勧めします。

ttyと入力すると、/dev/ttyS0の代わりに/dev/consoleが表示されます。

これがこの問題に関するすべての情報です。誰かが私を助けることができることを願っています:-)

答え1

pizdelectが述べたように、これは解決策です。https://raw.githubusercontent.com/brgl/busybox/master/shell/cttyhack.c

私はちょうど::respawn:/bin/cttyhack /bin/sh

答え2

再コンパイルはcttyhack.c面倒です。シェルに/bin/shをラップするだけです。

setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'

動作します。

答え3

より短い解決策は次のとおりです。

exec setsid sh </dev/tty1 >/dev/tty1 2>&1

ただ実行したい場合は、agettyこの方法ははるかに短いです。

exec setsid agetty tty1 </dev/tty1 >/dev/tty1 2>&1

関連情報