Pull request #82: Feat/swupdate uboot ebg updater

Merge in ICO/coreos from feat/swupdate-uboot-ebg-updater to master

* commit '2adfda1626a0f5c7d3be011a6be14eb0b715b594':
  feat(wks): rename partition
  feat(cn9130-cf-pro): add u-boot update functionality to swupdate
  feat(coreos-image-swupdate.bbclass): add a way to dynamically extends the sw-description files
  feat(swupdate): add efibootguard update support
This commit is contained in:
Samuel Dolt 2023-05-31 09:53:53 +02:00
commit 3a59ba4d6c
15 changed files with 146 additions and 67 deletions

View File

@ -63,6 +63,11 @@ machine.
Firmware requirements Firmware requirements
--------------------- ---------------------
.. warning::
CoreOS support at the moment only hardware that contains a block storage
device (SD Card, eMMC, ...) formatted with GPT. MBR disk or MTD device are
not supported.
ARM32 / AArch32 based machine ARM32 / AArch32 based machine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -70,10 +75,7 @@ ARM32 / AArch32 based machine
The firmware for ARM32 should implement a subset of the UEFI specification, as The firmware for ARM32 should implement a subset of the UEFI specification, as
defined by the EBBR Specification. As this architecure is used on old hardware, defined by the EBBR Specification. As this architecure is used on old hardware,
it's ok to use the part of the specification that are marked as deprecated or it's ok to use the part of the specification that are marked as deprecated or
legacy like: legacy.
- MBR partitionning instead of GPT
- Fixed offsets to firmware data
We require the firmware to provide a DeviceTree based system description and not We require the firmware to provide a DeviceTree based system description and not
an ACPI based table (as allowed by the specification). an ACPI based table (as allowed by the specification).

View File

@ -59,12 +59,5 @@ QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port
# No watchdog available yet # No watchdog available yet
EFIBOOTGUARD_TIMEOUT ?= "0" EFIBOOTGUARD_TIMEOUT ?= "0"
# MBR disk can't select the root device by partition label as MBR doesn't have
# a partition label. Using filesystem label only work with an initramfs and we
# don't support it yet.
COREOS_PLATFORM0_ROOT ?= "/dev/mmcblk0p3"
COREOS_PLATFORM1_ROOT ?= "/dev/mmcblk0p4"
require conf/machine/include/coreos-generic-features/efi.inc require conf/machine/include/coreos-generic-features/efi.inc
require conf/machine/include/coreos-generic-features/legacy-mbr-disk.inc
require conf/machine/include/coreos-generic-features/emmc.inc require conf/machine/include/coreos-generic-features/emmc.inc

View File

@ -8,7 +8,7 @@ do_image_wic[depends] += "efibootguard-native:do_populate_sysroot efibootguard:d
# Variable used in WKS file # Variable used in WKS file
WKS_PART_EFI ??= 'part --source efibootguard-efi --label efi --align 1024 --part-type=EF00' WKS_PART_EFI ??= 'part --source efibootguard-efi --label efi --align 1024 --part-type=EF00'
WKS_PART_ROOT_A ??= 'part / --source rootfs --fstype=ext4 --label platform0 --align 1024' WKS_PART_ROOT_A ??= 'part / --source rootfs --fstype=ext4 --label rootfs0 --align 1024'
WKS_PART_ROOT_B ??= 'part --fstype=ext4 --label platform1 --align 1024' WKS_PART_ROOT_B ??= 'part --fstype=ext4 --label rootfs1 --align 1024'
WKS_PART_EFIBOOTGUARD_A ??= 'part --source efibootguard-boot --label boot0 --align 1024 --part-type=0700 --sourceparams "watchdog=${EFIBOOTGUARD_TIMEOUT},revision=2,kernel=kernel0-${MACHINE}.efi;KERNEL0.EFI"' WKS_PART_EFIBOOTGUARD_A ??= 'part --source efibootguard-boot --label ebg0 --align 1024 --part-type=0700 --sourceparams "watchdog=${EFIBOOTGUARD_TIMEOUT},revision=2,kernel=kernel0-${MACHINE}.efi;KERNEL.EFI"'
WKS_PART_EFIBOOTGUARD_B ??= 'part --source efibootguard-boot --label boot1 --align 1024 --part-type=0700 --sourceparams "watchdog=${EFIBOOTGUARD_TIMEOUT},revision=1,kernel=kernel1-${MACHINE}.efi;KERNEL1.EFI"' WKS_PART_EFIBOOTGUARD_B ??= 'part --source efibootguard-boot --label ebg1 --align 1024 --part-type=0700 --sourceparams "watchdog=${EFIBOOTGUARD_TIMEOUT},revision=1,kernel=kernel1-${MACHINE}.efi;KERNEL.EFI"'

