Python インタープリターが組み込まれているか、カーネルからアクセス可能で、Python ファイルを init プロセスとして実行できる Linux カーネルを構築することは可能であり、信じられないほど難しくありませんか?
2 に答える
ブートローダのオプションを交換し/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
。(しかし、一体なぜあなたはそうするのですか?!)
init は C バイナリである必要はないと思います。#! を含むスクリプトにすることができます。最初に; その場合は、ほとんど手間をかけずに Python プログラムにすることができます。
そうは言っても、init が 1 つのプログラムを 1 回だけ実行する inittab を作成するのは非常に簡単です (ただし、通常は、他のことも行う方が便利です)。
Python では簡単に実行できないことをシステムで実行したい場合 (たとえば、"mount" バイナリを使用せずにファイルシステムをマウントするなど) は、とにかくビジーボックス (たとえば) が必要になるでしょう。busybox バイナリに「init」を追加すると、そのサイズはほとんど増加しません。