多谢斑竹!
春节没来得及看回复,刚回来;十五还没到,给大家拜个晚年!
@斑竹,请看看我的理解是否还有不妥:
我目前的理解是这样的:
1、atag_list跟boot_param的结构是不一样的。(为什么说atag_list更灵活呢?一方面是atag_list的结构易于扩展,另一方面难道是因为atag_list的地址是由boot_loader决定的?)
2、atag_list的地址是由bootloader传递过来的(通过r2寄存器);kernel解析它之前,会经历对kernel解压缩的过程,必须保证list不会被overwrite;通常bootloader会选择SDRAM_base + 0x100作为list的首地址(地址只要在有效范围内即可)。
3、boot_param的地址是编译的时候写死的(这个地址是禁止mmu的情况下的一个地址,是一个物理地址)。我的代码中这个地址是SDRAM_PA + 0x100(碰巧跟atag_list的地址一致)。如果使用这个方式进行参数传递的话,那么bootloader必须协同kernel定义、使用这个空间的地址。
4、bootloader会选择二者之一进行参数传递。
谢谢!
[ 此帖被zwinger在2010-02-20 16:06重新编辑 ]