在Linux内核中运行Python文件作为初始化
有没有可能而且不会太难,制作一个Linux内核,并在里面内置一个Python解释器,或者让内核可以访问这个解释器,这样就能把一个Python文件当作启动程序来运行呢?
2 个回答
2
我觉得init不一定非得是一个C语言编写的二进制文件;它可以是一个开头有#!的脚本。如果是这样的话,你可以很简单地把它做成一个Python程序。
说到这,其实写一个inittab让init只运行一个程序也很简单(不过通常来说,做其他事情会更有用)。
考虑到你可能会想在系统上做一些用Python不太容易完成的事情(比如,试着在没有“mount”这个二进制文件的情况下挂载文件系统),你可能还是需要一个busybox;而且把“init”加到busybox的二进制文件里,增加的大小也不多。
6
你难道不能直接替换 /sbin/init
,或者在启动加载器中提供一个 init=...
的选项吗?只要确保把 Python 和相关库放在根文件系统里就行。
补充说明 我不想搞坏系统,所以这个方法还没测试过,不过看看 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
也能正常工作。(不过你为什么要这么做呢?!)