u-boot从nand读取的内核格式

位于nand中的内核是uImang格式,其结构为头部加上真正的内核,头部对应的类型为:

typedef struct image_header {
 uint32_t ih_magic; /* Image Header Magic Number */
 uint32_t ih_hcrc; /* Image Header CRC Checksum */
 uint32_t ih_time; /* Image Creation Timestamp */
 uint32_t ih_size; /* Image Data Size  */
 uint32_t ih_load; /* Data  Load  Address  */
 uint32_t ih_ep;  /* Entry Point Address  */
 uint32_t ih_dcrc; /* Image Data CRC Checksum */
 uint8_t  ih_os;  /* Operating System  */
 uint8_t  ih_arch; /* CPU architecture  */
 uint8_t  ih_type; /* Image Type   */
 uint8_t  ih_comp; /* Compression Type  */
 uint8_t  ih_name[IH_NMLEN]; /* Image Name  */
} image_header_t;

这里我们主要关注 uint32_t ih_load; /* Data  Load  Address  */


 uint32_t ih_ep;  /* Entry Point Address  */

一个是加载地址,一个是入口地址,用bootm命令加载内核时,会读出这两个地址,

如果bootm命令后面的地址与真正内核所处地址不同,则需要将真正内核移到bootm 命令后面的地址。

其中头部image_header_t的大小为64byte.

为了不移动内核以便加快系统启动速度,可以将nand read 内存地址设为bootm 命令后面的地址减去64byte.

 

 

bootm 所做的工作:

1. 根据头部的ih_load 移动内核到合适的地方

2. 启动内核,do_bootm_linux,此处uboot会通过约定的格式 设置一些内核的启动参数,内核启动时会按这种格式读取参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值