今はカスタム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