3

Python インタープリターが組み込まれているか、カーネルからアクセス可能で、Python ファイルを init プロセスとして実行できる Linux カーネルを構築することは可能であり、信じられないほど難しくありませんか?

4

2 に答える 2

6

ブートローダのオプションを交換し/sbin/initたり、提供したりすることはできませんか? init=...ルートファイルシステムに python + libs を置いてください。

編集システムをスラッシングする気がしなかったので、テストされていませんが、次を見てlinux/init/main.cください:

static void run_init_process(char *init_filename)
{
    argv_init[0] = init_filename;
    kernel_execve(init_filename, argv_init, envp_init);
}

(python)スクリプトがinitプロセスを置き換えることができない理由はわかりません。execve通常のプロセスを起動するのと同じ呼び出しです。また、stdin と stdout は /dev/console に接続されているだけだと思いますinit=/bin/sh(しかし、一体なぜあなたはそうするのですか?!)

于 2010-08-02T22:13:44.910 に答える
2

init は C バイナリである必要はないと思います。#! を含むスクリプトにすることができます。最初に; その場合は、ほとんど手間をかけずに Python プログラムにすることができます。

そうは言っても、init が 1 つのプログラムを 1 回だけ実行する inittab を作成するのは非常に簡単です (ただし、通常は、他のことも行う方が便利です)。

Python では簡単に実行できないことをシステムで実行したい場合 (たとえば、"mount" バイナリを使用せずにファイルシステムをマウントするなど) は、とにかくビジーボックス (たとえば) が必要になるでしょう。busybox バイナリに「init」を追加すると、そのサイズはほとんど増加しません。

于 2010-08-02T22:29:55.367 に答える