1、交叉连接工具
是指在A平台编译出B平台上的程序。
交叉编译器: arm-linux-gcc -static hello.c -o hello 查看头文件:arm-linux-gcc -print -search -dirs
交叉链接工具: arm-linux-ld -Tled.lds -o led.elf led.o T参数指定链接脚本
交叉elf文件工具:arm-linux-readelf -D -S hello >dump.txt arm-linux-readelf -d 查看库文件 file 查看文件属性
交叉反汇编器: arm-linux-objdump -D -S hello >deump
交叉转换器: arm-linux-objcopy -O binary led.elf led.bin
2、交叉连接器脚本
>使用/*注释*/
>使用TAB键缩进
例子:XX.lds
/*段、起始连接地址、对齐设置、使用变量、设置代码端段首文件(程序入口)*/
SECTIONS{
.=0X00; /*设置其实链接地址*/
.text:
{
start.o(.text) /*设置代码段首文件,一般将代码段第一行作为入口地址*/
*(.text) /**指所有代码段*/
}
.=ALIGN(4) /*设置对其方式*/
.data: /*数据段*/
{
*(.data)
}
.=ALIGN(4)
bss_start=.;/*使用变量,将变量设置为当前地址*/
.bss: /*未初始化全局变量*/
{
*(.bss)
}
bss_end=.;
/*bss段大小:bss_max=bss_end-bss_start*/
}
3、make工具
使用make工具和makefile脚本。
makefile脚本:
>规则:
目标:依赖
【TAB键】命令
led.o:led.s
arm-linux-gcc -g -o led.o led.s
>伪目标
.PHONY 目标 /*为目标标示*/
目标: /*没有依赖*/
命令
>最终目标
第一个规则的目标
>使用变量
obj=led.s
例子:
led.o:$(obj)
arm-linux-gcc -g -o led.o $(obj)
>常用变量
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件
led.o:led.s
arm-linux-gcc -g -o $@ $<
>%使用:对于命令相同的规则可以“叠”起来
%.o:%.s
arm-linux-gcc -g -o $@ $<
>指定脚本
make -f exmple.lds hello