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 部分。

 

posted @   流水灯  阅读(229)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 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创建不同分辨率的图标
点击右上角即可分享
微信分享提示