SuperAPI AI 工具集

linker-scripts

编程与开发

查看项目

更新于 10-15 14:51

技能介绍

用途

linker-scripts 是一个面向嵌入式裸机目标的链接脚本技能,用于指导编写和修改 GNU ld 链接脚本。它帮助处理 MCU 固件链接过程中的内存布局、段放置和启动初始化等问题。

主要能力

  • 链接脚本结构:ENTRY 入口点、MEMORY 内存区域定义、SECTIONS 段定义。
  • VMA 与 LMA:区分段的运行时地址(VMA)与加载地址(LMA),例如 .data 存储在 flash(LMA)并在启动时复制到 RAM(VMA)。
  • 启动初始化:在 main() 之前将 .data 从 flash 复制到 RAM,并将 .bss 清零,同时提供 _sidata、_sdata、_edata、_sbss、_ebss 等符号。
  • 段放置:将代码或数据放入指定的 flash、RAM 或 CCM 区域,例如通过 attribute((section(".fast_code"))) 将关键代码放入 CCM RAM。
  • 指令使用:KEEP 防止段被垃圾回收,ALIGN 对齐位置计数器,PROVIDE 定义弱默认符号,FILL 填充未使用字节。
  • 弱符号:在链接脚本中通过 PROVIDE 提供默认中断处理函数,在 C 代码中覆盖。
  • 常见链接错误排查:如 region 'FLASH' overflowed、region 'RAM' overflowed、undefined reference to '_estack'、no rule to process file、cannot find linker script、.data 地址错误等,并给出对应修复方向。
  • 分析工具:使用 arm-none-eabi-size、arm-none-eabi-objdump、arm-none-eabi-readelf 检查段大小与地址。

使用方式

该技能以触发问题的方式工作,例如:如何为 MCU 编写链接脚本、如何将函数放入指定 flash/RAM 区域、VMA 与 LMA 的区别、.bss 和 .data 启动初始化如何工作、链接错误 region 'FLASH' overflowed、如何在链接脚本中使用弱符号。技能提供最小 Cortex-M 链接脚本示例、启动代码示例、段放置示例以及错误排查表。

适用场景

  • 嵌入式裸机固件的链接脚本编写与修改。
  • Cortex-M 等 MCU 的内存布局配置。
  • 需要将代码或数据放入特定 flash、RAM 或 CCM 区域。
  • 排查链接阶段的内存溢出、符号未定义、段地址错误等问题。

限制

资料未提供该技能的具体安装方式、收费模式、支持平台范围或效果保证。相关细节暂未提供。