系统移植 gnu二进制工具集、MakeFile分析
创始人
2024-03-28 20:06:08
0

一、gnu二进制工具集

1.1 gcc命令

将.s文件生成.o文件 arm-linux-gnueabihf-gcc -c asm-led.S -o asm-led.o

1.2 ld链接器

ld:链接命令,将.o文件链接生成.elf文件,需要指定链接的入口地址 
arm-linux-gnueabihf-ld -Ttext=0xc0008000 asm-led.o -o asm-led.elf

1.3 objdump生成反汇编

objdump:生成反汇编命令,将.elf文件生成反汇编文件 
arm-linux-gnueabihf-objdump -D asm-led.elf > asm-led.dis

1.4 objcopy生成二进制文件

objcopy:生成二进制文件,将.elf文件生成纯粹二进制文件 
.elf文件:包含符号表信息,调试信息 
.bin文件:不包含符号表信息,调试信息 
arm-linux-gnueabihf-objcopy -O binary asm-led.elf asm-led.bin

1.5 nm查看符号表信息

命令:arm-linux-gnueabihf-nm asm-led.elf 
c00181e8 T __bss_end__
c00181e8 T _bss_end__
c00181e8 T __bss_start
c00181e8 T __bss_start__
c00081a8 t delay_1s
c00181e8 T _edata
c00181e8 T __end__
c00181e8 T _end
c0008000 t led1_init
c000816c t led1_off
c0008130 t led1_on
c0008054 t led2_init
c0008180 t led2_off
c0008144 t led2_on
c00080a8 t led3_init
c0008194 t led3_off
c0008158 t led3_on
c00080fc t loop
c00081ac t mm
c0008000 T _start

1.6 size查看各个段大小

arm-linux-gnueabihf-size asm-led.elf

1.7 readelf查看文件头部信息

arm-linux-gnueabihf-readelf -h asm-led.elf

1.8 strip压缩文件体积

strip压缩文件体积,不可以对中间文件进行压缩(.i,.s,.o文件) 
arm-linux-gnueabihf-strip asm-led.elf

1.9 addr2line调试段错误信息

addr2line:用来调试内核中段错误信息
格式:arm-linux-gnueabihf-addr2line 地址 -e 指定elf文件 -f-e:指定elf可执行文件-f:回显函数名,行号linux@ubuntu:~/DC22081/01-asm-led$ arm-linux-gnueabihf-addr2line c000816c -e asm-led.elf -fled1_off/home/linux/DC22081/01-asm-led/asm-led.S:146以上学习的所有命令,支持X86架构和ARM架构,如果想生成X86架构,直接使用命令即可,不需要加交叉编译工具链前缀
如果想生成ARM架构,需要加交叉编译工具链前缀就可以

二、gcc编译流程

2.1 预处理

预处理作用:头文件展开,去掉注释,宏替换,不检查语法错误 gcc -E *.c -o *.i

2.2 编译

编译:生成汇编文件,检查语法错误 gcc -S *.i -o *.s

2.3 汇编

汇编:生成二进制文件,检查语法错误 gcc -c *.s -o *.o

2.4 链接

链接:链接对应的库,生成.elf可执行文件 gcc *.o -o 可执行文件

三、分析Makefile文件

