【踩坑日记】I.MX6ULL裸机启动时由于编译的程序链接地址不对造成的程序没正确运行

1 现象

  • 程序完全正确,但是由于程序链接的位置不对,导致程序没有正常运行。

2 寻找原因

  • 对生成的bin文件进行反汇编:
arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis
  • 查看生成的反汇编文件
    在这里插入图片描述
    发现在在链接的开始地址处(0x87800000),定义了一个名为"clk_enable"的函数或代码段的起始位置,而不是_start程序(_start 是一个特殊的符号或标识符,它在编译和链接过程中用于表示程序的起始点。)。

  • 在我们的start代码中,我们初始化了堆栈指针,这个程序必须放在链接的起始地址处(0x87800000)
    在这里插入图片描述

3 原因

  • 为什么编译后的bin文件没有正确的链接顺序呢?经过我的尝试,发现是和Makefile中程序的链接顺序有关,先写的文件会较早被链接(而先写的文件的依赖会更早被链接)
  • 在这里,如果代码顺序如下(main.ostart.o先写)
# 定义目标文件列表
objs := main.o start.o

# 生成目标文件 ledc.bin
ledc.bin : $(objs)
	arm-linux-gnueabihf-ld -Ttext 0x87800000 -o ledc.elf $^
	arm-linux-gnueabihf-objcopy -O binary -S ledc.elf $@
	arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis

那么 main.o及其依赖会比start.o先被链接。

4 解决方法

确保每次书写 Makefile 时,start.o都写在最前面:

# 定义目标文件列表
objs := start.o main.o

# 生成目标文件 ledc.bin
ledc.bin : $(objs)
	arm-linux-gnueabihf-ld -Ttext 0x87800000 -o ledc.elf $^
	arm-linux-gnueabihf-objcopy -O binary -S ledc.elf $@
	arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 04:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 04:26:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 04:26:02       82 阅读
  4. Python语言-面向对象

    2024-06-16 04:26:02       91 阅读

热门阅读

  1. ceph scrub 错误记录

    2024-06-16 04:26:02       33 阅读
  2. 使用甲骨文云arm服务器安装宝塔时nginx无法卸载

    2024-06-16 04:26:02       29 阅读
  3. docker 容器 network host 模式启动

    2024-06-16 04:26:02       28 阅读
  4. Web前端align的奥秘:深入剖析与实战应用

    2024-06-16 04:26:02       37 阅读
  5. 小白月赛96

    2024-06-16 04:26:02       37 阅读
  6. mysqldump常用备份数据库命令

    2024-06-16 04:26:02       38 阅读
  7. LeetCode 1084, 135, 21

    2024-06-16 04:26:02       40 阅读
  8. AI 绘画工具详解:从基础原理到实践应用

    2024-06-16 04:26:02       33 阅读
  9. CSS概述

    CSS概述

    2024-06-16 04:26:02      37 阅读
  10. 本地生活元宇宙 “苹果之乡”的新鲜事

    2024-06-16 04:26:02       26 阅读
  11. 正式环境下的历史数据迁移方案,你知道几个?

    2024-06-16 04:26:02       34 阅读