一、GNU Objcopy:
objcopy被用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换。
使用的选项参数:
input-file、out-file
参数input-file和outfile分别表示输入目标文件(源目标文件)和输出目标文件(目的目标文件)。如果在命令行中没有明确地指定outfile,objcopy将创建一个临时文件来存放目标结果,然后使用input-file的名字重命名这个临时文件(此时,原来的input-file将被覆盖)。
-I bfdname或--input-target=bfdname
用来指明源文件的格式,bfdname是BFD库中描述的标准格式名。如果不指明源文件格式,objcopy会自己去分析源文件的格式,然后去和BFD中描述的各种格式比较,从而得知源文件的目标格式名。
-O bfdname或--output-target=bfdname
使用指定的格式来输出文件,bfdname是BFD库中描述的标准格式名。
-F bfdname或--target=bfdname
同时指明源文件、目的的文件的格式。将源目标文件中的内容复制到目的目标文件的过程中,只进行复制不做格式转换,源目标文件是什么格式,目的目标文件就是什么格式
-R sectionname或--remove-section=sectionname
从输出文件中删掉所有名为sectionname的段。该选项可以多次使用
-S或--strip-all
不从源文件中复制重定位信息和符号信息到目标文件中去。
-g或--strip-debug
不从源文件中复制调试符号到目标文件中去
举例:
将.elf转换成.bin文件命令:
objcopy -O binary -R .note -R .comment -S *.elf *.bin
- #使用 -O binary (或--out-target=binary) 输出为原始的二进制文件
- #使用 -R .note (或--remove-section) 输出文件中不要.note这个section,缩小了文件尺寸
- #使用 -R .comment(或--remove-section) 输出文件中不要.comment这个section,缩小了文件尺寸
- #使用 -S (或 --strip-all)输出文件中不要重定位信息和符号信息,缩小了文件尺寸
或者可以使用命令:
objcopy -O binary --gap-fill 0xff *.elf *.bin
#--gap-fill 0xff 指定使用“0xff”填充段与段间的空闲区域
生成HEX命令:
objcopy -O ihex...