wic: rewrite MBR disk identifier

Disk identifier created by parted doesn't match the one we generated
and used in bootloader config. We need to rewrite it to make our image
bootable.

Modified involved API and data structures to access previously
generated disk identifiers after MBR is initialized. Written disk
identifiers to MBR.

(From OE-Core rev: 221d3bdd6e0ab8a4d25e2c96bd976cbec4e76681)

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ed Bartosh 2016-10-06 13:33:37 +03:00 committed by Richard Purdie
parent 5763d8f9cd
commit 12ea11e4f8
2 changed files with 11 additions and 3 deletions

View File

@ -315,7 +315,7 @@ class DirectImageCreator(BaseImageCreator):
% (disk_name, full_path, disk['min_size']))
disk_obj = DiskImage(full_path, disk['min_size'])
self.__disks[disk_name] = disk_obj
self.__image.add_disk(disk_name, disk_obj)
self.__image.add_disk(disk_name, disk_obj, disk_ids.get(disk_name))
self.__image.create()

View File

@ -68,15 +68,17 @@ class Image():
'offset': 0, # Offset of next partition (in sectors)
# Minimum required disk size to fit all partitions (in bytes)
'min_size': 0,
'ptable_format': "msdos"} # Partition table format
'ptable_format': "msdos", # Partition table format
'identifier': None} # Disk system identifier
def add_disk(self, disk_name, disk_obj):
def add_disk(self, disk_name, disk_obj, identifier):
""" Add a disk object which have to be partitioned. More than one disk
can be added. In case of multiple disks, disk partitions have to be
added for each disk separately with 'add_partition()". """
self.__add_disk(disk_name)
self.disks[disk_name]['disk'] = disk_obj
self.disks[disk_name]['identifier'] = identifier
def __add_partition(self, part):
""" This is a helper function for 'add_partition()' which adds a
@ -245,6 +247,12 @@ class Image():
(disk['disk'].device, disk['ptable_format']),
self.native_sysroot)
if disk['identifier']:
msger.debug("Set disk identifier %x" % disk['identifier'])
with open(disk['disk'].device, 'r+b') as img:
img.seek(0x1B8)
img.write(disk['identifier'].to_bytes(4, 'little'))
msger.debug("Creating partitions")
for part in self.partitions: