起動時にブートローダーで構成されたブートオプションを介して、カスタマイズされたLinuxinitにいくつかのパラメーターを渡したいと思います。
私はPythonとCの両方でtestinitを作成しました。Pythonバージョンは、「=」または「。」を持たないカーネルブートオプションですべてを見ることができます。初期化。値はsys.argvにあります。ただし、Cプログラムは値を渡されていないようです。Pythonのsys.argvリストは、**argv配列を解析することによって生成されたと思います。以下は、明確にするのに役立つと思われるテストスクリプトとスクリーンショットです。
カーネルブートラインは次のとおりです。
kernel /grub/linux-2.6.38.4 root=/dev/vda1 init=/argv-{p|c} one two three four five
Pythonバージョン:
#!/usr/bin/python
import sys
i = 0
print("Printing argv[] (Python) ...")
for each in range(i, len(sys.argv)):
print("argv[%d] - %s" % (i, sys.argv[i]))
i += 1
print("...finished printing argv[]")
Cバージョン:
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
printf("Printing argv[] (C) ...\n");
for(i; i < argc; i++) {
printf("argv[%d] - %s\n", i, argv[i]);
}
printf("...finished printing argv[]\n");
}
テストプログラムが終了する(そしてパニックを引き起こす)直前に、Pythonバージョンはカーネルがダイジェストしなかったブートオプションを吐き出しますが、Cバージョンはダイジェストしませんでした。私はsysvinitソースコードを見ましたが、それは同じように機能するように見えますか(C開発者ではありません)?
C initプログラムにブートオプションを渡すにはどうすればよいですか?
(ああ、Cプログラムはinitとして実行されていないときは期待どおりに動作します)