Makefile
在嵌入式Linux学习过程中,我们常常要使用make这个命令,一般就会发生如下神奇的事情:自动生成了一个可以运行的二进制文件。这是为什么呢?
其实就是执行了Makefile文件中的命令。
我们来看一个常见的Makefile
all: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
led.o:led.S
arm-linux-gcc -g -o led.o -c led.S
.PHONY:clean
clean:
rm *.o led.elf led.bin
Makefile格式
目标:依赖
[TAB]命令 (命令前面一定是TAB键)
有这么几个知识点:
1、想要得到led.o 输入make led.o,只会产生想要得到的目标
2、当只输入一个make,默认会执行第一条规则。
3、没有依赖的目标是伪目标,要用.PHONY申明
4、如果Makefile文件不是Makefile或者makefile,可以使用make -f 名字来调用Makefile
上面是一个非常简单的Makefile,但是一般我们看到的Makefile一般都不是上面这个样子的。这就涉及到Makefile中的变量。
obj=fun1.o func2.o ( = 前后不要空格)
$(obj) 就是func1.o func2.o了
除此之外,还有一些系统变量,这些变量看起来很奇葩:
$^ 代表所有的依赖文件
$@ 代表目标
$< 代表第一个依赖文件
有了前面这些理论知识,我们再来看一个终极版的Makefile
Makefile还有很多用法,但是作为嵌入式入门,了解上面这些内容就差不多了。以后慢慢再了解。
链接器脚本
链接器脚本文件主要有3个功能:
1、一个可执行程序通常包含:代码段、数据段、bss段。链接器脚本文件可以用来控制这些段的。
2、控制程序起始位置
3、字节对齐,由于CPU是32位的,控制代码4字节对齐,可以提高访问效率
如下是一个范例:
SECTIONS{
. = 0x50008000; 这一句用来控制起始地址
. = ALIGN(4); 四字节对齐
.text: 段控制
{
*{.test}
}
. = ALIGN(4); 四字节对齐
.data: 段控制
{
*{.data}
}
.= ALIGN(4); 四字节对齐
.bss: 段控制
{
*{.bss}
}
}
2015-5-19
本文来自论坛,点击查看完整帖子内容。