#ifdef CONFIG_ZIMAGE_BOOT
#LINUX_ZIMAGE_MAGIC是一个一zImage对应的魔数,也就是zImage效验的编号
#define LINUX_ZIMAGE_MAGIC 0x016f2818
/* find out kernel image address */
#启动命令是bootm 0x30008000或者是bootm
if (argc < 2) {
#如果是bootm,所传的参数是一个, load_addr使用的是默认的启动地址
addr = load_addr;
debug ("* kernel: default image load address = 0x%08lx\n",
load_addr);
} else {
#将传的启动地址参数转为数字
addr = simple_strtoul(argv[1], NULL, 16);
debug ("* kernel: cmdline image address = 0x%08lx\n", img_addr);
}
#启动地址处的36字处的4个字节值是否等于LINUX_ZIMAGE_MAGIC的值,如果等于说明是zImage的格式
if (*(ulong *)(addr + 9*4) == LINUX_ZIMAGE_MAGIC) {
printf("Boot with zImage\n");
#将addr地址转换成物理地址
addr = virt_to_phys(addr);
#将标准启动数据结构image_header_t的地址与指针绑定
hdr = (image_header_t *)addr;
#启动前的一些设置
hdr->ih_os = IH_OS_LINUX;
hdr->ih_ep = ntohl(addr);
#构建images全局变量
memmove (&images.legacy_hdr_os_copy, hdr, sizeof(image_header_t));
#设置images全局变量
/* save pointer to image header */
images.legacy_hdr_os = hdr;
images.legacy_hdr_valid = 1;
#效验完成跳转的启动代码
goto after_header_check;
zImage启动分析
最新推荐文章于 2024-05-04 13:45:51 发布