2

起動時にブートローダーで構成されたブートオプションを介して、カスタマイズされた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[]")

Pythoninitargvテスト

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");
}

Cinitargvテスト

テストプログラムが終了する(そしてパニックを引き起こす)直前に、Pythonバージョンはカーネルがダイジェストしなかったブートオプションを吐き出しますが、Cバージョンはダイジェストしませんでした。私はsysvinitソースコードを見ましたが、それは同じように機能するように見えますか(C開発者ではありません)?

C initプログラムにブートオプションを渡すにはどうすればよいですか?

(ああ、Cプログラムはinitとして実行されていないときは期待どおりに動作します)

4

2 に答える 2