uboot向内核和应用层传递参数

应用需求:开机启动时,通过三路GPIO引脚来判断启动模式,由于其中一路GPIO引脚存在多路复用,所以只能在uboot下读取到正确的启动模式,在uboot阶段将读取到的启动模式保存,通过参数传递的方式上传给kernel和应用层。

1、首先现在版本的uboot使用的是以设备数的方式进行参数传递的。查找以下函数

static void setup_start_tag (bd_t *bd)  
{         
    params = (struct tag *)bd->bi_boot_params;  

    params->hdr.tag = ATAG_CORE;  
    params->hdr.size = tag_size (tag_core);  

    params->u.core.flags = 0;  
    params->u.core.pagesize = 0;  
    params->u.core.rootdev = 0;  

    params = tag_next (params);  
}

setup_start_tag函数是传参初始化的第一个函数,params是一个全局静态变量用来存储要传给kernel的参数,这里bd->bi_boot_params的值赋给params,因此bi_boot_params需要进行初始化,从而将params放在一个合理的内存区域。params为struct tag的结构,如下:

struct tag {  
    struct tag_header hdr;  
    union {  
        struct tag_core     core;  
        struct tag_mem32    mem;  
        struct tag_videotext    videotext;  
        struct tag_ramdisk  ramdisk;  
        struct tag_initrd   initrd;  
        struct tag_serialnr serialnr;  
        struct tag_revision revision;  
        struct tag_videolfb videolfb;  
        struct tag_cmdline  cmdline;  
    struct tag_wakeup   wakeup;/*该成员为添加的启动模式*/  
    } u;  
};

启动模式结构体定义在arch/arm/include/asm/setup.h文件,如下:

#
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值