Ядро Linux, которое запускает файл python для init - PullRequest
3 голосов
/ 03 августа 2010

Было бы возможно и не невероятно сложно собрать ядро ​​linux с встроенным или доступным из ядра интерпретатором python, который мог бы запускать файл python в процессе инициализации?

Ответы [ 2 ]

6 голосов
/ 03 августа 2010

Разве вы не можете просто заменить /sbin/init или предоставить опцию init=... для загрузчика?Просто убедитесь, что вы добавили python + libs в корневую файловую систему.

edit Мне не хотелось перебивать систему, поэтому она не проверена, но смотрит на 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) не может заменить процесс инициализации;execve - это тот же вызов, который запускает любой нормальный процесс.И я думаю, что stdin и stdout просто подключены к / dev / console, для init=/bin/sh также работает. (но с какой стати вы?!)

2 голосов
/ 03 августа 2010

Я не думаю, что init должен быть двоичным C;это может быть скрипт с #!в начале;если это так, то вы можете сделать так, чтобы это была программа на Python без особых усилий.

Сказав это, довольно тривиально написать inittab, где init просто запускает одну программу один раз (хотя обычно это болееполезно делать и другие вещи).

Учитывая, что вы, вероятно, захотите сделать некоторые вещи в вашей системе, которые не могут быть легко выполнены с помощью python (например, попробуйте смонтировать файловые системы без двоичного файла "mount")вам, вероятно, все равно понадобится busybox (например);добавление init в двоичный файл busybox очень мало увеличивает его размер.

...