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>
This commit is contained in:
parent
f9625c227f
commit
b52d2bb46e
|
@ -34,6 +34,7 @@ BOOTDD_EXTRA_SPACE ?= "16384"
|
||||||
# Get the build_syslinux_cfg() function from the syslinux class
|
# Get the build_syslinux_cfg() function from the syslinux class
|
||||||
|
|
||||||
AUTO_SYSLINUXCFG = "1"
|
AUTO_SYSLINUXCFG = "1"
|
||||||
|
DISK_SIGNATURE ?= "${DISK_SIGNATURE_GENERATED}"
|
||||||
SYSLINUX_ROOT ?= "root=/dev/sda2"
|
SYSLINUX_ROOT ?= "root=/dev/sda2"
|
||||||
SYSLINUX_TIMEOUT ?= "10"
|
SYSLINUX_TIMEOUT ?= "10"
|
||||||
|
|
||||||
|
@ -80,6 +81,9 @@ build_boot_dd() {
|
||||||
parted $IMAGE set 1 boot on
|
parted $IMAGE set 1 boot on
|
||||||
parted $IMAGE print
|
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`
|
OFFSET=`expr $END2 / 512`
|
||||||
dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc
|
dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc
|
||||||
dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512
|
dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512
|
||||||
|
@ -91,8 +95,24 @@ build_boot_dd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
python do_bootdirectdisk() {
|
python do_bootdirectdisk() {
|
||||||
|
validate_disk_signature(d)
|
||||||
bb.build.exec_func('build_syslinux_cfg', d)
|
bb.build.exec_func('build_syslinux_cfg', d)
|
||||||
bb.build.exec_func('build_boot_dd', 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
|
addtask bootdirectdisk before do_build
|
||||||
|
|
Loading…
Reference in New Issue