arm-linux-objcopy工具介绍

arm-linux-objcopy用于复制一个目标文件的内容到另一个文件中,可以使用不同于原目标文件的格式来输出目的文件,即其可以进行格式转换。 
在开发中,一般会用其来将ELF格式的可执行文件转换为二进制格式的文件,arm-linux-objcopy的使用格式如下: 
arm-linux-objcopy [-F bfdname | –target=bfdname ] 
[-I bfdname |–input-target=bfdname ] 
[-O bfdname | –output-target=bfdname ] 
[-S | –strip-all ] [-g | –strip-debug ] 
[-K symbolname | –keep-symbol= symbolname ] 
[-N symbolname | –strip-symbol= symbolname ] 
[-L symbolname | –localize-symbol= symbolname ] 
[-W symbolname | –weaken-symbol= symbolname ] 
[-x | –discard-all ] [ -X | –discard-locals ] 
[-b byte | –byte= byte ] 
[-i interleave | –interleave= interleave ] 
[-R sectionname | –remove-section= sectionname ] 
[-p | –preserve-dates ] [ –debugging ] 
[–gap-fill= val ] [–pad-to= address ] 
[–set-start= val ] [–adjust-start= incr ] 
[–change-address= incr] 
[–change-section-address= section{=,+,-} val] 
[–change-warnings ] [–no-change-warnings ] 
[–set-section-flags= section = flags] 
[–add-section=sectionname= filename] 
[–change-leading char ] [–remove-leading-char ] 
[–weaken] 
[-v | –verbose ] [-V | –version ] [– help ] 
input-file [outfile] 
以上参数中常用的部分解析如下: 
1. input-file、outfile 
参数input-file和outfile分别表示输入目标文件(源目标文件)和输出目标文件(目的目标文件)。 
如果在命令行中没有明确指定outfile,那么arm-linuxobjcopy将创建一个临时文件来存放目标结果,然后使用input-file的名字来重命名这个临时文件(原来的input-file将被覆盖) 
2. -l bfdname 或 –put-target=bfdname 
用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果不指定源文件的格式,arm-linux-objcopy会自己去分析源文件的格式,然后去和BFD中描述的各种格式比较,从而得知源文件的目标格式名。 
3. -O bfdname 或–output-target=bfdname 
使用指定格式来输出文件,bfdname是BFD库中描述的标准格式名。 
4. -F bfdname 或–target=bfdname 
同时指明源文件、目的文件的格式。将源目标文件中的内容复制到目的文件的过程中,只进行复制不做格式转换,源目标文件是什么格式,目的目标文件就是什么格式。 
5. -R sectionname 或–remove-section=sectionname 
从输出文件中删掉所有名为sectionname的段。这个选项可以多次使用。 
6. -S或–strip-all 
不从源文件中复制重定位信息和符号信息到目标文件中。 
7. -g或–strip-debug 
不从源文件中复制调式符号到目标文件中。 
在编译裸机程序、bootloader、内核时,常用arm-linux-objcopy命令将ELF格式的生成结构转换为二进制文件,比如: 

$ arm-linux-objcopy -O binary -S elf_file bin_file

备注:本文内容主要摘录自<<嵌入式Linux应用开发完全手册>>一书。

猜你喜欢

转载自blog.csdn.net/caihaitao2000/article/details/79851471