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
|
||||
endif
|
||||
|
||||
ALL-$(CONFIG_MBN_HEADER) += u-boot.mbn
|
||||
# enable combined SPL/u-boot/dtb rules for tegra
|
||||
ifneq ($(CONFIG_TEGRA),)
|
||||
ifeq ($(CONFIG_SPL),y)
|
||||
|
|
@ -877,6 +878,12 @@ u-boot.bin: u-boot FORCE
|
|||
$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
|
||||
$(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
|
||||
$(CREATE_LDR_ENV)
|
||||
$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@
|
|||
#define CONFIG_BOOTARGS "console=ttyMSM0,115200n8"
|
||||
#define CONFIG_SYS_HUSH_PARSER
|
||||
|
||||
#define CONFIG_MBN_HEADER
|
||||
#define CONFIG_IPQ_APPSBL_IMG_TYPE 0x5
|
||||
|
||||
#undef CONFIG_IPQ806X_USB
|
||||
#ifdef CONFIG_IPQ806X_USB
|
||||
#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