嵌入式编译工具使用说明

编译工具gcc

gcc是在linux开发环境中使用最多的命令,下面是一些常用的选项:

选项说明

编译选项
-o: 指定目标文件的名字;
-c: 只编译成.o文件,不参与链接;
-D: 可以动态定义宏,和#define xxx效果是一样的;
-L: 新增链接的依赖库路径,通常的形式是-Ldir -lxx来链接dir目录下的libxx.so或libxx.a;
-I: 新增头文件的搜索路径;

调试及优化选项
-v: 编译的时候打印详细信息;
-g: 增加gdb的调试信息;
-Wall: 编译时打印出所有编译器的警告;
-O1: 优化目标文件的大小;
-O2: 在O1的基础上优化编译时间和执行效率;

依赖关系选项
-M: 显示所有依赖的.o、.c和.h文件,这里的头文件包括系统头文件;
-MD: 将-M的输出重定向到.d文件;
-MM: 显示所有依赖的.o、.c和.h文件,这里的头文件不包括系统头文件;
-MMD: 将-MM的输出重定向到.d文件;

库选项
-shared: 用于编译生成库文件;
-static: 在编译时将库链接到elf文件中,这样运行的时候就不需要依赖环境中是否有这个库;

实例一

arm-linux-gcc -DDO_DEPS_ONLY -g -Os -fno-common -ffixed-r8 \
  -msoft-float -D__KERNEL__ -DCONFIG_SYS_TEXT_BASE=0x47f00000 -I/xxxx/boot/include -fno-builtin \
  -ffreestanding -nostdinc -pipe -DCONFIG_ARM -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux \
  -march=armv5 -Wall -Wstrict-prototypes -fno-stack-protector \
  -Wno-format-nonliteral -Wno-format-security -fstack-usage \
  -o lib/asm-offsets.s lib/asm-offsets.c -c -S

选项解释
-DDO_DEPS_ONLY: 等同于#define DO_DEPS_ONLY
-g: 增加调试信息;
-Os: 优化选项,相当于-O2.5
-fno-common: 对未定义全局变量的位置优化;
-DCONFIG_SYS_TEXT_BASE=0x47f00000: 等同于#define CONFIG_SYS_TEXT_BASE 0x47f00000
-I/xxxx/boot/include: 增加头文件的搜索路径/xxxx/boot/include

链接工具ld

ld用于将多个目标和库文件链接成可执行文件,利用-Ttext 0x30000000可以指定代码段的起始地址,所有的指令都基于这个偏移。当系统加载这个ELF文件时从0x30000000开始存放代码段,对于u-boot而言,将bootloader读取到内存的动作是由前4k的代码完成的。
-Ttext: 正文段起始地址(存储运行指令)
-Tdata: 数据段起始地址(存储以初始化的全局变量)
-Tbss: bss段起始地址(存储未初始化的全局变量)

ELF文件的内部结构

程序本身内容包括
text: 存储运行指令
data: 存储以初始化的全局变量,记录变量标示和内容
bss: 存储未初始化的全局变量,只记录变量标示

程序运行依赖
stack: 系统分配,局部变量,用的不好会出现stack overflow
heap: 堆,由程序员使用malloc和free进行操作

拷贝文件objcopy

裸板程序,包括bootloader都是需要手动将代码从flash上拷贝到SDRAM中,而最初使用gcc或ld得到的ELF文件确包含的这里不需要的ELF头以及相关的符号表信息,objcopy就时为了去除这些信息。
-O: 指定目标文件的格式,二进制文件是binary,s-record文件是srec
-S: 不复制源文件的重定位信息和符号信息;
常用的形式是

objcopy -O binary -S elf_file bin_file

参考文献

  1. gcc官方说明
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容