You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

U-Boot中跳转至内核代码段的代码位置及32位入口点计算代码查询

U-Boot跳转内核及32位入口点计算代码位置

一、bootm/bootz跳转内核的核心代码

  • 通用逻辑入口:common/bootm.c中的bootm_do_exec()函数,该函数会调用对应架构的专属跳转实现。
  • 32位ARM架构的具体跳转:arch/arm/lib/bootm.c里的do_bootm_linux()函数,最终通过kernel_entry()宏(定义于arch/arm/include/asm/system.h)完成跳转,本质是直接跳转到计算好的入口地址执行。

二、32位系统内核入口点计算代码

  • 针对32位ARM常用的zImage格式:入口点计算逻辑在arch/arm/lib/bootm.c的do_bootm_linux()中,会读取zImage头部0x24偏移处的32位start字段(代码段起始偏移),结合loadaddr得出实际入口地址:入口地址 = loadaddr + 头部存储的代码段偏移。
  • 若使用uImage格式:uImage头部(struct image_header,定义在include/image.h)包含ih_ep字段,直接存储内核入口地址,bootm命令会直接读取该值作为跳转目标,无需额外计算。
  • 其他32位架构(如MIPS、PowerPC):对应代码在arch/<架构名>/lib/bootm.c中,逻辑类似,均从镜像头部提取信息或直接使用指定地址完成入口点计算。

三、补充说明

fatload仅负责将内核镜像加载到指定loadaddr,入口点计算和跳转逻辑完全由bootm/bootz命令处理,核心代码均集中在上述架构相关的bootm实现文件中。

内容的提问来源于stack exchange,提问作者전기현

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:14:53