uboot内核参数的传递与内核解析uboot传递的内核参数

一、内核参数的传递
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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值