mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2025-12-10 07:44:53 +01:00
ipq806x: Creates u-boot.mbn by adding mbn header
Adds support to add mbn header to u-boot.bin as mbn header is needed by sbl of all boards with ipq806x soc. A python script at tools/mkheader.py is included which creates u-boot.mbn from u-boot.bin. Change-Id: I070d82d9af0ed772cd4970b8fde152a8e3068823 Signed-off-by: Gokul Sriram Palanisamy <gpalan@codeaurora.org>
This commit is contained in:
parent
f338b8128a
commit
c5d203be8e
3 changed files with 115 additions and 0 deletions
7
Makefile
7
Makefile
|
|
@ -771,6 +771,7 @@ ifneq ($(BUILD_ROM),)
|
||||||
ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
|
ALL-$(CONFIG_X86_RESET_VECTOR) += u-boot.rom
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ALL-$(CONFIG_MBN_HEADER) += u-boot.mbn
|
||||||
# enable combined SPL/u-boot/dtb rules for tegra
|
# enable combined SPL/u-boot/dtb rules for tegra
|
||||||
ifneq ($(CONFIG_TEGRA),)
|
ifneq ($(CONFIG_TEGRA),)
|
||||||
ifeq ($(CONFIG_SPL),y)
|
ifeq ($(CONFIG_SPL),y)
|
||||||
|
|
@ -877,6 +878,12 @@ u-boot.bin: u-boot FORCE
|
||||||
$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
|
$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
|
||||||
$(BOARD_SIZE_CHECK)
|
$(BOARD_SIZE_CHECK)
|
||||||
|
|
||||||
|
quiet_cmd_mkheader = MKHEADER $@
|
||||||
|
cmd_mkheader = $(PYTHON) tools/mkheader.py $(CONFIG_SYS_TEXT_BASE) $(CONFIG_IPQ_APPSBL_IMG_TYPE) $< $@
|
||||||
|
|
||||||
|
u-boot.mbn: u-boot.bin
|
||||||
|
$(call if_changed,mkheader)
|
||||||
|
|
||||||
u-boot.ldr: u-boot
|
u-boot.ldr: u-boot
|
||||||
$(CREATE_LDR_ENV)
|
$(CREATE_LDR_ENV)
|
||||||
$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
|
$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,9 @@
|
||||||
#define CONFIG_BOOTARGS "console=ttyMSM0,115200n8"
|
#define CONFIG_BOOTARGS "console=ttyMSM0,115200n8"
|
||||||
#define CONFIG_SYS_HUSH_PARSER
|
#define CONFIG_SYS_HUSH_PARSER
|
||||||
|
|
||||||
|
#define CONFIG_MBN_HEADER
|
||||||
|
#define CONFIG_IPQ_APPSBL_IMG_TYPE 0x5
|
||||||
|
|
||||||
#undef CONFIG_IPQ806X_USB
|
#undef CONFIG_IPQ806X_USB
|
||||||
#ifdef CONFIG_IPQ806X_USB
|
#ifdef CONFIG_IPQ806X_USB
|
||||||
#define CONFIG_USB_XHCI
|
#define CONFIG_USB_XHCI
|
||||||
|
|
|
||||||
105
tools/mkheader.py
Executable file
105
tools/mkheader.py
Executable file
|
|
@ -0,0 +1,105 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 and
|
||||||
|
# only version 2 as published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import struct
|
||||||
|
|
||||||
|
def create_header(base, size, img_type):
|
||||||
|
"""Returns a packed MBN header image with the specified base and size.
|
||||||
|
|
||||||
|
@arg base: integer, specifies the image load address in RAM
|
||||||
|
@arg size: integer, specifies the size of the image
|
||||||
|
@arg img_type: integer, specifies the image type
|
||||||
|
@returns: string, the MBN header
|
||||||
|
"""
|
||||||
|
|
||||||
|
header = [
|
||||||
|
img_type, # Type: APPSBL
|
||||||
|
0x3, # Version: 3
|
||||||
|
0x0, # Image source pointer
|
||||||
|
base, # Image destination pointer
|
||||||
|
size, # Code Size + Cert Size + Signature Size
|
||||||
|
size, # Code Size
|
||||||
|
base + size, # Destination + Code Size
|
||||||
|
0x0, # Signature Size
|
||||||
|
base + size, # Destination + Code Size + Signature Size
|
||||||
|
0x0, # Cert Size
|
||||||
|
]
|
||||||
|
|
||||||
|
header_packed = struct.pack('<10I', *header)
|
||||||
|
return header_packed
|
||||||
|
|
||||||
|
def mkheader(base_addr, img_type, infname, outfname):
|
||||||
|
"""Prepends the image with the MBN header.
|
||||||
|
|
||||||
|
@arg base_addr: integer, specifies the image load address in RAM
|
||||||
|
@arg img_type: integer, specifies the image type
|
||||||
|
@arg infname: string, image filename
|
||||||
|
@arg outfname: string, output image with header prepended
|
||||||
|
@raises IOError: if reading/writing input/output file fails
|
||||||
|
"""
|
||||||
|
with open(infname, "rb") as infp:
|
||||||
|
image = infp.read()
|
||||||
|
insize = len(image)
|
||||||
|
|
||||||
|
if base_addr > 0xFFFFFFFF:
|
||||||
|
raise ValueError("invalid base address")
|
||||||
|
|
||||||
|
if base_addr + insize > 0xFFFFFFFF:
|
||||||
|
raise ValueError("invalid destination range")
|
||||||
|
|
||||||
|
header = create_header(base_addr, insize, img_type)
|
||||||
|
with open(outfname, "wb") as outfp:
|
||||||
|
outfp.write(header)
|
||||||
|
outfp.write(image)
|
||||||
|
|
||||||
|
def usage(msg=None):
|
||||||
|
"""Print command usage.
|
||||||
|
|
||||||
|
@arg msg: string, error message if any (default: None)
|
||||||
|
"""
|
||||||
|
if msg != None:
|
||||||
|
sys.stderr.write("mkheader: %s\n" % msg)
|
||||||
|
|
||||||
|
print "Usage: mkheader.py <base-addr> <img_type> <input-file> <output-file>"
|
||||||
|
|
||||||
|
if msg != None:
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Main entry function"""
|
||||||
|
|
||||||
|
if len(sys.argv) != 5:
|
||||||
|
usage("incorrect no. of arguments")
|
||||||
|
|
||||||
|
try:
|
||||||
|
base_addr = int(sys.argv[1], 0)
|
||||||
|
img_type = int(sys.argv[2], 0)
|
||||||
|
infname = sys.argv[3]
|
||||||
|
outfname = sys.argv[4]
|
||||||
|
except ValueError as e:
|
||||||
|
sys.stderr.write("mkheader: invalid base address '%s'\n" % sys.argv[1])
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
mkheader(base_addr, img_type, infname, outfname)
|
||||||
|
except IOError as e:
|
||||||
|
sys.stderr.write("mkheader: %s\n" % e)
|
||||||
|
exit(1)
|
||||||
|
except ValueError as e:
|
||||||
|
sys.stderr.write("mkheader: %s\n" % e)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue