ARM入门篇之(二)工具
交叉,指在宿主机上编写编译好代码,生成目标机能够运行的格式文件,通过数据线连接宿主机与目标机,从宿主机上下载程序到目标机内
本文引用地址:https://www.eepw.com.cn/article/201611/319418.htm工具链,就是交叉编译器(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段的结束位置
}
评论