View File

@ -1,19 +0,0 @@
# MBR disk are still supported by CoreOS, but only for legacy product
# This ensure that efibootguard / swupdate work with MBR disk
# Do not include this file in a machine configuration if the machine support
# a GPT disk instead
COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY ?= "/dev/disk/by-label"
# MBR can't disk can't use partition label, but may use filesystem label
# This will only work with an initramfs. If no initramfs is used, this will
# have to be set to the right disk device inside the machine configuration
# like that COREOS_PLATFORMx_ROOT = "/dev/mmcblk<DISK>p<PART>"
COREOS_PLATFORM0_ROOT ?= "LABEL=platform0"
COREOS_PLATFORM1_ROOT ?= "LABEL=platform1"
# MBR disk can't use --part-type but can use system-id
WKS_PART_EFI ?= 'part --source efibootguard-efi --label efi --system-id 0xef'
WKS_PART_EFIBOOTGUARD_A ?= 'part --source efibootguard-boot --label boot0 --sourceparams "watchdog=${EFIBOOTGUARD_TIMEOUT},revision=2,kernel=kernel0-${MACHINE}.efi;KERNEL0.EFI"'
WKS_PART_EFIBOOTGUARD_B ?= 'part --source efibootguard-boot --label boot1 --sourceparams "watchdog=${EFIBOOTGUARD_TIMEOUT},revision=1,kernel=kernel1-${MACHINE}.efi;KERNEL1.EFI"'

View File

@ -1,11 +1,20 @@
# short-description: Create SD card image for Beaglebone # short-description: Create SD card image for Beaglebone
# long-description: Creates a partitioned SD card image for Beaglebone. # long-description: Creates a partitioned SD card image for Beaglebone.
# Boot files are located in the first vfat partition.
part --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4 --size 32M --extra-space 0 --overhead-factor 1 # offset 1S => 1 sector (1x512 byte)
${WKS_PART_EFI} --ondisk mmcblk0 --align 1024 --size 32M --extra-space 0 --overhead-factor 1 # The bootloader can be at 4 different position in raw mode: 0S, 256S, 512S, 768S
${WKS_PART_ROOT_A} --ondisk mmcblk0 --size 2G --extra-space 0 --overhead-factor 1 # MBR disk use only the sector 0, so 1S is free
${WKS_PART_ROOT_B} --ondisk mmcblk0 --size 2G --extra-space 0 --overhead-factor 1 # GPT disk use sector 0-33S, so first free slot is 256S
# Offset are from the BBB default settings
part --offset 256S --source rawcopy --sourceparams="file=MLO" --ondisk mmcblk0
part --offset 768S --source rawcopy --sourceparams="file=u-boot.img" --ondisk mmcblk0
# Let's define a 4MiB maximum size for the bootloader
# 4MiB => 4*1024*1024/512=8192S | 768S + 8192S => 8960S
${WKS_PART_EFI} --ondisk mmcblk0 --offset 8960S --align 1024 --size 32M --extra-space 0 --overhead-factor 1
${WKS_PART_ROOT_A} --ondisk mmcblk0 --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1
${WKS_PART_ROOT_B} --ondisk mmcblk0 --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1
${WKS_PART_EFIBOOTGUARD_A} --ondisk mmcblk0 --align 1024 --size 128M --extra-space 0 --overhead-factor 1 ${WKS_PART_EFIBOOTGUARD_A} --ondisk mmcblk0 --align 1024 --size 128M --extra-space 0 --overhead-factor 1
${WKS_PART_EFIBOOTGUARD_B} --ondisk mmcblk0 --align 1024 --size 128M --extra-space 0 --overhead-factor 1 ${WKS_PART_EFIBOOTGUARD_B} --ondisk mmcblk0 --align 1024 --size 128M --extra-space 0 --overhead-factor 1
bootloader --ptable msdos bootloader --ptable gpt

View File

