windows bat脚本学习三(ARM相关执行文件,armar.exe | armasm.exe | armcc.exe | fromelf.exe)

news/2025/2/9 2:43:17 标签: bat脚本, keil, arm, 编译

在使用ARM机型进行开发的时候,都会用到ARM底层提供的执行文件,今天就来分析一下这几个文件。

1.fromelf.exe

该文件的主要功能是生成.bin文件。该工具的语法为

fromelf        [options]        input_file

详细参数如下:

可选参数

--help 显示帮助

--vsn 显示版本信息

--output_file 输出文件(默认文本格式)

--nodebug 在生成的镜像中不包含调试信息

--nolinkview 在生成的镜像中不包含段信息

二进制输出格式

--bin 二进制输出

--m32 摩托罗拉32位hex

--i32 因特尔32位hex

--vhx 适配字节hex格式

--base addr 可选择设置基础地址对于m32i32

需要调试信息的输出格式

--fieldoffsets 结构/类的汇编语言描述

--expandarrays 被扩展的内部或外部数组

其他输出格式

--elf ELF(Executable and Linking Format)格式

--text 文本格式

        文本格式的标志

        -v 打印详细信息

        -a 打印数据地址(针对镜像调试编译

        -c 打印反汇编代码

        -d 打印数据段的内容

        -e 打印异常表

        -g 打印调试表

        -r 打印重定位信息

        -s 打印字符表

        -t 打印字符串表

        -y 打印动态段的内容

        -z 打印代码和数据大小信息

        因为keil是默认生成.axf文件的,该文件包含了二进制和调试信息。现在就是通过.axf文件通过这个工具转换成bin文件。

路径/fromelf.exe --bin -o [输出Bin文件的路径] [.axf的路径]

正常我们输入的路径应该是这样的

G:\keil_5\ARM\ARMCC\bin\fromelf.exe --bin -o  ./bin/输出名.bin  ./Objects/输出名.axf

这里可以简化一下

G:\keil_5\ARM\ARMCC\bin\fromelf.exe --bin -o  ./bin/@L.bin  ./Objects/@L.axf

@L的意思是自己再keil中设置的输出文件名。

可以再简化一下

$KARM\ARMCC\bin\fromelf.exe --bin -o  ./bin/@L.bin  ./Objects/@L.axf

$K的意思是MDK的安装路径。

这里也可以写成

$J\..\bin\fromelf.exe --bin -o  ./bin/@L.bin  ./Objects/@L.axf

$J是编译器的绝对地址,通常是MDK安装路径\ARM\ARMCC\include

再简单一点可以写成

$J\..\bin\fromelf.exe --bin -o  ./bin/@L.bin #L

#L就是.axf完整路径和文件名

再简单一点可以写成

$J\..\bin\fromelf.exe --bin -o  $L@L.bin #L

$L本工程的输出路径。在Output->create Executable中。

详细可以看windows bat脚本学习一(基础指令)_qq_34981的博客-CSDN博客_bat设置环境变量文章的第7小节。

注:这里有时候在生成bin文件的时候会生成一个.bin的文件夹。可以将参数bin修改为bincombined来解决。这个生成文件夹的原因目前只知道跟修改了ROM的起始地址有关,具体的原因还未知。

2.armar.exe

该文件主要是从.a和lib文件中提取信息。

命令格式:armar options archive [file_list]

 -r         在 <file_list> 插入文件, 替换掉已经存在的同名成员.
 -d         在 <file_list> 中删除成员.
 -x         在 <file_list> 中提取同名的成员.
 -m         在 <file_list> 中移动文件.
 -p         打印文件到标准输出设备.
 -a pos     插入/删除 <pos> 后面的文件.
 -b pos     插入/删除 <pos> 前面的文件.
 -u         只更新旧的文件, 与 -r 一起使用.

 -n         不要向object文件中添加符号表.
 -s         强制重新生成文档符号表.
 -t         打印文档的内容表.
--zs        显示符号表.
--zt        汇总文档内容 (大小和输入).
 -c         当一个新文档被创建的时候不显示警告.
 -C         提取的时候不要覆盖一个已经存在的文件.
 -T         截取系统最大长度文件名.
 -v         提供详细输出.
--create    强制创建一个新的文档.
--via file  从 via 文件中获取额外参数.
--sizes     列出所有成员大小与库的总大小.
--entries   列出包括入口点的部分.
--vsn       打印最新的armar版本.
--help      打印帮助信息.

 比如要打印一个.a或lib的相关信息,可以调用如下指令armar.exe -zt 路径\文件.a。

结果如图

3.armasm.exe

命令格式:armasm [options] sourcefile

--list 生成列表文件

-o outputfile 最终输出文件名

--depend 保留make源文件的依赖

--errors 把标准错误判断放入errorsfile

-I dir 添加源文件的搜索目录

--pd

--predefine 预执行SET{L,A,S}指令

--maxcache <n> 最大闪存空间(默认 8MB)

--no_esc 忽略C文件

--no_warn 关闭警告信息

-g 输出调试表

--apcs 编译预定义去匹配已选择的过程调度回调

--checkreglist 警告关于输出指令LDM/STM寄存器列表

--li ARM小段模式、

--bi ARM大端模式

-M 写源文件依赖列表到stdout

--MD 写源文件依赖列表到inputfile.d文件

--keep 保持本地列表在目标文件的同步列表中

--regname none 不预定义寄存器名

--split_ldm 错误长LDM/STM

--unsafe 下载明确的错误到警告表

--via <file> 从file中读取更多的参数

--cpu <target-cpu> 设置目标ARM内核类型

--cpu list 输出所有可选择的CPU列表

--fpu <target-arch> 设置目标FP体系结构版本

--fpu_list 输出所有可选择的FP体系结构

--thumb 以thumb指令集编译

--arm 以ARM指令集编译

4.armcc.exe

链接编译

命令格式:armcc [options] file1 file2......file n

--arm 创建ARM代码

--thumb 创建Thumb代码

--c90 切换到C模式(默认是.c文件)

--cpp 切换到C++模式(默认是.cpp文件)

-00 最小优先级

-01 受限的调试级别优化

-02 高优化

-03 最大优化

-Ospace 对代码大小进行优化

-Otime 优化最大优化级别的运行时间

--cpu <cpu> 选择CPU

--cpu list 输出所有被选中的CPU列表

-o <file> 最终输出文件的名字

-c 只进行编译,不链接

-asm 输出汇编以及obj文件

-s 只输出汇编文件

--interleave 交叉反汇编(同--asm 或 -s共同使用)

-E 仅仅预处理C代码

-D <symbol> 定义<symbol>符号并且传入编译过程

-g 为高级别调试创建表

-I <directory> 在编译的时候包含<directory>作为头文件搜索目录

5.armlink.exe

ARM链接工具

命令格式:armlink option-list input-file-list

 

option-list 不区分大小写的选项列表

input-file-file 输入对象或者库文件列表

--output file 指定输出文件名

--via file 从文件中读更多的参数

--partial 创建一个被分数链接的对象文件

--scatter file 分散加载文件

--ro-base n 设置执行地址空间域,包含RO只读数据段

--rw-base n 设置执行地址空间域,包含RW/ZI段

--bestdebug 添加调试信息为image 提供调试视图

--datacompressor off 不要压缩RW数据段

--no_debug 不要添加调试信息

--entry 指定输入段与输入点

--libpath 指定系统库文件路径

--userlibpath 指定用户库文件路径

--no_locals 不要添加局部标号到image的标号列表

--no_remove 不要移除image的未使用段

--callgraph 创建一个函数静态调用图

--info topic 列出镜像信息

 --map 显示镜像内存映射

--symbols 列出惊险符号

--xref 列出输入的段之间所有的交叉引用,最终输出会放在.map 文件里面


http://www.niftyadmin.cn/n/682565.html

相关文章

oracle英文字符串按首字母查询

2019独角兽企业重金招聘Python工程师标准>>> 可以使用substr(colname,1,1) ,如果不区分大小写&#xff0c;还要借助upper或者lower。 转载于:https://my.oschina.net/youfen/blog/1934828

FreeRTOS学习一(简介)

1.什么是FreeRTOS RTOS从名字上可以分为free和RTOS两部分。free是免费的意思&#xff0c;RTOS全称是Real Time Operation System&#xff0c;译为实时操作系统。那FreeRTOS的意思就是“免费的实时操作系统”。RTOS不是指某一个特定的系统&#xff0c;而是一类系统。比如uC/OS&a…

[AH2017/HNOI2017]礼物(FFT)

题目描述 我的室友最近喜欢上了一个可爱的小女生。马上就要到她的生日了&#xff0c;他决定买一对情侣手 环&#xff0c;一个留给自己&#xff0c;一个送给她。每个手环上各有 n 个装饰物&#xff0c;并且每个装饰物都有一定的亮度。但是在她生日的前一天&#xff0c;我的室友突…

FreeRTOS学习二(任务)

1.多任务系统 在没有RTOS的“裸机”系统中&#xff0c;一般是在main函数中用while(1)做一个大循环来进行处理。这种方式是典型的单任务系统&#xff0c;也称作前后台系统&#xff0c;中断服务作为前台程序&#xff0c;大循环作为后台程序。 前后台系统的弊端很明显&#xff0c;…

JavaScript模拟自由落体

1.效果图2.实现分析利用Canvas画圆球、地面&#xff1b;1.下落过程物理知识回顾&#xff0c;物体下落过程&#xff08;不计损耗&#xff09;由重力势能转换成动能重力势能 Ep mgh动能   Ek (1/2)mv^2速度右0增加至gt此间需要计算浏览器每次渲染的圆球y坐标y (1/2)gt^22.反…

这是一篇测试文章

这是一篇测试文章欢迎使用Markdown编辑器我试试插入一个图片是什么样子的新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一…

小程序开发基础-scroll-view 可滚动视图区域

小编 / 达叔小生 小程序开发基础-scroll-view 可滚动视图区域 这里只展示纵向滚动&#xff0c;横向同理就不用说明了&#xff0c;可自己尝试&#xff0c;横向滚动属性为scroll-x&#xff0c;把纵向滚动改为横向滚动即可。 scroll-view视图组件 scroll-y是scroll-view的属性&…

[Swift]LeetCode343. 整数拆分 | Integer Break

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…