学习嵌入式的第四十天——ARM

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

作用:

是控制程序转换成二进制格式时的蓝图,通过自定义内存布局,段的组织,符号信息等,确保程序能在特定硬件中正确加载和运行,实现硬件适配

例如:

复制代码
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.bss段

存放未初始化或初始化为0的数据

2.COMMON段

用于存放未初始化的非静态全局变量

3.data段

用于存放已初始化的全局变量或静态变量,非0值

4.rodata段

用于存放只读的数据(如字符常量,const修饰的变量),运行时受到保护,不可修改

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

交叉编译器工具链 (arm-linux-gnueabihf-)这是针对 ARM 架构的交叉编译工具链,用于在 x86 等主机平台上编译能在 ARM 架构设备上运行的程序。

gcc (交叉编译版本:arm-linux-gnueabihf-gcc)

作用:C 语言编译器

在这里负责将 C 源代码 (.c) 和汇编源代码 (.S) 编译为目标文件 (.o)

使用了-Wall(显示所有警告)、-nostdlib(不链接标准库)、-c(只编译不链接)等选项

ld (交叉编译版本:arm-linux-gnueabihf-ld)

作用:链接器

负责将所有目标文件 (.o) 链接成可执行的 ELF 格式文件 (.elf)

通过-Timx6ull.lds指定链接脚本,控制链接过程和内存布局

objcopy (交叉编译版本:arm-linux-gnueabihf-objcopy)

作用:目标文件转换工具

在这里将 ELF 格式的可执行文件 (.elf) 转换为二进制文件 (.bin)

使用-O binary指定输出格式为二进制,-S移除符号表和重定位信息,-g移除调试信息

objdump (交叉编译版本:arm-linux-gnueabihf-objdump)

作用:目标文件反汇编工具

用于将 ELF 格式文件反汇编,生成汇编代码文本文件 (.dis)

通过-D选项对所有段进行反汇编,方便调试和分析

这些工具共同完成了从源代码到可在 ARM 设备上运行的二进制文件的完整编译流程:源代码编译→目标文件链接→格式转换→反汇编分析。

3.led点灯程序需要进行哪些步骤?

一:写启动代码:

在start.S中

包括

1.异常向量表的初始化

2.异常处理函数

3.对需要使用的模式的栈指针的初始化

4.切换到初始模式(一般是user/system模式)

二:写对应函数

包括

1.led初始化

包括:

时钟配置

复用功能寄存器配置

电气配置

输入输出模式配置

2.打开led

对对应的引脚输入能亮灯的电平,即对该引脚赋值0或1

3.关闭led

对对应的引脚输入不能亮灯的电平,即对该引脚赋值0或1

4.led闪烁

对该引脚上的值进行异或操作

5.led的延时

普通延时,通过循坏执行--来延时

三:在主函数中调用上述函数以及修改Makefile使能正常编译

相关推荐
好奇龙猫2 分钟前
【AI学习-lora-定义-comfyUI相关-相关学习-了解概念(1)】
人工智能·学习
冯诺依曼的锦鲤28 分钟前
算法练习:差分
c++·学习·算法
im_AMBER1 小时前
算法笔记 16 二分搜索算法
c++·笔记·学习·算法
赵文宇(温玉)2 小时前
不翻墙,基于Rancher极速启动Kubernetes,配置SSO登录,在线环境开放学习体验
学习·kubernetes·rancher
lingggggaaaa3 小时前
免杀对抗——C2远控篇&PowerShell&有无文件落地&C#参数调用&绕AMSI&ETW&去混淆特征
c语言·开发语言·笔记·学习·安全·microsoft·c#
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [kernel]workqueue
linux·笔记·学习
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [kernel]usermode_helper
linux·笔记·学习
冬夜戏雪6 小时前
【学习日记】【刷题回溯、贪心、动规】
学习
一只爱做笔记的码农6 小时前
【BootstrapBlazor】移植BootstrapBlazor VS工程到Vscode工程,报error blazor106的问题
笔记·学习·c#
xixixi777776 小时前
“C2隐藏”——命令与控制服务器的隐藏技术
网络·学习·安全·代理·隐藏·合法服务·c2隐藏