ARM linux 系统通过bootable通过命令行参数传给内核kernel,内核启动时读出命令行参数cmdline,通过start_kernel对命令行处理。
如果为了实现自己的特殊功能,通过bootloader传参数给内核,对内核进行特殊的操作,就要增加代码。首先在bootloader要在命令行增加对应的参数项。另外还要改内核增加对这个参数的处理函数。比如增加一个参数,用来设置开机模式。在bootloader的命令行增加boot_mode=test。
在内核增加
int saved_boot_mode;
static int __init boot_mode_setup(char *str)
{
char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */
char *s, *options, *brl_options = NULL;
if (!strcmp(str, "test"))
saved_boot_mode=str;
return 1;
}
__setup("boot_mode=", boot_mode_setup);
怎样通过__setup宏就将参数boot_mode和对应处理函数加入到了init。tab 区,执行start_kernel的时候对bootloader的命令行进行解析,解析到字符boot_mode就执行boot_mode_setup函数。
这样内核就可以知道命令行参数boot_mode的内容了。