【踩坑日记】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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu基础-VirtualBox安装增强功能

目录 零. 前言 一. 安装 1.点击安装增强功能 2.点击光盘图标 3.复制到新文件夹 4.运行命令 5.重启系统 6.成果展示 二. 打开共享 1.共享粘贴 ​编辑2.共享文件夹 三.总结 安装步骤 打开共享粘贴功能: 打开共享文件夹功能: 零. 前言 在使用…

Java—IO流总结

在Java中,IO(Input/Output)是指输入和输出操作。Java提供了丰富的IO类和接口,用于处理文件、网络、标准输入输出等各种IO操作。下面是Java中IO的总结: 字节流和字符流: 字节流:以字节为单位进行…

PostgreSQL 如何使用generate_series()函数

什么是generate_series()函数? generate_series()是PostgreSQL中一个非常实用的函数,它可以生成指定范围内的连续整数序列。该函数有多个用途,其中之一是在表中填充多个列。 在表中填充多个列 让我们以一个具体的例子开始。假设我们有一个…

redis未授权访问

redis数据库基本知识 redis非关系型数据库 redis未授权访问蓝队的成因和危害 漏洞的定义:redis未授权访问漏洞是一个由于redis服务器版本较低,其未设置登录密码导致的登录。 攻击者可以直接利用redis服务器的ip地址和端口完成redis服务器的远程登陆&…

为什么笔记本电脑触控板不工作?这里有你想要的答案和解决办法

序言 你的笔记本电脑触控板停止工作了吗?值得庆幸的是,这个令人沮丧的问题通常很容易解决。以下是笔记本电脑触控板问题的最常见原因和修复方法。 触控板被功能键禁用 大多数(如果不是全部的话)Windows笔记本电脑都将其中一个功能键用于禁用和启用笔记本电脑触控板。按键…

Elasticsearch机器学习初探:智能数据洞察

在当今数据驱动的时代,企业越来越依赖于数据来做出明智的决策。然而,随着数据量的不断增长和复杂性的增加,传统的数据分析方法已经无法满足快速、准确洞察数据的需求。为了应对这一挑战,Elasticsearch引入了机器学习功能&#xff…

民生银行信用卡中心金融科技24届春招面经

本文介绍2024届春招中,中国民生银行下属信用卡中心的金融科技(系统研发方向) 岗位2场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属信用卡中心的金融科技(系统研发方向) 岗位,暂时不清楚…

关于反弹shell的学习

今天学习反弹shell,在最近做的ctf题里面越来越多的反弹shell的操作,所以觉得要好好研究一下,毕竟是一种比较常用的操作 什么是反弹shell以及原理 反弹Shell(也称为反向Shell)是一种技术,通常用于远程访问和…

C++设计模式——Decorator装饰器模式

一,装饰器模式简介 装饰器模式是一种结构型设计模式, 它允许在不改变现有对象的情况下,动态地将功能添加到对象中。 装饰器模式是通过创建具有新行为的对象来实现的,这些对象将原始对象进行了包装。 装饰器模式遵循开放/关闭原…

element-plus 的el-scrollbar滚动条组件

el-scrollbar组件可以替换原生的滚动条,可以设置出现滚动条的高度,若无设置则根据容器自适应。 通过使用 setScrollTop 与 setScrollLeft 方法,可以手动控制滚动条滚动。 scroll 滚动条的滚动事件,会返回滚动条当前的位置。 &l…

SQL 入门教程

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库管理系统的编程语言。它被设计用来查询、更新、插入和删除数据库中的数据。SQL是一种标准化的语言,尽管在不同的数据库系统中可能存在一些差异&…

【TypeScript】类型守卫

跟着 小满zs 学ts,原文:学习TypeScript类型守卫_类型“{ rsfid: any; rsfname: any; cycletime: any; sor-CSDN博客 类型收缩(收窄) const isString (str: any) > typeof str string || str instanceof String;typeof 只能返回有限的字符串类型&am…

snap nextcloud 通过不被信任的域名访问

安装向导 — Nextcloud latest 管理手册 latest 文档 find / -name config.php trusted_domains >array (0 > localhost,1 > server1.example.com,2 > 192.168.1.50,3 > [fe80::1:50], ), vim /var/snap/nextcloud/42567/nextcloud/config/config.php vim /va…

pytorch--Pooling layers

文章目录 1.torch.nn.MaxPool1d()2.torch.nn.MaxPool2d3.torch.nn.AvgPool2d()4.torch.nn.FractionalMaxPool2d()5.torch.nn.AdaptiveMaxPool2d()6.torch.nn.AdaptiveAvgPool2d() 1.torch.nn.MaxPool1d() torch.nn.MaxPool1d() 是 PyTorch 库中的一个类,用于在神经网…

ISP图像算法面试准备(1)

ISP图像算法面试准备 ISP图像算法面试准备(1) 文章目录 ISP图像算法面试准备前言一、ISP流程二、重点关注1. AWB必须在Demosaic之后进行。2. Gamma矫正通常在CCM之前进行 三、如何实现ISP参数自动化调试四、AE,即自动曝光(Auto Exposure)总结…

【太原理工大学】软件系统安全—分析题

OK了,又是毫无准备的一场仗,我真是ありがとうございます 凸^o^凸 根据前几年传下来的信息,所谓“分析”,就是让你根据情节自行设计,例如如何设计表单等,这类多从实验中出,王老师强调好好做实验一…

【面经总结】Java集合 - List

ArrayList 要点 实现机制 数组 扩容机制 初始容量为空列表&#xff0c;第一次插入后扩容成默认大小 10。 添加元素时如果已满&#xff0c;会自动扩容为原始大小的 1.5 倍。 类定义 // 类定义 public class ArrayList<E> extends AbstractList<E>implements…

Mybatis框架中结果映射resultMap标签方法属性收录

Mybatis框架中结果映射resultMap标签收录 在MyBatis框架中&#xff0c;resultMap 是一种强大的机制&#xff0c;用于将数据库结果集映射到Java对象上。它允许你定义如何将查询结果中的列映射到Java对象的属性上&#xff0c;尤其是当数据库表的字段名与Java对象的属性名不一致时…

Web前端成绩查询:深入解析与实用指南

Web前端成绩查询&#xff1a;深入解析与实用指南 在数字化时代&#xff0c;成绩查询系统已成为学校、培训机构等教育场所不可或缺的一部分。而xWeb前端成绩查询系统&#xff0c;以其高效、便捷的特点&#xff0c;赢得了广大用户的青睐。本文将从四个方面、五个方面、六个方面和…

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…