makefile中四种赋值方式有什么区别?
?= :询问赋值
+=:追加赋值
:=:立即赋值
=:普通赋值# SHELL=C:/Windows/System32/cmd.exe
# 指定交叉编译工具链前缀
CROSS_COMPILE = arm-linux-gnueabihf-
#指定文件名字
NAME = interface
#=============================================================================#
#-g:gdb调试信息  -marm:编译生成arm架构  -Wall: 显示所有警告信息 -O0:优化等级信息
#-I:指定头文件路径
#-fno-builtin:不使用linux操作系统提供的库函数
#-nostdinc:不使用系统提供的头文件
CFLAGS += -g -marm -Wall -O0 -mabi=apcs-gnu -mfpu=neon -mfloat-abi=softfp -fno-builtin \-nostdinc -I./common/include    -I./include
#ld:链接命令
LD    = $(CROSS_COMPILE)ld
#gcc:编译命令
CC    = $(CROSS_COMPILE)gcc
#nm:查看符号表信息
NM  = $(CROSS_COMPILE)nm
#objcopy:生成二进制文件
OBJCOPY = $(CROSS_COMPILE)objcopy
#objdump:生成反汇编文件
OBJDUMP = $(CROSS_COMPILE)objdump
#============================================================================#
#wildcard是Makefile中内置函数
#函数功能:将某个文件夹下面的内容进行以字符串形式进行展开,并用空格隔开
#函数参数:需要展开目录文件
#函数返回值:以字符串展开后的结果
OBJSss     := $(wildcard start/*.S) $(wildcard common/src/*.S) $(wildcard *.S)\$(wildcard start/*.c) $(wildcard common/src/*.c)                \$(wildcard src/*.c) $(wildcard *.c) 
#patsubst是Makefile中内置函数
#函数功能:将一个字符串内容替换成另外一个字符串
#函数参数:
#第一个参数:源字符串,也就是要替换的字符串
#第二个参数:目标字符串,也就是替换后的字符串
#第三个参数:要替换的字符串目录
#函数返回值:替换后的目标字符串
#将OBJSss目录下所有以.S结尾的字符串,替换成.o
OBJSs      := $(patsubst %.S,%.o,$(OBJSss))
#将OBJS目录下所有以.c结尾的字符串,替换成.o
OBJS     := $(patsubst %.c,%.o,$(OBJSs))%.o: %.S @echo "  AS      $@"@$(CC) $(CFLAGS) -c -o  $@ $<#将所有以.S结尾的文件根据指定参数编译生成.o结尾的文件#$@:目标#$<:第一个依赖#$^:所有依赖%.o: %.c@echo "  CC      $@"@$(CC) $(CFLAGS) -c -o  $@ $<#将所有以.c结尾的文件根据指定参数编译生成.o结尾的文件all:clean  $(OBJS)@echo "  LD      Linking $(NAME).elf"#将OBJS目录下所有文件,根据链接脚本文件map.lds指定地址信息,生成elf文件@$(LD)  $(OBJS) -T map.lds -o $(NAME).elf@echo "  OBJCOPY Objcopying $(NAME).bin"#将elf文件生成.bin文件@$(OBJCOPY)  -O binary  $(NAME).elf $(NAME).bin @echo "  MAP     Generating $(NAME).map"#将elf文件符号表信息重定向到interface.map文件中@$(NM) $(NAME).elf > $(NAME).map @echo "  OBJDUMP Objdumping $(NAME).dis"#将elf文件生成反汇编文件到.dis文件中 @$(OBJDUMP) -DS $(NAME).elf > $(NAME).dis distclean clean:@rm -rf $(OBJS) *.elf *.bin *.dis *.map @echo "  CLEAN   complete."install:sudo cp $(NAME).bin /mnt/hgfs/share/huyue:@echo $(OBJSss)@echo $(OBJSs)@echo $(OBJS)

相关内容

热门资讯

甘肃一幼儿园违规使用添加剂致部... 转自:央视记者今天(3日)从甘肃省天水市麦积区了解到:7月1日,麦积区市场监管局和公安分局接群众反映...
“空中吊车”首战大瑶山 无人机... 转自:新华财经图为南方电网广西来宾供电局的无人机飞手正在调试无人机近日,在苍翠险峻的大瑶山自然保护区...
甘肃一幼儿园违规使用添加剂致部... 转自:天津日报记者今天(3日)从甘肃省天水市麦积区了解到:7月1日,麦积区市场监管局和公安分局接群众...
邮储银行武强县支行开展联建共建... 转自:衡水日报为深入学习贯彻党的二十大精神、全面落实新时代党的建设总要求,7月1日,邮储银行武强县支...
警方否认拘留K1373次列车砸... 【#警方否认拘留K1373次列车砸窗乘客# 仅对其批评教育后放行】#目击者讲述K1373次列车脱线乘...
隆林:递进式气象服务筑牢汛期防... 6月30日至7月1日,广西壮族自治区百色市隆林各族自治县出现入汛以来最强降雨,全县13个站点出现大暴...
万荣:气象服务赋能香菇产业从“... 6月26日,山西省运城市万荣县气象局联合县农业农村局深入南张乡香菇种植基地,开展直通式气象服务。香菇...
天津征求意见:到2027年力争... 天津市科技局对《天津市科技金融助力新质生产力发展行动方案(2025-2027年)》公开征求意见。其中...
长三角一体化发展将推进医疗检查... 转自:上观新闻近日,由上海市卫生健康委员会、江苏省卫生健康委员会、浙江省卫生健康委员会、安徽省卫生健...
“立浙江,塑世界”!“铸脉:浙... 转自:上观新闻“这不仅是一场展览,更是一座丰碑,是浙江百年雕塑与中国雕塑百年同频共振、互为印证、相互...