将Linux引导选项传递给Init

我想通过引导程序在引导时configuration的引导选项将一些parameter passing给定制的Linux init。

我已经在Python和C中编写了testinginit。Python版本能够在内核启动选项中看到没有“=”或“。”的任何内容。 在里面。 这些值在sys.argv中find。 但是,C程序似乎没有通过值。 我原以为Python中的sys.argv列表是通过parsing** argv数组生成的。 下面是testing脚本和屏幕截图,希望有助于澄清。

内核引导线是:

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[]") 

Python初始化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"); } 

C初始化argv测试

你可以在testing程序退出之前看到(并导致恐慌)python版本吐出内核没有消化的引导选项,而C版本没有。 我已经看过sysvinit的源代码,它在我看来(不是一个C开发),它的工作原理是一样的吗?

如何获取传递给我的C init程序的启动选项?

(哦,和C程序按预期工作,而不是作为init运行)

Solutions Collecting From Web of "将Linux引导选项传递给Init"

我不知道C,但我认为我在哪里int i; (第4行)应该是int i = 0; 。 如果我错了,给我的回答添加评论,我会删除它。

编辑:你也可以在for循环中做i = 0for(i = 0; i < argc; i++)

Artur说,你需要把我初始化为0。 如果你不知道我的价值是什么在程序运行的时候在内存中发生的事情。 有时它会工作,其他人我会> = argc和循环将被跳过,最坏的情况下,我是负面的,你的程序段错误。

另外在python中试试:

 # i do not need to be initialized # for counting xrange is better, it does not built the whole list on memory for i in xrange(1, len(sys.argv)): print("arg[%d] - %s" % (i, sys.argv)) # i do not need to be incremented manually