]> code.ossystems Code Review - openembedded-core.git/commitdiff
wic: rewrite MBR disk identifier
authorEd Bartosh <ed.bartosh@linux.intel.com>
Thu, 6 Oct 2016 10:33:37 +0000 (13:33 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 7 Oct 2016 15:43:50 +0000 (16:43 +0100)
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.

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
scripts/lib/wic/imager/direct.py
scripts/lib/wic/utils/partitionedfs.py

index 123a07817beb3702956f20bd3ace602e16252ef1..edf5e5d2214f8e78b6c2a98d7f6cd45fcc0065c4 100644 (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()
 
index 8d93a68e3a410e547cd5d32eded548598ea56b25..cb03009fc7e3c97305079629ded7d2ff01eba4c4 100644 (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: