arm-linux-gcc/ld/objcopy/objdump使用总结

发布者:朱雀最新更新时间:2022-10-20 来源: csdn关键字:arm-linux-gcc  objcopy  objdump  地址转换 手机看文章 扫描二维码
随时随地手机看文章

arm-linux工具的功能如下:

arm-linux-addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。

 

arm-linux-ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。


arm-linux-c++flit 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。

arm-linux-gprof 显示程序调用段的各种数据。

arm-linux-ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。

arm-linux-nm 列出目标文件中的符号。

arm-linux-objcopy 把一种目标文件中的内容复制到另一种类型的目标文件中。

arm-linux-objdump 显示一个或者更多目标文件的信息。使用选项来控制其显示的信息,它所显示的信息通常只有编写编译工具的人才感兴趣。

arm-linux-ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。

arm-linux-readelf  显示elf格式可执行文件的信息。

arm-linux-size  列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。

arm-linux-string 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其他类型的文件它打印整个文件的可打印字符。这个程序对于了解非文本文件的内容很有帮助。

arm-linux-strip 丢弃目标文件中的全部或者特定符号。


arm-linux-gcc -wall -O2 -c -o $@ $<

-o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件 

-Wall 指定产生全部的警告信息 

-O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的执行文件的执行效率提高 

-c 表示只要求编译器进行编译,而不要进行链接,生成以源文件的文件名命名但把其后缀由 .c 或 .cc 变成 .o 的目标文件 

-S 只激活预处理和编译,就是指把文件编译成为汇编代码

 

arm-linux-ld 直接指定代码段,数据段,BSS段的起始地址

  -Tbss ADDRESS               Set address of .bss section

  -Tdata ADDRESS              Set address of .data section

  -Ttext ADDRESS              Set address of .text section

示例:

 ${CROSS}ld -Ttext=0x33000000 led.o -o led.elf

 

使用连接脚本设置地址:

   arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

其中beep.lds 为连接脚本如下:

 

arm-linux-objcopy被用来复制一个目标文件的内容到另一个文件中,可用于不同源文件的之间的格式转换

示例:

arm-linux-objcopy –o binary –S elf_file bin_file

常用的选项:

input-file , outflie

输入和输出文件,如果没有outfile,则输出文件名为输入文件名

2.-l bfdname或—input-target=bfdname

用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则arm-linux-objcopy自己分析

3.-O bfdname 输出的格式

4.-F bfdname 同时指明源文件,目的文件的格式

5.-R sectionname 从输出文件中删除掉所有名为sectionname的段

6.-S 不从源文件中复制重定位信息和符号信息到目标文件中

7.-g 不从源文件中复制调试符号到目标文件中

 

arm-linux-objdump

查看目标文件(.o文件)和库文件(.a文件)信息

arm-linux-objdump -D -m arm beep.elf > beep.dis

-D 显示文件中所有汇编信息

-m machine

指定反汇编目标文件时使用的架构,当待反汇编文件本身没有描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构.

 



[guowenxue@localhost asm_c_buzzer]$ cat beep.lds 

 

/***********************************************************************

 *        File:  beep.lds

 *     Version:  1.0.0

 *   Copyright:  2011 (c) Guo Wenxue

 * Description:  Cross tool link text, refer to u-boot.lds

 *   ChangeLog:  1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

 *

 ***********************************************************************/

 

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

OUTPUT_ARCH(arm)

ENTRY(_start)

 

SECTIONS{

    . = 0x33000000;

    .text : {

        *(.text)

        *(.rodata)

    }

 

    .data ALIGN(4): {

        *(.data)

    }

 

    .bss ALIGN(4): {

        *(.bss)

    }

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile 

# ***********************************************************************

# *        File:  makefile

# *     Version:  1.0.0

# *   Copyright:  2011 (c) Guo Wenxue

# * Description:  Makefile used to cross compile the ASM and C source code

# *   ChangeLog:  1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *

# ***********************************************************************

 

CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-

CFLAGS = 

 

beep.bin: start.S beep.c

        arm-linux-gcc $(CFLAGS) -c -o start.o start.S

        arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

        arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

        arm-linux-objcopy -O binary -S beep.elf beep.bin

        rm -f *.elf *.o

 

install:

        cp beep.bin ~/winxp -f --reply=yes

 

clean:

        rm -f *.elf *.o

        rm -f beep.bin


关键字:arm-linux-gcc  objcopy  objdump  地址转换 引用地址:arm-linux-gcc/ld/objcopy/objdump使用总结

上一篇:mini2440 LCD驱动
下一篇:在TQ2440实验板上进行linux+qtopia++ov9650+opencv的图像处理系统

推荐阅读最新更新时间:2024-11-13 14:25

【嵌入式】arm-linux-gcc/ld/objcopy/objdump参数概述
arm-linux-gcc   -o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件   -Wall 指定产生全部的警告信息   -O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的执行文件的执行效率提高   -c 表示只要求编译器进行编译,而不要进行链接,生成以源文件的文件名命名但把其后缀由 .c 或 .cc 变成 .o 的目标文件   -S 只激活预处理和编译,就是指把文件编译成为汇编代码 arm-linux-ld   直接指定代码段,数据段,BSS段的起始地址 -Ttest startaddr -Tdata startaddr -Tbss startaddr
[单片机]
ARM-GCC-LD脚本
从以前的经验,链接脚本是嵌入式开发,单片机开发相当重要的一个东西。它完成的工作是做PC机软件的同志们不用关心的,但是也是很复杂的一项工作。总结来看链接脚本要告诉连接器 1:输出什么 2:输入是什么,那么obj文件 3:要用什么库,库放在什么地方 4:内存分布地址 5:提供启动代码一些全局地址变量 一般来说链接脚本需要搞清楚这几样事情后才能编写,那arm-gcc-ld的脚本也一定要实现这些功能。对于大多数的链接器来说,对于简单的项目不需要脚本,只是使用命令参数就可以完成了。 MEMORY: 它是用来补充SECTIONS命令的,用来描述目标CPU中可用的内存区域。它是可选的,如果没有这个命令,LD会认
[单片机]
基于VIPER26LD隔离反激式AC/DC电源设计方案
器件提前频率抖动降低了EMI滤波器的成本。突发模式操作和非常低电耗,有助于满足节能法规所定的标准。     图1 VIPER26LD内部方框图     图2 VIPER26LD方案原理图 VIPER26LD主要特性 800V雪崩耐用电源 PWM操作,频率抖动,用于低EMI 工作频率 - 60kHz的L型 - 115kHz H型 待机功耗 50mW在265VAC 限制电流设定点可调 板载软启动 故障状态后安全自动重启 迟滞热关断 VIPER26LD应用 辅助电源电器 电能计量 LED驱动器 表1 VIPER26LD方案材料清单     SMPS机顶盒,DVD播放机和录像机 VIPER26LD方案 STEVAL-ISA081
[电源管理]
基于VIPER26<font color='red'>LD</font>隔离反激式AC/DC电源设计方案
gcc代码反汇编查看内存分布[2]: arm-linux-gcc
arm-none-linux-gnueabi-gcc -v gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) 重点: 代码中的内存分配, 地址从低到高: 代码段(RO, 保存函数代码) -- 只读数据段(RO, 保存常量) -- 数据段(RW, 已初始化并且初始值不为0的全局变量和静态变量) -- bss段(RW, 未初始化或者初始化为0的全局变量和静态变量). 程序运行起来之后, 堆区和栈区的变量地址是动态分配的. 可以看出arm-none-linux-gnueabi-gcc编译和gcc编译结果是类似的. #include stdio.h #include s
[单片机]
arm-linux-gcc的安装
在X86电脑上开发的程序要在ARM系统上运行就必须使用交叉工具链arm-linux-gcc,linux系统上是没有这个工具链的,为此必须自己下载安装,安装步骤为: 1、网上下载个压缩包arm-linux-gcc,这个压缩包网上有很多,版本也有很多,我下载的是arm-linux-gcc-4.4.3-20100728.tar.gz 2、 解压arm-linux-gcc-4.4.3-20100728.tar.gz   #tar -zxvf arm-linux-gcc-4.4.3-20100728.tar.gz -C / 注意:tar命令默认解压缩文件到压缩文件所在的目录下,后面加-C和目录名表示将压缩文件压缩到指定的目录下
[单片机]
arm-linux-gcc/ld/objcopy/objdump使用总结
arm-linux工具的功能如下: arm-linux-addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。 arm-linux-ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。 arm-linux-c++flit 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。 arm-linux-gprof 显示程序调用段的各种数据。 arm-linux-ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。通常,建立一个新编
[单片机]
ARM-linux-gcc交叉编译工具提示arm-linux-gcc can not find
在Ubuntu12.04下安装了arm-linux-gcc后,编译Linux内核发现提示arm-linux-gcc can not find,查找了相关的网络资料找到了答案。 一: 1:常规下,在用户目录下执行交叉工具的解压安装, 2 :并用sudo /etc/profile更改相应的环境变量。(相关查看OK6410Llinux用户手册的交叉工具安装) 3:source /etc/profile使修改的文件生效 4:查看交叉工具是否生效 :arm-linux-gcc  -V        以上提示你安装的交叉工具链的把版本信息,但是你编译内核时,系统会
[单片机]
实验三——SDRAM
一。运行环境   开发板:jz2440   系统: ubuntu12.04   编译器:arm-linux-gcc 二、特殊寄存器 sdram的操作无需按照时序图来设置,只要设置好相关的13个寄存器,arm处理器里面的存储管理器会自动输出控制信号 1 .long 0x22011110 @ BWSCON 2 .long 0x00000700 @ BANKCON0 3 .long 0x00000700 @ BANKCON1 4 .long 0x00000700 @ BANKCON2 5 .long 0x00000700 @ BANKCON3 6
[单片机]
实验三——SDRAM
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved