ARM学习笔记10——GNU ARM命令行工具

2020-02-18来源: eefocus关键字:ARM  GNU  命令行工具

一、编译器arm-linux-gcc


  1、用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的:


    1.1、预处理阶段


    编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使GCC在预处理结束后停止编译过程,而不继续其他动作了。


    1.2、编译阶段  


    首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,arm-linux-gcc把代码翻译成汇编语言。用户可以使用-S选项来进行查看,该选项只编译而不进行汇编,生成汇编代码。


    1.3、汇编阶段  


    把编译阶段生成.s文件转成目标文件,使用者可使用选项-c就可产生.o文件了


    1.4、链接阶段  


    系统把printf等函数的实现都做到名为lib.so.6的库文件中去了(或者采用精通连接时有的.a文件中),在没有特别指定时,arm-linux-gcc会到系统默认的搜索路径下进行查找,也就是链接到lib.so.6库函数中去,这样就能实现函数printf了,而这也是链接的作用


  2、arm-linux-gcc 常用命令行选项


    2.1、-o      表示要求编译器产生所指定文件名的文件,因为默认的可执行文件名是a.out


    2.2、-L 指定链接时


    2.3、-I 指定头文件.h的搜索目录


    2.4、-l 正常链接只会用libc这个函数库,其他函数库需要用这个命令指定链接


    2.5、-S 只建立组合语文件


    2.6、-D 条件编译,搭配#ifdef #define用,如果有定义才编译


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


    2.8、-g 要求编译器在编译的时候提供以后对程序进行调试的信息


    2.9、-E 表示编译器只进行编译,而不做汇编和链接


    2.10、-O1/O2/O3 比编译器对程序提供的最优化选项,在编译的时候使用该选项,可以使产生的可执行文件的执行效率提高,编译器会根据CPU的架构编出优化的程序代码,需要多花一点编译时间。-O2比较常用


    2.11、-Wall 指定产出全部的警告信号


二、汇编器arm-linux-as


  汇编器用于将汇编源文件汇编成目标文件,示例用法如下: $arm-linux-as hello.s -o hello.o


三、连接器arm-linux-ld


  连接器用于连接目标文件和系统库中的函数代码(目标代码),示例用法如下:


  $arm-linux-ld test1.o test2.o -lc -o hello.elf hello.o


  将test1.o、test2.o和hello.o一起连接生成可执行文件hello.elf文件


四、文件格式转换arm-linux-objcopy  


  用于文件格式转换,将生成的hello.elf文件转换成二进制文件,示例用法如下: $arm-linux-objcopy -O binary hello.elf hello.bin


五、反汇编arm-linux-objdump  


  用于将目标文件或elf格式可执行文件反汇编成汇编代码文件,示例用法如下: $arm-linux-objdump -S hello.o >hello.asm


六、elf格式文件查看:arm-linux-readelf  


  用来查看elf格式的文件的信息,可以输出elf文件额文件头信息,以及段信息,示例用法如下: $arm-linux-readelf -a hello.elf


七、静态库管理 arm-linux-ar  


  静态库管理软件,可以将产生的目标文件“.O”文件生成或添加到库中,也可以查看库中有的目标文件,示例代码如下: $arm-linux-ar rc hello.a hello.o


八、符号表生成指令 arm-linux-nm  


  生成elf文件中的符号,使用示例如下: $arm-linux-nm hello.elf >sym


九、去掉elf文件中不需要的信息和代码 arm-linux-strip  


  用于去掉文件中不使用的一些信息,如调试信息等,以减小目标文件的体积。从而节省存储空间或提高加载、执行效率,使用示例如下: $arm-linux-strip hello.elf

关键字:ARM  GNU  命令行工具 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488624.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM学习笔记11——GNU ARM汇编程序设计
下一篇:ARM学习笔记9——ARM汇编汇编语言中的伪指令

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM七种异常源和异常处理流程(四大步三小步)
                                                    ARM异常处理(处理器对特定的异常事件进行的处理)的进入过程(硬件自动完成):四大步(两备份两修改)三小步:(1)拷贝 CPSR (当前程序状态寄存器current program status register)到 SPSR_<mode>(保存当前
发表于 2020-03-08
ARM七种异常源和异常处理流程(四大步三小步)
arm开发板的一些常用命令
这写记录是我经常忘记的东西:做个笔记在这里1、reboot 是重启的意思。2、source 是使那些修改的文件立即生效,避免了重启之后才能生效的问题,例如我们修改了/etc/profiile,修改之后不能立即生效。这时我们输入 source /etc/profile 就可以生效了这些以后还会继续更新。3、chmod -R 777 /home/edu/practice 设置practice文件夹里面的所有的文件权限为7774、压缩单个文件:gzip -v etc.c   生成的压缩名为:etc.c.gz5、压缩多个文件:gzip -v  *     //压缩当前目录下的所有文
发表于 2020-03-08
ARM处理器的未定义指令异常处理过程分析
在前面的两篇文章中已经介绍了ARM处理器的工作模式和ARM异常中断处理流程。这篇文章我们通过代码来详细介绍ARM处理器未定义指令的异常中断处理;当发生未定义指令异常中断时,CPU进入未定义指令模式。可以通过读取CPSR寄存器的值来判定是否真的进入了未定义指令模式。开发板:tiny4412;工具链版本:gcc version 4.5.1 (ctng-1.8.1-FA)主要设置以下几个文件:start.S文件,详细内容如下:.text.global _start_start: b reset /* vector 0x46000000 reset*/ ldr pc, _undefined_instruction
发表于 2020-03-08
【ARM裸板】启动文件与栈的简略分析
unsigned int *)0x56000054; *pGPFCON = 0x100; *pGPFDAT = 0; return 0;}3.问题函数的调用规则ATPCS:ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)参考文章 Arm汇编学习笔记(六)——函数调用栈空间以及fp寄存器3.1 为什么要设置栈?因为C函数所需保存局部变量保存LR等寄存器(返回地址)调用者如何传递参数给被调用者被调用者如何传返回这给调用者怎么从栈中恢复那些寄存器调用者和被调用者通过r0-r3寄存器传递参数和返回值在函数中,r4-r11可能被使用,所以:在入口保存他们,在出口恢复他们高标号寄存器存放在高地
发表于 2020-03-08
【ARM裸板】启动文件与栈的简略分析
【ARM裸板】S3C2440 时钟设置与分析
由时钟树分析,时钟源通过选择器接入给MPLL(Main PLL)与UPLL(USB PLL)经过MPLL得到FCLK提供给CPU[ARM920T]FCLK分别通过HDIVN与PDIVN分频得到HCLK与PCLKHCLK接入给AHB总线,再给各种高速设备(Nand Flash、内存控制器、中断控制器…)PCLK接入给APB总线,再给各种低速设别(I2C、PWM、GPIO、UART…)1.时钟源最大值2.时钟源2.1 两种时钟源1.晶振2.外部引脚时钟输入2.2 选择时钟源通过改变OM[3:2]引脚来选择时钟源JZ2440 OM[3:2]接入GND,则主时钟源与USB时钟源都选择外部晶振3.上电时钟分析复位等待, 等待电源稳定
发表于 2020-03-08
【ARM裸板】S3C2440 时钟设置与分析
【ARM裸板】内存控制器、SDRAM基础与代码重定位
1.CPU如何控制外设?CPU控制相应外设的寄存器,有外设控制器发出特定的波形2.CPU如何选择寄存器?CPU通过内存控制器选择发出地址addr根据地址选择不同的模块CPU内存控制器读写数据3.外设共用地址、数据总线,如何互不干扰?通过片选CS引脚,选择不同的外设4.谁控制片选引脚发出地址addr根据地址发出片选信号CPU内存控制器使能相应的外设由芯片手册得知:当CPU发出地址是0x00000000时 nGCS0为低电平选择(有效)5.CPU如何读写数据的方向?通过外设芯片的读写引脚控制6.CPU不同位宽设备如何连接并读取数据【内存控制器】6.1 连接方式8bit ROM (从A0开始对应连接)16bit ROM (A0不接,从A1
发表于 2020-03-06
【ARM裸板】内存控制器、SDRAM基础与代码重定位
小广播
何立民专栏 单片机及嵌入式宝典

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

更多每日新闻
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved