You-Cheng Syu has uploaded this change for review.

View Change

util/mtkheader: Add a tool to extract bootload header from binary files.

Add a tool, extract-bl-img.py, which can extract MTK bootload header
from binary files. This could be useful for boards (e.g., Kukui) which
put the bootblock in other places (e.g., Chrome EC).

Change-Id: Ib744c80bdc2adfe27d4287365e161096e3fe08c7
Signed-off-by: You-Cheng Syu <youcheng@google.com>
---
A util/mtkheader/extract-bl-img.py
1 file changed, 55 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/33/32333/1
diff --git a/util/mtkheader/extract-bl-img.py b/util/mtkheader/extract-bl-img.py
new file mode 100755
index 0000000..21bf9eb
--- /dev/null
+++ b/util/mtkheader/extract-bl-img.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+# This file is part of the coreboot project.
+#
+# Copyright 2019 Google LLC
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# 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 argparse
+import struct
+import sys
+
+
+_DESCRIPTION = 'Extract MTK bootload header from a binary file.'
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(description=_DESCRIPTION)
+ parser.add_argument('input_path', metavar='INPUT_FILE')
+ parser.add_argument('output_path', metavar='OUTPUT_FILE')
+ return parser.parse_args()
+
+
+def main():
+ args = parse_args()
+
+ with open(args.input_path, 'rb') as f:
+ data = f.read()
+
+ header = struct.pack('<8sII', 'BRLYT', 1, 2048)
+
+ start = -1
+ while True:
+ start = data.find(header, start + 1)
+ if start < 0:
+ raise RuntimeError('Cannot find MTK bootload header')
+ offset = start + len(header)
+ buf = struct.unpack('<II', data[offset:offset+8])
+ if buf[1] == 0x42424242:
+ break
+ size = buf[0]
+ offset = start - 512
+
+ with open(args.output_path, 'wb') as f:
+ f.write(data[offset:offset+size])
+
+
+if __name__ == '__main__':
+ main()

To view, visit change 32333. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ib744c80bdc2adfe27d4287365e161096e3fe08c7
Gerrit-Change-Number: 32333
Gerrit-PatchSet: 1
Gerrit-Owner: You-Cheng Syu <youcheng@google.com>
Gerrit-MessageType: newchange