【嵌入式移植】6、U-Boot源码分析3—make

U-Boot源码分析3—make

【嵌入式移植】4、U-Boot源码分析1—Makefile文章中可知执行make命令的时候,没有指定目标则使用默认目标PHONYPHONY依赖项为_all all scripts_basic outputmakefile scripts dtbs

all

Makefile中第129行指定默认目标PHONY依赖_all,第198行指定_all依赖于all,第859行指明all依赖于$(ALL-y) cfg,而在第768行:
请添加图片描述
最终ALL-y的值为

ALL-y = checkarmreloc u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check spl/u-boot-spl.bin u-boot.img u-boot.dtb u-boot-dtb.img u-boot.itb

ALL-y包含checkarmrelocu-boot.srecu-boot.binu-boot.symSystem.mapbinary_size_checkspl/u-boot-spl.binu-boot.imgu-boot.dtbu-boot-dtb.imgu-boot.itb

这些目标具体是什么用处呢,结合【嵌入式移植】3、编译U-Boot中U-Boot的编译和烧写过程,最终是将编译生成的sunxi-spl.binu-boot.itb烧写到SD卡上

其中u-boot.itbALL-y已经有了,那么sunxi-spl.bin又是怎么来的呢

查看编译过程
请添加图片描述
原来sunxi-spl.bin是使用MKSUNXI这个工具制作的,查看详细的编译过程输出,找到对应的语句(这里可以使用make CROSS_COMPILE=aarch64-linux-gnu- V=1语句输出详细的编译过程,单独保存下来查看)
请添加图片描述
原来sunxi-spl.bin是使用tools目录下的mksunxiboot工具,由spl/u-boot-spl.bi制作而来;而查看顶层Makefilespl/u-boot-spl.bi依赖于spl/u-boot-spl,而spl/u-boot-spl执行的命令为

spl/u-boot-spl: tools prepare \
		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \
		$(if $(CONFIG_OF_SEPARATE)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)
	$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all

前几行为准备编译所需工具,最后一行执行scripts/Makefile.spl,目标为all

进入scripts/Makefile.spl文件,目标all依赖于$(ALL-y),而$(ALL-y)包括$(obj)/$(SPL_BIN).bin$(obj)/sunxi-spl.bin等,其实即需编译生成$(obj)/$(SPL_BIN).bin=spl/u-boot-spl.bin

查看$(obj)/$(SPL_BIN).bin依赖,根据变量定义,在scripts/Makefile.spl第232行~233行:

$(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-nodtb.bin FORCE
	$(call if_changed,copy)

可知spl/u-boot-spl.bin$(obj)/$(SPL_BIN)-nodtb.bin制作(与编译输出匹配cp spl/u-boot-spl-nodtb.bin spl/u-boot-spl.bin

在第303行~304行:

$(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE
	$(call if_changed,objcopy)

可知spl/u-boot-spl-nodtb.bin$(obj)/$(SPL_BIN)通过编译工具aarch-linux-gnu-objcopy制作,对应编译过程输出为:

aarch64-linux-gnu-objcopy -j .text -j .secure_text -j .secure_data -j .rodata -j .data -j .u_boot_list -j .rela.dyn -j .got -j .got.plt -j .dtb.init.rodata -j .efi_runtime -j .efi_runtime_rel  -O binary  spl/u-boot-spl spl/u-boot-spl-nodtb.bin

在第356行~358行:

$(obj)/$(SPL_BIN): $(u-boot-spl-platdata) $(u-boot-spl-init) \
		$(u-boot-spl-main) $(obj)/u-boot-spl.lds FORCE
	$(call if_changed,u-boot-spl)

相关推荐

  1. [RK3399 Linux] 移植U-Boot 2023.04 & Linux 6.3

    2024-02-16 00:14:01       18 阅读
  2. [IMX6ULL]移植lf-v2022.04 U-boot

    2024-02-16 00:14:01       14 阅读
  3. 【Spring Boot 3】【JPA】嵌入对象

    2024-02-16 00:14:01       27 阅读
  4. 嵌入——QT】Ymodem协议

    2024-02-16 00:14:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-16 00:14:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-16 00:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-16 00:14:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-16 00:14:01       20 阅读

热门阅读

  1. 数据分析 — Pandas 分组聚合

    2024-02-16 00:14:01       29 阅读
  2. Codeforces Round 918 (Div. 4) 1

    2024-02-16 00:14:01       29 阅读
  3. C语言——oj刷题——回文字符串

    2024-02-16 00:14:01       29 阅读
  4. Integer.toHexString(b & 0xff)理解以及& 0xff什么意思

    2024-02-16 00:14:01       27 阅读
  5. 为什么USB要转TTL

    2024-02-16 00:14:01       36 阅读
  6. 项目中的任务调度和消息队列方案详解

    2024-02-16 00:14:01       23 阅读
  7. 类与对象 上

    2024-02-16 00:14:01       30 阅读
  8. 【HarmonyOS】鸿蒙开发之状态管理——第2.2章

    2024-02-16 00:14:01       36 阅读
  9. with 用法

    2024-02-16 00:14:01       37 阅读
  10. c++ 自定义Logger 日志类

    2024-02-16 00:14:01       30 阅读
  11. 个人浅见之程序员为什么不喜欢关电脑

    2024-02-16 00:14:01       31 阅读
  12. 跨域问题浅析

    2024-02-16 00:14:01       37 阅读