[GN] 生成bin和hex

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文件,这样就完成了预期的所有工作。

[GN] 生成bin和hex

[GN] 生成bin和hex[GN] 生成bin和hex define_me_freedom 发布了9 篇原创文章 · 获赞 10 · 访问量 1万+ 私信 关注
上一篇:gn-build


下一篇:人工智能邂逅捷波朗,全面开启语音时代