运行Python文件的Linux内核作为init

3

是否有可能并且不难构建一个 Linux 内核,其中包含或可以从内核访问 Python 解释器,并能运行 Python 文件作为其 init 进程?


你能够实现这个吗? - user3769778
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是启动任何正常进程的相同调用。而且我认为标准输入和标准输出只是连接到/dev/console,对于init=/bin/sh也适用。(但你为什么要这样做呢?)

2
我认为init不需要是一个C二进制文件;它可以是一个以#!开头的脚本;如果是这种情况,那么你可以轻松地将其变成一个Python程序。
话虽如此,编写一个inittab让init只运行一个程序一次非常简单(尽管通常还有其他更有用的事情要做)。
考虑到您可能希望在系统上执行一些无法轻松使用Python完成的操作(例如尝试挂载文件系统而没有“mount”二进制文件),您可能仍然需要busybox(例如);将“init”添加到busybox二进制文件中只会增加其大小很少。

我以为shebang是由shell解释的,而不是内核,这意味着对于init替代物来说,这种方法不起作用,因为在解析init=参数时没有运行shell。 - Marc B
4
Shebang被内核解释! - mvds
#! 是由内核解释的,请参见 http://lxr.linux.no/#linux+v2.6.35/fs/binfmt_script.c - MarkR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接