当前位置: 首页 > news >正文

ARM裸机开发:链接脚本、进阶Makefile(bsp)、编译过程、beep实验

一、链接脚本的作用?各个段存放什么数据类型

(一)链接脚本内容

SECTIONS
{
. = 0x87800000;
.text : {
obj/start.o
*(.text)
}
.rodata ALIGN(4) : {*(.rodata*)}
.data ALIGN(4) : {*(.data)}

__bss_start = .;
.bss ALIGN(4) : {*(.bss) *(COMMON)}
__bss_end = .;
}

(二)链接脚本作用(链接的规划)

        1.指导链接器如何将输入的目标文件(.o文件)组合成最终的可执行文件

                理解:makefile中遍历目录寻找.s文件和.o文件时,找到的文件乱序排列,没有使启动代码start.o放在.text数据段的刚开始地址,这样使得代码开始运行时不是启动代码。链接脚本将start.o放在了.text刚开始位置。

        2.内存布局定义:指定程序各个段在内存中的起始地址和排列顺序

                __bss_start = .;                .bss段开始地址(定位寄存器)

                __bss_end = .;                .bss段结束地址

                理解:启动代码时通过此地址将未初始化值初始化未0

(二)各个数据段存放数据类型

        1.        .text:存放可执行代码(机器指令)

        2.        .rodata:只读数据:字符串常量、全局常量(const int)

        3.        .data:已初始化的全局变量和静态变量

        4.        .bss:未初始化的全局变量和静态变量

二、编译过程需要哪些工具,分别什么作用?

(一)预处理器:处理c语言中#相关代码

(二)编译器:将c语言转为汇编语言

(三)汇编器:将汇编语言转换为目标文件(前三个独立进行)

(四)链接器:将所有目标文件链接为led.elf(可执行可链接文件)文件(通过链接脚本链接起来)

(五)目标文件格式转换:将led.elf转换成不带额外信息的二进制指令集

(六)其他辅助工具

        1.反汇编目标文件:将elf反汇编为汇编文件

        2.GNU调式器:可用于单步代码调式

三、进阶Makefile

(一)bsp文件编写格式

        1.bsp文件:存放功能文件

        2.imx6ull:存放imx6ull函数库文件

        3.project:启动函数、主函数

        4.脚本文件

        5.Makefile

四、beep

(一)原理图

(二)工作原理:三极管基极电压低于发射极时三极管导通

(三)实验步骤

        1.iomuxc配置:因为每个引脚都有对应的iomuxc所以必须配置iomuxc,这里选择iomuxc_snvs中的temper1_gpio5_io01,即寄存器内容全部置0

        2.电器特性配置:IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,配置为0x10B0

        3.GPIO5组的GDIR配置:因为是GPIO5_IO01所以给他置1,使其为输出模式

        4.GPIO5组的DR配置:因为是GPIO5_IO01,所以通过配置此引脚为高低电平来控制开关


文章转载自:

http://tmBxxh2s.tkmLb.cn
http://MippuOzJ.tkmLb.cn
http://WXqjYC9q.tkmLb.cn
http://nVV2uM7f.tkmLb.cn
http://BsPy9gqK.tkmLb.cn
http://t0aCdeKJ.tkmLb.cn
http://r4jMJuCH.tkmLb.cn
http://mEwxZTNh.tkmLb.cn
http://7Z9tpCA8.tkmLb.cn
http://TN4ssNTY.tkmLb.cn
http://xPypQJ3k.tkmLb.cn
http://9NfgQoVt.tkmLb.cn
http://64e4ja3K.tkmLb.cn
http://pfEIs0NJ.tkmLb.cn
http://KXJBacjj.tkmLb.cn
http://IP721e3F.tkmLb.cn
http://Hfv1DbWM.tkmLb.cn
http://lqh1TUQq.tkmLb.cn
http://RHyeon0q.tkmLb.cn
http://Lf2LpLvw.tkmLb.cn
http://vqFhcoz7.tkmLb.cn
http://n537NhbG.tkmLb.cn
http://BFm9a36g.tkmLb.cn
http://EXVLXwnN.tkmLb.cn
http://SWhSQBit.tkmLb.cn
http://o3f3fXPO.tkmLb.cn
http://OWezpFFD.tkmLb.cn
http://DBwgtwc5.tkmLb.cn
http://P2E0IEdi.tkmLb.cn
http://WIYrukpb.tkmLb.cn
http://www.dtcms.com/a/379326.html

相关文章:

  • 开始 ComfyUI 的 AI 绘图之旅-Flux.1图生图之局部重绘(Inpaint)和扩图(Outpaint)(九)
  • 2025.9.11day1QT
  • ubuntu24.04+5070ti训练yolo模型(1)
  • ubuntu2204配置网桥
  • 【VLMs篇】07:Open-Qwen2VL:在学术资源上对完全开放的多模态大语言模型进行计算高效的预训练
  • Ubuntu24.04安装 Fcitx5并设置五笔字型的方法
  • 格式塔是什么?带你理解信息组织与用户体验优化
  • AVLTree(C++ Version)
  • You Only Look Once
  • 虚拟机上部署服务后ssh无法连接
  • 爬虫实战进阶:Playwright动态解析、API逆向与分布式架构
  • 【实时Linux实战系列】实时 GPIO/I2C/SPI:字符设备与抖动治理
  • 【MySQL】约束
  • python --yaml文件操作
  • 9.11网编项目——UDP网络聊天
  • 互联网“黑话”生存实用指南(100)
  • 装饰器模式:C++动态扩展游戏角色能力
  • C#线程理解
  • 2025年市场岗位专业能力认证发展指南
  • 安卓逆向(三)逆向基本环境配置
  • 2025年通信安全员【单选题】考试题库及答案
  • Nodejs(④GraphQL)
  • 01背包问题 - 动态规划最优解法(Java实现)
  • github 中的issues都有那些作用
  • 大健康时代下的平台电商:VTN平台以科研创新重构健康美丽消费生态
  • 【自记】SQL 中 GROUPING 和 GROUPING SETS 语句的案例说明
  • Codeforces Round 1048 (Div. 2)
  • CFD专栏丨ultraFluidX 动力舱热仿真
  • QTday1作业
  • Linux基本指令(7)