内核中定义了以下全局变量保存启动参数相关的字符串,
in init/main.c
/* Untouched command line saved by arch-specific code.与default_command_line一致 */ char __initdata boot_command_line[COMMAND_LINE_SIZE]; /* Untouched saved command line (eg. for /proc) 与default_command_line一致*/ char *saved_command_line; /* Command line for parameter parsing 与command_line一致,保存未处理参数*/ static char *static_command_line;
in arch/arm/kernel/setup.c
#define COMMAND_LINE_SIZE 1024 #define CONFIG_CMDLINE "console=ttySAC0 root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc" /*may overwritten in parse_tag_cmdline(const struct tag *tag)*/ static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE; static char __initdata cmd_line[COMMAND_LINE_SIZE];
通过下面的调用关系,default_command_line保存启动参数,由parse_cmdline函数处理后。
asmlinkage void __init start_kernel(void) -->char * command_line; -->setup_arch(&command_line); //setup_arch(char ** cmdline_p) /*这里的default_command_line中保存的是u-boot传递过来的命令行参数*/ -->char *from = default_command_line; /*保存未修改的,u-boot传递过来的命令行参数*/ memcpy(boot_command_line, from, COMMAND_LINE_SIZE); boot_command_line[COMMAND_LINE_SIZE-1] = '