u-boot入口 _start函数学习

u-boot入口 _start函数学习

前言

u-boot一个嵌入式裸机程序,一般被当作OS的bootloader来使用。因为u-boot本身对底层硬件操作的便利性,也常常被用来在OS之下对各个嵌入式硬件模块进行测试。因此学会u-boot对一名嵌入式工程师来说是非常重要的。当今快速发展的社会,竞争激烈。对笔者来说,掌握u-boot是面对不确定时,信心和底气的来源。

关于本文

这篇博客,基于笔者正在开发的平台,简单介绍u-boot.lds连接脚本,u-boot内存分布模型,u-boot第一个执行的函数_start()。

u-boot.lds

u-boot.lds 是 U-Boot (嵌入式系统的引导加载程序)的链接脚本文件,用于描述 U-Boot 在链接过程中如何组织目标文件,并确定它们在内存中的布局和分配方式。这个文件的后缀 .lds 表示它是一个链接脚本文件。
u-boot.lds 文件中,你会找到一系列的指令和命令,用于定义程序的段(section)布局、地址空间的分配以及程序的入口地址等。这些指令和命令决定了 U-Boot 最终生成的可执行文件的结构和执行方式。
典型的 u-boot.lds 文件可能包含以下几个部分:

  1. OUTPUT_ARCH 指令:用于指定目标架构的类型,比如 OUTPUT_ARCH(arm) 表示目标架构是 ARM。
  2. ENTRY 指令:用于指定程序的入口地址。在 U-Boot 中通常是 ENTRY(_start),表示程序的入口地址是 _start
  3. SECTIONS 段:这是 u-boot.lds 文件中最重要的部分,它定义了程序中各个段的布局和分配方式。比如 .text 段、.data 段、.bss 段等。每个段都有自己的起始地址、大小和属性等信息。
  4. ALIGN 指令:用于对段进行对齐操作,以确保各个段的起始地址符合要求。
    通过编辑 u-boot.lds 文件,可以自定义 U-Boot 的链接行为,例如修改程序的段布局、改变程序的入口地址等。这对于一些特殊的应用场景或者定制化需求是非常有用的。
    u-boot.map截图
    在这里插入图片描述
    这样,链接器就会按照链接脚本的要求,将text段一个个打包进image的相应位置,每个函数都有了自己在内存中的地址。其他段的拼接和text段类似,笔者就不赘述了,感兴趣的可以学习链接原理。推荐博客:SegmentFault思否的彻底理解链接器四篇
  • 29
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值