@ -7,9 +7,6 @@
# Swupdate image generation # Swupdate image generation
# ============================================================================== # ==============================================================================
# Machine using MBR override this value, see legacy-mbr-disk.inc
COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY ??= "/dev/disk/by-partlabel"
IMAGE_FSTYPES:append = " ext4.zst" IMAGE_FSTYPES:append = " ext4.zst"
python () { python () {
image = d.getVar('IMAGE_BASENAME') image = d.getVar('IMAGE_BASENAME')
@ -19,9 +16,14 @@ python () {
inherit swupdate-image inherit swupdate-image
# Ensure than variable used in the sw-description files are watched for change # Ensure than variable used in the sw-description files are watched for change
do_swuimage[vardeps] += "COREOS_KERNEL0_FILENAME COREOS_KERNEL1_FILENAME EFIBOOTGUARD_TIMEOUT COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY APPEND" do_swuimage[vardeps] += "COREOS_KERNEL0_FILENAME COREOS_KERNEL1_FILENAME EFIBOOTGUARD_TIMEOUT EFIDIR EFI_BOOT_IMAGE COREOS_EFIBOOTGUARD_FILENAME"
do_swuimage[deptask] += "do_bundle_uki" do_swuimage[deptask] += "do_bundle_uki"
SWUPDATE_IMAGES += "${COREOS_KERNEL0_NAME} ${COREOS_KERNEL1_NAME}"
COREOS_EFIBOOTGUARD_NAME ?= "efibootguard${EFI_ARCH}"
COREOS_EFIBOOTGUARD_EXT ?= ".efi"
COREOS_EFIBOOTGUARD_FILENAME = "${COREOS_EFIBOOTGUARD_NAME}${COREOS_EFIBOOTGUARD_EXT}"
SWUPDATE_IMAGES += "${COREOS_KERNEL0_NAME} ${COREOS_KERNEL1_NAME} ${COREOS_EFIBOOTGUARD_NAME}"
python () { python () {
kernel0 = d.getVar('COREOS_KERNEL0_NAME') kernel0 = d.getVar('COREOS_KERNEL0_NAME')
@ -29,6 +31,45 @@ python () {
kernelext = d.getVar('COREOS_KERNEL_EXT') kernelext = d.getVar('COREOS_KERNEL_EXT')
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", kernel0, kernelext) d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", kernel0, kernelext)
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", kernel1, kernelext) d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", kernel1, kernelext)
efibootguard = d.getVar('COREOS_EFIBOOTGUARD_NAME')
efibootguardext = d.getVar('COREOS_EFIBOOTGUARD_EXT')
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", efibootguard, efibootguardext)
} }
FILESEXTRAPATHS:append := ":${COREOS_ROOT}/layers/meta-belden-coreos/files" FILESEXTRAPATHS:append := ":${COREOS_ROOT}/layers/meta-belden-coreos/files"
# Space seperated list of extension points
COREOS_SWUPDATE_EXTENDS_FOR ??= ""
def coreos_swupdate_extends(d, s, key):
"""
Extends the swupdate for each extension points defined by COREOS_SWUPDATE_EXTENDS_FOR
"""
extends_for = d.getVar('COREOS_SWUPDATE_EXTENDS_FOR', True).replace("-", "_").split()
def kv_to_sw_description(kv):
swdescr = ",{\n"
for key, value in kv.items():
swdescr += f'{key} = "{value}";\n'
swdescr += "}\n"
return swdescr
text = ""
# BSP and Distro can extends the swupdate by implementing some python
# function that return a list of dictionary.
for extension_point in extends_for:
try:
kv_list = globals()[f"coreos_swupdate_extends_{key}_for_{extension_point}"](d,s)
except KeyError:
# Don't fail if the extension is not implemented
pass
else:
for kv in kv_list:
text += kv_to_sw_description(kv)
return text
COREOS_IMAGE_SWUPDATE_EXTRACLASSES ?= ""
inherit ${COREOS_IMAGE_SWUPDATE_EXTRACLASSES}

View File

@ -21,10 +21,10 @@ COREOS_KERNEL1 ??= "${DEPLOY_DIR_IMAGE}/${COREOS_KERNEL1_FILENAME}"
# ============================================================================== # ==============================================================================
APPEND += "rootwait " APPEND += "rootwait "
COREOS_PLATFORM0_ROOT ??= "PARTLABEL=platform0" COREOS_ROOTFS0_ROOT ??= "PARTLABEL=rootfs0"
COREOS_PLATFORM1_ROOT ??= "PARTLABEL=platform1" COREOS_ROOTFS1_ROOT ??= "PARTLABEL=rootfs1"
COREOS_KERNEL0_CMDLINE ??= "root=${COREOS_PLATFORM0_ROOT} ${APPEND}" COREOS_KERNEL0_CMDLINE ??= "root=${COREOS_ROOTFS0_ROOT} ${APPEND}"
COREOS_KERNEL1_CMDLINE ??= "root=${COREOS_PLATFORM1_ROOT} ${APPEND}" COREOS_KERNEL1_CMDLINE ??= "root=${COREOS_ROOTFS1_ROOT} ${APPEND}"
COREOS_UKI_PART_KERNEL_FILENAME ??= "${KERNEL_IMAGETYPE}-${MACHINE}${KERNEL_IMAGE_BIN_EXT}" COREOS_UKI_PART_KERNEL_FILENAME ??= "${KERNEL_IMAGETYPE}-${MACHINE}${KERNEL_IMAGE_BIN_EXT}"
COREOS_UKI_PART_KERNEL ??= "${DEPLOY_DIR_IMAGE}/${COREOS_UKI_PART_KERNEL_FILENAME}" COREOS_UKI_PART_KERNEL ??= "${DEPLOY_DIR_IMAGE}/${COREOS_UKI_PART_KERNEL_FILENAME}"

View File

@ -24,6 +24,7 @@ FEATURE_PACKAGES_cockpit = "packagegroup-coreos-cockpit ${@get_feature_packages_
# *-dev-tools FEATURES_PACKAGES for any image features # *-dev-tools FEATURES_PACKAGES for any image features
FEATURE_PACKAGES_dev-tools = "${@get_feature_packages_with_suffix('dev-tools', d)}" FEATURE_PACKAGES_dev-tools = "${@get_feature_packages_with_suffix('dev-tools', d)}"
def get_feature_packages_with_suffix(suffix, d): def get_feature_packages_with_suffix(suffix, d):
""" """
For each feature inside IMAGE_FEATURES, look if a FEATURE_PACKAGE variable For each feature inside IMAGE_FEATURES, look if a FEATURE_PACKAGE variable

View File

@ -12,26 +12,39 @@ software =
installed-directly = true; installed-directly = true;
# partlabel are stored inside the GPT partition table. # partlabel are stored inside the GPT partition table.
# The partition table is flashed only once and never updated # The partition table is flashed only once and never updated
device = "@@COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY@@/platform0"; device = "/dev/disk/by-partlabel/rootfs0";
type = "raw"; type = "raw";
sha256 = "$swupdate_get_sha256(@@PN@@-@@MACHINE@@.ext4.zst)"; sha256 = "$swupdate_get_sha256(@@PN@@-@@MACHINE@@.ext4.zst)";
} }
# Don't remove the trailing whitspace on the next line otherwise
# it will not work due to a regex bug in meta-swupdate
$coreos_swupdate_extends(images)
); );
files: ( files: (
{ {
filename = "@@COREOS_KERNEL0_FILENAME@@"; filename = "@@COREOS_KERNEL0_FILENAME@@";
path = "/KERNEL.EFI"; path = "/KERNEL.EFI";
device = "@@COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY@@/boot0"; device = "/dev/disk/by-partlabel/ebg0";
filesystem = "vfat"; filesystem = "vfat";
sha256 = "$swupdate_get_sha256(@@COREOS_KERNEL0_FILENAME@@)"; sha256 = "$swupdate_get_sha256(@@COREOS_KERNEL0_FILENAME@@)";
},
{
filename = "@@COREOS_EFIBOOTGUARD_FILENAME@@";
path = "@@EFIDIR@@/@@EFI_BOOT_IMAGE@@";
device = "/dev/disk/by-partlabel/efi";
filesystem = "vfat";
sha256 = "$swupdate_get_sha256(@@COREOS_EFIBOOTGUARD_FILENAME@@)";
} }
# Don't remove the trailing whitspace on the next line otherwise
# it will not work due to a regex bug in meta-swupdate
$coreos_swupdate_extends(files)
); );
bootenv: ( bootenv: (
{ {
name = "kernelparams"; name = "kernelparams";
value = "root=PARTLABEL=platform0 @@APPEND@@"; value = "";
}, },
{ {
name = "watchdog_timeout_sec"; name = "watchdog_timeout_sec";
@ -39,9 +52,12 @@ software =
}, },
{ {
name = "kernelfile"; name = "kernelfile";
value = "C:BOOT0:KERNEL.EFI"; value = "C:EBG0:KERNEL.EFI";
} }
# Don't remove the trailing whitspace on the next line otherwise
# it will not work due to a regex bug in meta-swupdate
$coreos_swupdate_extends(bootenv)
); );
} }
@ -53,25 +69,38 @@ software =
installed-directly = true; installed-directly = true;
# partlabel are stored inside the GPT partition table. # partlabel are stored inside the GPT partition table.
# The partition table is flashed only once and never updated # The partition table is flashed only once and never updated
device = "@@COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY@@/platform1"; device = "/dev/disk/by-partlabel/rootfs1";
type = "raw"; type = "raw";
sha256 = "$swupdate_get_sha256(@@PN@@-@@MACHINE@@.ext4.zst)"; sha256 = "$swupdate_get_sha256(@@PN@@-@@MACHINE@@.ext4.zst)";
} }
# Don't remove the trailing whitspace on the next line otherwise
# it will not work due to a regex bug in meta-swupdate
$coreos_swupdate_extends(images)
); );
files: ( files: (
{ {
filename = "@@COREOS_KERNEL1_FILENAME@@"; filename = "@@COREOS_KERNEL1_FILENAME@@";
path = "/KERNEL.EFI"; path = "/KERNEL.EFI";
device = "@@COREOS_DISK_PARTLABEL_LOOKUP_DIRECTORY@@/boot1"; device = "/dev/disk/by-partlabel/ebg1";
filesystem = "vfat"; filesystem = "vfat";
sha256 = "$swupdate_get_sha256(@@COREOS_KERNEL1_FILENAME@@)"; sha256 = "$swupdate_get_sha256(@@COREOS_KERNEL1_FILENAME@@)";
},
{
filename = "@@COREOS_EFIBOOTGUARD_FILENAME@@";
path = "@@EFIDIR@@/@@EFI_BOOT_IMAGE@@";
device = "/dev/disk/by-partlabel/efi";
filesystem = "vfat";
sha256 = "$swupdate_get_sha256(@@COREOS_EFIBOOTGUARD_FILENAME@@)";
} }
# Don't remove the trailing whitspace on the next line otherwise
# it will not work due to a regex bug in meta-swupdate
$coreos_swupdate_extends(files)
); );
bootenv: ( bootenv: (
{ {
name = "kernelparams"; name = "kernelparams";
value = "root=PARTLABEL=platform1 @@APPEND@@"; value = "";
}, },
{ {
name = "watchdog_timeout_sec"; name = "watchdog_timeout_sec";
@ -79,9 +108,12 @@ software =
}, },
{ {
name = "kernelfile"; name = "kernelfile";
value = "C:BOOT1:KERNEL.EFI"; value = "C:EBG1:KERNEL.EFI";
} }
# Don't remove the trailing whitspace on the next line otherwise
# it will not work due to a regex bug in meta-swupdate
$coreos_swupdate_extends(bootenv)
); );
} }
} }

