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

2019-07-12 16:42发布

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