当前位置: 首页 > news >正文

arm-linux工具

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 <guowenxue@gmail.com>

 * 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 <guowenxue@gmail.com>

# * 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

          转

转载于:https://www.cnblogs.com/Ph-one/p/4251080.html

相关文章:

  • 盎司
  • Win7下硬盘安装fedora17
  • sudo fdisk -l
  • 硬盘
  • 开发人员不可不看的 OBD通讯协议知识
  • Ubuntu 12.10 用wubi安装到硬盘中
  • ubuntu 12.04网络设置
  • ubuntu 12.04及12.10无法安装 ia32-libs
  • ubuntu文字界面与图形界面切换
  • Android下点亮LED
  • MiniTools在ubuntu下快捷方式
  • linux 下各个头文件的作用[典]
  • android与linux之间的关系
  • linux-android(任务处理)
  • Android系统启动过程[典☆☆☆]
  • 0x05 Python数据分析,Anaconda八斩刀
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Apache Spark Streaming 使用实例
  • extjs4学习之配置
  • Github访问慢解决办法
  • github指令
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 内存分配及垃圾回收机制初探
  • JavaScript实现分页效果
  • jquery cookie
  • JS专题之继承
  • Octave 入门
  • Vue2 SSR 的优化之旅
  • 开源地图数据可视化库——mapnik
  • 排序算法之--选择排序
  • 前端性能优化——回流与重绘
  • 探索 JS 中的模块化
  • 微服务核心架构梳理
  • 智能合约Solidity教程-事件和日志(一)
  • hi-nginx-1.3.4编译安装
  • MyCAT水平分库
  • postgresql行列转换函数
  • # 达梦数据库知识点
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (Java数据结构)ArrayList
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET 中创建支持集合初始化器的类型
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter