aboutsummaryrefslogtreecommitdiffstats
path: root/meta-arm/classes/uefi_capsule.bbclass
blob: a0709c0fd0153da0a255e9c65c2b81b9a2900bbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# This class generates UEFI capsules
# The current class supports generating a capsule with single firmware binary

IMAGE_TYPES += "uefi_capsule"

# u-boot-tools should be installed in the native sysroot directory
do_image_uefi_capsule[depends] += "u-boot-tools-native:do_populate_sysroot"

# By default the wic image is used to create a capsule
CAPSULE_IMGTYPE ?= "wic"

# IMGDEPLOYDIR is used as the default location of firmware binary for which the capsule needs to be created
CAPSULE_IMGLOCATION ?= "${IMGDEPLOYDIR}"

# The generated capsule by default has uefi.capsule extension
CAPSULE_EXTENSION ?= "uefi.capsule"

# The generated capsule's name by default is the same as UEFI_FIRMWARE_BINARY
CAPSULE_NAME ?= "${UEFI_FIRMWARE_BINARY}"

# The following variables must be set to be able to generate a capsule update
CAPSULE_CERTIFICATE_PATH ?= ""
CAPSULE_FW_VERSION ?= ""
CAPSULE_GUID ?= ""
CAPSULE_INDEX ?= ""
CAPSULE_MONOTONIC_COUNT ?= ""
CAPSULE_PRIVATE_KEY_PATH ?= ""
UEFI_FIRMWARE_BINARY ?= ""

# Check if the required variables are set
python() {
    for var in ["CAPSULE_CERTIFICATE_PATH", "CAPSULE_FW_VERSION", \
                "CAPSULE_GUID", "CAPSULE_INDEX", \
                "CAPSULE_MONOTONIC_COUNT", "CAPSULE_PRIVATE_KEY_PATH", \
                "UEFI_FIRMWARE_BINARY"]:
        if not d.getVar(var):
            raise bb.parse.SkipRecipe(f"{var} not set")
}

IMAGE_CMD:uefi_capsule(){
    mkeficapsule --certificate ${CAPSULE_CERTIFICATE_PATH} \
                 --fw-version ${CAPSULE_FW_VERSION} \
                 --guid ${CAPSULE_GUID} \
                 --index ${CAPSULE_INDEX} \
                 --monotonic-count ${CAPSULE_MONOTONIC_COUNT} \
                 --private-key ${CAPSULE_PRIVATE_KEY_PATH} \
                 ${UEFI_FIRMWARE_BINARY} \
                 ${CAPSULE_IMGLOCATION}/${CAPSULE_NAME}.${CAPSULE_EXTENSION}
}

# The firmware binary should be created before generating the capsule
IMAGE_TYPEDEP:uefi_capsule:append = "${CAPSULE_IMGTYPE}"