文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于 mkimage 给zImage 生成0x40个bytes的header..

关于 mkimage 给zImage 生成0x40个bytes的header..

时间:2009-03-15  来源:dqwjack

http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=651003&page=&view=&sb=&o=&vc=1

生成uImage的方法: 利用mkimage 命令 把zImage 包装 ,

mkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008000 -n linux-2.6.18.8 -d zImage uImage2.6.18.8

下面的总结都是 稍微调整一下上面的 -a -e -x 参数什么的, 你会发现 这些参数不同, 就会导致你 tftp dowload的地址会有不同, 有的时候kernel会run不起来。

addr是地址 , 如果两个地方都是addr ,说明是同一个地址, 否则 我会比如addr+0x40 的

具体为什么 , 可以看我上面帖子的分析:

1> mkimage -a addr -e addr
那么tftp 下载kernel 就一定不能下载 addr处 , 否则,kernel不来。 因为u-boot并不搬运kernel 代码, 也就是没有把header去掉。 所以 只有入口是 addr+0x40才是kernel的入口。

当然也不能下到 < addr + 2M 的地方, 否则搬运的时候会有一些覆盖, 导致搬运后的kernel不完整, bootm的时候,会RESET 的。

2> mkimage -a addr -e addr+0x40 或者 mkimage -a addr -x 两个是一回事 。 -x的意思 是就在kernel所在地执行。 不必搬运(代码里面的条件是 tftp 下kernel的时候 就下到 addr处)

这种情况: tftp 就一定把kernel 下载到addr处 ,这样u-boot 在bootm的时候 就不搬运了。
起始这种情况更多的用在flash里面 。

比如 卖产品的时候 ,kernel肯定是烧写在flash里面, 记住这个flash地址, 然后 mkimage -a 这个flash地址 -x , 这样bootm 也就不用搬运了, 直接在flash里面运行kernel 。 其实我不晓得这样可不可以, 按理说编译 kernel的时候,link的时候 用的 vmlinux.lds 里面的数值 都是 0x30008000 , mkimage 随便指定一个flash 地址, 应该不行才对, 除非你把 kernel里面的vmlinux.lds 也改掉和mkimage一致。

总之 , 一句话, u-boot 是为kernel服务, kernel里面定义好的参数, u-boot 不能乱改 , 一定要一致 ,否则kernel肯定翘辫子才对。
相关阅读 更多 +
排行榜 更多 +
开局一个小兵最新版

开局一个小兵最新版

休闲益智 下载
火柴人联盟2腾讯qq登录版

火柴人联盟2腾讯qq登录版

体育竞技 下载
tsuki odyssey游戏(月兔冒险奥德赛)

tsuki odyssey游戏(月兔冒险奥德赛)

休闲益智 下载