我想通过引导加载程序中配置的引导选项将一些参数传递给定制的 Linux init。
我已经用 Python 和 C 编写了 test init。Python 版本能够在内核启动选项中看到任何没有“=”或“。”的内容。在里面。这些值可在 sys.argv 中找到。但是,C 程序似乎没有传递这些值。我原以为 Python 中的 sys.argv 列表是通过解析 **argv 数组生成的。以下是希望有助于澄清的测试脚本和屏幕截图。
内核引导行是:
kernel /grub/linux-2.6.38.4 root=/dev/vda1 init=/argv-{p|c} one two three four five
蟒蛇版本:
#!/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 运行时按预期工作)