在U-BOOT的最后提到传递参数给内核,调用如下
//调用内核,寄存器R0=0,R1=机器类型,R2=参数块地址
theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
而这两个参数是如何传递给kernel的分析如下(只涉及到非汇编部分)
一.u-boot传递TAG到kernel的解析
在setup_arch函数的parse_tags中对传递过来的TAGLIST进行了解析
对每一项的tag使用parse_tag分析,
for (t = &__tagtable_begin; t < &__tagtable_end; t++)
if (tag->hdr.tag == t->tag) {
t->parse(tag);
break;
}
其中__tagtable_begin,__tagtable_end在vmlinux.ld中也有定义,这里看tagtable的建立过程
#define __tagtalbe(tag,fn)/
Static struct tagtable __tagtable_##fn __tag={tag,fn}
#define __tag __userd __attribute__((__section__(“.taglist.init”)))
对于上述宏中的fn,就是tagtable