标签:bin tool hex axf path GN dir
gn对于工具链的配置只到可执行文件就结束了,在我们之前配置的armcc中,最终生成axf就算结束了,但对于一些应用场景来说,bin和hex是必须的,因此还需要执行额外的步骤来实现bin和hex的生成,对于bin和hex,arm工具链中提供了fromelf来做这件事情。
构建后动作
gn提供了目标action来做工具链之外的动作,action可以接受python脚本,因此我们的选择就是在python脚本中调用fromelf来生成bin和axf。首先看gn中的配置
action("build_target") {
deps = [
":gn_demo",
]
script = "//build/py_script/axf_format.py"
sources = [
"$root_out_dir/bin/gn_demo.axf",
]
outputs = [
"$root_out_dir/bin/gn_demo.bin",
]
args = [
"--format_tool",
rebase_path("$MDK_DIR/ARM/ARMCC/bin/fromelf.exe"),
"--axf",
rebase_path("$root_out_dir/bin/gn_demo.axf"),
"--dir",
rebase_path("$root_out_dir/bin"),
"--flag",
"b",
]
}
gn指定了一个action来执行生成动作,生成动作将会调用axf_format.py文件,该部分依赖于axf的生成。即当构建完成后,将会调用该脚本来将axf转换成bin和hex。此处调用了一个脚本,脚本如下:
import os
import sys
import getopt
format_tool = ""
axf_path = ""
out_dir = ""
flag = ""
#获取命令行参数
try:
opts, args = getopt.getopt(sys.argv[1:],"",["format_tool=","axf=","dir=","flag="])
except getopt.GetoptError:
print("axf_format.py --format_tool <tool_path> --axf <axf_path> --dir <out_dir> --flag <b or h>")
sys.exit(2)
for opt, val in opts:
if opt in ("--format_tool"):
format_tool = val
if opt in ("--axf"):
axf_path = val
if opt in ("--dir"):
out_dir = val
if opt in ("--flag"):
flag = val
#获取axf的文件名,根据此文件名指定输出的文件名
(axf_name, axf_ext) = os.path.splitext(os.path.basename(axf_path))
bin_path = "%(path)s/%(name)s.bin"%{'path':out_dir,'name':axf_name}
hex_path = "%(path)s/%(name)s.hex"%{'path':out_dir,'name':axf_name}
#生成bin文件
if "b" in flag:
os.system("%(tool)s --bin --output %(bin)s %(axf)s"%{'tool':format_tool,'bin':bin_path,'axf':axf_path})
#生成hex文件
if "h" in flag:
os.system("%(tool)s --i32 --output %(hex)s %(axf)s"%{'tool':format_tool,'hex':hex_path,'axf':axf_path})
脚本主要的作用是获取传入的命令行参数,根据参数执行转换工作。
结果测试
可以看到在执行结束后看到了bin和hex文件,这样就完成了预期的所有工作。
![](https://g.csdnimg.cn/static/user-reg-year/1x/4.png)
标签:bin,tool,hex,axf,path,GN,dir 来源: https://blog.csdn.net/define_me_freedom/article/details/104197996
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。