View File

@ -278,7 +278,7 @@ def efibootguard_generate_uki(args, config, basepath, workspace):
cmdline=rd.getVar("COREOS_KERNEL0_CMDLINE"), cmdline=rd.getVar("COREOS_KERNEL0_CMDLINE"),
dtb=dtb, dtb=dtb,
stub=stub, stub=stub,
root=rd.getVar("COREOS_PLATFORM0_ROOT"), root=rd.getVar("COREOS_ROOTFS0_ROOT"),
build_binary=build_binary, build_binary=build_binary,
keydir=keydir, keydir=keydir,
) )
@ -288,7 +288,7 @@ def efibootguard_generate_uki(args, config, basepath, workspace):
cmdline=rd.getVar("COREOS_KERNEL1_CMDLINE"), cmdline=rd.getVar("COREOS_KERNEL1_CMDLINE"),
dtb=dtb, dtb=dtb,
stub=stub, stub=stub,
root=rd.getVar("COREOS_PLATFORM1_ROOT"), root=rd.getVar("COREOS_ROOTFS1_ROOT"),
build_binary=build_binary, build_binary=build_binary,
keydir=keydir, keydir=keydir,
) )

View File

@ -17,18 +17,18 @@ echo "Root partition is on device ${DISK_DEVICE_NAME} - type ${DISK_PARTITION_TY
if [ "${DISK_PARTITION_TYPE}" == "gpt" ]; then if [ "${DISK_PARTITION_TYPE}" == "gpt" ]; then
ROOT_PARTLABEL=$(lsblk -dno PARTLABEL "${ROOT_PART}") ROOT_PARTLABEL=$(lsblk -dno PARTLABEL "${ROOT_PART}")
else else
echo "Using MBR disk is less reliable than GPT disk!" echo "Using MBR is not supported"
ROOT_PARTLABEL=$(lsblk -dno LABEL "${ROOT_PART}") exit 1
fi fi
echo "Root partition label is ${ROOT_PARTLABEL}" echo "Root partition label is ${ROOT_PARTLABEL}"
case $ROOT_PARTLABEL in case $ROOT_PARTLABEL in
platform0 ) rootfs0 )
echo "We are running copy0 -> Use copy1 in the SWU file" echo "We are running copy0 -> Use copy1 in the SWU file"
SWUPDATE_ARGS="${SWUPDATE_ARGS} -e stable,copy1" SWUPDATE_ARGS="${SWUPDATE_ARGS} -e stable,copy1"
;; ;;
platform1 ) rootfs1 )
echo "We are running copy1 -> Use copy0 in the SWU file" echo "We are running copy1 -> Use copy0 in the SWU file"
SWUPDATE_ARGS="${SWUPDATE_ARGS} -e stable,copy0" SWUPDATE_ARGS="${SWUPDATE_ARGS} -e stable,copy0"
;; ;;

