(1) 穿插东西链,可以理解为穿插东西集
穿插,指在宿主机上编写编译好代码,生成方针机可以运转的格局文件,经过数据线衔接宿主机与方针机,从宿主机上下载程序到方针机内
东西链,便是穿插编译器(arm-linux-gcc),穿插衔接器(arm-linux-ld),穿插转换器(arm-linux-objcopy),穿插ELF文件阅读器(arm-linux-readelf),穿插反汇编器(arm-linux-objdump)等东西的调集
(2)Makefile办理
makefile,描绘了整个程序的编译,链接等的规矩
包含:什么样的源文件需求编译,链接;运用什么东西编译,链接;编译,链接时依靠哪些文件;终究发生咱们先要的终究履行文件
而上面这一个进程只需你编写好makefile这个文件,再用make指令就可一步生成终究想要的可履行文件
makefile由规矩和变量构成
规矩:描绘了怎么经过依靠文件,运用什么东西指令,终究生成方针文件
格局如下:
方针:依靠
[Tab]指令
例如:
start.o:start.S
[Tab]arm-linux-gcc -g -o start.o -c start.S
变量:
体系界说的变量:($@)代表方针,($^)代表一切依靠,($<)代表第一个依靠,(%)通配符
例如上面的比如用变量便是:
%.o:%.S
[Tab]arm-linux-gcc -g -o $@ -c $^
默许情况下,make指令会主动找到文件名叫makefile的文件,当你把makefile改名后,可以用指令:
make -f 文件名
(3)链接脚本(.lds)
段:一个可履行程序一般由代码段,数据段。bss段构成,所以在脚本文件中也要表现出来
链接脚本大约如下:
OUTPUT_FORMAT(“elf32littlearm”,“elf32littlearm”,“elf32littlearm”)
指定输出文件格局为elf,32位,小端,arm指令
OUTPUT_ARCH(arm)
指定输出渠道为ARM
ENTRY(_start)
指定进口_start
SECTIONS{
. = 0x50000000 设置程序开端地址(OK6410首地址)
. = ALIGN(4) 代码四字节对齐
.text: 指定代码段
{
start.o(.text) 第一个部分代码为Start.o
*(.text) 其他部分代码放在start.o代码后边
}
.= ALIGN(4)
.data:{ *(.data) } 数据段
. = ALIGN(4)
bss_start = . bss段的开端方位
.bss:{ *(.bss) } bss段
bss_end = . bss段的完毕方位
}