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 | 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 31690432dd..182957b106 100644 --- a/meta/classes/boot-directdisk.bbclass +++ b/meta/classes/boot-directdisk.bbclass | |||
| @@ -34,6 +34,7 @@ BOOTDD_EXTRA_SPACE ?= "16384" | |||
| 34 | # Get the build_syslinux_cfg() function from the syslinux class | 34 | # Get the build_syslinux_cfg() function from the syslinux class |
| 35 | 35 | ||
| 36 | AUTO_SYSLINUXCFG = "1" | 36 | AUTO_SYSLINUXCFG = "1" |
| 37 | DISK_SIGNATURE ?= "${DISK_SIGNATURE_GENERATED}" | ||
| 37 | SYSLINUX_ROOT ?= "root=/dev/sda2" | 38 | SYSLINUX_ROOT ?= "root=/dev/sda2" |
| 38 | SYSLINUX_TIMEOUT ?= "10" | 39 | SYSLINUX_TIMEOUT ?= "10" |
| 39 | 40 | ||
| @@ -80,6 +81,9 @@ build_boot_dd() { | |||
| 80 | parted $IMAGE set 1 boot on | 81 | parted $IMAGE set 1 boot on |
| 81 | parted $IMAGE print | 82 | parted $IMAGE print |
| 82 | 83 | ||
| 84 | echo -ne "$(echo ${DISK_SIGNATURE} | fold -w 2 | tac | paste -sd '' | sed 's/\(..\)/\\x&/g')" | \ | ||
| 85 | dd of=$IMAGE bs=1 seek=440 conv=notrunc | ||
| 86 | |||
| 83 | OFFSET=`expr $END2 / 512` | 87 | OFFSET=`expr $END2 / 512` |
| 84 | dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc | 88 | dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc |
| 85 | dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512 | 89 | dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512 |
| @@ -91,8 +95,24 @@ build_boot_dd() { | |||
| 91 | } | 95 | } |
| 92 | 96 | ||
| 93 | python do_bootdirectdisk() { | 97 | python do_bootdirectdisk() { |
| 98 | validate_disk_signature(d) | ||
| 94 | bb.build.exec_func('build_syslinux_cfg', d) | 99 | bb.build.exec_func('build_syslinux_cfg', d) |
| 95 | bb.build.exec_func('build_boot_dd', d) | 100 | bb.build.exec_func('build_boot_dd', d) |
| 96 | } | 101 | } |
| 97 | 102 | ||
| 103 | def generate_disk_signature(): | ||
| 104 | import uuid | ||
| 105 | |||
| 106 | return str(uuid.uuid4())[:8] | ||
| 107 | |||
| 108 | def validate_disk_signature(d): | ||
| 109 | import re | ||
| 110 | |||
| 111 | disk_signature = d.getVar("DISK_SIGNATURE", True) | ||
| 112 | |||
| 113 | if not re.match(r'^[0-9a-fA-F]{8}$', disk_signature): | ||
| 114 | bb.fatal("DISK_SIGNATURE '%s' must be an 8 digit hex string" % disk_signature) | ||
| 115 | |||
| 116 | DISK_SIGNATURE_GENERATED := "${@generate_disk_signature()}" | ||
| 117 | |||
| 98 | addtask bootdirectdisk before do_build | 118 | addtask bootdirectdisk before do_build |
