Я хотел бы передать некоторые параметры в настроенный Linux init через параметры загрузки, настроенные в загрузчике при загрузке.
Я написал тестовые init как на Python, так и на C. Версия Python способнаувидеть в параметрах загрузки ядра ничего, что не имеет '=' или '.'в этом.Значения находятся в sys.argv.Тем не менее, программа на C, похоже, не прошла значения.Я бы подумал, что список sys.argv в Python был сгенерирован путем анализа массива ** argv.Ниже приведены тестовые сценарии и снимки экрана, которые, надеюсь, помогут прояснить.
строка загрузки ядра:
kernel /grub/linux-2.6.38.4 root=/dev/vda1 init=/argv-{p|c} one two three four five
Версия Python:
#!/usr/bin/python
import sys
i = 0
print("Printing argv[] (Python) ...")
for each in range(i, len(sys.argv)):
print("argv[%d] - %s" % (i, sys.argv[i]))
i += 1
print("...finished printing argv[]")
C версия:
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
printf("Printing argv[] (C) ...\n");
for(i; i < argc; i++) {
printf("argv[%d] - %s\n", i, argv[i]);
}
printf("...finished printing argv[]\n");
}
Вы можете видеть непосредственно перед тем, как тестовые программы выходят (и вызывают панику) из версии Pythonвыкладывает параметры загрузки, которые ядро не переварило, в то время как версия C не сделала.Я посмотрел исходный код sysvinit, и мне кажется (я не являюсь разработчиком C), что он работает так же?
Как передать параметры загрузки в мою программу C init?
(о, и программа на C работает, как и ожидалось, когда она не запускается как init)