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 /meta/classes/boot-directdisk.bbclass | |
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>
Diffstat (limited to 'meta/classes/boot-directdisk.bbclass')
-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 |