uboot到kernel启动需要注意的内存

kernel的加载地址通常在0x8000,一般利用0x4000-0x8000作为页表。

主要就是(atag或者dtb)的内存不要和uboot和kernel的空间重叠。


所以要注意几个内存搬移


1uboot将自己拷贝到ram中的内存搬移


2kernel uncompress阶段判断解压后的地址空间和当前img是否重叠,如果重叠会进行一次搬移。


3uncompress会将代码解压到特定的位置上,这也会造成内存覆盖。


我之前使用uboot启动树莓派kernel的时候,将dtb加载到了0x500000。将zimge内核加载到了0x800000.内核最终的解压地址是0x8000,假设解压后的长度是0x530400

那么解压后的kernel范围是 0x8000-0x538400,


zimage运行的时候,由于zimage 0x800000和最终地址0x538400不会冲突,因此就直接开始解压了。

但是由于 0x538400覆盖了 0x500000的dtb,因此导致dtb被覆盖造成错误。所以dtb既不能和未解压前的zimge重叠,也不能和解压后的image重叠。

这是需要特别注意的地方。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值