設定しようとしていますシニットinit
Linux 用 (PC 上)として。現時点での目標は、単にtty/bash
そこから 1 つを実行することです。カーネルはすでにroot=/dev/sda2
用にを取得しているので、特別なマウントは必要ありませんcmdline
。
私はsinit
バイナリを として持っています/sbin/init
が、次に何をすればいいのかわかりません。いくつかのスクリプトを配置する必要があることはわかっていますが、sinit
それらをどのように実行したり、 に関連付けたりできるのかがわかりませんbash
。
答え1
同梱のマニュアルページ sinit.8 と README は私にとって非常にわかりやすいものでした。ただし、ソースを調べる際に簡単に紹介しておきます。
- sinitメイン実行可能ファイル、
/sbin/init
カーネルによってpid 1として起動される /bin/rc.init
スクリプトを別の子プロセスとして実行するための初期環境を準備します。- 別個のプロセスとして実行される
/bin/rc.init
ため、/bin/rc.init
それ以降のシステムを初期化するためのコマンドが含まれています。 - ゾンビ化したプロセスを捕捉し、その終了コードをどこにも読み込まない無限ループに入ります。
- 無限ループ中はシグナルによって中断される可能性があります。待機するように定義されているシグナルは SIGUSR1 と SIGINT です。SIGUSR1 はスクリプト名
/bin/rc.shutdown
としてinit を強制的に実行しpoweroff
、SIGINT はスクリプト内の操作モードを区別するために init を強制的に同じスクリプトreboot
名で実行します。これらの 2 つのシグナルは init が待機するものだけであることに注意してください。含むSIGKILL と SIGSTOP は無視されます。また、スーパーユーザーのみが init にシグナルを送信できます。SIGINT は、Ctrl-Alt-Delete を押すとカーネルによって生成されますが、そのように指示された場合のみです (通常、init プロセスは、cad で SIGINT を送信できるようにするために、特別なシステムコールを実行します)。
だから、このことから、提供しない:
- init スクリプト (独自のスクリプトを作成するか、ディストリビューションで提供されているスクリプトを適応させる必要があります)
- 制御方法(ランレベルなど)は2つの簡単なコマンドのみ
しかし、sinit は、きちんと動作する、小さくてかわいい init です。組み込みシステムだけでなく、現代のデスクトップ環境の煩わしさのないシンプルなデスクトップ システムにも非常に適していると思います。