zImage启动分析

#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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值