View File

@ -33,4 +33,4 @@ do_install:append() {
echo "${MACHINE} 1.0" > ${D}${SWUPDATE_HW_COMPATIBILITY_FILE} echo "${MACHINE} 1.0" > ${D}${SWUPDATE_HW_COMPATIBILITY_FILE}
} }
PR = "r1" PR = "r2"

View File

@ -0,0 +1,20 @@
SWUPDATE_IMAGES += "flash-image"
SWUPDATE_IMAGES_FSTYPES[flash-image] = ".bin"
COREOS_SWUPDATE_EXTENDS_FOR:append = "cn913x"
def coreos_swupdate_extends_images_for_cn913x(d,s):
boot0 = {
"filename" : "flash-image.bin",
"installed-directly" : "true",
"device" : "/dev/disk/by-partlabel/fw0",
"type" : "raw",
"sha256" : swupdate_get_sha256(d, s, "flash-image.bin"),
}
boot1 = boot0.copy()
boot1["device"] = "/dev/disk/by-partlabel/fw1"
return [boot0, boot1]

View File

@ -54,6 +54,7 @@ WKS_FILE = "cn913x-sdcard.wks.in"
IMAGE_FSTYPES += "wic.xz wic.bmap" IMAGE_FSTYPES += "wic.xz wic.bmap"
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += " kernel-modules kernel-devicetree" MACHINE_ESSENTIAL_EXTRA_RDEPENDS += " kernel-modules kernel-devicetree"
COREOS_IMAGE_SWUPDATE_EXTRACLASSES += " coreos-image-swupdate-cn913x"
# No watchdog available yet # No watchdog available yet
EFIBOOTGUARD_TIMEOUT ?= "0" EFIBOOTGUARD_TIMEOUT ?= "0"

