发布时间:2026/8/12 14:30:13
Cortex A移植概念备忘录 目录1.交叉编译工具链2.工具链的配置与常用命令2.1 ELF 头部信息readelf -h 查看—— 程序的“运行说明书”2. 2 符号表nm 查看strip 去除—— 程序的“源码索引”为什么对最终可执行文件 strip不影响链接也不影响运行3.生成二进制镜像文件4.生成ELF可执行文件Linux系统移植的核心步骤包括搭建交叉编译工具链、编写Bootloader、移植Linux内核、构建根文件系统。1.交叉编译工具链概念由于开发主机PC与目标机嵌入式板子CPU架构不同需要使用在宿主机上运行但能生成目标机可执行代码的工具链称为交叉编译工具链。核心组件工具链通常包含gcc、ld、ar、objcopy等工具。2.工具链的配置与常用命令环境变量配置将交叉编译工具链的路径添加到shell的环境变量PATH中以便在终端中直接调用工具。常用命令解析file用于查看文件的类型和属性确认可执行文件的架构如x86, arm。readelf用于分析ELF格式文件的头部信息如入口地址、各段信息等。size用于查看目标文件各段代码段、数据段、BSS段的大小。nm用于查看目标文件中的符号表帮助定位函数和变量。strip用于去除可执行文件中的符号表和调试信息以减小文件体积适用于最终部署到资源受限的嵌入式设备。2.1 ELF 头部信息readelf -h查看—— 程序的“运行说明书”CPU 本身是“傻子”它不知道从哪里开始执行也不知道内存怎么划分。ELF 头部就是解决这个问题的。入口地址Entry point address作用告诉操作系统或 BootLoader“加载完程序后请从内存的这一个地址开始执行第一条指令”。实战意义在嵌入式裸机开发中这个地址通常由链接脚本Linker Script指定比如 STM32 的0x08000000。如果你用readelf看到入口地址是0x0或者一个奇怪的地址那程序一运行大概率会“跑飞”或崩溃。各段信息Program Headers / Section Headers头部里会写明.text代码段、.data数据段、.bss未初始化全局变量段在文件中的偏移量、在内存中的大小以及加载地址。作用系统加载器Loader根据这些信息把代码搬运到 RAM/Flash 的指定位置并留出足够的内存空间给变量。实战意义假设你的嵌入式板子 RAM 只有 64KB你用readelf -S看到.bss段占了 70KB那程序一运行就会因为内存溢出而挂掉HardFault。提前用readelf检查就能避免烧录进去后才知道出问题。2. 2 符号表nm查看strip去除—— 程序的“源码索引”编译后的机器码全是0和1CPU 只认地址比如0x80001234不认函数名比如uart_send。符号表就是将内存地址和源代码中的函数名、全局变量名一一对应起来的“密码本”。符号表的作用nm定位函数和变量编译报错“未定义引用undefined reference”时用nm检查.o文件能立刻看到哪些函数地址是U未定义哪些是T已定义帮你排查链接错误。分析内存占用用nm --size-sort可以按大小列出所有函数让你一眼看出哪个函数编译后体积最大比如某个数组占了 10KB方便你优化代码。为什么要去除strip符号表里存着成千上万个函数名比如void init_gpio(void)这种字符串这些名字在程序运行时完全没有用CPU 只看地址不看名字。在资源受限的嵌入式设备中Flash 空间寸土寸金。一个带符号表的程序可能有 500KBstrip掉符号表和调试信息后可能只剩下 200KB文件体积直接缩小一半以上。注意strip后的程序无法再用 GDB 进行源码级单步调试崩溃后只能看到地址比如PC0x8001234所以通常是在最终量产发布前才执行strip而保留一份带符号的版本用于后期维护排查问题。如果是对“最终生成的可执行文件”执行strip完全不影响运行时动态链接程序照常运行。如果是对“还没链接的中间文件.o 目标文件或静态库.a”执行strip会严重影响后续的链接导致链接直接失败。Linux 里的“符号表”拆分成“静态符号表.symtab”和“动态符号表.dynsym”看完下面的对比你就全明白了为什么对最终可执行文件 strip不影响链接也不影响运行当你运行gcc main.c -o app生成最终程序后文件里其实有两张表静态符号表.symtab体积巨大记录了所有函数名、变量名、行号信息。这是专门给调试器GDB和链接器ld看的CPU 和操作系统加载器完全无视它。动态符号表.dynsym体积很小只记录外部依赖的库函数比如printf、malloc和导出的接口。strip默认干的事它只把那张巨大的“静态符号表”和调试信息.debug 段撕掉通常不会动“动态符号表”。所以当程序运行时动态链接器ld-linux.so依然能通过动态符号表找到libc.so里的printf地址完成链接和跳转。程序跑起来完全不受影响并且体积缩小了3.生成二进制镜像文件背景裸机程序如Bootloader、内核需要直接运行在物理内存中因此不能使用带ELF头的可执行文件必须生成纯净的二进制镜像。生成流程使用gcc编译C或汇编源码生成目标文件.o。使用ld命令链接目标文件并通过链接脚本linker script指定各段如代码段、数据段的加载地址。使用objcopy命令将链接后生成的ELF文件中的代码段等实际内容剥离生成最终的二进制镜像文件。4.生成ELF可执行文件a. 把高级语言 .c .S 生成 .o目标文件b. 不能使用ld命令而是使用gcc 将.o目标文件 做为 链接原材料进行链接 gcc会自动加载标准C库和OS初始化库的内容c. 在链接时交给默认链接脚本实现链接 使用虚拟地址d. 默认生成ELF格式的可执行文件

相关新闻

2026/8/12 14:30:13

家务机器人从炫技到实用:可收纳设计与软硬协同是关键突破

最近两年,机器人领域的热闹,大家有目共睹。从波士顿动力的炫技,到各种“具身智能”的宏大叙事,再到层出不穷的“家务机器人”Demo视频,我们似乎总在“未来已来”的兴奋和“何时能买”的困惑之间摇摆。一个常见的场景是…

2026/8/12 14:30:13

一站式海外公关传播,美联社发稿找传播易

随着越来越多国内企业加速全球化布局,如何在国际舆论场建立品牌公信力、实现有效信息触达,成为出海传播的核心难题。海外社交媒体流量竞争白热化,普通门户网站软文影响力有限,拥有全球辐射能力的权威通讯社发稿,逐渐成…

2026/8/12 14:25:12

DDrawCompat:3步拯救Windows老游戏,让经典重获新生

DDrawCompat:3步拯救Windows老游戏,让经典重获新生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/d…

2026/8/12 15:30:20

一键保存100+小说网站:novel-downloader离线阅读解决方案

一键保存100小说网站:novel-downloader离线阅读解决方案 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,你是否曾遇到过心爱的小说突然消失、…

2026/8/12 15:30:20

如何用openpilot开源驾驶辅助系统升级你的爱车

如何用openpilot开源驾驶辅助系统升级你的爱车 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_Trending/op/openpilot …

2026/8/12 15:30:20

破解大模型JSON生成死循环:FACA陷阱分析与架构优化实战

1. 项目概述:当模型生成陷入JSON死循环最近在折腾几个大模型应用项目时,我反复踩进同一个坑里:模型在生成JSON格式的输出时,会莫名其妙地陷入一种“鬼打墙”的状态。具体表现是,你要求它输出一个结构化的JSON对象&…

2026/8/12 15:30:20

C语言数组合并:从静态分配到动态内存管理的完整指南

1. 项目概述:从“合并”说起,一个看似简单却暗藏玄机的操作在C语言的日常开发中,处理数组是家常便饭。今天要聊的“将两个数组合并为一个数组”,听起来就像把两堆苹果放到一个篮子里那么简单。但如果你真这么想,那可能…

2026/8/12 15:25:20

露点仪怎么选?从核心参数到工业场景的深度选型解析

露点仪(又称微水分析仪、湿度计)用于测定气体中的水分含量,其读数直接关系到工业流程的安全边界与设备的使用寿命。无论是SF6气体绝缘设备的微水监控、压缩空气管网的露点巡检,还是锂电干燥房与高纯气体的湿度闭环,科学…

2026/8/12 10:37:12

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 5:35:25

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/12 9:34:08

Ubuntu 23.10中双击运行.sh文件的完整指南:从权限原理到桌面配置

1. 项目概述:从一次“双击”引发的权限探索在Ubuntu桌面环境下,我们习惯了双击运行那些带有.exe后缀的Windows程序安装包,但当你拿到一个以.sh结尾的Shell脚本文件时,满怀期待地双击它,却很可能只看到一个文本编辑器窗…

2026/8/12 9:34:08

NumPy条件索引实战:np.where与np.argwhere高效数据筛选指南

1. 从一次数据筛选的“笨办法”说起 前几天,我帮一个刚入行的数据分析师同事看代码,他正在处理一批传感器数据,需要找出所有温度超过阈值的数据点,然后进行后续分析。我一看他的实现,好家伙,一个 for 循环…

2026/8/12 9:34:08

基于Docker与Selenium Grid构建高可用浏览器自动化测试环境

1. 项目概述:为什么需要容器化的浏览器自动化?在软件开发和测试领域,浏览器自动化早已不是新鲜事。无论是日常的UI回归测试、数据抓取,还是复杂的业务流程模拟,Selenium都是我们绕不开的利器。然而,但凡在团…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…