现在的位置: 首页 > 综合 > 正文

s3c2440学习系列5(续)

2017年12月21日 ⁄ 综合 ⁄ 共 560字 ⁄ 字号 评论关闭

kernel解压缩在8a000000地址处,解压缩函数中的data参数已经去掉了上面的64字节的头。那程序什么时候开始进入到sdram中运行呢?在start.s中,函数relocate_codeU-bootrelocate到内存的最高端。拷贝完代码之后,注意没有拷贝kernel,就在in-ram中执行了,在解压缩的时候,把kernel解压缩到sdram

 

如果我们的code是未经过压缩,根据code里面的情况,他会比较kernelload地址是否和addr地址一致,例如:

如果使用mkimage
-a addr -e addr
那么tftp
下载kernel 就一定不能下载 addr ,否则,kernelrun不起来。 因为u-boot并不搬运kernel 代码, 也就是没有把header去掉。 所以 只有入口是 addr+0x40才是kernel的入口。 当然也不能下到 < addr + 2M 的地方, 否则搬运的时候会有一些覆盖, 导致搬运后的kernel不完整, bootm的时候,u-boot就会RESET 的。

 

 

关于命令的说明:所有的命令都放在__u_boot_cmd_start节中,这连接的确定了地址,但是uboot经过搬运之后,要重新设置起地址。Uboot对于自己扩充需要的命令比较方便。

 

注:

(上述的说明中,有可能自己的理解有误)

抱歉!评论已关闭.