DSP

打造windows下的嵌入式开发工具(2):binutils-2.18

2019-07-13 15:04发布

  快乐虾 http://blog.csdn.net/lights_joy/ lights@hb165.com      本文适用于 ADI Blackfin系列DSP 优视科技BV561EVB开发板 gcc-4.3.1 binutils-2.18 codeblocks-8.02 Skyeye-1.2.5 bfin-uclinux-2008r1-rc8 Cygwin gcc 3.4.4 Visual studio 2005 Visual DSP++ 5.0    欢迎转载,但请保留作者信息     2.17开始,binutils支持Blackfin,在此选择最新的2.18版本,可从www.gnu.org下载得到。binutils中需要生成的最重要的两个程序是as.exeld.exe,一个是汇编器,一个是链接器。 首先将binutils-2.18cygwin下运行configure –target=bfin-uclinux-gnu,然后再分析其生成的Makefile。通过对此Makefile的分析,可以得到binutils中几个目标的生成方法。 在下文列出的每一个目标中,都有单独的config.h进行配置,当在vs2005下编译时,需要手工修改这个文件的内容。

1.1    libiberty.lib

cygwin下编译时要求生成的目标为libiberty.a,这是一个静态库,在vs2005下相应的改为libiberty.lib静态库,它的作用是提供一些c library中未提供的辅助函数。其Makefile分析参见《binutils-2.18/libiberty/Makefile分析》这篇文章。 vs2005下编译时,需要根据需要修改动态生成的config.h文件,根据vs2005提供的库函数进行适当修改(其实就是将一些#define语句改为#undef或者直接注释掉就行了)。然后加入一些vs2005下未提供但libiberty目录下提供了的函数代码。比如ffs.cstrcasecmp等等。 编译时未发现有不兼容的代码。

1.2    libbfd.lib

cygwin下编译时要求生成的目标为libbfd.a,这是一个静态库,在vs2005下相应的改为libbfd.lib静态库,它的作用是提供对elf格式的文件进行分析或者读写的核心函数。后面的一些应用程序的生成都要依赖于这个库。对这个目标Makefile分析参见《binutils-2.18/bfd/Makefile分析》这篇文章。 vs2005下编译时,需要根据需要修改动态生成的config.h文件。编译时未发现有不兼容的代码。

1.3    libopcodes.lib

cygwin下编译时要求生成的目标为libopcodes.a,这是一个静态库,在vs2005下相应的改为libopcodes.lib静态库。对这个目标Makefile分析参见《binutils-2.18/opcodes/Makefile分析》这篇文章。在vs2005下编译时,需要根据需要修改动态生成的config.h文件。编译时未发现有不兼容的代码。

1.4    size.exe

这个应用程序用于输出elf格式文件中各个段的大小等信息,支持dxe文件,其输出的信息类似于这样的: >size p1.dxe    text       data       bss      dec      hex  filename   14068        0        0    14068     36f4  p1.dxe 这个文件的生成参见《binutilssize.exe的生成》,没什么特别的东西。

1.5    objdump.exe

size.exe只能查看段的大小,而objdump可以查看的内容则广泛得多,它可以查看各个段的详细信息,如符号表等等。不过很遗憾它现在仍然不支持bfin dsp的反汇编。 这个文件的生成参见《binutilsobjdump.exe的生成》,没什么特别的东西。

1.6    ar.exe

这个文件用于处理.a这样的静态库文件,可以往这个文件中添加或者删除.o这样的目标文件。其生成参见《binutilsar.exe的生成》,没有特别的东西。

1.7    strings.exe

这个应用程序将输出一个文件中的所有可打印字符,当然是英文字符。其生成参见《binutilsstrings.exe的生成》,没有特别的东西。

1.8    ranlib.exe

这个据说可以为库文件中的函数(?)加上序号以加快访问速度,不甚了解。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.9    objcopy.exe

objcopy的作用是拷贝一个目标文件的内容到另一个目标文件中。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.10       addr2line.exe

addr2line的作用是可以根据一个地址在elf文件中查找其所在的文件和行号,当然前提是这个elf文件必须带有调试信息。这个应用程序通常用于调试的时候来追踪发生错误的所在。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.11       readelf.exe

readelf用来显示ELF格式目标文件的信息。可通过参数选项来控制显示哪些特定信息。(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.12       nm.exe

nm用来列出目标文件中的符号,可以帮助程序员定位和分析执行程序和目标文件中的符号信息和它的属性。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.13       strip.exe

strip命令能清除执行文件中不必要的标示符及调试信息,可减小文件大小而不影响正常使用。文件一旦strip后就不能恢复原样。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.14       cxxfilt.exe

cxxfilt.exe可用来过滤C++ Java 符号,防止重载函数冲突。其生成参见《binutils-2.18/binutils/Makefile分析》。

1.15       as.exe

这个是个汇编器,可以将.s文件汇编成.o文件。其生成参见《binutils-2.18/gas/Makefile分析》。

1.16       gprof.exe

这个程序可以在一定程度上衡量一个程序的性能。其生成参见《binutils-2.18/gprof/Makefile分析》。

1.17       ld.exe

这个没什么好说的,链接器。参考《binutils-2.18/ld/Makefile分析》。  

参考资料

host-i686-pc-cygwin/libiberty/Makefile解析(2008-8-19) host-i686-pc-cygwin/fixincludes/Makefile分析(2008-8-19) host-i686-pc-cygwin/zlib/Makefile分析(2008-8-19) host-i686-pc-cygwin/libcpp/Makefile分析(2008-8-19) host-i686-pc-cygwin/libdecnumber/Makefile分析(2008-8-19) bfin-xxx-gcccc1plus.exe的生成2008-08-23 bfin-xxx-gccfortran目标的生成(2008-8-24) bfin-xxx-gccjava目标的生成(2008-8-24) bfin-xxx-gccobjc目标的生成(2008-8-26) bfin-xxx-gcccollect2目标的生成(2008-8-26) 打造windows下的嵌入式开发工具(1):目标(2008-9-3)