summaryrefslogtreecommitdiffstats
path: root/meta/classes/boot-directdisk.bbclass
diff options
context:
space:
mode:
authorJonathan Liu <net147@gmail.com>2013-07-10 03:19:45 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-07-13 18:23:33 +0100
commitb52d2bb46ed7c893077ccf9e5a83dc7f11c7f61b (patch)
treed09c22794d2a190eab85e3b51029ba5453948fe5 /meta/classes/boot-directdisk.bbclass
parentf9625c227f8d0d35d9f722a3570e82896c2a975c (diff)
downloadpoky-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.bbclass20
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
36AUTO_SYSLINUXCFG = "1" 36AUTO_SYSLINUXCFG = "1"
37DISK_SIGNATURE ?= "${DISK_SIGNATURE_GENERATED}"
37SYSLINUX_ROOT ?= "root=/dev/sda2" 38SYSLINUX_ROOT ?= "root=/dev/sda2"
38SYSLINUX_TIMEOUT ?= "10" 39SYSLINUX_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
93python do_bootdirectdisk() { 97python 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
103def generate_disk_signature():
104 import uuid
105
106 return str(uuid.uuid4())[:8]
107
108def 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
116DISK_SIGNATURE_GENERATED := "${@generate_disk_signature()}"
117
98addtask bootdirectdisk before do_build 118addtask bootdirectdisk before do_build