一、内核参数的传递
uboot将内核参数存放在内存的某一地址上,bi_boot_params存放uboot传给kernel 内核参数的首地址.
int board_init (void)
{
gd->bd->bi_arch_number = MACH_TYPE_GODBOX; //cpu id号
gd->bd->bi_boot_params = CFG_BOOT_PARAMS; //指定内核参数存放的起始地址 #define CFG_BOOT_PARAMS (MEM_BASE_DDR + 0x0100)
gd->flags = 0;
}
bi_boot_params 指向tagged list的首地址,向tagged list中添加 tag,最后调用theKernel (0, machid, bd->bi_boot_params),向内核传递内核参数首地址,并启动内核。theKernel的三个参数将会被赋值给R0 = 0, R1=machid, R2 = bd->bi_boot_params。所以uboot向kernel传递参数的起始地址,起始是通过R2寄存器来传递。
do_bootm_linux
{
->bd_t *bd = gd->bd;
->setup_start_tag (bd); //设置tag_core tagged, 起始tagged
->setup_memory_tags (bd); //设置tag_mem32 tagged, 内存标记,mem参数
->setup_commandline_tag (bd, commandline); //设置cmdline tagged, 命令行标记 cmdline参数
。。。。设置一系列标记 //
->setup_end_tag (bd); //设置结束tagged
->theKernel (0, machid, bd->bi_boot_params); //启动linux内核
}
//设置起始的tag_core标记
static struct tag *params;
static void setup_start_tag (bd_t *bd)
{
params = (struct tag *) bd->bi_boot_params;
params->hdr.tag = ATAG_CORE; //tag标示
params->hdr.size = tag_size (tag
uboot将内核参数存放在内存的某一地址上,bi_boot_params存放uboot传给kernel 内核参数的首地址.
int board_init (void)
{
gd->bd->bi_arch_number = MACH_TYPE_GODBOX; //cpu id号
gd->bd->bi_boot_params = CFG_BOOT_PARAMS; //指定内核参数存放的起始地址 #define CFG_BOOT_PARAMS (MEM_BASE_DDR + 0x0100)
gd->flags = 0;
}
bi_boot_params 指向tagged list的首地址,向tagged list中添加 tag,最后调用theKernel (0, machid, bd->bi_boot_params),向内核传递内核参数首地址,并启动内核。theKernel的三个参数将会被赋值给R0 = 0, R1=machid, R2 = bd->bi_boot_params。所以uboot向kernel传递参数的起始地址,起始是通过R2寄存器来传递。
do_bootm_linux
{
->bd_t *bd = gd->bd;
->setup_start_tag (bd); //设置tag_core tagged, 起始tagged
->setup_memory_tags (bd); //设置tag_mem32 tagged, 内存标记,mem参数
->setup_commandline_tag (bd, commandline); //设置cmdline tagged, 命令行标记 cmdline参数
。。。。设置一系列标记 //
->setup_end_tag (bd); //设置结束tagged
->theKernel (0, machid, bd->bi_boot_params); //启动linux内核
}
//设置起始的tag_core标记
static struct tag *params;
static void setup_start_tag (bd_t *bd)
{
params = (struct tag *) bd->bi_boot_params;
params->hdr.tag = ATAG_CORE; //tag标示
params->hdr.size = tag_size (tag