View File

@ -8,9 +8,8 @@
# Current bootloader is about 1.8MB, so if we put it at 4096S and 12288S we # Current bootloader is about 1.8MB, so if we put it at 4096S and 12288S we
# have 4MiB between the first bootloader and the second copy of it # have 4MiB between the first bootloader and the second copy of it
# tfa = TrustedFirmware-A part --offset 4096S --source rawcopy --sourceparams="file=flash-image.bin" --ondisk mmcblk1 --size 4M --extra-space 0 --overhead-factor 1 --part-name fw0
part --offset 4096S --source rawcopy --sourceparams="file=flash-image.bin" --ondisk mmcblk1 part --offset 12288S --source rawcopy --sourceparams="file=flash-image.bin" --ondisk mmcblk1 --size 4M --extra-space 0 --overhead-factor 1 --part-name fw1
part --offset 12288S --source rawcopy --sourceparams="file=flash-image.bin" --ondisk mmcblk1
${WKS_PART_EFI} --ondisk mmcblk1 --offset 20480S --size 64M --extra-space 0 --overhead-factor 1 ${WKS_PART_EFI} --ondisk mmcblk1 --offset 20480S --size 64M --extra-space 0 --overhead-factor 1
${WKS_PART_ROOT_A} --ondisk mmcblk1 --size 2G --extra-space 0 --overhead-factor 1 ${WKS_PART_ROOT_A} --ondisk mmcblk1 --size 2G --extra-space 0 --overhead-factor 1