读书笔记---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

你可能感兴趣的:(文件系统)