您的位置:首页 > 运维架构 > Linux

【嵌入式Linux+ARM】阶段性总结(Makefile & 链接文件)

2015-02-07 14:34 393 查看
1.arm-linux-ld

arm-linux-ld 的 -T 选项用来指定链接地址;

-Ttext——指定代码段

-Tdata——指定数据段

-Tbss——指定bss段

arm-linux-ld -Ttext 0x30000000 -g led_on.o -o led_on

也可以用来指定一个链接文本,如*.lds ,举例如下:

SECTIONS{

. = 0x30000000
//设置当前运行地址

.text : {*(.text)} //所有输入文件的代码段 被集合在一起 起始运行地址为0x30000000

.rodata : {*(.rodata)}

.data : {*(.data)}

.bss ALIGN(4) : {*(.bss) *(COMMON)} //ALIGN指定对齐的字节数

first 0xB0000000 : AT(4096) {led.o} //first段运行地址(重定位地址)为0xB0000000

//AT指定的是存放在编译后镜像文件4096位置处

}

注意区分运行地址和加载地址!!!

2.arm-linux-objcopy 与 arm-linux-objdump

arm-linux-objcopy -O binary -S elf_file bin_file //把elf文件转换为bin文件

arm-linux-objdump -D elf_file > dis_file //把elf文件转换为反汇编文件

arm-linux-objdump -D -b binary -m arm bin_file > dis_file//二进制文件转换为反汇编文件

3. 反汇编代码

4bc: e3a0244e mov r2, #1308622848;0x4e000000

4c0: e3a0244e mov r3, #1308622848;0x4e000000

解释:

4bc 、 4c0是代码的运行地址 就是说运行前 这些指令必须位于内存中这些地址上;

e3a0244e是机器码 CPU用到的、内存中保存的都是机器码;

0x4e000000是1308622848的十六进制表示;

4. 立即数计算方法



5. Makefile基础加强

:=赋值的变量为立即变量

+=的变量,如果在此之前有:=定义过,那它就是立即变量;否则就是延时变量;

常用Makefile函数:

$(subst from, to, text)——把text中所有to用from替换

$(patsubst from, to, text)——同上,可以使用通配符 如$(patsubst %.c, %.h, 1.c 2.c)得到1.h 2.h

$(strip string)——去除前导和结尾空格

$(filter pattern..., text)返回符合pattern的字,如$(filter %.c, 1.c 2.h 3.c) ——得到1.c 3.c

$(findstring find, in)——从in中搜索find,找到则返回find,找不到返回NULL

$(basename names....)——得到每一个文件名中除后缀外的一切字符 $(basename s/1.c s/2 3)得到s/1 s/2 3

$(dir names...)——抽取每个文件名的路径部分

$(notdir names...)—抽取每个文件名除路径外一切字符——真正的文件名

$(suffix names...)—抽取每个文件名的后缀

$(addsuffix suffix, names...)——添加后缀$(addsuffix %.c 1 2)——得到1.c 2.c

$(addperfix suffix, names..)——添加前缀$(addperfix src/, 1 2)——得到src/1 src/2

$(wildcard pattern)——可以使用*通配符,如当前目录下有1.c 2.c 3.h;则var := $(wildcard *.h)得到 3.h

$(shell ls *.c)——用于执行shell命令

例子:

src  := $(shell ls *.c)		//shell函数用于执行shell命令
objs:= $(patsubst %.c, %.o, $(src)) 	//所有的.c文件 用.o文件代替  %号可以和任意个数的字符相匹配;
test : &(objs)
    gcc -o &@ $^
%.o:%.c
    gcc -c -o &@ &^
clean:
    rm -rf test *.o


原创文章,转载请著名出处:http://blog.csdn.net/scottly1/article/details/39377763
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: