From 7d9d1c2d485fe4e047eec99e48a59392e785abf3 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Date: Wed, 20 Oct 2021 11:36:10 +0530 Subject: [PATCH] Fix RDA8910 image generation on MacOS Signed-off-by: Ajay Bhargav --- builder/framework/rda8910/logicromsdk.py | 46 +++++++++++++++++++++--- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/builder/framework/rda8910/logicromsdk.py b/builder/framework/rda8910/logicromsdk.py index ec20e5f..9950b74 100644 --- a/builder/framework/rda8910/logicromsdk.py +++ b/builder/framework/rda8910/logicromsdk.py @@ -3,9 +3,10 @@ # SPDX-License-Identifier: MIT # -from os.path import isdir, isfile, join +from os.path import getsize, isdir, isfile, join from shutil import copyfile import json +from zlib import crc32 from platformio.util import get_systype from SCons.Script import DefaultEnvironment @@ -57,14 +58,49 @@ if (False == isfile(main_c)) and (False == isfile(main_cpp)): copyfile(join(FRAMEWORK_DIR, "template", "main.c"), main_c) + +def gen_img_file(target, source, env): + cmd = ["$OBJCOPY"] + (target_firm, ) = target + (source_elf, ) = source + + target_img = env.subst("$BUILD_DIR/$PROGNAME") + '.img' + + cmd.extend(["-O", "binary"]) + cmd.append(source_elf.get_abspath()) + cmd.append(target_img) + env.Execute(env.VerboseAction(" ".join(cmd), " ")) + + # fix bin size to 0x80 boundary + binsz = getsize(target_img) + f_binsz = (binsz + 0x7F) & ~0x7F + print("Binary size: %d" % binsz) + f = open(target_img, "rb") + f_bin = bytearray(f.read()) + f.close() + f_bin += bytes(f_binsz - binsz) + # Fix header size + f_bin[4:8] = f_binsz.to_bytes(4, "little") + # Fix checksum + f_bin[8:0xC] = crc32(f_bin).to_bytes(4, "little") + # write final binary + f = open(target_img, "wb") + f.write(f_bin) + f.close() + def gen_pac_file(target, source, env): (target_firm, ) = target (source_elf, ) = source + # Generate image file - env.Execute( - env.VerboseAction("$MKIMAGE " + source_elf.get_abspath() + ' "$BUILD_DIR/$PROGNAME"' + '.img', - "Generating Firmware Image") - ) + if "darwin" in get_systype(): + print("Generating Firmware Image") + gen_img_file(target, source, env) + else: + env.Execute( + env.VerboseAction("$MKIMAGE " + source_elf.get_abspath() + ' "$BUILD_DIR/$PROGNAME"' + '.img', + "Generating Firmware Image") + ) # Generate pac file init_fdl = [