在bootloader工作完成后,在内存中加载Linux内核。同时把一些内核引导参数传递给内核。内核根据这些参数作为作为选项,对内核作初化。
参数字符串,如:“ root=/dev/mtdblock1 rw console=tty0 console=ttyS1,115200 rootfstype=yaffs2 mem=64M, monitor=0”。这其中参数包括有“root”、“console”、“rootfstype”、“mem”、“monitor”,也就是参数字符串中“=”的左值。内核在启动时会调用parse_args函数分析这参数字符串,对于一个参数项都会执行与之绑定的操作(函数)。
引导参数是通过__setup(string, function_handler)注册的。该函数把string中的字符串和function_handler函数绑定了起来。在内核启动时,若parse_args函数扫描到string字符串,就执行function_handler函数。
其实__setup是生成了一个struct obs_kernel_param对象。struct obs_kernel_param的定义如下:
- struct obs_kernel_param {
-
const char *str;
-
int (*setup_func)(char *);
-
int early;
-
}
例如:
- int __init di_do_boot_setup(char *str)
-
{
-
int ints[5];
-
-
printk("****************************\n");
-
printk("str: %s", str);
-
-
str = get_options(str, ARRAY_SIZE(ints), ints);
-
if (!str || !*str)
-
return 0;
-
-
printk("str: %s", str);
-
-
return 0;
-
}
-
-
__setup("dido=", di_do_boot_setup);
当然bootloader传入的参数为:ubi.mtd=0 root=ubi0:safefs console=ttyS0,115200 mem=64M rootfstype=ubifs ro dido=fuck
阅读(2102) | 评论(0) | 转发(0) |