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

来源:互联网 发布:班班通教学软件登录 编辑:程序博客网 时间:2024/04/28 22:55

位于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会通过约定的格式 设置一些内核的启动参数,内核启动时会按这种格式读取参数。

原创粉丝点击