提交 2d26003d 编写于 作者: S Simon Glass

binman: Support locating an image header

Add support for locating an image header in an image.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 e1925fa5
......@@ -15,6 +15,29 @@ from entry import Entry
import fdt_util
IMAGE_HEADER_MAGIC = b'BinM'
IMAGE_HEADER_LEN = 8
def LocateHeaderOffset(data):
"""Search an image for an image header
Args:
data: Data to search
Returns:
Offset of image header in the image, or None if not found
"""
hdr_pos = data.find(IMAGE_HEADER_MAGIC)
if hdr_pos != -1:
size = len(data)
hdr = data[hdr_pos:hdr_pos + IMAGE_HEADER_LEN]
if len(hdr) == IMAGE_HEADER_LEN:
offset = struct.unpack('<I', hdr[4:])[0]
if hdr_pos == len(data) - IMAGE_HEADER_LEN:
pos = size + offset - (1 << 32)
else:
pos = offset
return pos
return None
class Entry_image_header(Entry):
"""An entry which contains a pointer to the FDT map
......
......@@ -25,6 +25,7 @@ import control
import elf
import fdt
from etype import fdtmap
from etype import image_header
import fdt_util
import fmap_util
import test_util
......@@ -2282,6 +2283,32 @@ class TestFunctional(unittest.TestCase):
data = self._DoReadFile('005_simple.dts')
self.assertEqual(None, fdtmap.LocateFdtmap(data))
def testFindImageHeader(self):
"""Test locating a image header"""
self._CheckLz4()
data = self._DoReadFileDtb('128_decode_image.dts', use_real_dtb=True,
update_dtb=True)[0]
image = control.images['image']
entries = image.GetEntries()
entry = entries['fdtmap']
# The header should point to the FDT map
self.assertEqual(entry.image_pos, image_header.LocateHeaderOffset(data))
def testFindImageHeaderStart(self):
"""Test locating a image header located at the start of an image"""
data = self._DoReadFileDtb('117_fdtmap_hdr_start.dts',
use_real_dtb=True, update_dtb=True)[0]
image = control.images['image']
entries = image.GetEntries()
entry = entries['fdtmap']
# The header should point to the FDT map
self.assertEqual(entry.image_pos, image_header.LocateHeaderOffset(data))
def testFindImageHeaderMissing(self):
"""Test failing to locate an image header"""
data = self._DoReadFile('005_simple.dts')
self.assertEqual(None, image_header.LocateHeaderOffset(data))
if __name__ == "__main__":
unittest.main()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册