diff options
author | Jonathan Liu <net147@gmail.com> | 2013-07-10 03:19:45 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-07-13 18:23:33 +0100 |
commit | b52d2bb46ed7c893077ccf9e5a83dc7f11c7f61b (patch) | |
tree | d09c22794d2a190eab85e3b51029ba5453948fe5 | |
parent | f9625c227f8d0d35d9f722a3570e82896c2a975c (diff) | |
download | ast2050-yocto-poky-b52d2bb46ed7c893077ccf9e5a83dc7f11c7f61b.zip ast2050-yocto-poky-b52d2bb46ed7c893077ccf9e5a83dc7f11c7f61b.tar.gz |
boot-directdisk: allow specifying custom MBR disk signature
This introduces a DISK_SIGNATURE variable that allows controlling the
32-bit MBR disk signature. By default it is set to an automatically
generated disk signature but it may by overridden in the image recipe
by setting DISK_SIGNATURE to a 8 digit hex string.
This DISK_SIGNATURE variable can also be used in the image recipe to
specify the root by UUID using:
SYSLINUX_ROOT = "root=PARTUUID=${DISK_SIGNATURE}-02"
Specifying the root by UUID allows the kernel to locate the root
filesystem even if the device name changes (e.g. /dev/hda2, /dev/hdb2 or
/dev/sdb2 instead of /dev/sda2) due to differences in hardware
configuration.
(From OE-Core rev: 4382a419b4c90312d22aa55ff535b45bcf704716)
Signed-off-by: Jonathan Liu <net147@gmail.com>
Acked-by: Darren hart <dvhart@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/boot-directdisk.bbclass | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/meta/classes/boot-directdisk.bbclass b/meta/classes/boot-directdisk.bbclass index 3169043..182957b 100644 --- a/meta/classes/boot-directdisk.bbclass +++ b/meta/classes/boot-directdisk.bbclass @@ -34,6 +34,7 @@ BOOTDD_EXTRA_SPACE ?= "16384" # Get the build_syslinux_cfg() function from the syslinux class AUTO_SYSLINUXCFG = "1" +DISK_SIGNATURE ?= "${DISK_SIGNATURE_GENERATED}" SYSLINUX_ROOT ?= "root=/dev/sda2" SYSLINUX_TIMEOUT ?= "10" @@ -80,6 +81,9 @@ build_boot_dd() { parted $IMAGE set 1 boot on parted $IMAGE print + echo -ne "$(echo ${DISK_SIGNATURE} | fold -w 2 | tac | paste -sd '' | sed 's/\(..\)/\\x&/g')" | \ + dd of=$IMAGE bs=1 seek=440 conv=notrunc + OFFSET=`expr $END2 / 512` dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512 @@ -91,8 +95,24 @@ build_boot_dd() { } python do_bootdirectdisk() { + validate_disk_signature(d) bb.build.exec_func('build_syslinux_cfg', d) bb.build.exec_func('build_boot_dd', d) } +def generate_disk_signature(): + import uuid + + return str(uuid.uuid4())[:8] + +def validate_disk_signature(d): + import re + + disk_signature = d.getVar("DISK_SIGNATURE", True) + + if not re.match(r'^[0-9a-fA-F]{8}$', disk_signature): + bb.fatal("DISK_SIGNATURE '%s' must be an 8 digit hex string" % disk_signature) + +DISK_SIGNATURE_GENERATED := "${@generate_disk_signature()}" + addtask bootdirectdisk before do_build |