system.map u-boot.map
System.map
linux kernel 编译后产生的 System.map 文件是通过如下命令生成的
nm vmlinux | sort | less
上图中的第二列表示符号类型,如果是小写字母,一般表示局部性,大写字母,一般表示全局性(外部)
其他字母表示的函数类型,可以查询 binutils 文档
u-boot.map
相比于System.map,uboot的 u-boot.map 信息更加丰富。
u-boot.map文件是通过 ld 的命令行选项 -Map=u-boot.map 生成的
ld的命令行选项如果不是直接被ld调用,而是通过gcc的话,需要在ld的命令行选项加上 -Wl 前缀,比如 -Wl,-Map=a.map,其中 -Map=a.map 就是ld的命令行选项。
gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map
--whole-archive 和 --no-whole-archive 是ld专有的命令行参数,--whole-archive 能够把在其后面出现的静态库包含的函数和变量输出到动态库,--no-whole-archive 则关掉这个特性。
一般情况下,对于自己编写的.c文件,需要保留所有符号;而对于gcc函数库,只需要保留使用到的函数
Linker script and memory map
展示了符号所在的段和内存地址
Discarded input sections
如果链接器没有找到对函数和变量的任何引用,编译后包含在程序中的函数和变量并不总是最终二进制文件的一部分,它们将会被删除但是仍然会出现在Map文件的Discarded input sections
部分。
标签:
linux 内核
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2018-02-26 ubuntu ------ 编译器安装问题
2018-02-26 VMware ------ 增加磁盘容量 / 增加根目录磁盘容量
2016-02-26 Android studio创建不同分辨率的图标