From 6ace7c4b2e8a28f877f706f81b9e19992bbf14f7 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 15 Sep 2026 15:12:37 +0300 Subject: [PATCH 01/66] Add Learning Path: boot Zephyr from a signed FIT image with U-Boot on Cortex-A New Learning Path under embedded-and-microcontrollers, with the TI AM62L EVM as the worked example: sign a Zephyr image into a FIT, build the public key into U-Boot through CONFIG_DEVICE_TREE_INCLUDES, add a boot command that starts Zephyr only after bootm verifies it, and prove it on the board with a wrong-key and a tampered image. Adds Roy Jamil to the contributors list. --- assets/contributors.csv | 1 + .../1-boot-chain.md | 81 +++++ .../2-set-up-tools.md | 140 ++++++++ .../3-build-zephyr.md | 180 ++++++++++ .../4-sign-zephyr.md | 212 ++++++++++++ .../5-build-uboot.md | 317 ++++++++++++++++++ .../6-boot-the-board.md | 248 ++++++++++++++ .../7-production.md | 97 ++++++ .../_index.md | 80 +++++ .../_next-steps.md | 8 + .../images/boot-chain.svg | 73 ++++ .../images/fit-signature.svg | 71 ++++ 12 files changed, 1508 insertions(+) create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_next-steps.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg diff --git a/assets/contributors.csv b/assets/contributors.csv index 3590cdbbca..af586f8918 100644 --- a/assets/contributors.csv +++ b/assets/contributors.csv @@ -140,3 +140,4 @@ Tirui Wu, Arm,,,, William Watson, Arm,,,, John O'Hara, Arm, JohnOhara-Arm, johnaohara, JohnnyDoItAll, Usamah Zaheer,Arm,usamahz,,, +Roy Jamil,Ac6,RoyAc6,royjamil,,https://www.ac6.fr/en/ diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md new file mode 100644 index 0000000000..cfd2796cc2 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -0,0 +1,81 @@ +--- +title: Understand where Zephyr sits in the Cortex-A boot chain +description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how the TI AM62L boot chain hands control to it. +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Zephyr is the last stage, not the first + +On a microcontroller (MCU), Zephyr starts at the reset vector and nothing runs before it. There is no earlier stage that could check it. That's why secure boot on Cortex-M means adding a bootloader yourself, such as MCUboot. That bootloader is the root of trust: the first code you trust because nothing checked it. + +A Cortex-A processor boots differently. The processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several pieces of firmware run before your code does. On an MCU, your image is the first thing that runs. On a Cortex-A, it is the last. + +That order is what makes verification possible. The stage that runs before Zephyr can check Zephyr before it starts it. On a Cortex-A board, that stage is usually U-Boot, the open-source bootloader that many Arm boards use to load an operating system from storage and start it. + +U-Boot packs a program and its signature into a FIT (Flattened Image Tree) image; a later section on this page explains what one contains. Everyone documents signed FIT for Linux, and secure boot for Zephyr on Cortex-M. Nobody documents the one you actually need: Zephyr, signed, on a Cortex-A. This Learning Path covers that combination on real hardware, the TI AM62L EVM (TI's evaluation board for the AM62L). The FIT, the keys, the way the key goes into U-Boot and the boot command are generic, so you can move them to any Cortex-A board that runs U-Boot. The SDK, the SD card layout and the boot switches are specific to TI. + +## The boot chain on a Cortex-A board + +A boot chain is the list of programs that run one after the other, from power-on to your application. On an Armv8-A board with U-Boot, the chain is: the boot ROM in the SoC, then early firmware, then U-Boot, then the payload. The payload is the program U-Boot loads from storage and starts; on most boards that's Linux, and here it's Zephyr. + +The early firmware is usually three things. The SPL (Secondary Program Loader) is a cut-down build of U-Boot whose only job is to load the full U-Boot. TF-A (Trusted Firmware-A) is Arm's reference firmware for the Secure world. On a Cortex-A, TrustZone splits the processor into a Secure world and a Non-secure world; TF-A owns the Secure one and starts U-Boot in the Non-secure one. OP-TEE (Open Portable Trusted Execution Environment) is an open-source trusted operating system that also lives in the Secure world. + +You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE come prebuilt in the TI SDK, as `bl1.bin`, `bl31.bin` and `bl32.bin`. + +Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps. A check is a signature verification: the stage holds a public key, and it refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. + +On the AM62L, which has only Cortex-A53 cores, the chain that TI's U-Boot documentation for the K3 family describes has four steps. One TI name appears in it: TIFS (TI Foundational Security) is TI's security firmware, and it checks the boot files that the ROM doesn't. The four steps are: + +| Step | What loads what | Who checks it | +|---|---|---| +| 1 | The boot ROM loads `tiboot3.bin`, which holds the first stage of TF-A (BL1) and the TIFS firmware | The boot ROM | +| 2 | BL1 loads `tispl.bin`, which holds the TF-A runtime firmware (BL31), OP-TEE and the U-Boot SPL | TIFS | +| 3 | The SPL loads `u-boot.img`, which is U-Boot proper | TIFS | +| 4 | U-Boot loads the payload, normally a Linux FIT image | U-Boot's own FIT check | + +In plain words: TI's chip checks the first three files itself, and U-Boot checks the fourth. That fourth check is the one you set up, and Zephyr is the file it checks. You build `tiboot3.bin`, `tispl.bin` and `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). + +![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image, with an arrow at each step showing which stage checks the next one. Notice that the last arrow, from U-Boot to Zephyr, is the check this Learning Path adds.#center](images/boot-chain.svg "The AM62L boot chain and the check at each step") + +## What a FIT image is + +A FIT is U-Boot's container format for boot images. It's a device tree blob (DTB), the same binary format as a hardware device tree, but its nodes hold images instead of hardware descriptions. + +One FIT holds three things: + +- The image itself, which is Zephyr's `zephyr.bin` here +- A hash of that image, so U-Boot can tell if a byte changed +- A configuration that names the image to use and carries a signature + +The configuration is the node U-Boot boots from: it names the image (`kernel = "kernel-1"`) and carries the signature. + +`mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the board, U-Boot's `bootm` command, the command that boots an image already in memory, parses the FIT, verifies the signature and the hash, and copies the image to its load address. + +The signature uses RSA (Rivest-Shamir-Adleman), the public and private key pair described earlier. This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. + +The public key lives inside U-Boot's own device tree, called the control device tree, under a `/signature` node, with one subnode per key. One property of that key node matters most: `required = "conf"`, where `conf` is short for configuration. It means every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. That property is what makes the check fail closed: when U-Boot can't verify a FIT, nothing boots. Without `required`, the check fails open: a FIT with no signature at all still boots, as if no check existed. + +![Diagram of a signed FIT image next to U-Boot's control device tree. The FIT contains an images node with the Zephyr binary and its hash, and a configurations node with a signature. The control device tree contains a /signature node holding the public key with required set to conf. Arrows show the signature covering the configuration and the hash node, and the hash covering the image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") + +The diagram shows one detail that matters later. The signature does not cover the bytes; it covers the hash of the bytes. `mkimage` signs the configuration node plus the hash node of each image the configuration lists. The hash node covers the image bytes. The signature is what makes that hash trustworthy, so between them they cover everything. So if someone flips a byte in the image after signing, the signature still verifies, and the hash check is what fails. You'll see exactly that on the board when you boot a tampered image. + +## What this Learning Path adds + +What this Learning Path adds is the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source. Both the public key and the boot command go in as Kconfig options when you build U-Boot, so you can carry them to a newer U-Boot without a patch. U-Boot's job here is to check Zephyr, not to boot an operating system; the page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows how the boot command does that. + +What this Learning Path doesn't do is put your key into the chip. TI devices hold the owner's key in eFuses, one-time-programmable bits in silicon. A chip with that key fused is called HS-SE (High Security, Security Enforced): it refuses any boot file not signed with the owner's key. A chip without it yet is HS-FS (High Security, Field Securable): the check still runs, but with no key to compare against, any key passes. + +The EVM ships as HS-FS, and its first three boot files are signed with TI's development key. So on this board the first three checks run but can't refuse anything, while the fourth, U-Boot checking Zephyr, refuses on HS-FS and HS-SE alike. You see the device type on the serial console when you boot the board. + +{{% notice Note %}} +Moving a device to HS-SE, fusing your own key and re-signing the boot files with it, is a separate TI procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) lists what that step changes and what else production needs. +{{% /notice %}} + +## What you've learned and what's next + +You've now learned that Zephyr on a Cortex-A is the last stage of a boot chain, so the stage before it, U-Boot, can verify it. A FIT is a device tree blob holding the image, its hash and a signed configuration. U-Boot keeps the public key in its control device tree, and `required = "conf"` makes it refuse anything it can't verify. On the AM62L EVM, only that last check is enforced today. + +Next, you [set up the host tools and the TI SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), and create the working directory and environment file that every later page uses. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md new file mode 100644 index 0000000000..a9be2fafdb --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -0,0 +1,140 @@ +--- +title: Set up the host tools and the TI SDK +description: Install the Ubuntu packages, the TI Processor SDK and TI's SD card image on your host, and create the environment file that every later page of this Learning Path loads. +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## What you need + +The board is the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM). It boots from a micro-SD card, so you need one and a way to write it from your host. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, which is usually, but not always, the first. You open it when you boot the board. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. + +The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with at least 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The TI SDK download alone is 4.5 GB, and it unpacks to 11 GB of U-Boot source, Linux toolchain and prebuilt images. You can delete the installer after the install. + +You also need a Zephyr workspace with Zephyr 4.4 or later and the Zephyr SDK. Set both up as described in the [Zephyr Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html). This page doesn't repeat those steps. + +From inside your Zephyr workspace (for example `cd ~/zephyrproject`, with its Python virtual environment active if you use one), check that the tree knows the board: + +```bash +west boards | grep am62l +``` + +The expected output is: + +```output +am62l_evm +``` + +If nothing prints, your Zephyr checkout doesn't have the board yet. Update it to 4.4 or later before you continue, because the board files set the address Zephyr is built to run at, and every later page uses that address. + +## Install the host packages + +U-Boot's build and the signing tools need a few packages beyond a normal Zephyr setup. Install them in one command: + +```bash +sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools u-boot-tools xz-utils curl picocom +``` + +Six of them are for U-Boot and signing. `swig` and `python3-dev` let U-Boot build `pylibfdt`, the Python device tree library its build scripts import. `libssl-dev` gives `mkimage` the RSA code it signs with. `libgnutls28-dev` and `uuid-dev` are for `mkeficapsule`, a host tool TI's configuration builds next to `mkimage`; you don't use it, but the build stops without them. `device-tree-compiler` provides `dtc`, which converts device tree blobs to source and back; you use it to read the public key node out of a blob when you build U-Boot. + +The rest are for the card and the console. `mtools` edits the SD card image without root, and `xz-utils` unpacks TI's card image. `openssl` creates the keys, `curl` downloads the two TI files, and `picocom` is the serial terminal. + +`u-boot-tools` is optional. It installs Ubuntu's own `mkimage` as a fallback. You build `mkimage` from TI's U-Boot tree when you [create the signing keys and sign the image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), so the tool that signs and the code that verifies come from the same source. + +## Create the working directory and environment file + +Every path in this Learning Path lives under one directory, `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. That keeps the commands short, and you can paste them as they are. + +Create the directory and write the environment file. The heredoc is quoted, so `$HOME` and `$WORK` stay as text in the file and expand when you load it: + +```bash +mkdir -p $HOME/zephyr-secure-boot +cat > $HOME/zephyr-secure-boot/env.sh <<'EOF' +export WORK=$HOME/zephyr-secure-boot +export TISDK=$WORK/tisdk +export UBOOT_SRC=$TISDK/board-support/ti-u-boot-2026.01+git +export PREBUILT=$TISDK/board-support/prebuilt-images/am62lxx-evm +export CROSS=$TISDK/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux- +export SYSROOT=$TISDK/linux-devkit/sysroots/aarch64-oe-linux +export UBOOT_OUT=$WORK/uboot-build +export KEYS=$WORK/keys +export FIT=$WORK/fit +export ZEPHYR_ADDR=0x82000000 +export FIT_ADDR=0x90000000 +EOF +``` + +Load the file and create the directories the later pages write into: + +```bash +source $HOME/zephyr-secure-boot/env.sh +mkdir -p $KEYS $FIT $WORK/app +``` + +The first group of variables points into the TI SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, and `CROSS` is the cross compiler prefix. `SYSROOT` is there because the SDK's compiler can't find its own libraries without `--sysroot`; the U-Boot pages pass it through the `CC` variable of `make`. `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. + +The two addresses come from the AM62L memory map. `ZEPHYR_ADDR` is where Zephyr is built to run, and `FIT_ADDR` is where U-Boot puts the signed image while it checks it. They must not overlap, because U-Boot copies Zephyr from one to the other. The later pages write the numbers out where they are used, in the FIT source and the boot command, and explain each use there. The variables keep them in one place to read. + +The variables live only in the shell that loaded them. Every later page starts with `source $HOME/zephyr-secure-boot/env.sh`, and you need to run it again in each new terminal. + +## Install the TI Processor SDK + +The TI Processor SDK Linux for AM62Lx is TI's Linux distribution kit for the board. You use three things from it and nothing from Linux itself: the U-Boot source tree `ti-u-boot-2026.01+git`, the prebuilt firmware that runs before U-Boot, and the aarch64 GCC toolchain (GCC 15.3.0). + +The prebuilt firmware is TF-A as `bl1.bin` and `bl31.bin`, OP-TEE 4.10 as `bl32.bin`, and TI's system firmware in the `ti-sysfw` directory. You met TF-A and OP-TEE on the previous page. `bl1.bin` is the first TF-A stage, and the U-Boot build packs it into `tiboot3.bin`; `bl31.bin` is the runtime part that hands over to U-Boot, and it goes into `tispl.bin`. You can build both from source, but these binaries are the ones inside TI's own image, so using them removes two builds and two places to get wrong. + +Download the installer from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03). The direct link is the one in this command: + +```bash +curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin +``` + +The download takes a while. Then make it executable and run it without the graphical wizard: + +```bash +chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin +$WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $TISDK +``` + +`--mode unattended` answers every prompt with its default, and `--prefix` sets the install directory to `$TISDK`, which is inside your working directory. The installer writes only there, so it doesn't need root. + +Check that the three paths the later pages use exist, and that the compiler runs: + +```bash +ls -d $UBOOT_SRC $PREBUILT $SYSROOT +${CROSS}gcc --version +``` + +The output is similar to: + +```output +/home/user/zephyr-secure-boot/tisdk/board-support/prebuilt-images/am62lxx-evm +/home/user/zephyr-secure-boot/tisdk/board-support/ti-u-boot-2026.01+git +/home/user/zephyr-secure-boot/tisdk/linux-devkit/sysroots/aarch64-oe-linux +aarch64-oe-linux-gcc (GCC) 15.3.0 +... +``` + +{{% notice Note %}} +`prebuilt-images` also contains a directory named `am62lxx-evm-jailhouse`. Don't use it. Its firmware is built for the Jailhouse hypervisor memory layout, not for the one Zephyr and this Learning Path use. `PREBUILT` in `env.sh` already points at the right one. +{{% /notice %}} + +## Download TI's SD card image + +The `.wic.xz` file is TI's complete SD card image: a boot partition and a Linux root filesystem, compressed with `xz`. You don't boot Linux from it. When you [prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), you keep its first partition as a template and replace only the files inside. The AM62L boot ROM is picky about that partition's layout, and TI's layout is known to work. + +Download it into the working directory: + +```bash +curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz +``` + +The compressed file is about 1.3 GB. Leave it compressed. That page reads the part it needs straight out of `xz`, so the full image never has to exist on disk. + +## What you've accomplished and what's next + +Your host now has the build packages and the TI SDK: U-Boot source, prebuilt firmware and toolchain. `$WORK/env.sh` holds every path, and every later page loads it with one `source` command. TI's card image is on disk, ready to serve as the boot partition template. + +Next, you [build a small Zephyr application for the AM62L EVM](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/) and check that its binary starts with a branch instruction, so U-Boot's `go` command can start it. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md new file mode 100644 index 0000000000..099782b667 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -0,0 +1,180 @@ +--- +title: Build a Zephyr image that U-Boot can start +description: Write a small Zephyr application, build it with west for the Cortex-A53 on the TI AM62L EVM, and check that the binary starts with a branch instruction so U-Boot can jump to it with go. +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Create a small Zephyr application + +Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. + +The application is a hello world that prints a banner. The banner names the image, so later, when U-Boot starts one of several images, the console tells you which program ran. That's the only reason the text is so loud. + +Create the application directory: + +```bash +mkdir -p $WORK/app/hello/src +``` + +Create `$WORK/app/hello/CMakeLists.txt` with the standard four lines of a Zephyr application: + +```cmake +cmake_minimum_required(VERSION 3.20.0) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(hello) +target_sources(app PRIVATE src/main.c) +``` + +Create `$WORK/app/hello/src/main.c` with the following code: + +```c +#include +#include + +int main(void) +{ + printk("\n"); + printk("################################################\n"); + printk("# #\n"); + printk("# Hello from ZEPHYR IMAGE A #\n"); + printk("# signed with key-a (TRUSTED by U-Boot) #\n"); + printk("# #\n"); + printk("################################################\n"); + printk("\n"); + printk("board : %s\n", CONFIG_BOARD_TARGET); + printk("arch : %s\n", CONFIG_ARCH); + printk("started by : U-Boot 'go' after FIT signature verification\n"); + printk("this image was verified by U-Boot before it ran.\n"); + return 0; +} +``` + +Create `$WORK/app/hello/prj.conf` with the following four lines: + +```text +CONFIG_ARMV8_A_NS=y +CONFIG_PRINTK=y +CONFIG_BOOT_BANNER=y +CONFIG_AARCH64_IMAGE_HEADER=y +``` + +`CONFIG_PRINTK` gives you `printk()` on the console. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, which is the first sign that the jump from U-Boot landed. The other two options deserve their own section. + +## Two settings that matter + +`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world. An Armv8-A processor runs code in one of two worlds, Secure or Non-secure, and some hardware keeps a separate set of registers for each world. On the AM62L, TF-A owns the Secure world and starts U-Boot, and then Zephyr, in the Non-secure world. The Generic Interrupt Controller (GIC) is one such piece of hardware, and Zephyr's GICv3 driver programs its Non-secure registers only when this option is set. Without it, the timer interrupt never arrives, and Zephyr hangs right after its banner. + +`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The first instruction of that header is `b __start`, a branch to Zephyr's real entry point. U-Boot never parses this header in the flow you build here, and it doesn't need to. It jumps to the first byte of the image with `go 0x82000000`. The `go` command is only a jump to an address, and the branch takes it the rest of the way. Without the header, the first byte of the image is whatever the linker placed there, and `go` jumps into garbage. + +The board configuration for `am62l_evm/am62l3/a53` already sets both options. Repeating them in `prj.conf` documents the intent, and protects you when you move the application to a board whose configuration doesn't set them. + +## Build for the AM62L EVM + +Run `west` from inside your Zephyr workspace, for example `cd ~/zephyrproject`, and activate its Python virtual environment if you use one. `west` finds Zephyr from the workspace, and the application can live anywhere. + +Build the application for the Cortex-A53 cluster of the AM62L EVM: + +```bash +west build -p always -b am62l_evm/am62l3/a53 -d $WORK/build/hello $WORK/app/hello +``` + +The options are: + +- `-p always` forces a clean build, so nothing from a previous board leaks in. +- `-b am62l_evm/am62l3/a53` selects the board, the AM62L3 SoC variant, and the A53 cluster. +- `-d` sets the build directory, and the last argument is the application directory. + +The result is `$WORK/build/hello/zephyr/zephyr.bin`, a raw binary linked to run at `0x82000000`. Check its size: + +```bash +stat -c %s $WORK/build/hello/zephyr/zephyr.bin +``` + +The output is similar to: + +```output +58340 +``` + +That's about 58 KB. The link address comes from the board's device tree, whose `zephyr,sram` memory node starts at `0x82000000`. That's past the first 32 MB of DDR, the board's RAM, where TF-A and OP-TEE live. On another board, read the address from that board's device tree. The same address appears on every following page: as the FIT `load` and `entry` address, and as the `go` target. + +## Check the image starts with a branch + +Before you sign anything, check that the header is really there. Print the first four bytes of the binary: + +```bash +od -An -tx1 -N4 $WORK/build/hello/zephyr/zephyr.bin +``` + +The expected output is: + +```output + 53 04 00 14 +``` + +The `od` options are: `-An` drops the address column, `-tx1` prints hex bytes, and `-N4` reads four bytes. + +Read as a little-endian 32-bit word, that's `0x14000453`. The top six bits of that word, `000101`, encode an AArch64 `b` (branch) instruction, which is why the last byte printed reads `14`. The remaining 26 bits, `0x453`, are the branch distance counted in 4-byte instructions: `0x453` times 4 is `0x114c` bytes. In the build used to write this page, Zephyr's ELF entry point is `0x8200114c`, which is `0x82000000 + 0x114c`. So a jump to offset 0 lands on the branch, and the branch lands on `__start`. + +Now check the header's magic number, a fixed four-byte marker that identifies an arm64 image. It sits at offset `0x38`: + +```bash +od -An -c -j 0x38 -N4 $WORK/build/hello/zephyr/zephyr.bin +``` + +The expected output is: + +```output + A R M d +``` + +The magic is the four bytes `ARM\x64`. The `-c` option prints each byte as a character, and `0x64` is the ASCII code for `d`, so `A R M d` is the magic. `-j 0x38` skips to that offset. + +That header is why U-Boot's boot command can use the fixed address `go 0x82000000`. The entry point of the ELF file moves whenever the code changes; offset 0 of the binary doesn't. + +{{% notice Note %}} +If the last of the four bytes isn't `14`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/build/hello/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. The first three bytes can differ from `53 04 00` in your build, because they hold the branch distance; the `14` byte and the magic are what matter. +{{% /notice %}} + +## Build a second image for the wrong-key test + +The next page signs three images: a trusted one, one signed with a key U-Boot doesn't know, and a tampered copy. The wrong-key image is a different program on purpose. If U-Boot ever runs it, the console says so in capital letters, and you can't mistake it for the trusted image. + +Copy the application and change the two banner lines: + +```bash +cp -r $WORK/app/hello $WORK/app/hello_b +sed -i 's/ZEPHYR IMAGE A/ZEPHYR IMAGE B/; s/key-a (TRUSTED by U-Boot) #/key-b (NOT trusted by U-Boot) #/' $WORK/app/hello_b/src/main.c +``` + +The replacement is the same length as the text it replaces, so the box stays aligned. + +Check the edit: + +```bash +grep -e 'IMAGE B' -e 'key-b' $WORK/app/hello_b/src/main.c +``` + +The expected output is: + +```output + printk("# Hello from ZEPHYR IMAGE B #\n"); + printk("# signed with key-b (NOT trusted by U-Boot) #\n"); +``` + +Build it into its own directory: + +```bash +west build -p always -b am62l_evm/am62l3/a53 -d $WORK/build/hello_b $WORK/app/hello_b +``` + +The result is `$WORK/build/hello_b/zephyr/zephyr.bin`, again about 58 KB. Only the text differs. The next page signs it with `key-b`, a key U-Boot doesn't know. + +## What you've accomplished and what's next + +You've built two Zephyr images for the Cortex-A53 on the AM62L EVM, both linked at `0x82000000`. You've also checked that the trusted one starts with a branch instruction and carries the arm64 header. That's all U-Boot needs to start Zephyr with `go`, and all `mkimage` needs to wrap it in a FIT on the next page. + +Next, you [create the signing keys and sign the trusted image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), then make the two images that U-Boot must refuse. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md new file mode 100644 index 0000000000..6950e82767 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -0,0 +1,212 @@ +--- +title: Create signing keys and sign the Zephyr image into a FIT +description: Build mkimage from the TI U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image, plus the wrong-key and tampered images that U-Boot must refuse. +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Build U-Boot's host tools first + +Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. + +`mkimage` is the U-Boot host tool that builds and signs a FIT image. `fit_check_sign` is its companion that verifies a signed FIT on the host. Both come out of the same U-Boot source tree as the U-Boot that checks the FIT on the board, so the tool that signs and the code that verifies match. + +The `tools` target needs the board's `.config` first, so select the AM62L EVM defconfig: + +```bash +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" am62lx_evm_defconfig +``` + +The `CC="${CROSS}gcc --sysroot=$SYSROOT"` part is the sysroot fix from the set-up page. Keep it on every `make` line, including the three on the next page. + +Then build the host tools. This step doesn't build U-Boot itself yet: + +```bash +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" tools +``` + +The result is `$UBOOT_OUT/tools/mkimage` and `$UBOOT_OUT/tools/fit_check_sign`. Check that `mkimage` runs: + +```bash +$UBOOT_OUT/tools/mkimage -V +``` + +The output is similar to: + +```output +mkimage version 2026.01-g5fb294342321 +``` + +{{% notice Note %}} +If the `tools` build stops early, the fix depends on where it stops: +- At `pylibfdt` or `swig`: install `swig python3-dev` as described in [Set up the host tools and the TI SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). If you'd rather not build U-Boot's own `dtc` and `pylibfdt`, add `DTC=$(which dtc)` to the `make` line and install the `python3-libfdt` package, because U-Boot still checks that `import libfdt` works in `python3` +- At `mkeficapsule` with `fatal error: gnutls/gnutls.h: No such file or directory`: install `libgnutls28-dev uuid-dev`, or add the line `# CONFIG_TOOLS_MKEFICAPSULE is not set` to `$UBOOT_OUT/.config`, then run the `tools` step again. You don't need that tool +{{% /notice %}} + +## Create two signing keys + +RSA is the public-key algorithm U-Boot's FIT code verifies with. An RSA key pair has a private half that signs and a public half that verifies. The private key stays on the host. Only the public key goes into U-Boot, on the next page. + +You create two pairs. `key-a` is the key U-Boot trusts. `key-b` exists only to be rejected: it's a real, valid key, but U-Boot never sees its public half. A key U-Boot doesn't know must fail exactly like no signature at all, and `key-b` is how you prove that on the board. + +Generate both pairs with OpenSSL: + +```bash +cd $KEYS +for k in key-a key-b; do + openssl genpkey -algorithm RSA -quiet -out $k.key \ + -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 + openssl req -batch -new -x509 -key $k.key -out $k.crt -subj "/CN=$k" -days 3650 +done +ls $KEYS +``` + +The expected output is: + +```output +key-a.crt key-a.key key-b.crt key-b.key +``` + +`mkimage -k ` expects exactly this layout. `.key` holds the private key. `.crt` is a certificate, a standard wrapper file for a public key; it's self-signed because no authority needs to vouch for it here. `` is the key name you'll write as `key-name-hint` in the FIT source in the next section. The `-subj "/CN=$k"` and `-batch` options let `openssl req` run without questions. + +The algorithm here is `sha256,rsa2048`, which is enough for a demo. The production page covers stronger keys and where to keep them. + +{{% notice Warning %}} +These are throwaway development keys, generated on the build machine. Production keys are generated and kept elsewhere. See [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/). +{{% /notice %}} + +## Write the FIT source + +A FIT is a device tree blob that packs the payload, a hash of it, and a configuration that carries the signature. You describe it in a `.its` file (image tree source) and `mkimage` compiles and signs it into an `.itb` (image tree blob). + +Write the source with a heredoc, so `$WORK` expands to the absolute path of the Zephyr binary you built on the previous page: + +```bash +cat > $FIT/zephyr-a.its <; + images { + kernel-1 { + description = "Zephyr RTOS image"; + data = /incbin/("$WORK/build/hello/zephyr/zephyr.bin"); + type = "kernel"; + arch = "arm64"; + os = "u-boot"; + compression = "none"; + load = <0x82000000>; + entry = <0x82000000>; + hash-1 { algo = "sha256"; }; + }; + }; + configurations { + default = "conf-1"; + conf-1 { + description = "Zephyr on AM62L Cortex-A53"; + kernel = "kernel-1"; + signature-1 { + algo = "sha256,rsa2048"; + key-name-hint = "key-a"; + sign-images = "kernel"; + }; + }; + }; +}; +EOF +``` + +A few properties decide how U-Boot treats this image. + +`bootm` is the U-Boot command that verifies and unpacks a FIT. It accepts two labels for the main image, `kernel` and `kernel_noload`, and `type = "kernel"` is the plain one. Zephyr is the kernel here, so the label is right. + +`os = "u-boot"` is the property that makes this work. U-Boot has no `zephyr` value for `os`. With `os = "linux"`, U-Boot would treat the payload as a Linux kernel: look for a device tree in the FIT, patch it, and parse the kernel header. `u-boot` is U-Boot's slot for a standalone program: the payload is verified and copied, nothing else. That's why the FIT needs no device tree and Zephyr needs no Linux boot protocol. + +`load` and `entry` are both `0x82000000`, Zephyr's link address on this board. After the checks pass, U-Boot copies the verified payload there; on the next page that copy is the `bootm loados` step of the boot command. + +`hash-1 { algo = "sha256"; }` is the hash of the payload bytes. It sits in the image node, and the signature covers it. + +`configurations` lists the ways to boot this FIT. There is one, `conf-1`; `kernel = "kernel-1"` points it at the image node, and `default` names it so U-Boot picks it without being told. + +`signature-1` sits under the configuration, not under the image, because that's what U-Boot checks: the `required = "conf"` rule you build into U-Boot on the next page demands a valid signature on the configuration it boots. With `sign-images = "kernel"`, `mkimage` signs the configuration node plus the hash node of the kernel image. `key-name-hint = "key-a"` names the key files in `$KEYS` and, later, the key node U-Boot looks up. A signature placed here is called a configuration signature, and it is the only kind this Learning Path uses. + +Both `description` properties are mandatory. `mkimage` refuses the source without them. + +## Sign the image + +Compile and sign the FIT. `-k $KEYS` tells `mkimage` where the private key is: + +```bash +$UBOOT_OUT/tools/mkimage -f $FIT/zephyr-a.its -k $KEYS $FIT/zephyr-a.itb +``` + +`mkimage` ends by printing the contents of the image it made. Trimmed to the lines that matter, the output is similar to: + +```output + Type: Kernel Image + ... + OS: U-Boot + Load Address: 0x82000000 + Entry Point: 0x82000000 + Hash algo: sha256 + ... + Sign algo: sha256,rsa2048:key-a +``` + +`mkimage` also has a `-K` option that writes the public key into a device tree blob. Don't use it here. The public key goes into U-Boot's own device tree at build time, on the next page. Signing the image and giving U-Boot the key are two separate steps. + +You can print the same listing for any FIT at any time: + +```bash +$UBOOT_OUT/tools/mkimage -l $FIT/zephyr-a.itb +``` + +The listing is the same one `mkimage` printed when it signed the file. + +## Make the two images that must fail + +A verifier you've only seen accept images isn't proven. You need two images it must refuse: one signed with the wrong key, and one changed after signing. + +For the wrong-key image, copy the source with `sed`, swapping `key-a` for `key-b` and the `hello` binary for `hello_b`, then sign it the same way: + +```bash +sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.its +$UBOOT_OUT/tools/mkimage -f $FIT/zephyr-b.its -k $KEYS $FIT/zephyr-b.itb +``` + +The listing now shows `Sign algo: sha256,rsa2048:key-b`. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. The payload is the `IMAGE B` program, so if it ever ran, the console would say so. + +For the tampered image, copy the trusted `.itb` and overwrite one byte inside the payload: + +```bash +cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb +printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null +``` + +`bs=1` makes `dd` count in bytes, `seek=32768` skips to that offset, and `conv=notrunc` keeps the rest of the file intact. The first `0xe8` bytes of the file belong to the FIT itself, and the 58340-byte Zephyr binary follows; you'll see that as `Data Start: 0x900000e8` on the board's console. So offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own nodes. + +Check that the copy now differs from the original: + +```bash +cmp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb +``` + +The output is similar to: + +```output +/home/user/zephyr-secure-boot/fit/zephyr-a.itb /home/user/zephyr-secure-boot/fit/zephyr-tampered.itb differ: byte 32769, line 94 +``` + +`cmp` counts bytes from 1, and the line number varies with the build. If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. + +This image proves that U-Boot catches a change made after signing. The signature still verifies and the hash fails, for the reason the boot-chain page gave: the signature covers the hash of the bytes, not the bytes. You'll watch both steps on the board. + +All three `.itb` files are the same size, 60198 bytes in this build. Size tells you nothing; only verification does. + +## What you've accomplished and what's next + +You've built `mkimage` and `fit_check_sign` from the TI U-Boot tree, created two RSA key pairs, and signed Zephyr into `$FIT/zephyr-a.itb`. You've also made the two images that must fail, `zephyr-b.itb` and `zephyr-tampered.itb`. + +You can't verify any of them yet: U-Boot doesn't have the key. On the next page, [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), you compile `key-a`'s public half into U-Boot's device tree and write the boot command. You then check all three images offline with `fit_check_sign` before touching the board. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md new file mode 100644 index 0000000000..d0bafb8e52 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -0,0 +1,317 @@ +--- +title: Build U-Boot with the public key and a boot command that fails closed +description: Compile the public half of key-a into U-Boot's own device tree through Kconfig, add a boot command that starts Zephyr only after bootm verifies it, and prove on the host with fit_check_sign that only the trusted FIT verifies. +weight: 6 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Where U-Boot keeps its keys + +Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. + +U-Boot keeps its FIT verification keys in the control device tree, the DTB packed into `u-boot.img` that you met on the first page, in a node named `/signature`. + +The node U-Boot needs looks like this: + +```dts +/ { + signature { + key-key-a { + required = "conf"; + algo = "sha256,rsa2048"; + rsa,r-squared = <...>; + rsa,modulus = <...>; + rsa,exponent = <0x00 0x10001>; + rsa,n0-inverse = <...>; + rsa,num-bits = <0x800>; + key-name-hint = "key-a"; + }; + }; +}; +``` + +The `rsa,` properties are the public half of `key-a`, in the layout U-Boot's RSA code reads. `required = "conf"` is the fail-closed rule from [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. It applies to configuration signatures, the kind you wrote on the previous page. + +The configuration that `am62lx_evm_defconfig` produces already turns on everything else. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: + +```bash +grep -E '^CONFIG_(FIT|FIT_SIGNATURE|RSA|OF_SEPARATE)=|LEGACY_IMAGE_FORMAT' $UBOOT_OUT/.config +``` + +The expected output is: + +```output +CONFIG_FIT=y +CONFIG_FIT_SIGNATURE=y +# CONFIG_LEGACY_IMAGE_FORMAT is not set +CONFIG_OF_SEPARATE=y +CONFIG_RSA=y +``` + +`CONFIG_FIT_SIGNATURE` and `CONFIG_RSA` are the verifier. `CONFIG_OF_SEPARATE` means the control DTB is built from source into a separate `u-boot.dtb`, which binman, U-Boot's image packaging tool, packs into `u-boot.img`, so you can add a node to it at build time. + +Legacy image support is off: that older single-file format (uImage) carries no signature, so `bootm` has nothing unsigned to fall back to. Other boot commands still exist; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) covers them. + +The only things missing are the key and the boot command. Both are build configuration, so the U-Boot source stays untouched. + +## Generate the key node + +`mkimage` only writes a public key while it signs something, so you sign a throwaway FIT into an empty scratch DTB and turn that DTB back into source. Create the empty DTB and a tiny payload in `$WORK`: + +```bash +printf '/dts-v1/;\n/ { };\n' | dtc -I dts -O dtb -o $WORK/scratch.dtb +printf 'payload' > $WORK/payload.bin +``` + +Write the throwaway FIT's source: the `zephyr-a.its` you wrote when you [signed the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), with placeholders for the payload and the addresses: + +```bash +cat > $WORK/key.its <<'EOF' +/dts-v1/; +/ { + description = "carrier used only to emit key-a's public key"; + #address-cells = <1>; + images { + kernel-1 { + description = "placeholder payload"; + data = /incbin/("payload.bin"); + type = "kernel"; arch = "arm64"; os = "u-boot"; compression = "none"; + load = <0>; entry = <0>; + hash-1 { algo = "sha256"; }; + }; + }; + configurations { + default = "conf-1"; + conf-1 { + kernel = "kernel-1"; + signature-1 { algo = "sha256,rsa2048"; key-name-hint = "key-a"; sign-images = "kernel"; }; + }; + }; +}; +EOF +``` + +Both `description` properties must stay; `mkimage` refuses the file without them. `dtc` looks for `payload.bin` next to `key.its`. + +Sign the throwaway FIT and convert the scratch DTB to `signature.dtsi`: + +```bash +$UBOOT_OUT/tools/mkimage -f $WORK/key.its -k $KEYS -K $WORK/scratch.dtb -r $WORK/key.itb +dtc -I dtb -O dts -q $WORK/scratch.dtb | sed '/^\/dts-v1\/;/d' > $WORK/signature.dtsi +``` + +`-K` writes the public key into `scratch.dtb` and `-r` marks it required, which produces the `required = "conf"` property. `sed` removes the `/dts-v1/;` header, because a `.dtsi` included after the main `.dts` must not repeat it. + +Check that the file names the right key and nothing else: + +```bash +grep -E 'key-name-hint|required' $WORK/signature.dtsi +``` + +The expected output is: + +```output + required = "conf"; + key-name-hint = "key-a"; +``` + +`key-b` must not appear: U-Boot never gets its public half. + +## Why a .dtsi and not mkimage -K on u-boot.dtb + +`mkimage -K` can also write the key straight into an existing `u-boot.dtb`. On TI's U-Boot that is fragile: every `make` rebuilds the control DTB from source and binman packs it again, so an injected key is gone at the next build. + +`CONFIG_DEVICE_TREE_INCLUDES` is a Kconfig string that lists extra `.dtsi` files to include when the control DTB is built. Point it at `signature.dtsi` and the key is compiled in on every build. No file in the U-Boot tree changes. + +## Write a boot command that fails closed + +Zephyr's own board page starts the AM62L EVM from the U-Boot prompt with one unverified line: + +```console +=> fatload mmc 1:1 0x82000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x82000000 +``` + +`fatload` reads the file from the SD card and `go` jumps to it. Nothing checks the bytes in between. The verified version keeps the same handover (the cache commands and `go`) and puts `bootm` in front of it. Split over several lines for reading, the chain is: + +```text +fatload mmc 1:1 0x90000000 ${fit} && +bootm start 0x90000000 && +bootm loados && +dcache flush && icache flush && dcache off && icache off && +go 0x82000000; +echo "*** REFUSED: Zephyr was NOT started ***" +``` + +Each piece has one job: + +- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from partition 1 of the SD card (`mmc 1`; `mmc 0` is the eMMC) to `0x90000000`, clear of `0x82000000`, so the next steps can't copy Zephyr over the FIT they are reading. +- `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. All the checking happens here. +- `bootm loados` copies the verified payload to its `load` address, `0x82000000`. +- The four cache commands hand the CPU over the way Zephyr expects. On arm64, `dcache off` also turns the MMU (memory management unit) off, which Zephyr's memory setup expects on entry. +- `go 0x82000000` is a jump. It verifies nothing. + +Why not a plain `bootm`? A full `bootm` runs a sequence of named steps and continues past `loados` to the step that boots an operating system. You stop after `loados`, so no OS-specific code runs, and `go` does the jump instead. U-Boot is used as a verifier, not as an OS loader. + +Why `&&` and not `;`? In U-Boot's shell, `a && b` runs `b` only if `a` succeeded; `a; b` runs `b` either way, so a failed check would fall through to `go` and boot the image anyway. The `&&` is what makes it fail closed. `go` never returns, so the `echo` after the final `;` prints only when a step failed. + +That chain becomes the environment variable `zboot`, and three one-line wrappers pick the image to test: + +| Variable | Definition | +|---|---| +| `zboot` | The chain, with `${fit}` as the file name | +| `a` | `setenv fit zephyr-a.itb; run zboot` | +| `b` | `setenv fit zephyr-b.itb; run zboot` | +| `t` | `setenv fit zephyr-tampered.itb; run zboot` | + +`CONFIG_PREBOOT` defines all four: it's a command string U-Boot runs before the autoboot countdown, so the variables exist even after you stop autoboot. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. + +You compile them into U-Boot rather than store them on the card, on purpose: anyone with the card could edit a boot script or environment file on the unprotected FAT partition to skip the check. TI's default `CONFIG_ENV_IS_NOWHERE=y` gives the environment no storage, so nothing on the card can override them. + +## Configure and build + +Reset to TI's defconfig, so the fragment lands on a known `.config` whatever the previous page's `tools` build left behind: + +```bash +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" am62lx_evm_defconfig +``` + +Append the fragment to `.config`. The heredoc is unquoted so `$WORK` expands; `\${fit}` keeps `${fit}` in the file for U-Boot to expand at run time: + +```bash +cat >> $UBOOT_OUT/.config <; + rsa,modulus = <...>; + rsa,exponent = <0x00 0x10001>; + rsa,n0-inverse = <...>; + rsa,num-bits = <0x800>; + key-name-hint = "key-a"; + }; + }; +``` + +Now verify the three FITs on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's, and a mistake shows up now rather than at the serial console. `-f` names the FIT and `-k` the DTB that holds the keys. Start with the trusted image: + +```bash +$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb +``` + +The output is similar to: + +```output +Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-a+ +Verified OK, loading images +... +Signature check OK +``` + +The lines cut with `...` list `kernel-1`, check its hash (`sha256+ OK`), print `Loading Kernel Image to 0` (the host tool loads nothing) and report that the FIT has no `fdt` and no `ramdisk`. That's correct: it holds Zephyr and nothing else. The exit code is 0. + +Next, check the wrong-key image: + +```bash +$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb +``` + +The output is similar to: + +```output +Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-b- + error! +Verification failed for '(null)' hash node in 'conf-1' config node +Failed to verify required signature 'key-key-a' +Signature check bad (error 1) +``` + +Two checks fail: the DTB has no `key-b`, and `required = "conf"` demands a `key-a` signature on every configuration. + +Finally, check the tampered image: + +```bash +$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-tampered.itb -k $UBOOT_OUT/u-boot.dtb +``` + +The output is similar to: + +```output +Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-a+ +Verified OK, loading images +... +sha256 error! +Bad hash value for 'hash-1' hash node in 'kernel-1' image node +Bad Data Hash +... +Signature check bad (error 1) +``` + +The signature still passes and only the hash fails, as you expected when you [made the tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). You'll see the same two lines on the board. + +## What you've accomplished and what's next + +You built TI's U-Boot with the public half of `key-a` compiled into its control device tree. Its boot command starts Zephyr only after `bootm` has verified the signature and the hash. The U-Boot source is unchanged: the key is a `.dtsi` and the commands are a `.config` fragment. `fit_check_sign` has shown on the host that the trusted FIT verifies and that it refuses the other two. + +Next, you [put the boot files and the three FITs on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and watch U-Boot make the same decisions on the board. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md new file mode 100644 index 0000000000..ec25fbb77a --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md @@ -0,0 +1,248 @@ +--- +title: Prepare the SD card and boot the board +description: Build a bootable SD card image with mtools, set the AM62L EVM boot switches, and watch U-Boot start the signed Zephyr image and refuse the wrong-key and tampered ones. +weight: 7 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Build the SD card image from TI's boot partition + +Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. + +The boot ROM looks for `tiboot3.bin` by name on the first FAT partition of the SD card. It is picky about that partition. Give it a FAT32 volume with 512-byte clusters, for example, and it loads nothing: the console stays empty, with no SPL banner at all. + +TI's own SD card image boots. Its first partition starts at sector 2048 and is 262144 sectors long, which is 128 MiB. It is marked bootable, has partition type `0x0c` (the partition-table code for a FAT volume with logical block addressing, LBA), and is formatted FAT16 with four sectors per cluster. So keep that partition byte for byte and replace only the files in it. + +Start from the `.wic.xz` you downloaded when you [set up the tools](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Extract only the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: + +```bash +xz -dc $WORK/tisdk-default-image.wic.xz | head -c $(( (2048+262144)*512 )) > $WORK/sdcard.img +``` + +The result is a 129 MiB file. `head -c` stops reading after that many bytes, so you never extract TI's Linux root filesystem, which is the second partition. The partition table still lists that second partition, and it now points past the end of the file. Delete it: + +```bash +sfdisk --delete $WORK/sdcard.img 2 +``` + +The output ends with: + +```output +The partition table has been altered. +Syncing disks. +``` + +`sfdisk` edits partition tables in plain files as well as on devices, so you don't need root and you don't need to attach the file as a disk first. + +The FAT volume still holds TI's Linux files. Replace them with yours using `mtools`, which reads and writes FAT volumes inside a file. The `@@1048576` suffix tells `mtools` that the volume starts 1 MiB into the file, which is sector 2048. In `mtools` commands, `::` is the root of that volume, so `::EFI` is the `EFI` directory on the card: + +```bash +M=$WORK/sdcard.img@@1048576 +mdeltree -i $M ::EFI +mdel -i $M ::Image ::uEnv.txt +mcopy -o -i $M $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img :: +mcopy -o -i $M $FIT/zephyr-a.itb $FIT/zephyr-b.itb $FIT/zephyr-tampered.itb :: +``` + +`-i` names the image. `mdeltree` removes a directory and everything in it, `mdel` removes single files, and `mcopy -o` copies files in and overwrites any that already exist. + +`uEnv.txt` deserves a word. It is a text file of environment settings that TI's default boot command imports, and it points at Linux. Your build replaced that command with `run a`, so your U-Boot never reads the file. Delete it anyway: a card that still describes a Linux boot only invites doubt about what ran. + +List the volume to check the result: + +```bash +mdir -i $M :: +``` + +The output is similar to: + +```output + Volume in drive : is boot + Volume Serial Number is 40D2-DF89 +Directory for ::/ + +tiboot3 bin 216538 2026-09-11 18:14 +tispl bin 1467919 2026-09-11 18:14 +u-boot img 1422787 2026-09-11 18:14 +zephyr-a itb 60198 2026-09-11 18:14 +zephyr-b itb 60198 2026-09-11 18:14 +ZEPHYR~1 ITB 60198 2026-09-11 18:14 zephyr-tampered.itb + 6 files 3 287 838 bytes + 130 643 968 bytes free +``` + +`mdir` shows the long name `zephyr-tampered.itb` at the end of its line and the FAT short name `ZEPHYR~1.ITB` in front; U-Boot's `fatload` finds it by the long name. Six files: the three boot stages you built and the three FITs you signed. Nothing else goes on the card; the boot commands are compiled into `u-boot.img`. + +{{% notice Note %}} +If you prefer not to edit the image on the host, flash TI's `.wic.xz` to the card unchanged. balenaEtcher reads `.wic.xz` directly, and on Linux `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress` does the same. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same six files in. +{{% /notice %}} + +## Write the card + +Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Then write the image to the whole card: + +```bash +sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress +``` + +{{% notice Warning %}} +Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. +{{% /notice %}} + +`conv=fsync` makes `dd` wait until the data is on the card before it returns. The image is 129 MiB, so the rest of the card stays unused; the ROM only reads the first partition. + +On Windows or macOS, write `sdcard.img` with balenaEtcher. + +## Set the boot switches + +The boot switches tell the ROM where to look for `tiboot3.bin`. On the AM62L EVM, **ON** means HIGH, with the knob towards the **ON** label on the switch bank. + +The EVM has two ways to set the boot mode, both from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8) (SPRUJG8B). The full pincount setting uses all 16 BOOTMODE bits across three switch banks. The reduced pincount setting uses only the four switches of **SW3**. Either one selects the SD card. Start with the reduced setting: four switches leave fewer ways to get it wrong. + +The full pincount value is BOOTMODE `0x0E43`: SD card in filesystem mode as the primary boot device, UART as backup, 25 MHz reference clock. Set the three banks like this: + +| Bank | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +|---|---|---|---|---|---|---|---|---| +| **SW4** (BOOTMODE 0-7) | ON | ON | OFF | OFF | OFF | OFF | ON | OFF | +| **SW2** (BOOTMODE 8-11) | OFF | ON | ON | ON | | | | | +| **SW3** (BOOTMODE 12-15) | OFF | OFF | OFF | OFF | | | | | + +The reduced pincount setting uses only **SW3**; the ROM ignores **SW2** and **SW4**: + +| Bank | 1 | 2 | 3 | 4 | +|---|---|---|---|---| +| **SW3** | OFF | ON | OFF | ON | + +## Connect the console and power on + +Connect the micro-USB port **J7** to your host. The USB-to-serial chip behind it (an FTDI FT4232HL) creates four serial ports: SoC UART0, SoC UART1, WKUP UART0 and SoC UART4. The console is SoC UART0, at 115200 baud, 8 data bits, no parity, one stop bit. On Linux it is usually the first port, `/dev/ttyUSB0`. Open it: + +```bash +picocom -b 115200 /dev/ttyUSB0 +``` + +If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press the `Ctrl` key and `A`, then `Ctrl` and `X`. + +Move the SD card from the host to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Early in the log, the line the SPL prints when it starts shows the device type: + +```output +SoC: AM62LX SR1.0 HS-FS +``` + +`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. + +## Watch the trusted image boot + +U-Boot counts down for three seconds and then runs `bootcmd` on its own. That automatic run is called autoboot, and `bootcmd` is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. + +Your `Created` time, `Hash value` and read time differ; the lines that matter are the same. The output is similar to: + +```output +60198 bytes read in 7 ms (8.2 MiB/s) +## Loading kernel (any) from FIT Image at 90000000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK + Trying 'kernel-1' kernel subimage + Description: Zephyr RTOS image + Created: 2026-09-11 14:40:50 UTC + Type: Kernel Image + Compression: uncompressed + Data Start: 0x900000e8 + Data Size: 58340 Bytes = 57 KiB + Architecture: AArch64 + OS: U-Boot + Load Address: 0x82000000 + Entry Point: 0x82000000 + Hash algo: sha256 + Hash value: 1d1d375f14c3354579e9e5310986a69b831bcd1944cd6b35aa8e83632b658166 + Verifying Hash Integrity ... sha256+ OK + Loading Kernel Image to 82000000 +## Starting application at 0x82000000 ... +*** Booting Zephyr OS build 4.4.2 *** + +################################################ +# # +# Hello from ZEPHYR IMAGE A # +# signed with key-a (TRUSTED by U-Boot) # +# # +################################################ + +board : am62l_evm/am62l3/a53 +arch : arm64 +started by : U-Boot 'go' after FIT signature verification +this image was verified by U-Boot before it ran. +``` + +Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and you'll see one in the next run. + +`go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. + +## Refuse the wrong key + +Zephyr is now running and U-Boot is gone, so power the board off and on. This time press a key during the countdown to stop autoboot. At the prompt, run the wrong-key test: + +```console +=> run b +``` + +The expected output is: + +```output +... + Verifying Hash Integrity ... sha256,rsa2048:key-b- error! +Verification failed for '' hash node in 'conf-1' config node +Failed to verify required signature 'key-key-a' +Bad Data Hash +ERROR -2: can't get kernel image! +*** REFUSED: Zephyr was NOT started *** +``` + +U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The first line says it found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. + +Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You are back at the U-Boot prompt; image B never ran. + +## Refuse the tampered image + +You are still at the prompt. Run the tampered test: + +```console +=> run t +``` + +The expected output is: + +```output +... + Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK + Trying 'kernel-1' kernel subimage + ... + Verifying Hash Integrity ... sha256 error! +Bad hash value for 'hash-1' hash node in 'kernel-1' image node +Bad Data Hash +ERROR -2: can't get kernel image! +*** REFUSED: Zephyr was NOT started *** +``` + +This time the signature check passes and the hash check fails. That surprises people at first, and it is exactly what the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. `mkimage` signed the configuration node and the `hash-1` node of the image, and neither has changed. The byte you flipped when you [signed the images](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/) is in the payload, so the payload no longer matches that signed hash. The signature makes the hash trustworthy, and the hash catches the change. U-Boot stops before `bootm loados` again. + +To boot the trusted image again, type `run a` at the prompt. + +## If nothing prints + +If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list, because each step removes one suspect: + +1. Open all four serial ports that **J7** creates. Windows doesn't always number SoC UART0 first, and on Linux it isn't always `/dev/ttyUSB0`. +2. Check the boot switches against the tables, or try the other setting. +3. Check the card layout. A FAT32 boot partition with 512-byte clusters gives exactly this symptom; the FAT16 partition from TI's image is the known-good template. +4. Flash TI's unchanged `.wic.xz` to a card and boot it. That image is TI's own and boots as shipped. If it prints nothing either, the cause is the switches, the port, or the power, not your files. +5. If TI's own card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours and write the card again: `mcopy -o -i $M $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. `u-boot.img` carries the key and the boot command, so the check you are testing doesn't change. + +If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A_NS` is missing from the [Zephyr build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). + +## What you've accomplished and what's next + +You built a bootable SD card from TI's own boot partition and set the switches. Then you watched U-Boot on real silicon accept the FIT signed with `key-a`, refuse the one signed with `key-b`, and refuse the one changed after signing. U-Boot now enforces the U-Boot to Zephyr link of the boot chain, from an unmodified source tree. + +Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) covers what this proves and what it doesn't, and lists what a production device needs on top of it: a fused key, a locked console, and no other boot path. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md new file mode 100644 index 0000000000..661c1e42c7 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md @@ -0,0 +1,97 @@ +--- +title: Review what is verified and what production needs +description: Separate what the three board runs proved from what they did not, then list the changes a production device needs before the whole chain can be trusted. +weight: 8 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## What you've proved + +You ran three images through the same boot command on real silicon. `a`, `b` and `t` only set the file name and then run the same `zboot`, so the result depends on the signature and the hash, not on the file name or on which of the three you typed. + +The three runs on the [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) gave these results: + +| Command | Image | What is different | Result | +|---|---|---|---| +| `run a` | `zephyr-a.itb` | Signed with `key-a` | Zephyr starts | +| `run b` | `zephyr-b.itb` | Signed with `key-b`, a key U-Boot doesn't have | Refused: `Failed to verify required signature 'key-key-a'` | +| `run t` | `zephyr-tampered.itb` | Signed with `key-a`, one payload byte changed after signing | Refused: `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` | + +So on the AM62L EVM, Zephyr runs only if its FIT is signed by the key compiled into U-Boot, and any change to the image after signing is caught. `go` never runs unless `bootm start` says yes. + +You did this without changing a line of U-Boot source. The public key went into the control device tree through `CONFIG_DEVICE_TREE_INCLUDES`, and the boot commands went in through `CONFIG_PREBOOT`. Both are build configuration, so you can carry them to a newer TI U-Boot without maintaining a patch. + +Most of what you built is not tied to TI. The section *Take it to another Cortex-A board* on this page separates the generic parts from the board-specific ones. + +## What you haven't proved + +Each stage checks the next, so the whole chain is only as trustworthy as the stage that checked U-Boot. Your check lives in U-Boot; the question is who checked U-Boot. + +TI K3 devices come in two security states, which you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/). On an HS-SE (High Security, Security Enforced) device the customer's key is burned into eFuses, and the device refuses any boot file that isn't signed with it. + +An HS-FS (High Security, Field Securable) device is the same silicon before the key is burned. The check still runs, but there is no customer key to compare against, so a file signed with any key passes. + +The EVM ships as HS-FS. The SPL banner told you so: `SoC: AM62LX SR1.0 HS-FS`. TI signs `tiboot3.bin`, `tispl.bin` and `u-boot.img` with a development key that ships in the U-Boot source. On HS-FS, the ROM and TIFS accept it. + +So the checks on `tiboot3.bin`, `tispl.bin` and `u-boot.img` run on your board, but they can't refuse anything. U-Boot enforces only the last link, U-Boot to Zephyr. + +Why this matters: the public half of `key-a` lives inside `u-boot.img`, and `u-boot.img` sits on an unprotected FAT partition. Anyone who can write the card can replace `u-boot.img` with one that carries their own key, or a key node without the `required` property. So the root of trust, the key everything else is checked against, is in a file on the card, not yet in silicon. + +## What production needs + +Each of the following changes closes one gap left open by the demo setup. + +### Fuse your key and move to HS-SE + +TI's keywriter procedure burns your key into the eFuses, and you re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with it. From then on the ROM and TIFS refuse any `u-boot.img` that isn't signed with your key, so the `key-a` public half it carries is itself authenticated and the root of trust is in silicon. The procedure is TI-specific and out of scope here. + +### Keep the environment built in + +U-Boot's environment is its set of named variables. `bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. `saveenv` writes the variables to storage. TI's configuration ends up with `CONFIG_ENV_IS_NOWHERE=y` (the default when no environment storage is chosen), so `saveenv` has nowhere to write and both variables always come from the binary you built. Keep it that way, because a writable environment is a writable boot command. + +{{% notice Warning %}} +Don't enable `CONFIG_ENV_IS_IN_FAT` on a production build. It stores the environment in a `uboot.env` file on the boot media (the SD card with `CONFIG_ENV_FAT_DEVICE_AND_PART="1:1"`; TI's default `"0:1"` is the eMMC), and a saved environment overrides `bootcmd` and `preboot`. Anyone with the card can then set `bootcmd` to `fatload` and `go` and skip the check. It's a development convenience only. +{{% /notice %}} + +### Lock the console + +With `CONFIG_BOOTDELAY=3`, anyone with a serial cable can press a key during the countdown, get the `=>` prompt and type `fatload` and `go` by hand. Set `CONFIG_BOOTDELAY=-2` (autoboot with no delay and no check for a key press), or use `CONFIG_AUTOBOOT_KEYED` so that only a known string stops autoboot. Both settings only cover the countdown. If `bootcmd` returns, for example after a refused image, U-Boot still drops to the `=>` prompt. On a production build, end `zboot` with `reset` after the `echo`, so a refusal restarts the board instead of opening a prompt. + +### Close the other boot paths + +Every boot command compiled into U-Boot is one that someone at the prompt, or a boot script on the card, can run instead of `zboot`, and none of them goes through your check. TI's configuration turns on several: + +| Path | Symbols | What it can do | +|---|---|---| +| Standard boot (bootstd, bootflow) | `CONFIG_BOOTSTD_FULL=y` | Scans storage for something to boot and starts it | +| EFI | `CONFIG_EFI_LOADER=y`, `CONFIG_CMD_BOOTEFI=y` | Starts an EFI application from the card | +| Raw kernel commands | `CONFIG_CMD_BOOTI=y`, `CONFIG_CMD_BOOTZ=y` | Starts a bare Linux kernel file with no FIT and no signature | +| Network and DFU (Device Firmware Upgrade) | `CONFIG_CMD_NET=y`, `CONFIG_CMD_DFU=y` | Loads an image over Ethernet or USB | + +`CONFIG_LEGACY_IMAGE_FORMAT` is already off, which is right, because that older single-image format carries no signature. Audit the rest and turn off everything your product doesn't use. + +### Use real keys and keep them off the build machine + +`sha256,rsa2048` is fine for a demo. TI's own K3 flow uses `sha512,rsa4096`. To match it, change `rsa_keygen_bits:2048` to `rsa_keygen_bits:4096` in the `openssl genpkey` command from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), and `algo = "sha256,rsa2048"` to `algo = "sha512,rsa4096"` in `zephyr-a.its` and in the `key.its` carrier; the commands stay the same. Generate the production key on a hardware security module (HSM), or at least on a machine that isn't the build host. The `key-a` and `key-b` pairs you generated there in `$KEYS` are throwaway. + +### Sign in a release step + +Running `mkimage -k` on a developer machine is fine for `key-a`. For the production key, signing belongs in the release pipeline, the only place that holds the private key. No developer machine ever sees it. + +## Take it to another Cortex-A board + +The board-specific parts are few, and most of them sit on one line of the boot command. Three things change. + +The first is the load address. `0x82000000` is the start of the memory node that the AM62L board device tree selects as `zephyr,sram`, so it is Zephyr's link address, the FIT `load` and `entry`, and the `go` target. On another board, take the start of that node from its device tree source (DTS) and use it in all three places. Load the FIT itself at a different address, as you did with `0x90000000`; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. + +The second is the storage device and partition in `fatload`. `mmc 1:1` means MMC device 1, partition 1: on the AM62L EVM that is the SD card's FAT partition, while `mmc 0` is the eMMC. On your board both numbers can differ. + +The third is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Some boards take the DTB from a prior stage instead (`CONFIG_OF_BOARD`). On those, the `/signature` node has to go into that DTB, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same `key.its` carrier from the [U-Boot page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. + +What doesn't change is the `.its` file apart from the addresses, the keys, and the `signature.dtsi` recipe. The shape of the boot command, `bootm start && bootm loados && ... go`, and the three test images also stay the same. U-Boot's FIT signature check is generic code, not board code, so it behaves the same everywhere. + +## What you've accomplished + +You can now say what your board verifies and what it doesn't, and you have a checklist of the changes between a working demo and a production device. The signing flow, the way the public key goes into U-Boot, and the boot command are generic. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the three board-specific items and keep the rest. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md new file mode 100644 index 0000000000..0af69b94b1 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -0,0 +1,80 @@ +--- +title: Boot Zephyr from a signed FIT image with U-Boot on Arm Cortex-A + +description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on an Arm Cortex-A board only after U-Boot verifies it, using the TI AM62L EVM as the example. + +minutes_to_complete: 120 + +who_is_this_for: This is an advanced topic for embedded developers who run Zephyr on an Arm Cortex-A processor behind U-Boot and want the bootloader to verify the Zephyr image before it starts. + +learning_objectives: + - Explain where a Zephyr image sits in the Cortex-A boot chain and which stage can verify it + - Build and sign a Zephyr image in a FIT, and build the public key into U-Boot without changing U-Boot source + - Write a U-Boot boot command that starts Zephyr only after the signature and hash checks pass, and prove it on the board with a wrong key and a tampered image + - Explain what an HS-FS board leaves unverified and what a production device needs, such as a fused key, a locked console and no unverified boot path + +prerequisites: + - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card, a micro-USB cable for the console, and a USB-C PD power supply + - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space + - A Zephyr workspace with Zephyr 4.4 or later and the Zephyr SDK, set up as described in the [Zephyr Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html) + - Basic knowledge of U-Boot and the Linux command line + +author: Roy Jamil + +# New Learning Paths are opted in for the next manual generated summary/FAQ run. +# The generator resets this to false after a successful write. +generate_summary_faq: true + +# Optional one-shot controls: set either field to true to regenerate just that +# generated section the next time the summary/FAQ tool runs. The tool resets +# them to false after a successful write. +rerun_summary: false +rerun_faqs: false + +### Tags +skilllevels: Advanced +subjects: Security +armips: + - Cortex-A +tools_software_languages: + - Zephyr + - U-Boot + - OpenSSL + - GCC + - C +operatingsystems: + - RTOS + - Linux + +further_reading: + - resource: + title: U-Boot FIT signature verification + link: https://docs.u-boot.org/en/latest/usage/fit/signature.html + type: documentation + - resource: + title: U-Boot documentation for TI K3 boards, including the secure boot chain of trust + link: https://docs.u-boot.org/en/latest/board/ti/k3.html + type: documentation + - resource: + title: Zephyr AM62L EVM board documentation + link: https://docs.zephyrproject.org/latest/boards/ti/am62l_evm/doc/index.html + type: documentation + - resource: + title: TI Processor SDK Linux for AM62Lx 12.01.00.05.03 + link: https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03 + type: website + - resource: + title: AM62L EVM User's Guide + link: https://www.ti.com/lit/pdf/SPRUJG8 + type: documentation + - resource: + title: AC6 Zephyr Training + link: https://www.ac6-training.com/en/cours.php/cat_oRT/ref_oRT5/zephyr-rtos-programming + type: website + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_next-steps.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_next-steps.md new file mode 100644 index 0000000000..c3db0de5a2 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation. +title: "Next Steps" # Always the same, html page title. +layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing. +--- diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg new file mode 100644 index 0000000000..6b1e723bed --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg @@ -0,0 +1,73 @@ + + AM62L boot chain with the U-Boot to Zephyr verification added + + + + + + + + + + + + Checked by TI's ROM and security firmware. On an HS-FS device, TI's development key is accepted. + + + + + Checked by U-Boot with your key. This Learning Path. + + + + + + + + Boot ROM + inside the SoC + loads tiboot3.bin + + + + tiboot3.bin + TF-A BL1 + TIFS firmware + loads tispl.bin + + + + tispl.bin + TF-A BL31, OP-TEE, SPL + loads u-boot.img + + + + u-boot.img + U-Boot, with key-a's + public key inside + + + + zephyr-a.itb + FIT image: Zephyr, + signed with key-a + + + + + + + + + + ROM checks + TIFS checks + TIFS checks + U-Boot checks + the FIT signature + + + + Each stage loads the next one and checks it before running it. The last link is new: U-Boot verifies the RSA signature and the + SHA-256 hash inside zephyr-a.itb, copies Zephyr to 0x82000000, and starts it with go. Anything that fails a check never runs. + diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg new file mode 100644 index 0000000000..3999fa8247 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg @@ -0,0 +1,71 @@ + + What the FIT signature covers and how U-Boot checks it + + + + + + + + + + + + + zephyr-a.itb (the FIT image, a device tree blob) + + + + images / kernel-1 + type = "kernel", os = "u-boot" + load = entry = 0x82000000 + + + hash-1 + sha256 of the Zephyr bytes + + + the hash covers the bytes + + + data + zephyr.bin, about 58 KB + the bytes that run + + + + configurations / conf-1 + kernel = "kernel-1" + signature-1 + sha256,rsa2048 with key-a + signs conf-1 and hash-1 + + + + the signature covers + the hash node, not the bytes + + + + u-boot.img (control device tree) + + /signature/key-key-a + rsa,modulus, rsa,exponent (public key) + required = "conf" + + + + + + + bootm start, then bootm loados + 1. Verify signature-1 with key-a + 2. Verify hash-1 against the bytes + 3. Copy the bytes to 0x82000000 + Then: go 0x82000000 + + + + Signed with another key: step 1 fails, "Failed to verify required signature 'key-key-a'". + One byte changed after signing: step 1 still passes, step 2 fails, "Bad hash value for 'hash-1'". Zephyr never starts in either case. + From bbd69e0ad8dfff48fa03670f3163ef4b6182a8f2 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 15 Sep 2026 17:12:25 +0300 Subject: [PATCH 02/66] Learning Path: build Zephyr with Workbench for Zephyr, split the refusal tests out, redo diagrams - Page 3 now uses Workbench for Zephyr in VS Code: import the AArch64 toolchain, add a Zephyr 4.4.2 workspace (Texas Instruments template), create and build the application, with annotated screenshots of each wizard and of the build. - New page 7 holds the optional tests: second image signed with key-b, tampered copy, fit_check_sign on both, and the two refusals on the board. Pages 3-6 keep only the trusted image; the production review is now page 8. - Page 1 shows a generic Cortex-A boot chain first, then the AM62L one; the diagrams use Arial and the AM62L labels match the binman packaging (BL1+TIFS, BL31+OP-TEE+SPL). - Prerequisites point at the Workbench for Zephyr Learning Path; further reading links the three Ac6 courses, and page 8 ends with a short pointer to them. --- .../1-boot-chain.md | 16 +- .../2-set-up-tools.md | 20 +- .../3-build-zephyr.md | 185 +++++++-------- .../4-sign-zephyr.md | 54 +---- .../5-build-uboot.md | 53 +---- .../6-boot-the-board.md | 82 ++----- .../7-test-the-checks.md | 211 ++++++++++++++++++ .../{7-production.md => 8-production.md} | 20 +- .../_index.md | 22 +- .../images/boot-chain-generic.svg | 50 +++++ .../images/boot-chain.svg | 102 ++++----- .../images/fit-signature.svg | 2 +- .../images/wz-add-application.webp | Bin 0 -> 85712 bytes .../images/wz-add-toolchain.webp | Bin 0 -> 82626 bytes .../images/wz-add-west-workspace.webp | Bin 0 -> 79382 bytes .../images/wz-build.webp | Bin 0 -> 123594 bytes 16 files changed, 469 insertions(+), 348 deletions(-) create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md rename content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/{7-production.md => 8-production.md} (80%) create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-toolchain.webp create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-west-workspace.webp create mode 100644 content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-build.webp diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index cfd2796cc2..a82e6f79c2 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -15,7 +15,7 @@ A Cortex-A processor boots differently. The processor starts in a ROM (read-only That order is what makes verification possible. The stage that runs before Zephyr can check Zephyr before it starts it. On a Cortex-A board, that stage is usually U-Boot, the open-source bootloader that many Arm boards use to load an operating system from storage and start it. -U-Boot packs a program and its signature into a FIT (Flattened Image Tree) image; a later section on this page explains what one contains. Everyone documents signed FIT for Linux, and secure boot for Zephyr on Cortex-M. Nobody documents the one you actually need: Zephyr, signed, on a Cortex-A. This Learning Path covers that combination on real hardware, the TI AM62L EVM (TI's evaluation board for the AM62L). The FIT, the keys, the way the key goes into U-Boot and the boot command are generic, so you can move them to any Cortex-A board that runs U-Boot. The SDK, the SD card layout and the boot switches are specific to TI. +A U-Boot host tool packs a program and its signature into a FIT (Flattened Image Tree) image, and U-Boot checks it; a later section on this page explains what one contains. Everyone documents signed FIT for Linux, and secure boot for Zephyr on Cortex-M. Nobody documents the one you actually need: Zephyr, signed, on a Cortex-A. This Learning Path covers that combination on real hardware, the TI AM62L EVM (TI's evaluation board for the AM62L). The FIT, the keys, the way the key goes into U-Boot and the boot command are generic, so you can move them to any Cortex-A board that runs U-Boot. The SDK, the SD card layout and the boot switches are specific to TI. ## The boot chain on a Cortex-A board @@ -27,6 +27,10 @@ You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE come prebui Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps. A check is a signature verification: the stage holds a public key, and it refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. +![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. The first two arrows are checked by the vendor's ROM and firmware; the last arrow, from U-Boot to Zephyr, is checked by U-Boot with your key and is the link this Learning Path adds.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") + +The first three boxes differ from one silicon vendor to the next, in names, file formats and signing tools. The last arrow is the same everywhere, because it's U-Boot's own FIT verification. + On the AM62L, which has only Cortex-A53 cores, the chain that TI's U-Boot documentation for the K3 family describes has four steps. One TI name appears in it: TIFS (TI Foundational Security) is TI's security firmware, and it checks the boot files that the ROM doesn't. The four steps are: | Step | What loads what | Who checks it | @@ -38,7 +42,7 @@ On the AM62L, which has only Cortex-A53 cores, the chain that TI's U-Boot docume In plain words: TI's chip checks the first three files itself, and U-Boot checks the fourth. That fourth check is the one you set up, and Zephyr is the file it checks. You build `tiboot3.bin`, `tispl.bin` and `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). -![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image, with an arrow at each step showing which stage checks the next one. Notice that the last arrow, from U-Boot to Zephyr, is the check this Learning Path adds.#center](images/boot-chain.svg "The AM62L boot chain and the check at each step") +![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") ## What a FIT image is @@ -56,22 +60,22 @@ The configuration is the node U-Boot boots from: it names the image (`kernel = " The signature uses RSA (Rivest-Shamir-Adleman), the public and private key pair described earlier. This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. -The public key lives inside U-Boot's own device tree, called the control device tree, under a `/signature` node, with one subnode per key. One property of that key node matters most: `required = "conf"`, where `conf` is short for configuration. It means every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. That property is what makes the check fail closed: when U-Boot can't verify a FIT, nothing boots. Without `required`, the check fails open: a FIT with no signature at all still boots, as if no check existed. +The public key lives inside U-Boot's own device tree, called the control device tree, under a `/signature` node, with one subnode per key. One property of that key node matters most: `required = "conf"`, where `conf` is short for configuration. It means every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. That property is the fail-closed rule: when U-Boot can't verify a FIT, nothing boots. Without `required`, the check fails open: a FIT with no signature at all still boots, as if no check existed. ![Diagram of a signed FIT image next to U-Boot's control device tree. The FIT contains an images node with the Zephyr binary and its hash, and a configurations node with a signature. The control device tree contains a /signature node holding the public key with required set to conf. Arrows show the signature covering the configuration and the hash node, and the hash covering the image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") -The diagram shows one detail that matters later. The signature does not cover the bytes; it covers the hash of the bytes. `mkimage` signs the configuration node plus the hash node of each image the configuration lists. The hash node covers the image bytes. The signature is what makes that hash trustworthy, so between them they cover everything. So if someone flips a byte in the image after signing, the signature still verifies, and the hash check is what fails. You'll see exactly that on the board when you boot a tampered image. +The diagram shows one detail that matters later. The signature does not cover the bytes; it covers the hash of the bytes. `mkimage` signs the configuration node plus the hash node of each image the configuration lists. The hash node covers the image bytes. The signature is what makes that hash trustworthy, so between them they cover everything. The optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows what that split means in practice: a tampered image passes the signature check and fails the hash check. ## What this Learning Path adds -What this Learning Path adds is the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source. Both the public key and the boot command go in as Kconfig options when you build U-Boot, so you can carry them to a newer U-Boot without a patch. U-Boot's job here is to check Zephyr, not to boot an operating system; the page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows how the boot command does that. +This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source. Both the public key and the boot command go in as Kconfig options when you build U-Boot, so you can carry them to a newer U-Boot without a patch. U-Boot's job here is to check Zephyr, not to boot an operating system; the page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows how the boot command does that. What this Learning Path doesn't do is put your key into the chip. TI devices hold the owner's key in eFuses, one-time-programmable bits in silicon. A chip with that key fused is called HS-SE (High Security, Security Enforced): it refuses any boot file not signed with the owner's key. A chip without it yet is HS-FS (High Security, Field Securable): the check still runs, but with no key to compare against, any key passes. The EVM ships as HS-FS, and its first three boot files are signed with TI's development key. So on this board the first three checks run but can't refuse anything, while the fourth, U-Boot checking Zephyr, refuses on HS-FS and HS-SE alike. You see the device type on the serial console when you boot the board. {{% notice Note %}} -Moving a device to HS-SE, fusing your own key and re-signing the boot files with it, is a separate TI procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) lists what that step changes and what else production needs. +Moving a device to HS-SE, fusing your own key and re-signing the boot files with it, is a separate TI procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what that step changes and what else production needs. {{% /notice %}} ## What you've learned and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index a9be2fafdb..17828cee58 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -11,23 +11,9 @@ layout: learningpathall The board is the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM). It boots from a micro-SD card, so you need one and a way to write it from your host. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, which is usually, but not always, the first. You open it when you boot the board. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. -The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with at least 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The TI SDK download alone is 4.5 GB, and it unpacks to 11 GB of U-Boot source, Linux toolchain and prebuilt images. You can delete the installer after the install. +The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with about 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The TI SDK download alone is 4.5 GB, and it unpacks to 11 GB of U-Boot source, Linux toolchain and prebuilt images. You can delete the installer after the install. -You also need a Zephyr workspace with Zephyr 4.4 or later and the Zephyr SDK. Set both up as described in the [Zephyr Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html). This page doesn't repeat those steps. - -From inside your Zephyr workspace (for example `cd ~/zephyrproject`, with its Python virtual environment active if you use one), check that the tree knows the board: - -```bash -west boards | grep am62l -``` - -The expected output is: - -```output -am62l_evm -``` - -If nothing prints, your Zephyr checkout doesn't have the board yet. Update it to 4.4 or later before you continue, because the board files set the address Zephyr is built to run at, and every later page uses that address. +You build Zephyr with Workbench for Zephyr, an open-source Visual Studio Code extension by Ac6 that installs the Zephyr host tools, imports toolchains and manages West workspaces for you. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: the AM62L needs Zephyr 4.4 or later and an AArch64 toolchain, and you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## Install the host packages @@ -70,7 +56,7 @@ Load the file and create the directories the later pages write into: ```bash source $HOME/zephyr-secure-boot/env.sh -mkdir -p $KEYS $FIT $WORK/app +mkdir -p $KEYS $FIT ``` The first group of variables points into the TI SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, and `CROSS` is the cross compiler prefix. `SYSROOT` is there because the SDK's compiler can't find its own libraries without `--sysroot`; the U-Boot pages pass it through the `CC` variable of `make`. `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 099782b667..ba62e5db42 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -1,34 +1,95 @@ --- title: Build a Zephyr image that U-Boot can start -description: Write a small Zephyr application, build it with west for the Cortex-A53 on the TI AM62L EVM, and check that the binary starts with a branch instruction so U-Boot can jump to it with go. +description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for the Cortex-A53 on the TI AM62L EVM, then check that the binary starts with a branch instruction that U-Boot's go command can jump to. weight: 4 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Create a small Zephyr application +## Open Workbench for Zephyr -Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. +You build Zephyr in Visual Studio Code with Workbench for Zephyr, which you installed with its host tools on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same two steps with what the AM62L needs: the AArch64 toolchain and a Zephyr 4.4 workspace made from the Texas Instruments template. -The application is a hello world that prints a banner. The banner names the image, so later, when U-Boot starts one of several images, the console tells you which program ran. That's the only reason the text is so loud. - -Create the application directory: +Open VS Code on your working directory: ```bash -mkdir -p $WORK/app/hello/src +code $HOME/zephyr-secure-boot ``` -Create `$WORK/app/hello/CMakeLists.txt` with the standard four lines of a Zephyr application: +Then select the **Workbench for Zephyr** icon in the Activity Bar. The panel has one view per thing you manage: **Applications**, **West workspaces**, **Toolchains** and **Host tools**. + +{{% notice Note %}} +The screenshots on this page were taken on Windows, so the paths in them start with `C:\Users\`. On your Ubuntu host the same fields take paths that start with `/home/`. That machine also had the Zephyr SDK installed globally already, so its **Toolchains** view tags the SDK `[global]` and its build log finds the compiler under a `zephyr-sdk-1.0.1` directory in the user's home; yours shows the `tools` directory you choose. Everything else is identical. +{{% /notice %}} + +## Import the AArch64 toolchain + +The Cortex-A53 cores of the AM62L run AArch64 code, so you need the Zephyr SDK's `aarch64-zephyr-elf` compiler. The SDK's Minimal type lets you download only that one. + +In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: + +- **Toolchain family**: **Zephyr SDK** +- **Source**: **Official** +- **Destination**: **Custom location** +- **SDK Type**: **Minimal** +- **Version**: v1.0.1 +- **aarch64** checkbox selected, with the other architecture checkboxes left clear +- **Location**: a directory for the SDK, for example `/home/user/zephyr-secure-boot/tools` + +![The Add Toolchain form in Workbench for Zephyr with red rectangles around the fields to set: Add Toolchain in the sidebar, the Zephyr SDK family, the Minimal SDK type, the version v1.0.1, the selected aarch64 architecture, the Location field and the Import button#center](images/wz-add-toolchain.webp "Add Toolchain, filled in for the AM62L") + +Select **Import**. Workbench downloads the SDK and the AArch64 compiler, which takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. + +## Add a West workspace with Zephyr 4.4 or later + +Board support for the AM62L EVM entered Zephyr in version 4.4, so the workspace needs Zephyr 4.4.0 or later. Select **Add West Workspace** and fill in the form: + +- **Source location**: **From template** +- **Minimal**, not **Full**, in the pair of options under the **Path** field +- **Template**: **Texas Instruments**, which pulls the TI HAL module next to Zephyr +- **Revision**: v4.4.2, or a later 4.x release +- **Location**: `/home/user/zephyr-secure-boot` +- **Subfolder**: `zephyrproject` + +![The Add West Workspace form in Workbench for Zephyr with red rectangles around the fields to set: Add West Workspace in the sidebar, the From template source, the Minimal option, the Texas Instruments template, the v4.4.2 revision, the Location field and the Import button#center](images/wz-add-west-workspace.webp "Add West Workspace, set to Zephyr 4.4.2 with the Texas Instruments template") + +Select **Import**. Workbench clones Zephyr, the TI HAL and the other modules the template lists into `zephyrproject/deps`. This is the longest step on this page. When it finishes, `zephyrproject` appears in the **West workspaces** view. + +## Create the application + +Select **Add Application** and fill in the wizard: + +- **Select West Workspace**: `zephyrproject` +- **Select Toolchain**: `zephyr-sdk-1.0.1` +- **SDK Variant**: **GNU GCC** +- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)**, Zephyr identifier `am62l_evm/am62l3/a53` (the AM62L EVM board, the AM62L3 SoC variant, the A53 cluster) +- **New or existing application?**: **Create new application** +- **Select template**: `hello_world`, the one under `deps/zephyr/samples/hello_world` +- **Project Name**: `hello`, replacing the sample name the wizard fills in +- **Application type**: **West workspace application** +- **Project Location**: filled in by the wizard as `zephyrproject/applications/hello` inside your working directory, the path the later pages use -```cmake -cmake_minimum_required(VERSION 3.20.0) -find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) -project(hello) -target_sources(app PRIVATE src/main.c) +![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM") + +Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and Workbench creates `zephyrproject/applications/hello` with the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. + +## Replace the sample's files + +Leave the sample's `CMakeLists.txt` as it is and replace the other two files. + +Replace the contents of `prj.conf` with these four lines: + +```text +CONFIG_ARMV8_A_NS=y +CONFIG_PRINTK=y +CONFIG_BOOT_BANNER=y +CONFIG_AARCH64_IMAGE_HEADER=y ``` -Create `$WORK/app/hello/src/main.c` with the following code: +`CONFIG_PRINTK` gives you `printk()` on the console. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, which is the first sign that the jump from U-Boot landed. The other two options have their own section. + +Replace the contents of `src/main.c` with the following code. The banner names the image and its key, so the console tells you which program ran; that matters on the optional [test page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), where U-Boot is offered a second image with a different banner. That's the only reason the text is so loud. ```c #include @@ -52,61 +113,37 @@ int main(void) } ``` -Create `$WORK/app/hello/prj.conf` with the following four lines: - -```text -CONFIG_ARMV8_A_NS=y -CONFIG_PRINTK=y -CONFIG_BOOT_BANNER=y -CONFIG_AARCH64_IMAGE_HEADER=y -``` - -`CONFIG_PRINTK` gives you `printk()` on the console. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, which is the first sign that the jump from U-Boot landed. The other two options deserve their own section. +Save both files. ## Two settings that matter -`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world. An Armv8-A processor runs code in one of two worlds, Secure or Non-secure, and some hardware keeps a separate set of registers for each world. On the AM62L, TF-A owns the Secure world and starts U-Boot, and then Zephyr, in the Non-secure world. The Generic Interrupt Controller (GIC) is one such piece of hardware, and Zephyr's GICv3 driver programs its Non-secure registers only when this option is set. Without it, the timer interrupt never arrives, and Zephyr hangs right after its banner. +`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one TF-A hands to U-Boot and U-Boot hands to Zephyr. The Generic Interrupt Controller (GIC) keeps a separate set of registers for each world, and Zephyr's GICv3 driver programs the Non-secure ones only when this option is set. Without it, the timer interrupt never arrives, and Zephyr hangs right after its banner. -`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The first instruction of that header is `b __start`, a branch to Zephyr's real entry point. U-Boot never parses this header in the flow you build here, and it doesn't need to. It jumps to the first byte of the image with `go 0x82000000`. The `go` command is only a jump to an address, and the branch takes it the rest of the way. Without the header, the first byte of the image is whatever the linker placed there, and `go` jumps into garbage. +`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header (arm64 is Linux's name for AArch64) at the start of `zephyr.bin`, in the same format as a Linux kernel image. The first instruction of that header is `b __start`, a branch to Zephyr's real entry point. U-Boot never parses this header in the flow you build here; it only needs the branch at offset 0. Without the header, the first byte of the image is whatever the linker placed there, and `go` jumps into garbage. The board configuration for `am62l_evm/am62l3/a53` already sets both options. Repeating them in `prj.conf` documents the intent, and protects you when you move the application to a board whose configuration doesn't set them. -## Build for the AM62L EVM - -Run `west` from inside your Zephyr workspace, for example `cd ~/zephyrproject`, and activate its Python virtual environment if you use one. `west` finds Zephyr from the workspace, and the application can live anywhere. - -Build the application for the Cortex-A53 cluster of the AM62L EVM: - -```bash -west build -p always -b am62l_evm/am62l3/a53 -d $WORK/build/hello $WORK/app/hello -``` - -The options are: - -- `-p always` forces a clean build, so nothing from a previous board leaks in. -- `-b am62l_evm/am62l3/a53` selects the board, the AM62L3 SoC variant, and the A53 cluster. -- `-d` sets the build directory, and the last argument is the application directory. +## Build the application -The result is `$WORK/build/hello/zephyr/zephyr.bin`, a raw binary linked to run at `0x82000000`. Check its size: - -```bash -stat -c %s $WORK/build/hello/zephyr/zephyr.bin -``` - -The output is similar to: +In the **Applications** view, right-click `hello` and select **Build**. Workbench runs `west build` for the board in the terminal, with the build directory `build/primary` inside the application; `primary` is the name of the default build configuration. Near the end of the build, the linker prints its memory report. The expected output is: ```output -58340 +Memory region Used Size Region Size %age Used + FLASH: 0 B 0 B + RAM: 4168 KB 2016 MB 0.20% + IDT_LIST: 0 B 32 KB 0.00% ``` -That's about 58 KB. The link address comes from the board's device tree, whose `zephyr,sram` memory node starts at `0x82000000`. That's past the first 32 MB of DDR, the board's RAM, where TF-A and OP-TEE live. On another board, read the address from that board's device tree. The same address appears on every following page: as the FIT `load` and `entry` address, and as the `go` target. +![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") + +There is no flash on this board target, and `RAM` is the part of the DDR, the board's main memory, that Zephyr may use. The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB, linked to run at `0x82000000`. The link address comes from the board's device tree, whose `zephyr,sram` memory node starts at `0x82000000`, past the first 32 MB of DDR where TF-A and OP-TEE live. On another board, read the address from that board's device tree. The same address appears on every following page: as the FIT `load` and `entry` address, and as the `go` target. ## Check the image starts with a branch -Before you sign anything, check that the header is really there. Print the first four bytes of the binary: +Before you sign anything, check that the header is really there. Open a terminal (**Terminal > New Terminal** in VS Code, or any shell) and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. Then print the first four bytes of the binary: ```bash -od -An -tx1 -N4 $WORK/build/hello/zephyr/zephyr.bin +od -An -tx1 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin ``` The expected output is: @@ -117,12 +154,12 @@ The expected output is: The `od` options are: `-An` drops the address column, `-tx1` prints hex bytes, and `-N4` reads four bytes. -Read as a little-endian 32-bit word, that's `0x14000453`. The top six bits of that word, `000101`, encode an AArch64 `b` (branch) instruction, which is why the last byte printed reads `14`. The remaining 26 bits, `0x453`, are the branch distance counted in 4-byte instructions: `0x453` times 4 is `0x114c` bytes. In the build used to write this page, Zephyr's ELF entry point is `0x8200114c`, which is `0x82000000 + 0x114c`. So a jump to offset 0 lands on the branch, and the branch lands on `__start`. +Read as a little-endian 32-bit word, those four bytes are one AArch64 `b` (branch) instruction. The last byte printed, `14`, holds the opcode; the other three hold the distance to `__start`, Zephyr's real entry point, so they can differ in your build. Now check the header's magic number, a fixed four-byte marker that identifies an arm64 image. It sits at offset `0x38`: ```bash -od -An -c -j 0x38 -N4 $WORK/build/hello/zephyr/zephyr.bin +od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin ``` The expected output is: @@ -136,45 +173,11 @@ The magic is the four bytes `ARM\x64`. The `-c` option prints each byte as a cha That header is why U-Boot's boot command can use the fixed address `go 0x82000000`. The entry point of the ELF file moves whenever the code changes; offset 0 of the binary doesn't. {{% notice Note %}} -If the last of the four bytes isn't `14`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/build/hello/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. The first three bytes can differ from `53 04 00` in your build, because they hold the branch distance; the `14` byte and the magic are what matter. +If the last of the four bytes isn't `14`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/zephyrproject/applications/hello/build/primary/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. {{% /notice %}} -## Build a second image for the wrong-key test - -The next page signs three images: a trusted one, one signed with a key U-Boot doesn't know, and a tampered copy. The wrong-key image is a different program on purpose. If U-Boot ever runs it, the console says so in capital letters, and you can't mistake it for the trusted image. - -Copy the application and change the two banner lines: - -```bash -cp -r $WORK/app/hello $WORK/app/hello_b -sed -i 's/ZEPHYR IMAGE A/ZEPHYR IMAGE B/; s/key-a (TRUSTED by U-Boot) #/key-b (NOT trusted by U-Boot) #/' $WORK/app/hello_b/src/main.c -``` - -The replacement is the same length as the text it replaces, so the box stays aligned. - -Check the edit: - -```bash -grep -e 'IMAGE B' -e 'key-b' $WORK/app/hello_b/src/main.c -``` - -The expected output is: - -```output - printk("# Hello from ZEPHYR IMAGE B #\n"); - printk("# signed with key-b (NOT trusted by U-Boot) #\n"); -``` - -Build it into its own directory: - -```bash -west build -p always -b am62l_evm/am62l3/a53 -d $WORK/build/hello_b $WORK/app/hello_b -``` - -The result is `$WORK/build/hello_b/zephyr/zephyr.bin`, again about 58 KB. Only the text differs. The next page signs it with `key-b`, a key U-Boot doesn't know. - ## What you've accomplished and what's next -You've built two Zephyr images for the Cortex-A53 on the AM62L EVM, both linked at `0x82000000`. You've also checked that the trusted one starts with a branch instruction and carries the arm64 header. That's all U-Boot needs to start Zephyr with `go`, and all `mkimage` needs to wrap it in a FIT on the next page. +You've set up Workbench for Zephyr with an AArch64 toolchain and a Zephyr 4.4 workspace, and built one Zephyr image for the Cortex-A53 on the AM62L EVM, linked at `0x82000000`. You've also checked that it starts with a branch instruction and carries the arm64 header. That's all U-Boot needs to start Zephyr with `go`, and all `mkimage` needs to wrap it in a FIT on the next page. -Next, you [create the signing keys and sign the trusted image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), then make the two images that U-Boot must refuse. +Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index 6950e82767..3cdea0ed37 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -1,6 +1,6 @@ --- title: Create signing keys and sign the Zephyr image into a FIT -description: Build mkimage from the TI U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image, plus the wrong-key and tampered images that U-Boot must refuse. +description: Build mkimage from the TI U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image that U-Boot can verify. weight: 5 ### FIXED, DO NOT MODIFY @@ -49,7 +49,7 @@ If the `tools` build stops early, the fix depends on where it stops: RSA is the public-key algorithm U-Boot's FIT code verifies with. An RSA key pair has a private half that signs and a public half that verifies. The private key stays on the host. Only the public key goes into U-Boot, on the next page. -You create two pairs. `key-a` is the key U-Boot trusts. `key-b` exists only to be rejected: it's a real, valid key, but U-Boot never sees its public half. A key U-Boot doesn't know must fail exactly like no signature at all, and `key-b` is how you prove that on the board. +You create two pairs. `key-a` is the key U-Boot trusts. `key-b` exists only to be rejected: it's a real, valid key, but U-Boot never sees its public half. You use `key-b` on the optional test page, [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), to prove that U-Boot refuses a key it doesn't know. Generate both pairs with OpenSSL: @@ -74,7 +74,7 @@ key-a.crt key-a.key key-b.crt key-b.key The algorithm here is `sha256,rsa2048`, which is enough for a demo. The production page covers stronger keys and where to keep them. {{% notice Warning %}} -These are throwaway development keys, generated on the build machine. Production keys are generated and kept elsewhere. See [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/). +These are throwaway development keys, generated on the build machine. Production keys are generated and kept elsewhere. See [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). {{% /notice %}} ## Write the FIT source @@ -92,7 +92,7 @@ cat > $FIT/zephyr-a.its < $FIT/zephyr-b.its -$UBOOT_OUT/tools/mkimage -f $FIT/zephyr-b.its -k $KEYS $FIT/zephyr-b.itb -``` - -The listing now shows `Sign algo: sha256,rsa2048:key-b`. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. The payload is the `IMAGE B` program, so if it ever ran, the console would say so. - -For the tampered image, copy the trusted `.itb` and overwrite one byte inside the payload: - -```bash -cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb -printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null -``` - -`bs=1` makes `dd` count in bytes, `seek=32768` skips to that offset, and `conv=notrunc` keeps the rest of the file intact. The first `0xe8` bytes of the file belong to the FIT itself, and the 58340-byte Zephyr binary follows; you'll see that as `Data Start: 0x900000e8` on the board's console. So offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own nodes. - -Check that the copy now differs from the original: - -```bash -cmp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb -``` - -The output is similar to: - -```output -/home/user/zephyr-secure-boot/fit/zephyr-a.itb /home/user/zephyr-secure-boot/fit/zephyr-tampered.itb differ: byte 32769, line 94 -``` - -`cmp` counts bytes from 1, and the line number varies with the build. If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. - -This image proves that U-Boot catches a change made after signing. The signature still verifies and the hash fails, for the reason the boot-chain page gave: the signature covers the hash of the bytes, not the bytes. You'll watch both steps on the board. - -All three `.itb` files are the same size, 60198 bytes in this build. Size tells you nothing; only verification does. - ## What you've accomplished and what's next -You've built `mkimage` and `fit_check_sign` from the TI U-Boot tree, created two RSA key pairs, and signed Zephyr into `$FIT/zephyr-a.itb`. You've also made the two images that must fail, `zephyr-b.itb` and `zephyr-tampered.itb`. +You've built `mkimage` and `fit_check_sign` from the TI U-Boot tree, created two RSA key pairs, and signed Zephyr into `$FIT/zephyr-a.itb`. -You can't verify any of them yet: U-Boot doesn't have the key. On the next page, [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), you compile `key-a`'s public half into U-Boot's device tree and write the boot command. You then check all three images offline with `fit_check_sign` before touching the board. +You can't verify it yet: U-Boot doesn't have the key. On the next page, [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), you compile `key-a`'s public half into U-Boot's device tree and write the boot command. You then check the image offline with `fit_check_sign` before touching the board. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index d0bafb8e52..cf07b83c8b 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -1,6 +1,6 @@ --- title: Build U-Boot with the public key and a boot command that fails closed -description: Compile the public half of key-a into U-Boot's own device tree through Kconfig, add a boot command that starts Zephyr only after bootm verifies it, and prove on the host with fit_check_sign that only the trusted FIT verifies. +description: Compile the public half of key-a into U-Boot's own device tree through Kconfig, add a boot command that starts Zephyr only after bootm verifies it, and prove on the host with fit_check_sign that the trusted FIT verifies against that key. weight: 6 ### FIXED, DO NOT MODIFY @@ -52,7 +52,7 @@ CONFIG_RSA=y `CONFIG_FIT_SIGNATURE` and `CONFIG_RSA` are the verifier. `CONFIG_OF_SEPARATE` means the control DTB is built from source into a separate `u-boot.dtb`, which binman, U-Boot's image packaging tool, packs into `u-boot.img`, so you can add a node to it at build time. -Legacy image support is off: that older single-file format (uImage) carries no signature, so `bootm` has nothing unsigned to fall back to. Other boot commands still exist; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) covers them. +Legacy image support is off: that older single-file format (uImage) carries no signature, so `bootm` has nothing unsigned to fall back to. Other boot commands still exist; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers them. The only things missing are the key and the boot command. Both are build configuration, so the U-Boot source stays untouched. @@ -156,7 +156,7 @@ Why not a plain `bootm`? A full `bootm` runs a sequence of named steps and conti Why `&&` and not `;`? In U-Boot's shell, `a && b` runs `b` only if `a` succeeded; `a; b` runs `b` either way, so a failed check would fall through to `go` and boot the image anyway. The `&&` is what makes it fail closed. `go` never returns, so the `echo` after the final `;` prints only when a step failed. -That chain becomes the environment variable `zboot`, and three one-line wrappers pick the image to test: +That chain becomes the environment variable `zboot`, and three one-line wrappers pick the file it loads: | Variable | Definition | |---|---| @@ -165,7 +165,7 @@ That chain becomes the environment variable `zboot`, and three one-line wrappers | `b` | `setenv fit zephyr-b.itb; run zboot` | | `t` | `setenv fit zephyr-tampered.itb; run zboot` | -`CONFIG_PREBOOT` defines all four: it's a command string U-Boot runs before the autoboot countdown, so the variables exist even after you stop autoboot. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. +`a` boots the trusted image. `b` and `t` name two images that don't exist yet; they are for the tests on [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), and they are harmless until then. `CONFIG_PREBOOT` defines all four: it's a command string U-Boot runs before the autoboot countdown (autoboot is U-Boot running `bootcmd` on its own after a countdown), so the variables exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. You compile them into U-Boot rather than store them on the card, on purpose: anyone with the card could edit a boot script or environment file on the unprotected FAT partition to skip the check. TI's default `CONFIG_ENV_IS_NOWHERE=y` gives the environment no storage, so nothing on the card can override them. @@ -254,7 +254,7 @@ With the long values shortened, the output is similar to: }; ``` -Now verify the three FITs on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's, and a mistake shows up now rather than at the serial console. `-f` names the FIT and `-k` the DTB that holds the keys. Start with the trusted image: +Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's, and a mistake shows up now rather than at the serial console. `-f` names the FIT and `-k` the DTB that holds the keys: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -271,47 +271,10 @@ Signature check OK The lines cut with `...` list `kernel-1`, check its hash (`sha256+ OK`), print `Loading Kernel Image to 0` (the host tool loads nothing) and report that the FIT has no `fdt` and no `ramdisk`. That's correct: it holds Zephyr and nothing else. The exit code is 0. -Next, check the wrong-key image: - -```bash -$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb -``` - -The output is similar to: - -```output -Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-b- - error! -Verification failed for '(null)' hash node in 'conf-1' config node -Failed to verify required signature 'key-key-a' -Signature check bad (error 1) -``` - -Two checks fail: the DTB has no `key-b`, and `required = "conf"` demands a `key-a` signature on every configuration. - -Finally, check the tampered image: - -```bash -$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-tampered.itb -k $UBOOT_OUT/u-boot.dtb -``` - -The output is similar to: - -```output -Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-a+ -Verified OK, loading images -... -sha256 error! -Bad hash value for 'hash-1' hash node in 'kernel-1' image node -Bad Data Hash -... -Signature check bad (error 1) -``` - -The signature still passes and only the hash fails, as you expected when you [made the tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). You'll see the same two lines on the board. +The optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) runs the same tool on an image signed with `key-b` and on a tampered copy of this one, and expects it to refuse both. ## What you've accomplished and what's next -You built TI's U-Boot with the public half of `key-a` compiled into its control device tree. Its boot command starts Zephyr only after `bootm` has verified the signature and the hash. The U-Boot source is unchanged: the key is a `.dtsi` and the commands are a `.config` fragment. `fit_check_sign` has shown on the host that the trusted FIT verifies and that it refuses the other two. +You built TI's U-Boot with the public half of `key-a` compiled into its control device tree. Its boot command starts Zephyr only after `bootm` has verified the signature and the hash. The U-Boot source is unchanged: the key is a `.dtsi` and the commands are a `.config` fragment. `fit_check_sign` has shown on the host that the trusted FIT verifies against the key you compiled in. -Next, you [put the boot files and the three FITs on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and watch U-Boot make the same decisions on the board. +Next, you [put the boot files and the trusted FIT on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and watch U-Boot make the same decisions on the board. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md index ec25fbb77a..3e25ee58fb 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md @@ -1,6 +1,6 @@ --- title: Prepare the SD card and boot the board -description: Build a bootable SD card image with mtools, set the AM62L EVM boot switches, and watch U-Boot start the signed Zephyr image and refuse the wrong-key and tampered ones. +description: Build a bootable SD card image with mtools, set the AM62L EVM boot switches, and watch U-Boot verify the signed Zephyr image and start it on the board. weight: 7 ### FIXED, DO NOT MODIFY @@ -43,7 +43,7 @@ M=$WORK/sdcard.img@@1048576 mdeltree -i $M ::EFI mdel -i $M ::Image ::uEnv.txt mcopy -o -i $M $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img :: -mcopy -o -i $M $FIT/zephyr-a.itb $FIT/zephyr-b.itb $FIT/zephyr-tampered.itb :: +mcopy -o -i $M $FIT/zephyr-a.itb :: ``` `-i` names the image. `mdeltree` removes a directory and everything in it, `mdel` removes single files, and `mcopy -o` copies files in and overwrites any that already exist. @@ -63,20 +63,18 @@ The output is similar to: Volume Serial Number is 40D2-DF89 Directory for ::/ -tiboot3 bin 216538 2026-09-11 18:14 -tispl bin 1467919 2026-09-11 18:14 -u-boot img 1422787 2026-09-11 18:14 -zephyr-a itb 60198 2026-09-11 18:14 -zephyr-b itb 60198 2026-09-11 18:14 -ZEPHYR~1 ITB 60198 2026-09-11 18:14 zephyr-tampered.itb - 6 files 3 287 838 bytes - 130 643 968 bytes free +tiboot3 bin 216538 2026-09-15 16:49 +tispl bin 1467919 2026-09-15 16:49 +u-boot img 1422787 2026-09-15 16:49 +zephyr-a itb 60198 2026-09-15 16:49 + 4 files 3 167 442 bytes + 130 766 848 bytes free ``` -`mdir` shows the long name `zephyr-tampered.itb` at the end of its line and the FAT short name `ZEPHYR~1.ITB` in front; U-Boot's `fatload` finds it by the long name. Six files: the three boot stages you built and the three FITs you signed. Nothing else goes on the card; the boot commands are compiled into `u-boot.img`. +Four files: the three boot stages you built and the FIT you signed. Nothing else is needed on the card; the boot commands are compiled into `u-boot.img`, and the optional test page adds only its two FITs. {{% notice Note %}} -If you prefer not to edit the image on the host, flash TI's `.wic.xz` to the card unchanged. balenaEtcher reads `.wic.xz` directly, and on Linux `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress` does the same. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same six files in. +If you prefer not to edit the image on the host, flash TI's `.wic.xz` to the card unchanged. balenaEtcher reads `.wic.xz` directly, and on Linux `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress` does the same. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. {{% /notice %}} ## Write the card @@ -131,11 +129,11 @@ Move the SD card from the host to the board, then power the board through a USB- SoC: AM62LX SR1.0 HS-FS ``` -`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. +`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. ## Watch the trusted image boot -U-Boot counts down for three seconds and then runs `bootcmd` on its own. That automatic run is called autoboot, and `bootcmd` is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. +U-Boot counts down for three seconds and then autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. Your `Created` time, `Hash value` and read time differ; the lines that matter are the same. The output is similar to: @@ -175,60 +173,10 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and you'll see one in the next run. +Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead; [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. `go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. -## Refuse the wrong key - -Zephyr is now running and U-Boot is gone, so power the board off and on. This time press a key during the countdown to stop autoboot. At the prompt, run the wrong-key test: - -```console -=> run b -``` - -The expected output is: - -```output -... - Verifying Hash Integrity ... sha256,rsa2048:key-b- error! -Verification failed for '' hash node in 'conf-1' config node -Failed to verify required signature 'key-key-a' -Bad Data Hash -ERROR -2: can't get kernel image! -*** REFUSED: Zephyr was NOT started *** -``` - -U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The first line says it found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. - -Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You are back at the U-Boot prompt; image B never ran. - -## Refuse the tampered image - -You are still at the prompt. Run the tampered test: - -```console -=> run t -``` - -The expected output is: - -```output -... - Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK - Trying 'kernel-1' kernel subimage - ... - Verifying Hash Integrity ... sha256 error! -Bad hash value for 'hash-1' hash node in 'kernel-1' image node -Bad Data Hash -ERROR -2: can't get kernel image! -*** REFUSED: Zephyr was NOT started *** -``` - -This time the signature check passes and the hash check fails. That surprises people at first, and it is exactly what the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. `mkimage` signed the configuration node and the `hash-1` node of the image, and neither has changed. The byte you flipped when you [signed the images](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/) is in the payload, so the payload no longer matches that signed hash. The signature makes the hash trustworthy, and the hash catches the change. U-Boot stops before `bootm loados` again. - -To boot the trusted image again, type `run a` at the prompt. - ## If nothing prints If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list, because each step removes one suspect: @@ -243,6 +191,6 @@ If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A ## What you've accomplished and what's next -You built a bootable SD card from TI's own boot partition and set the switches. Then you watched U-Boot on real silicon accept the FIT signed with `key-a`, refuse the one signed with `key-b`, and refuse the one changed after signing. U-Boot now enforces the U-Boot to Zephyr link of the boot chain, from an unmodified source tree. +You built a bootable SD card from TI's own boot partition and set the switches. Then you watched U-Boot on real silicon verify the FIT signed with `key-a`, accept it, and start Zephyr. U-Boot now enforces the U-Boot to Zephyr link of the boot chain, from an unmodified source tree. -Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production/) covers what this proves and what it doesn't, and lists what a production device needs on top of it: a fused key, a locked console, and no other boot path. +A verifier you've only seen accept an image isn't proven yet. Next, [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) signs an image with a key U-Boot doesn't have, tampers with a copy of the trusted one, and watches U-Boot refuse both. That page is optional. After it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers what the checks prove and lists what a production device needs on top of them: a fused key, a locked console, and no other boot path. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md new file mode 100644 index 0000000000..cc164ec8a9 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -0,0 +1,211 @@ +--- +title: Test that U-Boot refuses a wrong key and a tampered image +description: "Optional: sign a second Zephyr image with a key U-Boot doesn't have, tamper with a copy of the trusted FIT, check both with fit_check_sign on the host, then watch U-Boot refuse both on the AM62L EVM." +weight: 8 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Prove the refusal, not only the acceptance + +On the previous page, U-Boot verified `zephyr-a.itb` and started Zephyr. So far you've seen the verifier accept. You haven't seen it refuse. You need two images it must refuse: one signed with the wrong key, and one changed after signing. You make both, check them on the host, put them on the card, and watch U-Boot refuse each one at the serial console. + +This page is optional. It needs nothing beyond what you already built: the `hello` application, the two key pairs in `$KEYS`, and the `mkimage` and `fit_check_sign` tools. It also reuses the U-Boot you built with `key-a` and the card image in `$WORK`. The `b` and `t` commands you compiled into U-Boot are waiting for the two files this page makes. + +Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. + +## Build a second Zephyr image + +The wrong-key image is a different program on purpose. If U-Boot ever runs it, the console says so in capital letters, and you can't mistake it for the trusted image. + +In Workbench for Zephyr, select **Add Application** again. Use the same workspace, toolchain, board and sample as when you [built the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/), and enter `hello_b` as the **Project Name**. The wizard fills in `zephyrproject/applications/hello_b` as the location. Then give it the same `prj.conf` and the same `src/main.c` as `hello`, with the two banner lines changed: + +```c + printk("# Hello from ZEPHYR IMAGE B #\n"); + printk("# signed with key-b (NOT trusted by U-Boot) #\n"); +``` + +The replacement text is the same length as the original, so the box stays aligned. Build `hello_b` the same way, with a right-click on it in the **Applications** view and **Build**. The result is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`, again about 58 KB. Only the text differs. + +## Sign the second image with a key U-Boot doesn't have + +`key-b` is the second key pair you created when you [signed the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). It's a real, valid key, but U-Boot never sees its public half. For the wrong-key image, copy the FIT source with `sed`, swapping `key-a` for `key-b` and the `hello` binary for `hello_b`, then sign it the same way: + +```bash +sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.its +$UBOOT_OUT/tools/mkimage -f $FIT/zephyr-b.its -k $KEYS $FIT/zephyr-b.itb +``` + +`mkimage` prints a summary like the one for the trusted image; the line to check is `Sign algo: sha256,rsa2048:key-b`. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. + +## Make a tampered copy of the trusted image + +For the tampered image, copy the trusted `.itb` and overwrite one byte inside the payload: + +```bash +cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb +printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null +``` + +`printf '\xff'` produces one byte of value `0xff`. `bs=1` makes `dd` count in bytes, `seek=32768` skips to that offset, and `conv=notrunc` keeps the rest of the file intact. The first `0xe8` (232) bytes of the file belong to the FIT itself, and the 58340-byte Zephyr binary follows; you saw that as `Data Start: 0x900000e8` on the board's console. So offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own nodes. + +Check that the copy now differs from the original: + +```bash +cmp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb +``` + +The output is similar to: + +```output +/home/user/zephyr-secure-boot/fit/zephyr-a.itb /home/user/zephyr-secure-boot/fit/zephyr-tampered.itb differ: byte 32769, line 94 +``` + +`cmp` counts bytes from one, and the line number varies with the build. If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. + +This image proves that U-Boot catches a change made after signing. Expect the signature check to pass and the hash check to fail. `mkimage` signed the configuration node and the `hash-1` node of the image, and the byte you changed is in neither, so the RSA signature still verifies. The payload bytes are covered by `hash-1`, and they no longer match it, so the hash check fails. The signature makes the hash trustworthy, and the hash catches the change. + +All three `.itb` files are the same size, 60198 bytes in this build. Size tells you nothing; only verification does. + +## Check both images on the host + +`fit_check_sign` gives the same verdict as U-Boot on the board; run it as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), this time on the wrong-key image: + +```bash +$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb +``` + +The output is similar to: + +```output +Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-b- + error! +Verification failed for '(null)' hash node in 'conf-1' config node +Failed to verify required signature 'key-key-a' +Signature check bad (error 1) +``` + +Two checks fail: the DTB has no `key-b`, and `required = "conf"` demands a `key-a` signature on every configuration. + +Then check the tampered image: + +```bash +$UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-tampered.itb -k $UBOOT_OUT/u-boot.dtb +``` + +The output is similar to: + +```output +Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-a+ +Verified OK, loading images +... +sha256 error! +Bad hash value for 'hash-1' hash node in 'kernel-1' image node +Bad Data Hash +... +Signature check bad (error 1) +``` + +The signature still passes and only the hash fails, as you expected when you made the tampered image. You'll see the same `sha256 error!` and `Bad hash value for 'hash-1'` lines on the board. + +## Add the two images to the card + +The card image from the previous page holds the three boot files and `zephyr-a.itb`. Add the two new FITs to it with `mcopy`, the same tool and the same `@@1048576` volume offset you used when you [built the card image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), then list the volume: + +```bash +M=$WORK/sdcard.img@@1048576 +mcopy -o -i $M $FIT/zephyr-b.itb $FIT/zephyr-tampered.itb :: +mdir -i $M :: +``` + +The output is similar to: + +```output + Volume in drive : is boot + Volume Serial Number is 40D2-DF89 +Directory for ::/ + +tiboot3 bin 216538 2026-09-15 16:49 +tispl bin 1467919 2026-09-15 16:49 +u-boot img 1422787 2026-09-15 16:49 +zephyr-a itb 60198 2026-09-15 16:49 +zephyr-b itb 60198 2026-09-15 16:49 +ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb + 6 files 3 287 838 bytes + 130 643 968 bytes free +``` + +`mdir` shows the long name `zephyr-tampered.itb` at the end of its line and the FAT short name `ZEPHYR~1.ITB` in front; U-Boot's `fatload` finds it by the long name. Six files: the three boot stages and the three FITs. Nothing else on the card changes. + +Write the image to the card again, with the same command as on the previous page: + +```bash +sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress +``` + +{{% notice Warning %}} +Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. +{{% /notice %}} + +If the card is easier to reach from a PC, copy `zephyr-b.itb` and `zephyr-tampered.itb` onto its first partition from there instead. The result is the same six files. + +## Run the wrong-key test + +Move the card to the board, open the console with `picocom` as on the previous page, and power the board on. This time press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A and doesn't come back; power the board off and on and try again. At the prompt, run the wrong-key test: + +```console +=> run b +``` + +The expected output is: + +```output +... + Verifying Hash Integrity ... sha256,rsa2048:key-b- error! +Verification failed for '' hash node in 'conf-1' config node +Failed to verify required signature 'key-key-a' +Bad Data Hash +ERROR -2: can't get kernel image! +*** REFUSED: Zephyr was NOT started *** +``` + +U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The first line says it found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page, so the lines before them are the ones that name the failed check. + +Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You're back at the U-Boot prompt; image B never ran. + +## Run the tampered test + +You're still at the prompt. Run the tampered test: + +```console +=> run t +``` + +The expected output is: + +```output +... + Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK + Trying 'kernel-1' kernel subimage + ... + Verifying Hash Integrity ... sha256 error! +Bad hash value for 'hash-1' hash node in 'kernel-1' image node +Bad Data Hash +ERROR -2: can't get kernel image! +*** REFUSED: Zephyr was NOT started *** +``` + +This time the signature check passes and the hash check fails. That surprises people at first, and it's exactly what the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. The byte you flipped is in the payload, which the signed `hash-1` node covers, not in the nodes the signature covers, as you saw when you made the tampered image. U-Boot stops before `bootm loados` again. + +{{% notice Note %}} +If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and write the card again. +{{% /notice %}} + +To boot the trusted image again, type `run a` at the prompt. The output is the same as on the previous page: the `IMAGE A` banner, then the four lines Zephyr prints after it. + +## What you've accomplished and what's next + +You've watched the three results that make the check credible. `zephyr-a.itb`, signed with the key compiled into U-Boot, verifies and runs. `zephyr-b.itb`, signed with a valid key U-Boot doesn't have, is refused at the signature step. `zephyr-tampered.itb`, signed with the right key and changed afterwards, passes the signature step and is refused at the hash step. In every case a refusal stops the `&&` chain before `go`, so a rejected image never runs. + +Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) separates what these runs proved from what they didn't, and what still stands between this setup and a production device. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md similarity index 80% rename from content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md rename to content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 661c1e42c7..e55078dcdf 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,7 +1,7 @@ --- title: Review what is verified and what production needs -description: Separate what the three board runs proved from what they did not, then list the changes a production device needs before the whole chain can be trusted. -weight: 8 +description: Separate what the trusted boot proved, and what the optional refusal tests add, from what neither proved, then list the changes a production device needs before the whole chain can be trusted. +weight: 9 ### FIXED, DO NOT MODIFY layout: learningpathall @@ -9,9 +9,13 @@ layout: learningpathall ## What you've proved -You ran three images through the same boot command on real silicon. `a`, `b` and `t` only set the file name and then run the same `zboot`, so the result depends on the signature and the hash, not on the file name or on which of the three you typed. +Two pages gave you the evidence, and each proved a different thing. -The three runs on the [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) gave these results: +The boot in [Prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) proved that Zephyr runs only after `bootm start` has verified the signature and the hash. The `## Starting application at 0x82000000` line came from `go`, and `go` sits behind `&&`, so it never runs unless `bootm start` says yes. + +The [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), if you ran it, proved the two refusals: U-Boot rejects an image signed with a valid key it doesn't have, and it rejects an image changed after signing. All three images went through the same `zboot` command. `a`, `b` and `t` only set the file name, so the result depends on the signature and the hash, not on which of the three you typed. + +Put together, the three runs give these results; the first row comes from the boot page and the other two from the test page: | Command | Image | What is different | Result | |---|---|---|---| @@ -19,7 +23,7 @@ The three runs on the [previous page](/learning-paths/embedded-and-microcontroll | `run b` | `zephyr-b.itb` | Signed with `key-b`, a key U-Boot doesn't have | Refused: `Failed to verify required signature 'key-key-a'` | | `run t` | `zephyr-tampered.itb` | Signed with `key-a`, one payload byte changed after signing | Refused: `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` | -So on the AM62L EVM, Zephyr runs only if its FIT is signed by the key compiled into U-Boot, and any change to the image after signing is caught. `go` never runs unless `bootm start` says yes. +So on the AM62L EVM, Zephyr runs only if its FIT is signed by the key compiled into U-Boot, and any change to the image after signing is caught. You did this without changing a line of U-Boot source. The public key went into the control device tree through `CONFIG_DEVICE_TREE_INCLUDES`, and the boot commands went in through `CONFIG_PREBOOT`. Both are build configuration, so you can carry them to a newer TI U-Boot without maintaining a patch. @@ -29,9 +33,9 @@ Most of what you built is not tied to TI. The section *Take it to another Cortex Each stage checks the next, so the whole chain is only as trustworthy as the stage that checked U-Boot. Your check lives in U-Boot; the question is who checked U-Boot. -TI K3 devices come in two security states, which you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/). On an HS-SE (High Security, Security Enforced) device the customer's key is burned into eFuses, and the device refuses any boot file that isn't signed with it. +TI K3 devices come in two security states, which you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/). On an HS-SE device the customer's key is burned into eFuses, and the device refuses any boot file that isn't signed with it. -An HS-FS (High Security, Field Securable) device is the same silicon before the key is burned. The check still runs, but there is no customer key to compare against, so a file signed with any key passes. +An HS-FS device is the same silicon before the key is burned. The check still runs, but there is no customer key to compare against, so a file signed with any key passes. The EVM ships as HS-FS. The SPL banner told you so: `SoC: AM62LX SR1.0 HS-FS`. TI signs `tiboot3.bin`, `tispl.bin` and `u-boot.img` with a development key that ships in the U-Boot source. On HS-FS, the ROM and TIFS accept it. @@ -95,3 +99,5 @@ What doesn't change is the `.its` file apart from the addresses, the keys, and t ## What you've accomplished You can now say what your board verifies and what it doesn't, and you have a checklist of the changes between a working demo and a production device. The signing flow, the way the public key goes into U-Boot, and the boot command are generic. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the three board-specific items and keep the rest. + +To go further with a trainer, Ac6 runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming) and on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), which covers the U-Boot and TF-A side of this chain. There is also a course on [AI-assisted embedded development](https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 0af69b94b1..113a88dcc1 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -16,7 +16,7 @@ learning_objectives: prerequisites: - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card, a micro-USB cable for the console, and a USB-C PD power supply - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space - - A Zephyr workspace with Zephyr 4.4 or later and the Zephyr SDK, set up as described in the [Zephyr Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html) + - Visual Studio Code with the Workbench for Zephyr extension and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line author: Roy Jamil @@ -38,6 +38,8 @@ armips: - Cortex-A tools_software_languages: - Zephyr + - Workbench for Zephyr + - Visual Studio Code - U-Boot - OpenSSL - GCC @@ -60,16 +62,20 @@ further_reading: link: https://docs.zephyrproject.org/latest/boards/ti/am62l_evm/doc/index.html type: documentation - resource: - title: TI Processor SDK Linux for AM62Lx 12.01.00.05.03 - link: https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03 + title: Workbench for Zephyr + link: https://z-workbench.com/ type: website - resource: - title: AM62L EVM User's Guide - link: https://www.ti.com/lit/pdf/SPRUJG8 - type: documentation + title: Ac6 training, Zephyr RTOS programming + link: https://www.ac6-training.com/en/rt5/zephyr-rtos-programming + type: website + - resource: + title: Ac6 training, Secured embedded Linux platform build + link: https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build + type: website - resource: - title: AC6 Zephyr Training - link: https://www.ac6-training.com/en/cours.php/cat_oRT/ref_oRT5/zephyr-rtos-programming + title: Ac6 training, AI-assisted embedded development + link: https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development type: website ### FIXED, DO NOT MODIFY diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg new file mode 100644 index 0000000000..88c11853b8 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg @@ -0,0 +1,50 @@ + + Generic Cortex-A boot chain with U-Boot verifying the Zephyr FIT image + + + + + + + + + + + + Checked by the silicon vendor's ROM and firmware, with the vendor's or your fused key + + Checked by U-Boot with your key + + + + + Boot ROM + inside the SoC + runs first, cannot change + + + Vendor early boot stages + SPL, TF-A, OP-TEE, security firmware + bring up DRAM and the Secure world + + + U-Boot + holds your public key + in its device tree + + + Zephyr + inside a FIT image + signed with your key + + + + + + + + ROM loads and checks + firmware loads and checks + U-Boot verifies the + FIT signature, then go + diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg index 6b1e723bed..a1073ce261 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg @@ -1,73 +1,57 @@ - + AM62L boot chain with the U-Boot to Zephyr verification added - + - + - + - - Checked by TI's ROM and security firmware. On an HS-FS device, TI's development key is accepted. - - - + + Checked by TI's ROM and TIFS. On an HS-FS device, TI's development key is accepted. + + Checked by U-Boot with your key + - Checked by U-Boot with your key. This Learning Path. - - - + + + Boot ROM + inside the AM62L + loads tiboot3.bin - - - - Boot ROM - inside the SoC - loads tiboot3.bin - - - - tiboot3.bin - TF-A BL1 + TIFS firmware - loads tispl.bin - - - - tispl.bin - TF-A BL31, OP-TEE, SPL - loads u-boot.img - - - - u-boot.img - U-Boot, with key-a's - public key inside - - - - zephyr-a.itb - FIT image: Zephyr, - signed with key-a - + + tiboot3.bin + TF-A BL1 + TIFS + loads tispl.bin - - - - - + + tispl.bin + TF-A BL31, OP-TEE, SPL + loads u-boot.img + + + u-boot.img + U-Boot, with key-a's + public key inside - - ROM checks - TIFS checks - TIFS checks - U-Boot checks - the FIT signature + + zephyr-a.itb + FIT image: Zephyr, + signed with key-a + + + + + + - - - Each stage loads the next one and checks it before running it. The last link is new: U-Boot verifies the RSA signature and the - SHA-256 hash inside zephyr-a.itb, copies Zephyr to 0x82000000, and starts it with go. Anything that fails a check never runs. + + checked by the ROM + checked by TIFS + checked by TIFS + checked by U-Boot, + then started with go diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg index 3999fa8247..a63c715e34 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg @@ -1,4 +1,4 @@ - + What the FIT signature covers and how U-Boot checks it diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp new file mode 100644 index 0000000000000000000000000000000000000000..b40cb6e9c570ea4050a01f05aea5d0544907b634 GIT binary patch literal 85712 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-toolchain.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-toolchain.webp new file mode 100644 index 0000000000000000000000000000000000000000..6998ceab4227af517994c71d60f21900df62b34d GIT binary patch literal 82626 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-west-workspace.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-west-workspace.webp new file mode 100644 index 0000000000000000000000000000000000000000..26be3b34e6501970f363938cd9136ae1af18bd2e GIT binary patch literal 79382 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 z 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 f0RsR4000000000000000od5s;0000000000T40cd literal 0 HcmV?d00001 From 6cc0e86186ef9eec90c7caa8fdd0d7eab53d19e4 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 15 Sep 2026 18:31:57 +0300 Subject: [PATCH 03/66] Learning Path: lighter prose, screenshots without the user name - Cut about a quarter of the prose on every page: tool-option explanations, repeated justifications and asides are gone; the reasons that prevent mistakes stay, one sentence each. - The four Workbench for Zephyr screenshots no longer show the Windows user name in paths, and the activity bar is cropped out. --- .../1-boot-chain.md | 42 ++++++------ .../2-set-up-tools.md | 38 +++++------ .../3-build-zephyr.md | 58 ++++++++--------- .../4-sign-zephyr.md | 42 ++++++------ .../5-build-uboot.md | 60 ++++++++---------- .../6-boot-the-board.md | 56 +++++++--------- .../7-test-the-checks.md | 54 +++++++--------- .../8-production.md | 58 +++++++---------- .../images/wz-add-application.webp | Bin 85712 -> 85360 bytes .../images/wz-add-toolchain.webp | Bin 82626 -> 82270 bytes .../images/wz-add-west-workspace.webp | Bin 79382 -> 79006 bytes .../images/wz-build.webp | Bin 123594 -> 120510 bytes 12 files changed, 181 insertions(+), 227 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index a82e6f79c2..29d7e5b2d8 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -9,29 +9,27 @@ layout: learningpathall ## Zephyr is the last stage, not the first -On a microcontroller (MCU), Zephyr starts at the reset vector and nothing runs before it. There is no earlier stage that could check it. That's why secure boot on Cortex-M means adding a bootloader yourself, such as MCUboot. That bootloader is the root of trust: the first code you trust because nothing checked it. +On a microcontroller (MCU), Zephyr starts at the reset vector and nothing runs before it, so secure boot on Cortex-M means adding a bootloader yourself, such as MCUboot. That bootloader is the root of trust. -A Cortex-A processor boots differently. The processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several pieces of firmware run before your code does. On an MCU, your image is the first thing that runs. On a Cortex-A, it is the last. +A Cortex-A processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several pieces of firmware run before your code does: your image is the last thing that runs, not the first. -That order is what makes verification possible. The stage that runs before Zephyr can check Zephyr before it starts it. On a Cortex-A board, that stage is usually U-Boot, the open-source bootloader that many Arm boards use to load an operating system from storage and start it. +That order makes verification possible: the stage before Zephyr can check it before starting it. On a Cortex-A board, that stage is usually U-Boot, the bootloader most Arm boards use. -A U-Boot host tool packs a program and its signature into a FIT (Flattened Image Tree) image, and U-Boot checks it; a later section on this page explains what one contains. Everyone documents signed FIT for Linux, and secure boot for Zephyr on Cortex-M. Nobody documents the one you actually need: Zephyr, signed, on a Cortex-A. This Learning Path covers that combination on real hardware, the TI AM62L EVM (TI's evaluation board for the AM62L). The FIT, the keys, the way the key goes into U-Boot and the boot command are generic, so you can move them to any Cortex-A board that runs U-Boot. The SDK, the SD card layout and the boot switches are specific to TI. +A U-Boot host tool packs a program and its signature into a FIT (Flattened Image Tree) image, and U-Boot checks it. Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers the combination you ship, Zephyr signed on a Cortex-A, using the TI AM62L EVM (evaluation module). The FIT, the keys, the way the key goes into U-Boot and the boot command are generic, so you can move them to any Cortex-A board that runs U-Boot. The SDK, the SD card layout and the boot switches are specific to TI. ## The boot chain on a Cortex-A board -A boot chain is the list of programs that run one after the other, from power-on to your application. On an Armv8-A board with U-Boot, the chain is: the boot ROM in the SoC, then early firmware, then U-Boot, then the payload. The payload is the program U-Boot loads from storage and starts; on most boards that's Linux, and here it's Zephyr. +On an Armv8-A board with U-Boot, the boot chain is: the boot ROM in the SoC, then early firmware, then U-Boot, then the payload. The payload is what U-Boot loads from storage and starts: Linux on most boards, Zephyr here. -The early firmware is usually three things. The SPL (Secondary Program Loader) is a cut-down build of U-Boot whose only job is to load the full U-Boot. TF-A (Trusted Firmware-A) is Arm's reference firmware for the Secure world. On a Cortex-A, TrustZone splits the processor into a Secure world and a Non-secure world; TF-A owns the Secure one and starts U-Boot in the Non-secure one. OP-TEE (Open Portable Trusted Execution Environment) is an open-source trusted operating system that also lives in the Secure world. +The early firmware is usually three things. The SPL (Secondary Program Loader) is a cut-down build of U-Boot whose only job is to load the full U-Boot. TF-A (Trusted Firmware-A) is Arm's reference firmware for the Secure world; it starts U-Boot in the Non-secure world. OP-TEE (Open Portable Trusted Execution Environment) is a trusted operating system that also lives in the Secure world. You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE come prebuilt in the TI SDK, as `bl1.bin`, `bl31.bin` and `bl32.bin`. -Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps. A check is a signature verification: the stage holds a public key, and it refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. +Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps: it holds a public key and refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. ![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. The first two arrows are checked by the vendor's ROM and firmware; the last arrow, from U-Boot to Zephyr, is checked by U-Boot with your key and is the link this Learning Path adds.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") -The first three boxes differ from one silicon vendor to the next, in names, file formats and signing tools. The last arrow is the same everywhere, because it's U-Boot's own FIT verification. - -On the AM62L, which has only Cortex-A53 cores, the chain that TI's U-Boot documentation for the K3 family describes has four steps. One TI name appears in it: TIFS (TI Foundational Security) is TI's security firmware, and it checks the boot files that the ROM doesn't. The four steps are: +On the AM62L, the chain has four steps. TIFS (TI Foundational Security) is TI's security firmware; it checks the boot files that the ROM doesn't. | Step | What loads what | Who checks it | |---|---|---| @@ -40,39 +38,37 @@ On the AM62L, which has only Cortex-A53 cores, the chain that TI's U-Boot docume | 3 | The SPL loads `u-boot.img`, which is U-Boot proper | TIFS | | 4 | U-Boot loads the payload, normally a Linux FIT image | U-Boot's own FIT check | -In plain words: TI's chip checks the first three files itself, and U-Boot checks the fourth. That fourth check is the one you set up, and Zephyr is the file it checks. You build `tiboot3.bin`, `tispl.bin` and `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). +TI's chip checks the first three files itself, and U-Boot checks the fourth, which is Zephyr here. You build `tiboot3.bin`, `tispl.bin` and `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). ![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") ## What a FIT image is -A FIT is U-Boot's container format for boot images. It's a device tree blob (DTB), the same binary format as a hardware device tree, but its nodes hold images instead of hardware descriptions. +A FIT is U-Boot's container format for boot images. It's a device tree blob (DTB) whose nodes hold images instead of hardware descriptions. One FIT holds three things: - The image itself, which is Zephyr's `zephyr.bin` here - A hash of that image, so U-Boot can tell if a byte changed -- A configuration that names the image to use and carries a signature - -The configuration is the node U-Boot boots from: it names the image (`kernel = "kernel-1"`) and carries the signature. +- A configuration that names the image to use (`kernel = "kernel-1"`) and carries a signature -`mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the board, U-Boot's `bootm` command, the command that boots an image already in memory, parses the FIT, verifies the signature and the hash, and copies the image to its load address. +`mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the board, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. -The signature uses RSA (Rivest-Shamir-Adleman), the public and private key pair described earlier. This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. +This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. RSA is the public-key algorithm whose private half signs and public half verifies. -The public key lives inside U-Boot's own device tree, called the control device tree, under a `/signature` node, with one subnode per key. One property of that key node matters most: `required = "conf"`, where `conf` is short for configuration. It means every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. That property is the fail-closed rule: when U-Boot can't verify a FIT, nothing boots. Without `required`, the check fails open: a FIT with no signature at all still boots, as if no check existed. +The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`: every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature at all still boots. ![Diagram of a signed FIT image next to U-Boot's control device tree. The FIT contains an images node with the Zephyr binary and its hash, and a configurations node with a signature. The control device tree contains a /signature node holding the public key with required set to conf. Arrows show the signature covering the configuration and the hash node, and the hash covering the image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") -The diagram shows one detail that matters later. The signature does not cover the bytes; it covers the hash of the bytes. `mkimage` signs the configuration node plus the hash node of each image the configuration lists. The hash node covers the image bytes. The signature is what makes that hash trustworthy, so between them they cover everything. The optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows what that split means in practice: a tampered image passes the signature check and fails the hash check. +The signature does not cover the image bytes: it covers the configuration node plus the hash node, and the hash covers the bytes. The optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows the difference. ## What this Learning Path adds -This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source. Both the public key and the boot command go in as Kconfig options when you build U-Boot, so you can carry them to a newer U-Boot without a patch. U-Boot's job here is to check Zephyr, not to boot an operating system; the page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows how the boot command does that. +This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source: the public key and the boot command go in as Kconfig options. The page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows the boot command. -What this Learning Path doesn't do is put your key into the chip. TI devices hold the owner's key in eFuses, one-time-programmable bits in silicon. A chip with that key fused is called HS-SE (High Security, Security Enforced): it refuses any boot file not signed with the owner's key. A chip without it yet is HS-FS (High Security, Field Securable): the check still runs, but with no key to compare against, any key passes. +What this Learning Path doesn't do is put your key into the chip. TI devices hold the owner's key in eFuses, one-time-programmable bits in silicon. A chip with that key fused is HS-SE (High Security, Security Enforced): it refuses any boot file not signed with the owner's key. A chip without it yet is HS-FS (High Security, Field Securable): the check runs, but any key passes. -The EVM ships as HS-FS, and its first three boot files are signed with TI's development key. So on this board the first three checks run but can't refuse anything, while the fourth, U-Boot checking Zephyr, refuses on HS-FS and HS-SE alike. You see the device type on the serial console when you boot the board. +The EVM ships as HS-FS, and its first three boot files are signed with TI's development key, so those checks can't refuse anything. U-Boot's check of Zephyr refuses on HS-FS and HS-SE alike. {{% notice Note %}} Moving a device to HS-SE, fusing your own key and re-signing the boot files with it, is a separate TI procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what that step changes and what else production needs. @@ -80,6 +76,6 @@ Moving a device to HS-SE, fusing your own key and re-signing the boot files with ## What you've learned and what's next -You've now learned that Zephyr on a Cortex-A is the last stage of a boot chain, so the stage before it, U-Boot, can verify it. A FIT is a device tree blob holding the image, its hash and a signed configuration. U-Boot keeps the public key in its control device tree, and `required = "conf"` makes it refuse anything it can't verify. On the AM62L EVM, only that last check is enforced today. +Zephyr on a Cortex-A is the last stage of a boot chain, so U-Boot can verify it before starting it. A FIT holds the image, its hash and a signed configuration, and `required = "conf"` in U-Boot's control device tree makes U-Boot refuse anything it can't verify. On the AM62L EVM, only that last check is enforced today. Next, you [set up the host tools and the TI SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), and create the working directory and environment file that every later page uses. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 17828cee58..733f90b5df 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -9,11 +9,11 @@ layout: learningpathall ## What you need -The board is the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM). It boots from a micro-SD card, so you need one and a way to write it from your host. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, which is usually, but not always, the first. You open it when you boot the board. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. +The board is the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM). It boots from a micro-SD card, so you need one and a way to write it. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, usually the first. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. -The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with about 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The TI SDK download alone is 4.5 GB, and it unpacks to 11 GB of U-Boot source, Linux toolchain and prebuilt images. You can delete the installer after the install. +The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with about 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The SDK download is 4.5 GB and unpacks to 11 GB. -You build Zephyr with Workbench for Zephyr, an open-source Visual Studio Code extension by Ac6 that installs the Zephyr host tools, imports toolchains and manages West workspaces for you. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: the AM62L needs Zephyr 4.4 or later and an AArch64 toolchain, and you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +You build Zephyr with Workbench for Zephyr, an open-source Visual Studio Code extension by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: the AM62L needs Zephyr 4.4 or later and an AArch64 toolchain, and you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## Install the host packages @@ -23,15 +23,15 @@ U-Boot's build and the signing tools need a few packages beyond a normal Zephyr sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools u-boot-tools xz-utils curl picocom ``` -Six of them are for U-Boot and signing. `swig` and `python3-dev` let U-Boot build `pylibfdt`, the Python device tree library its build scripts import. `libssl-dev` gives `mkimage` the RSA code it signs with. `libgnutls28-dev` and `uuid-dev` are for `mkeficapsule`, a host tool TI's configuration builds next to `mkimage`; you don't use it, but the build stops without them. `device-tree-compiler` provides `dtc`, which converts device tree blobs to source and back; you use it to read the public key node out of a blob when you build U-Boot. +`swig` and `python3-dev` let U-Boot build `pylibfdt`, `libssl-dev` gives `mkimage` its RSA code, and `libgnutls28-dev` and `uuid-dev` are for `mkeficapsule`, which TI's configuration builds even though you don't use it. `device-tree-compiler` provides `dtc`, which reads the public key node out of a blob when you build U-Boot. -The rest are for the card and the console. `mtools` edits the SD card image without root, and `xz-utils` unpacks TI's card image. `openssl` creates the keys, `curl` downloads the two TI files, and `picocom` is the serial terminal. +`mtools` edits the SD card image without root, `xz-utils` unpacks TI's card image, `openssl` creates the keys, `curl` downloads the two TI files, and `picocom` is the serial terminal. -`u-boot-tools` is optional. It installs Ubuntu's own `mkimage` as a fallback. You build `mkimage` from TI's U-Boot tree when you [create the signing keys and sign the image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), so the tool that signs and the code that verifies come from the same source. +`u-boot-tools` is optional: it installs Ubuntu's own `mkimage` as a fallback, but you build `mkimage` from TI's U-Boot tree when you [create the signing keys and sign the image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). ## Create the working directory and environment file -Every path in this Learning Path lives under one directory, `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. That keeps the commands short, and you can paste them as they are. +Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. Create the directory and write the environment file. The heredoc is quoted, so `$HOME` and `$WORK` stay as text in the file and expand when you load it: @@ -59,34 +59,34 @@ source $HOME/zephyr-secure-boot/env.sh mkdir -p $KEYS $FIT ``` -The first group of variables points into the TI SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, and `CROSS` is the cross compiler prefix. `SYSROOT` is there because the SDK's compiler can't find its own libraries without `--sysroot`; the U-Boot pages pass it through the `CC` variable of `make`. `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. +The first group of variables points into the TI SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, and `CROSS` is the cross compiler prefix. `SYSROOT` is the library path the SDK's compiler needs through `--sysroot`. `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. -The two addresses come from the AM62L memory map. `ZEPHYR_ADDR` is where Zephyr is built to run, and `FIT_ADDR` is where U-Boot puts the signed image while it checks it. They must not overlap, because U-Boot copies Zephyr from one to the other. The later pages write the numbers out where they are used, in the FIT source and the boot command, and explain each use there. The variables keep them in one place to read. +`ZEPHYR_ADDR` is where Zephyr is built to run, and `FIT_ADDR` is where U-Boot puts the signed image while it checks it. They must not overlap, because U-Boot copies Zephyr from one to the other. -The variables live only in the shell that loaded them. Every later page starts with `source $HOME/zephyr-secure-boot/env.sh`, and you need to run it again in each new terminal. +The variables live only in the shell that loaded them, so every later page starts with `source $HOME/zephyr-secure-boot/env.sh`. ## Install the TI Processor SDK -The TI Processor SDK Linux for AM62Lx is TI's Linux distribution kit for the board. You use three things from it and nothing from Linux itself: the U-Boot source tree `ti-u-boot-2026.01+git`, the prebuilt firmware that runs before U-Boot, and the aarch64 GCC toolchain (GCC 15.3.0). +You use three things from the TI Processor SDK Linux for AM62Lx and nothing from Linux itself: the U-Boot source tree `ti-u-boot-2026.01+git`, the prebuilt firmware that runs before U-Boot, and the aarch64 GCC toolchain (GCC 15.3.0). -The prebuilt firmware is TF-A as `bl1.bin` and `bl31.bin`, OP-TEE 4.10 as `bl32.bin`, and TI's system firmware in the `ti-sysfw` directory. You met TF-A and OP-TEE on the previous page. `bl1.bin` is the first TF-A stage, and the U-Boot build packs it into `tiboot3.bin`; `bl31.bin` is the runtime part that hands over to U-Boot, and it goes into `tispl.bin`. You can build both from source, but these binaries are the ones inside TI's own image, so using them removes two builds and two places to get wrong. +The prebuilt firmware is TF-A as `bl1.bin` and `bl31.bin`, OP-TEE 4.10 as `bl32.bin`, and TI's system firmware in the `ti-sysfw` directory. These binaries are the ones inside TI's own image, so you don't build them. -Download the installer from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03). The direct link is the one in this command: +Download the installer from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): ```bash curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin ``` -The download takes a while. Then make it executable and run it without the graphical wizard: +Make it executable and run it without the graphical wizard: ```bash chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $TISDK ``` -`--mode unattended` answers every prompt with its default, and `--prefix` sets the install directory to `$TISDK`, which is inside your working directory. The installer writes only there, so it doesn't need root. +`--mode unattended` accepts every default, and `--prefix` installs into `$TISDK` without root. -Check that the three paths the later pages use exist, and that the compiler runs: +Check that the three paths exist and the compiler runs: ```bash ls -d $UBOOT_SRC $PREBUILT $SYSROOT @@ -109,7 +109,7 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 ## Download TI's SD card image -The `.wic.xz` file is TI's complete SD card image: a boot partition and a Linux root filesystem, compressed with `xz`. You don't boot Linux from it. When you [prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), you keep its first partition as a template and replace only the files inside. The AM62L boot ROM is picky about that partition's layout, and TI's layout is known to work. +The `.wic.xz` file is TI's complete SD card image, compressed with `xz`. You don't boot Linux from it. When you [prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), you keep its first partition as a template and replace only the files inside, because the AM62L boot ROM is picky about that partition's layout. Download it into the working directory: @@ -117,10 +117,10 @@ Download it into the working directory: curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz ``` -The compressed file is about 1.3 GB. Leave it compressed. That page reads the part it needs straight out of `xz`, so the full image never has to exist on disk. +The compressed file is about 1.3 GB. Leave it compressed: that page reads the part it needs straight out of `xz`. ## What you've accomplished and what's next -Your host now has the build packages and the TI SDK: U-Boot source, prebuilt firmware and toolchain. `$WORK/env.sh` holds every path, and every later page loads it with one `source` command. TI's card image is on disk, ready to serve as the boot partition template. +Your host now has the build packages and the TI SDK: U-Boot source, prebuilt firmware and toolchain. `$WORK/env.sh` holds every path, and TI's card image is on disk as the boot partition template. Next, you [build a small Zephyr application for the AM62L EVM](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/) and check that its binary starts with a branch instruction, so U-Boot's `go` command can start it. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index ba62e5db42..6df95bf36b 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -You build Zephyr in Visual Studio Code with Workbench for Zephyr, which you installed with its host tools on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same two steps with what the AM62L needs: the AArch64 toolchain and a Zephyr 4.4 workspace made from the Texas Instruments template. +You build Zephyr with Workbench for Zephyr in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace; this page does the same for the AM62L with the AArch64 toolchain and a Zephyr 4.4 workspace from the Texas Instruments template. Open VS Code on your working directory: @@ -17,15 +17,15 @@ Open VS Code on your working directory: code $HOME/zephyr-secure-boot ``` -Then select the **Workbench for Zephyr** icon in the Activity Bar. The panel has one view per thing you manage: **Applications**, **West workspaces**, **Toolchains** and **Host tools**. +Then select the **Workbench for Zephyr** icon in the Activity Bar. The panel has one view each for **Applications**, **West workspaces**, **Toolchains** and **Host tools**. {{% notice Note %}} -The screenshots on this page were taken on Windows, so the paths in them start with `C:\Users\`. On your Ubuntu host the same fields take paths that start with `/home/`. That machine also had the Zephyr SDK installed globally already, so its **Toolchains** view tags the SDK `[global]` and its build log finds the compiler under a `zephyr-sdk-1.0.1` directory in the user's home; yours shows the `tools` directory you choose. Everything else is identical. +The screenshots were taken on Windows with the Zephyr SDK installed globally, so their paths start with `C:\Users\` and the SDK is tagged `[global]`; on your Ubuntu host the same fields take `/home/` paths and the `tools` directory you choose. {{% /notice %}} ## Import the AArch64 toolchain -The Cortex-A53 cores of the AM62L run AArch64 code, so you need the Zephyr SDK's `aarch64-zephyr-elf` compiler. The SDK's Minimal type lets you download only that one. +The AM62L's Cortex-A53 cores need the Zephyr SDK's `aarch64-zephyr-elf` compiler, and the Minimal SDK type downloads only that one. In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: @@ -34,27 +34,27 @@ In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the - **Destination**: **Custom location** - **SDK Type**: **Minimal** - **Version**: v1.0.1 -- **aarch64** checkbox selected, with the other architecture checkboxes left clear +- **aarch64** checkbox selected, the others clear - **Location**: a directory for the SDK, for example `/home/user/zephyr-secure-boot/tools` ![The Add Toolchain form in Workbench for Zephyr with red rectangles around the fields to set: Add Toolchain in the sidebar, the Zephyr SDK family, the Minimal SDK type, the version v1.0.1, the selected aarch64 architecture, the Location field and the Import button#center](images/wz-add-toolchain.webp "Add Toolchain, filled in for the AM62L") -Select **Import**. Workbench downloads the SDK and the AArch64 compiler, which takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. +Select **Import**. The download takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. ## Add a West workspace with Zephyr 4.4 or later Board support for the AM62L EVM entered Zephyr in version 4.4, so the workspace needs Zephyr 4.4.0 or later. Select **Add West Workspace** and fill in the form: - **Source location**: **From template** -- **Minimal**, not **Full**, in the pair of options under the **Path** field -- **Template**: **Texas Instruments**, which pulls the TI HAL module next to Zephyr +- **Minimal**, not **Full**, under the **Path** field +- **Template**: **Texas Instruments** - **Revision**: v4.4.2, or a later 4.x release - **Location**: `/home/user/zephyr-secure-boot` - **Subfolder**: `zephyrproject` ![The Add West Workspace form in Workbench for Zephyr with red rectangles around the fields to set: Add West Workspace in the sidebar, the From template source, the Minimal option, the Texas Instruments template, the v4.4.2 revision, the Location field and the Import button#center](images/wz-add-west-workspace.webp "Add West Workspace, set to Zephyr 4.4.2 with the Texas Instruments template") -Select **Import**. Workbench clones Zephyr, the TI HAL and the other modules the template lists into `zephyrproject/deps`. This is the longest step on this page. When it finishes, `zephyrproject` appears in the **West workspaces** view. +Select **Import**. Workbench clones Zephyr, the TI HAL and the other modules into `zephyrproject/deps`, the longest step on this page, and `zephyrproject` appears in the **West workspaces** view. ## Create the application @@ -63,20 +63,20 @@ Select **Add Application** and fill in the wizard: - **Select West Workspace**: `zephyrproject` - **Select Toolchain**: `zephyr-sdk-1.0.1` - **SDK Variant**: **GNU GCC** -- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)**, Zephyr identifier `am62l_evm/am62l3/a53` (the AM62L EVM board, the AM62L3 SoC variant, the A53 cluster) +- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)**, Zephyr identifier `am62l_evm/am62l3/a53` - **New or existing application?**: **Create new application** -- **Select template**: `hello_world`, the one under `deps/zephyr/samples/hello_world` -- **Project Name**: `hello`, replacing the sample name the wizard fills in +- **Select template**: `hello_world`, under `deps/zephyr/samples/hello_world` +- **Project Name**: `hello` - **Application type**: **West workspace application** -- **Project Location**: filled in by the wizard as `zephyrproject/applications/hello` inside your working directory, the path the later pages use +- **Project Location**: `zephyrproject/applications/hello`, filled in by the wizard ![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM") -Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and Workbench creates `zephyrproject/applications/hello` with the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. +Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. ## Replace the sample's files -Leave the sample's `CMakeLists.txt` as it is and replace the other two files. +Leave `CMakeLists.txt` as it is and replace the other two files. Replace the contents of `prj.conf` with these four lines: @@ -87,9 +87,9 @@ CONFIG_BOOT_BANNER=y CONFIG_AARCH64_IMAGE_HEADER=y ``` -`CONFIG_PRINTK` gives you `printk()` on the console. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, which is the first sign that the jump from U-Boot landed. The other two options have their own section. +`CONFIG_PRINTK` gives you `printk()` on the console, and `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, the first sign that the jump from U-Boot landed. -Replace the contents of `src/main.c` with the following code. The banner names the image and its key, so the console tells you which program ran; that matters on the optional [test page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), where U-Boot is offered a second image with a different banner. That's the only reason the text is so loud. +Replace the contents of `src/main.c` with the following code. The banner names the image and its key, so that on the optional [test page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) the console tells you which of two images ran. ```c #include @@ -117,15 +117,15 @@ Save both files. ## Two settings that matter -`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one TF-A hands to U-Boot and U-Boot hands to Zephyr. The Generic Interrupt Controller (GIC) keeps a separate set of registers for each world, and Zephyr's GICv3 driver programs the Non-secure ones only when this option is set. Without it, the timer interrupt never arrives, and Zephyr hangs right after its banner. +`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one U-Boot hands it. Without it, the driver of the GICv3 (Generic Interrupt Controller) never programs the Non-secure registers, the timer interrupt never arrives, and Zephyr hangs right after its banner. -`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header (arm64 is Linux's name for AArch64) at the start of `zephyr.bin`, in the same format as a Linux kernel image. The first instruction of that header is `b __start`, a branch to Zephyr's real entry point. U-Boot never parses this header in the flow you build here; it only needs the branch at offset 0. Without the header, the first byte of the image is whatever the linker placed there, and `go` jumps into garbage. +`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image, whose first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot only needs that branch at offset 0: without the header, `go` jumps into whatever the linker placed there. -The board configuration for `am62l_evm/am62l3/a53` already sets both options. Repeating them in `prj.conf` documents the intent, and protects you when you move the application to a board whose configuration doesn't set them. +The board configuration for `am62l_evm/am62l3/a53` already sets both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. ## Build the application -In the **Applications** view, right-click `hello` and select **Build**. Workbench runs `west build` for the board in the terminal, with the build directory `build/primary` inside the application; `primary` is the name of the default build configuration. Near the end of the build, the linker prints its memory report. The expected output is: +In the **Applications** view, right-click `hello` and select **Build**. Workbench runs `west build` in the terminal with the build directory `build/primary` inside the application, and the linker prints its memory report near the end. The expected output is: ```output Memory region Used Size Region Size %age Used @@ -136,11 +136,11 @@ Memory region Used Size Region Size %age Used ![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") -There is no flash on this board target, and `RAM` is the part of the DDR, the board's main memory, that Zephyr may use. The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB, linked to run at `0x82000000`. The link address comes from the board's device tree, whose `zephyr,sram` memory node starts at `0x82000000`, past the first 32 MB of DDR where TF-A and OP-TEE live. On another board, read the address from that board's device tree. The same address appears on every following page: as the FIT `load` and `entry` address, and as the `go` target. +There is no flash on this board target; `RAM` is the part of the DDR that Zephyr may use. The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB, linked at `0x82000000`, the start of the device tree's `zephyr,sram` node past the first 32 MB of DDR where TF-A and OP-TEE live. Every following page uses that address as the FIT `load` and `entry` address and as the `go` target. ## Check the image starts with a branch -Before you sign anything, check that the header is really there. Open a terminal (**Terminal > New Terminal** in VS Code, or any shell) and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. Then print the first four bytes of the binary: +Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment with `source $HOME/zephyr-secure-boot/env.sh`, and print the first four bytes of the binary: ```bash od -An -tx1 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -152,11 +152,9 @@ The expected output is: 53 04 00 14 ``` -The `od` options are: `-An` drops the address column, `-tx1` prints hex bytes, and `-N4` reads four bytes. +Those four bytes, read as a little-endian 32-bit word, are one AArch64 `b` (branch) instruction: the last byte, `14`, is the opcode and the other three hold the distance to `__start`, so they can differ in your build. -Read as a little-endian 32-bit word, those four bytes are one AArch64 `b` (branch) instruction. The last byte printed, `14`, holds the opcode; the other three hold the distance to `__start`, Zephyr's real entry point, so they can differ in your build. - -Now check the header's magic number, a fixed four-byte marker that identifies an arm64 image. It sits at offset `0x38`: +Now check the header's magic number at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -168,9 +166,7 @@ The expected output is: A R M d ``` -The magic is the four bytes `ARM\x64`. The `-c` option prints each byte as a character, and `0x64` is the ASCII code for `d`, so `A R M d` is the magic. `-j 0x38` skips to that offset. - -That header is why U-Boot's boot command can use the fixed address `go 0x82000000`. The entry point of the ELF file moves whenever the code changes; offset 0 of the binary doesn't. +`0x64` is the ASCII code for `d`, so `A R M d` is the magic `ARM\x64`. {{% notice Note %}} If the last of the four bytes isn't `14`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/zephyrproject/applications/hello/build/primary/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. @@ -178,6 +174,6 @@ If the last of the four bytes isn't `14`, or the magic isn't at `0x38`, then `CO ## What you've accomplished and what's next -You've set up Workbench for Zephyr with an AArch64 toolchain and a Zephyr 4.4 workspace, and built one Zephyr image for the Cortex-A53 on the AM62L EVM, linked at `0x82000000`. You've also checked that it starts with a branch instruction and carries the arm64 header. That's all U-Boot needs to start Zephyr with `go`, and all `mkimage` needs to wrap it in a FIT on the next page. +You've built one Zephyr image for the Cortex-A53 on the AM62L EVM with Workbench for Zephyr, linked at `0x82000000`, starting with a branch instruction and carrying the arm64 header. That's all U-Boot needs to start it with `go`, and all `mkimage` needs to wrap it in a FIT on the next page. Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index 3cdea0ed37..f5a0bcac3f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -11,7 +11,7 @@ layout: learningpathall Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. -`mkimage` is the U-Boot host tool that builds and signs a FIT image. `fit_check_sign` is its companion that verifies a signed FIT on the host. Both come out of the same U-Boot source tree as the U-Boot that checks the FIT on the board, so the tool that signs and the code that verifies match. +`mkimage` builds and signs a FIT image. `fit_check_sign` verifies a signed FIT on the host. Both come from the same U-Boot tree as the board's U-Boot, so signer and verifier match. The `tools` target needs the board's `.config` first, so select the AM62L EVM defconfig: @@ -19,15 +19,15 @@ The `tools` target needs the board's `.config` first, so select the AM62L EVM de make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" am62lx_evm_defconfig ``` -The `CC="${CROSS}gcc --sysroot=$SYSROOT"` part is the sysroot fix from the set-up page. Keep it on every `make` line, including the three on the next page. +`CC="${CROSS}gcc --sysroot=$SYSROOT"` gives the SDK's compiler the library path `SYSROOT` from `env.sh`; without it the U-Boot link fails. Keep it on every `make` line, including the three on the next page. -Then build the host tools. This step doesn't build U-Boot itself yet: +Then build the host tools: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" tools ``` -The result is `$UBOOT_OUT/tools/mkimage` and `$UBOOT_OUT/tools/fit_check_sign`. Check that `mkimage` runs: +Check that `mkimage` runs: ```bash $UBOOT_OUT/tools/mkimage -V @@ -47,9 +47,9 @@ If the `tools` build stops early, the fix depends on where it stops: ## Create two signing keys -RSA is the public-key algorithm U-Boot's FIT code verifies with. An RSA key pair has a private half that signs and a public half that verifies. The private key stays on the host. Only the public key goes into U-Boot, on the next page. +The private key signs and stays on the host. Only the public key goes into U-Boot, on the next page. -You create two pairs. `key-a` is the key U-Boot trusts. `key-b` exists only to be rejected: it's a real, valid key, but U-Boot never sees its public half. You use `key-b` on the optional test page, [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), to prove that U-Boot refuses a key it doesn't know. +You create two pairs. `key-a` is the key U-Boot trusts. `key-b` is a valid key U-Boot never sees. You use it on the optional test page, [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), to prove that U-Boot refuses a key it doesn't know. Generate both pairs with OpenSSL: @@ -69,9 +69,9 @@ The expected output is: key-a.crt key-a.key key-b.crt key-b.key ``` -`mkimage -k ` expects exactly this layout. `.key` holds the private key. `.crt` is a certificate, a standard wrapper file for a public key; it's self-signed because no authority needs to vouch for it here. `` is the key name you'll write as `key-name-hint` in the FIT source in the next section. The `-subj "/CN=$k"` and `-batch` options let `openssl req` run without questions. +`mkimage -k ` expects this layout. `.key` holds the private key, `.crt` is a self-signed certificate wrapping the public key, and `` is the `key-name-hint` you write in the FIT source. -The algorithm here is `sha256,rsa2048`, which is enough for a demo. The production page covers stronger keys and where to keep them. +`sha256,rsa2048` is enough for a demo. The production page covers stronger keys and where to keep them. {{% notice Warning %}} These are throwaway development keys, generated on the build machine. Production keys are generated and kept elsewhere. See [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). @@ -79,7 +79,7 @@ These are throwaway development keys, generated on the build machine. Production ## Write the FIT source -A FIT is a device tree blob that packs the payload, a hash of it, and a configuration that carries the signature. You describe it in a `.its` file (image tree source) and `mkimage` compiles and signs it into an `.itb` (image tree blob). +You describe the FIT from [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) in a `.its` file (image tree source), and `mkimage` compiles and signs it into an `.itb` (image tree blob). Write the source with a heredoc, so `$WORK` expands to the absolute path of the Zephyr binary you built on the previous page: @@ -118,19 +118,17 @@ cat > $FIT/zephyr-a.its < $WORK/payload.bin ``` -Write the throwaway FIT's source: the `zephyr-a.its` you wrote when you [signed the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), with placeholders for the payload and the addresses: +Write the throwaway FIT's source, a copy of the `zephyr-a.its` from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/) with placeholders for the payload and the addresses: ```bash cat > $WORK/key.its <<'EOF' @@ -93,7 +91,7 @@ cat > $WORK/key.its <<'EOF' EOF ``` -Both `description` properties must stay; `mkimage` refuses the file without them. `dtc` looks for `payload.bin` next to `key.its`. +Both `description` properties must stay, as on the previous page. `dtc` looks for `payload.bin` next to `key.its`. Sign the throwaway FIT and convert the scratch DTB to `signature.dtsi`: @@ -102,7 +100,7 @@ $UBOOT_OUT/tools/mkimage -f $WORK/key.its -k $KEYS -K $WORK/scratch.dtb -r $WORK dtc -I dtb -O dts -q $WORK/scratch.dtb | sed '/^\/dts-v1\/;/d' > $WORK/signature.dtsi ``` -`-K` writes the public key into `scratch.dtb` and `-r` marks it required, which produces the `required = "conf"` property. `sed` removes the `/dts-v1/;` header, because a `.dtsi` included after the main `.dts` must not repeat it. +`-K` writes the public key into `scratch.dtb` and `-r` marks it required. `sed` removes the `/dts-v1/;` header, which a `.dtsi` included after the main `.dts` must not repeat. Check that the file names the right key and nothing else: @@ -121,9 +119,7 @@ The expected output is: ## Why a .dtsi and not mkimage -K on u-boot.dtb -`mkimage -K` can also write the key straight into an existing `u-boot.dtb`. On TI's U-Boot that is fragile: every `make` rebuilds the control DTB from source and binman packs it again, so an injected key is gone at the next build. - -`CONFIG_DEVICE_TREE_INCLUDES` is a Kconfig string that lists extra `.dtsi` files to include when the control DTB is built. Point it at `signature.dtsi` and the key is compiled in on every build. No file in the U-Boot tree changes. +`mkimage -K` can also write the key straight into `u-boot.dtb`, but every `make` rebuilds the control DTB from source and the injected key is gone. `CONFIG_DEVICE_TREE_INCLUDES` lists extra `.dtsi` files to include in that build, so the key is compiled in every time. ## Write a boot command that fails closed @@ -133,7 +129,7 @@ Zephyr's own board page starts the AM62L EVM from the U-Boot prompt with one unv => fatload mmc 1:1 0x82000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x82000000 ``` -`fatload` reads the file from the SD card and `go` jumps to it. Nothing checks the bytes in between. The verified version keeps the same handover (the cache commands and `go`) and puts `bootm` in front of it. Split over several lines for reading, the chain is: +Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, the chain is: ```text fatload mmc 1:1 0x90000000 ${fit} && @@ -146,15 +142,15 @@ echo "*** REFUSED: Zephyr was NOT started ***" Each piece has one job: -- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from partition 1 of the SD card (`mmc 1`; `mmc 0` is the eMMC) to `0x90000000`, clear of `0x82000000`, so the next steps can't copy Zephyr over the FIT they are reading. -- `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. All the checking happens here. +- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from partition 1 of the SD card (`mmc 1`; `mmc 0` is the eMMC) to `0x90000000`, clear of `0x82000000`, so `loados` can't copy Zephyr over the FIT it is reading. +- `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. - `bootm loados` copies the verified payload to its `load` address, `0x82000000`. -- The four cache commands hand the CPU over the way Zephyr expects. On arm64, `dcache off` also turns the MMU (memory management unit) off, which Zephyr's memory setup expects on entry. +- The four cache commands hand the CPU over the way Zephyr expects. - `go 0x82000000` is a jump. It verifies nothing. -Why not a plain `bootm`? A full `bootm` runs a sequence of named steps and continues past `loados` to the step that boots an operating system. You stop after `loados`, so no OS-specific code runs, and `go` does the jump instead. U-Boot is used as a verifier, not as an OS loader. +Why not a plain `bootm`? A full `bootm` continues past `loados` into OS-specific boot code; stopping after `loados` and jumping with `go` uses U-Boot as a verifier only, not as an OS loader. -Why `&&` and not `;`? In U-Boot's shell, `a && b` runs `b` only if `a` succeeded; `a; b` runs `b` either way, so a failed check would fall through to `go` and boot the image anyway. The `&&` is what makes it fail closed. `go` never returns, so the `echo` after the final `;` prints only when a step failed. +`&&` is what makes it fail closed: `a && b` runs `b` only if `a` succeeded, while `a; b` would fall through to `go` after a failed check. `go` never returns, so the `echo` prints only when a step failed. That chain becomes the environment variable `zboot`, and three one-line wrappers pick the file it loads: @@ -165,13 +161,13 @@ That chain becomes the environment variable `zboot`, and three one-line wrappers | `b` | `setenv fit zephyr-b.itb; run zboot` | | `t` | `setenv fit zephyr-tampered.itb; run zboot` | -`a` boots the trusted image. `b` and `t` name two images that don't exist yet; they are for the tests on [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), and they are harmless until then. `CONFIG_PREBOOT` defines all four: it's a command string U-Boot runs before the autoboot countdown (autoboot is U-Boot running `bootcmd` on its own after a countdown), so the variables exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. +`a` boots the trusted image. `b` and `t` name images that don't exist yet, for [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). `CONFIG_PREBOOT` defines all four before autoboot, U-Boot's countdown to running `bootcmd` on its own, so they exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. -You compile them into U-Boot rather than store them on the card, on purpose: anyone with the card could edit a boot script or environment file on the unprotected FAT partition to skip the check. TI's default `CONFIG_ENV_IS_NOWHERE=y` gives the environment no storage, so nothing on the card can override them. +The commands are compiled into U-Boot rather than stored on the card, where anyone could edit a boot script to skip the check. TI's default `CONFIG_ENV_IS_NOWHERE=y` gives the environment no storage, so nothing on the card can override them. ## Configure and build -Reset to TI's defconfig, so the fragment lands on a known `.config` whatever the previous page's `tools` build left behind: +Reset to TI's defconfig so the fragment lands on a known `.config`: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" am62lx_evm_defconfig @@ -196,7 +192,7 @@ The `\"` around the `echo` text stay: that's how a Kconfig string holds a litera The fresh defconfig starts from a clean `.config`. If the `tools` build on the previous page needed `# CONFIG_TOOLS_MKEFICAPSULE is not set`, add that line to the fragment. If it needed `DTC=$(which dtc)`, add it to both `make` lines that follow. {{% /notice %}} -Let Kconfig resolve the fragment against the rest of the configuration: +Let Kconfig resolve the fragment: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" olddefconfig @@ -212,22 +208,22 @@ The output is similar to: .config:2360:warning: override: reassigning to symbol BOOTDELAY ``` -The five warnings are expected: your lines replace the values the defconfig already set for the same symbols. The line numbers can differ. +The five warnings are expected: your lines replace values the defconfig already set. The line numbers can differ. -Now build. `BL1`, `BL31` and `TEE` name the prebuilt firmware from the SDK: `bl1.bin` and `bl31.bin` are TF-A stages, `bl32.bin` is OP-TEE. `BINMAN_INDIRS` tells binman where to find TI's firmware when it packs the boot files: +Now build, pointing `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` at the prebuilt TF-A, OP-TEE and TI firmware from the SDK: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" -j$(nproc) \ BL1=$PREBUILT/bl1.bin BL31=$PREBUILT/bl31.bin TEE=$PREBUILT/bl32.bin BINMAN_INDIRS=$PREBUILT ``` -One `make` builds the SPL, U-Boot proper and the control DTB, then binman packs the three boot files. `bl1.bin` and TI's firmware go into `tiboot3.bin`; `bl31.bin`, `bl32.bin` and the SPL go into `tispl.bin`; U-Boot proper goes into `u-boot.img`. It takes a few minutes. Check the results: +The build takes a few minutes. Check the three boot files: ```bash ls -l $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img ``` -The sizes are about 0.2 MB, 1.5 MB and 1.4 MB. These are the three files of the boot chain table on the first page: the ROM loads `tiboot3.bin`, `tispl.bin` carries TF-A, OP-TEE and the SPL, and `u-boot.img` is U-Boot proper. +The sizes are about 0.2 MB, 1.5 MB and 1.4 MB. These are the three files of the boot chain table on the first page. ## Check the key is inside U-Boot @@ -254,7 +250,7 @@ With the long values shortened, the output is similar to: }; ``` -Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's, and a mistake shows up now rather than at the serial console. `-f` names the FIT and `-k` the DTB that holds the keys: +Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -269,12 +265,12 @@ Verified OK, loading images Signature check OK ``` -The lines cut with `...` list `kernel-1`, check its hash (`sha256+ OK`), print `Loading Kernel Image to 0` (the host tool loads nothing) and report that the FIT has no `fdt` and no `ramdisk`. That's correct: it holds Zephyr and nothing else. The exit code is 0. +The lines cut with `...` check the `kernel-1` hash (`sha256+ OK`) and report no `fdt` and no `ramdisk`, which is correct. The exit code is 0. -The optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) runs the same tool on an image signed with `key-b` and on a tampered copy of this one, and expects it to refuse both. +[Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) runs the same tool on an image signed with `key-b` and on a tampered copy, and expects it to refuse both. ## What you've accomplished and what's next -You built TI's U-Boot with the public half of `key-a` compiled into its control device tree. Its boot command starts Zephyr only after `bootm` has verified the signature and the hash. The U-Boot source is unchanged: the key is a `.dtsi` and the commands are a `.config` fragment. `fit_check_sign` has shown on the host that the trusted FIT verifies against the key you compiled in. +You built TI's U-Boot with the public half of `key-a` compiled into its control device tree and a boot command that starts Zephyr only after `bootm` has verified the signature and the hash, without touching the U-Boot source. `fit_check_sign` has shown on the host that the trusted FIT verifies against that key. Next, you [put the boot files and the trusted FIT on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and watch U-Boot make the same decisions on the board. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md index 3e25ee58fb..678b76d907 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md @@ -11,17 +11,17 @@ layout: learningpathall Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. -The boot ROM looks for `tiboot3.bin` by name on the first FAT partition of the SD card. It is picky about that partition. Give it a FAT32 volume with 512-byte clusters, for example, and it loads nothing: the console stays empty, with no SPL banner at all. +The boot ROM looks for `tiboot3.bin` by name on the first FAT partition of the SD card, and it is picky about that partition: a FAT32 volume with 512-byte clusters loads nothing, and the console stays empty. -TI's own SD card image boots. Its first partition starts at sector 2048 and is 262144 sectors long, which is 128 MiB. It is marked bootable, has partition type `0x0c` (the partition-table code for a FAT volume with logical block addressing, LBA), and is formatted FAT16 with four sectors per cluster. So keep that partition byte for byte and replace only the files in it. +TI's own SD card image boots. Its first partition starts at sector 2048, is 262144 sectors (128 MiB) long, is marked bootable with partition type `0x0c`, and is formatted FAT16 with four sectors per cluster. Keep that partition byte for byte and replace only the files in it. -Start from the `.wic.xz` you downloaded when you [set up the tools](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Extract only the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: +Start from the `.wic.xz` you downloaded when you [set up the tools](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: ```bash xz -dc $WORK/tisdk-default-image.wic.xz | head -c $(( (2048+262144)*512 )) > $WORK/sdcard.img ``` -The result is a 129 MiB file. `head -c` stops reading after that many bytes, so you never extract TI's Linux root filesystem, which is the second partition. The partition table still lists that second partition, and it now points past the end of the file. Delete it: +The result is a 129 MiB file. The partition table still lists TI's second partition, which now points past the end of the file. Delete it: ```bash sfdisk --delete $WORK/sdcard.img 2 @@ -34,9 +34,7 @@ The partition table has been altered. Syncing disks. ``` -`sfdisk` edits partition tables in plain files as well as on devices, so you don't need root and you don't need to attach the file as a disk first. - -The FAT volume still holds TI's Linux files. Replace them with yours using `mtools`, which reads and writes FAT volumes inside a file. The `@@1048576` suffix tells `mtools` that the volume starts 1 MiB into the file, which is sector 2048. In `mtools` commands, `::` is the root of that volume, so `::EFI` is the `EFI` directory on the card: +Replace TI's Linux files in the FAT volume with yours using `mtools`. The `@@1048576` suffix tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: ```bash M=$WORK/sdcard.img@@1048576 @@ -46,9 +44,7 @@ mcopy -o -i $M $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img mcopy -o -i $M $FIT/zephyr-a.itb :: ``` -`-i` names the image. `mdeltree` removes a directory and everything in it, `mdel` removes single files, and `mcopy -o` copies files in and overwrites any that already exist. - -`uEnv.txt` deserves a word. It is a text file of environment settings that TI's default boot command imports, and it points at Linux. Your build replaced that command with `run a`, so your U-Boot never reads the file. Delete it anyway: a card that still describes a Linux boot only invites doubt about what ran. +`uEnv.txt` is TI's Linux boot environment; your U-Boot never reads it, but delete it so nothing on the card describes a Linux boot. List the volume to check the result: @@ -71,7 +67,7 @@ zephyr-a itb 60198 2026-09-15 16:49 130 766 848 bytes free ``` -Four files: the three boot stages you built and the FIT you signed. Nothing else is needed on the card; the boot commands are compiled into `u-boot.img`, and the optional test page adds only its two FITs. +Four files: the three boot stages you built and the FIT you signed. {{% notice Note %}} If you prefer not to edit the image on the host, flash TI's `.wic.xz` to the card unchanged. balenaEtcher reads `.wic.xz` directly, and on Linux `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress` does the same. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. @@ -79,7 +75,7 @@ If you prefer not to edit the image on the host, flash TI's `.wic.xz` to the car ## Write the card -Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Then write the image to the whole card: +Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Write the image to the whole card: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress @@ -89,17 +85,15 @@ sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. {{% /notice %}} -`conv=fsync` makes `dd` wait until the data is on the card before it returns. The image is 129 MiB, so the rest of the card stays unused; the ROM only reads the first partition. - On Windows or macOS, write `sdcard.img` with balenaEtcher. ## Set the boot switches The boot switches tell the ROM where to look for `tiboot3.bin`. On the AM62L EVM, **ON** means HIGH, with the knob towards the **ON** label on the switch bank. -The EVM has two ways to set the boot mode, both from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8) (SPRUJG8B). The full pincount setting uses all 16 BOOTMODE bits across three switch banks. The reduced pincount setting uses only the four switches of **SW3**. Either one selects the SD card. Start with the reduced setting: four switches leave fewer ways to get it wrong. +The [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8) (SPRUJG8B) gives two ways to select the SD card. The full pincount setting uses all 16 BOOTMODE bits across three switch banks; the reduced pincount setting uses only the four switches of **SW3**. Start with the reduced setting. -The full pincount value is BOOTMODE `0x0E43`: SD card in filesystem mode as the primary boot device, UART as backup, 25 MHz reference clock. Set the three banks like this: +The full pincount value is BOOTMODE `0x0E43`: SD card in filesystem mode as the primary boot device, UART as backup, 25 MHz reference clock: | Bank | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |---|---|---|---|---|---|---|---|---| @@ -115,27 +109,27 @@ The reduced pincount setting uses only **SW3**; the ROM ignores **SW2** and **SW ## Connect the console and power on -Connect the micro-USB port **J7** to your host. The USB-to-serial chip behind it (an FTDI FT4232HL) creates four serial ports: SoC UART0, SoC UART1, WKUP UART0 and SoC UART4. The console is SoC UART0, at 115200 baud, 8 data bits, no parity, one stop bit. On Linux it is usually the first port, `/dev/ttyUSB0`. Open it: +Connect the micro-USB port **J7** to your host. The FTDI FT4232HL behind it creates four serial ports: SoC UART0, SoC UART1, WKUP UART0 and SoC UART4. The console is SoC UART0, at 115200 baud, 8 data bits, no parity, one stop bit, usually `/dev/ttyUSB0` on Linux. Open it: ```bash picocom -b 115200 /dev/ttyUSB0 ``` -If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press the `Ctrl` key and `A`, then `Ctrl` and `X`. +If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press `Ctrl` and `A`, then `Ctrl` and `X`. -Move the SD card from the host to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Early in the log, the line the SPL prints when it starts shows the device type: +Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Early in the log, the SPL shows the device type: ```output SoC: AM62LX SR1.0 HS-FS ``` -`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. +`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. ## Watch the trusted image boot -U-Boot counts down for three seconds and then autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. +After a three-second countdown, autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). -Your `Created` time, `Hash value` and read time differ; the lines that matter are the same. The output is similar to: +Your `Created` time, `Hash value` and read time differ. The output is similar to: ```output 60198 bytes read in 7 ms (8.2 MiB/s) @@ -173,24 +167,22 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead; [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. +Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is the RSA signature of `conf-1` verified with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the image bytes matching the signed hash. `Loading Kernel Image to 82000000` is the verified payload copied to Zephyr's link address. The `+` marks a pass; a failed check prints `-` instead, as [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows. -`go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. +`## Starting application at 0x82000000 ...` is printed by `go` and is the last line from U-Boot; everything after it comes from the program U-Boot verified. ## If nothing prints -If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list, because each step removes one suspect: +If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list: -1. Open all four serial ports that **J7** creates. Windows doesn't always number SoC UART0 first, and on Linux it isn't always `/dev/ttyUSB0`. +1. Open all four serial ports that **J7** creates; SoC UART0 isn't always the first one. 2. Check the boot switches against the tables, or try the other setting. -3. Check the card layout. A FAT32 boot partition with 512-byte clusters gives exactly this symptom; the FAT16 partition from TI's image is the known-good template. -4. Flash TI's unchanged `.wic.xz` to a card and boot it. That image is TI's own and boots as shipped. If it prints nothing either, the cause is the switches, the port, or the power, not your files. -5. If TI's own card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours and write the card again: `mcopy -o -i $M $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. `u-boot.img` carries the key and the boot command, so the check you are testing doesn't change. +3. Check the card layout against TI's FAT16 partition. +4. Flash TI's unchanged `.wic.xz` to a card and boot it. If it prints nothing either, the cause is the switches, the port, or the power, not your files. +5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours and write the card again: `mcopy -o -i $M $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. `u-boot.img` still carries the key and the boot command. If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A_NS` is missing from the [Zephyr build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## What you've accomplished and what's next -You built a bootable SD card from TI's own boot partition and set the switches. Then you watched U-Boot on real silicon verify the FIT signed with `key-a`, accept it, and start Zephyr. U-Boot now enforces the U-Boot to Zephyr link of the boot chain, from an unmodified source tree. - -A verifier you've only seen accept an image isn't proven yet. Next, [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) signs an image with a key U-Boot doesn't have, tampers with a copy of the trusted one, and watches U-Boot refuse both. That page is optional. After it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers what the checks prove and lists what a production device needs on top of them: a fused key, a locked console, and no other boot path. +You built a bootable SD card from TI's boot partition and watched U-Boot on real silicon verify the FIT signed with `key-a` and start Zephyr. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves both refusals on the board. After it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a production device needs on top: a fused key, a locked console, and no other boot path. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index cc164ec8a9..3cba11722e 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -9,46 +9,46 @@ layout: learningpathall ## Prove the refusal, not only the acceptance -On the previous page, U-Boot verified `zephyr-a.itb` and started Zephyr. So far you've seen the verifier accept. You haven't seen it refuse. You need two images it must refuse: one signed with the wrong key, and one changed after signing. You make both, check them on the host, put them on the card, and watch U-Boot refuse each one at the serial console. +On the previous page, U-Boot verified `zephyr-a.itb` and started Zephyr. You've seen the verifier accept; you haven't seen it refuse. This page makes two images it must refuse, one signed with the wrong key and one changed after signing, checks them on the host, and watches U-Boot refuse each one at the serial console. -This page is optional. It needs nothing beyond what you already built: the `hello` application, the two key pairs in `$KEYS`, and the `mkimage` and `fit_check_sign` tools. It also reuses the U-Boot you built with `key-a` and the card image in `$WORK`. The `b` and `t` commands you compiled into U-Boot are waiting for the two files this page makes. +This page is optional. It reuses the `hello` application, the two key pairs in `$KEYS`, the `mkimage` and `fit_check_sign` tools, the U-Boot you built with `key-a`, and the card image in `$WORK`. The `b` and `t` commands compiled into U-Boot are waiting for the two files this page makes. Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. ## Build a second Zephyr image -The wrong-key image is a different program on purpose. If U-Boot ever runs it, the console says so in capital letters, and you can't mistake it for the trusted image. +The wrong-key image is a different program on purpose: if U-Boot ever runs it, the console says so in capital letters. -In Workbench for Zephyr, select **Add Application** again. Use the same workspace, toolchain, board and sample as when you [built the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/), and enter `hello_b` as the **Project Name**. The wizard fills in `zephyrproject/applications/hello_b` as the location. Then give it the same `prj.conf` and the same `src/main.c` as `hello`, with the two banner lines changed: +In Workbench for Zephyr, select **Add Application** again. Use the same workspace, toolchain, board and sample as when you [built the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/), and enter `hello_b` as the **Project Name**. Give it the same `prj.conf` and the same `src/main.c` as `hello`, with the two banner lines changed: ```c printk("# Hello from ZEPHYR IMAGE B #\n"); printk("# signed with key-b (NOT trusted by U-Boot) #\n"); ``` -The replacement text is the same length as the original, so the box stays aligned. Build `hello_b` the same way, with a right-click on it in the **Applications** view and **Build**. The result is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`, again about 58 KB. Only the text differs. +The replacement text is the same length as the original, so the box stays aligned. Build `hello_b` the same way, with a right-click on it in the **Applications** view and **Build**. The result is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`, again about 58 KB. ## Sign the second image with a key U-Boot doesn't have -`key-b` is the second key pair you created when you [signed the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). It's a real, valid key, but U-Boot never sees its public half. For the wrong-key image, copy the FIT source with `sed`, swapping `key-a` for `key-b` and the `hello` binary for `hello_b`, then sign it the same way: +`key-b` is the second key pair you created when you [signed the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). It's a valid key, but U-Boot never sees its public half. Copy the FIT source with `sed`, swapping `key-a` for `key-b` and `hello` for `hello_b`, then sign it: ```bash sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.its $UBOOT_OUT/tools/mkimage -f $FIT/zephyr-b.its -k $KEYS $FIT/zephyr-b.itb ``` -`mkimage` prints a summary like the one for the trusted image; the line to check is `Sign algo: sha256,rsa2048:key-b`. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. +The line to check in the `mkimage` summary is `Sign algo: sha256,rsa2048:key-b`. ## Make a tampered copy of the trusted image -For the tampered image, copy the trusted `.itb` and overwrite one byte inside the payload: +Copy the trusted `.itb` and overwrite one byte inside the payload: ```bash cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null ``` -`printf '\xff'` produces one byte of value `0xff`. `bs=1` makes `dd` count in bytes, `seek=32768` skips to that offset, and `conv=notrunc` keeps the rest of the file intact. The first `0xe8` (232) bytes of the file belong to the FIT itself, and the 58340-byte Zephyr binary follows; you saw that as `Data Start: 0x900000e8` on the board's console. So offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own nodes. +The first `0xe8` (232) bytes of the file belong to the FIT itself and the Zephyr binary follows, so offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own nodes. Check that the copy now differs from the original: @@ -62,15 +62,15 @@ The output is similar to: /home/user/zephyr-secure-boot/fit/zephyr-a.itb /home/user/zephyr-secure-boot/fit/zephyr-tampered.itb differ: byte 32769, line 94 ``` -`cmp` counts bytes from one, and the line number varies with the build. If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. +If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. -This image proves that U-Boot catches a change made after signing. Expect the signature check to pass and the hash check to fail. `mkimage` signed the configuration node and the `hash-1` node of the image, and the byte you changed is in neither, so the RSA signature still verifies. The payload bytes are covered by `hash-1`, and they no longer match it, so the hash check fails. The signature makes the hash trustworthy, and the hash catches the change. +Expect the signature check to pass and the hash check to fail: the signature covers the configuration node and the `hash-1` node, and `hash-1` covers the payload bytes you changed. -All three `.itb` files are the same size, 60198 bytes in this build. Size tells you nothing; only verification does. +All three `.itb` files are the same size, 60198 bytes in this build; only verification tells them apart. ## Check both images on the host -`fit_check_sign` gives the same verdict as U-Boot on the board; run it as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), this time on the wrong-key image: +`fit_check_sign` gives the same verdict as U-Boot on the board. Run it as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), first on the wrong-key image: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb @@ -107,11 +107,11 @@ Bad Data Hash Signature check bad (error 1) ``` -The signature still passes and only the hash fails, as you expected when you made the tampered image. You'll see the same `sha256 error!` and `Bad hash value for 'hash-1'` lines on the board. +The signature passes and only the hash fails. ## Add the two images to the card -The card image from the previous page holds the three boot files and `zephyr-a.itb`. Add the two new FITs to it with `mcopy`, the same tool and the same `@@1048576` volume offset you used when you [built the card image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), then list the volume: +Add the two new FITs to the card image with `mcopy`, at the same `@@1048576` volume offset you used when you [built the card image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), then list the volume: ```bash M=$WORK/sdcard.img@@1048576 @@ -136,23 +136,17 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -`mdir` shows the long name `zephyr-tampered.itb` at the end of its line and the FAT short name `ZEPHYR~1.ITB` in front; U-Boot's `fatload` finds it by the long name. Six files: the three boot stages and the three FITs. Nothing else on the card changes. +`mdir` shows the FAT short name `ZEPHYR~1.ITB` in front and the long name `zephyr-tampered.itb` at the end of its line; U-Boot's `fatload` finds it by the long name. Six files: the three boot stages and the three FITs. -Write the image to the card again, with the same command as on the previous page: +Write the image to the card again with the same `dd` command as on the previous page, taking the same care with `/dev/sdX`: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress ``` -{{% notice Warning %}} -Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. -{{% /notice %}} - -If the card is easier to reach from a PC, copy `zephyr-b.itb` and `zephyr-tampered.itb` onto its first partition from there instead. The result is the same six files. - ## Run the wrong-key test -Move the card to the board, open the console with `picocom` as on the previous page, and power the board on. This time press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A and doesn't come back; power the board off and on and try again. At the prompt, run the wrong-key test: +Move the card to the board, open the console with `picocom` as on the previous page, and power the board on. Press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A; power the board off and on and try again. At the prompt, run the wrong-key test: ```console => run b @@ -170,13 +164,13 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The first line says it found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page, so the lines before them are the ones that name the failed check. +These are the same two failures as on the host: U-Boot found a signature naming `key-b` and has no such key, and the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) demands a valid `key-a` signature on every configuration. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page; the lines before them name the failed check. -Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You're back at the U-Boot prompt; image B never ran. +Because `bootm start` returns an error, the `&&` chain stops there: `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. ## Run the tampered test -You're still at the prompt. Run the tampered test: +Still at the prompt, run the tampered test: ```console => run t @@ -196,16 +190,16 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -This time the signature check passes and the hash check fails. That surprises people at first, and it's exactly what the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. The byte you flipped is in the payload, which the signed `hash-1` node covers, not in the nodes the signature covers, as you saw when you made the tampered image. U-Boot stops before `bootm loados` again. +This time the signature check passes and the hash check fails, as you expected when you made the tampered image and as the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. {{% notice Note %}} If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and write the card again. {{% /notice %}} -To boot the trusted image again, type `run a` at the prompt. The output is the same as on the previous page: the `IMAGE A` banner, then the four lines Zephyr prints after it. +To boot the trusted image again, type `run a` at the prompt. ## What you've accomplished and what's next -You've watched the three results that make the check credible. `zephyr-a.itb`, signed with the key compiled into U-Boot, verifies and runs. `zephyr-b.itb`, signed with a valid key U-Boot doesn't have, is refused at the signature step. `zephyr-tampered.itb`, signed with the right key and changed afterwards, passes the signature step and is refused at the hash step. In every case a refusal stops the `&&` chain before `go`, so a rejected image never runs. +`zephyr-a.itb`, signed with the key compiled into U-Boot, runs; `zephyr-b.itb`, signed with a valid key U-Boot doesn't have, is refused at the signature step; `zephyr-tampered.itb`, changed after signing, passes the signature step and is refused at the hash step. In every case the refusal stops the `&&` chain before `go`, so a rejected image never runs. Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) separates what these runs proved from what they didn't, and what still stands between this setup and a production device. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index e55078dcdf..aaa0f96d34 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -9,13 +9,11 @@ layout: learningpathall ## What you've proved -Two pages gave you the evidence, and each proved a different thing. +The boot in [Prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) proved that Zephyr runs only after `bootm start` has verified the signature and the hash. The `## Starting application at 0x82000000` line came from `go`, which sits behind `&&` and so never runs unless `bootm start` says yes. -The boot in [Prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) proved that Zephyr runs only after `bootm start` has verified the signature and the hash. The `## Starting application at 0x82000000` line came from `go`, and `go` sits behind `&&`, so it never runs unless `bootm start` says yes. +The [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), if you ran it, proved the two refusals: U-Boot rejects an image signed with a key it doesn't have, and it rejects an image changed after signing. -The [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), if you ran it, proved the two refusals: U-Boot rejects an image signed with a valid key it doesn't have, and it rejects an image changed after signing. All three images went through the same `zboot` command. `a`, `b` and `t` only set the file name, so the result depends on the signature and the hash, not on which of the three you typed. - -Put together, the three runs give these results; the first row comes from the boot page and the other two from the test page: +The three runs give these results: | Command | Image | What is different | Result | |---|---|---|---| @@ -23,49 +21,37 @@ Put together, the three runs give these results; the first row comes from the bo | `run b` | `zephyr-b.itb` | Signed with `key-b`, a key U-Boot doesn't have | Refused: `Failed to verify required signature 'key-key-a'` | | `run t` | `zephyr-tampered.itb` | Signed with `key-a`, one payload byte changed after signing | Refused: `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` | -So on the AM62L EVM, Zephyr runs only if its FIT is signed by the key compiled into U-Boot, and any change to the image after signing is caught. - -You did this without changing a line of U-Boot source. The public key went into the control device tree through `CONFIG_DEVICE_TREE_INCLUDES`, and the boot commands went in through `CONFIG_PREBOOT`. Both are build configuration, so you can carry them to a newer TI U-Boot without maintaining a patch. - -Most of what you built is not tied to TI. The section *Take it to another Cortex-A board* on this page separates the generic parts from the board-specific ones. +You did this without changing a line of U-Boot source: the public key went in through `CONFIG_DEVICE_TREE_INCLUDES` and the boot commands through `CONFIG_PREBOOT`, so both carry to a newer TI U-Boot without a patch. ## What you haven't proved -Each stage checks the next, so the whole chain is only as trustworthy as the stage that checked U-Boot. Your check lives in U-Boot; the question is who checked U-Boot. - -TI K3 devices come in two security states, which you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/). On an HS-SE device the customer's key is burned into eFuses, and the device refuses any boot file that isn't signed with it. +Each stage checks the next, so the chain is only as trustworthy as the stage that checked U-Boot. -An HS-FS device is the same silicon before the key is burned. The check still runs, but there is no customer key to compare against, so a file signed with any key passes. +TI K3 devices come in two security states, which you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): HS-SE, with the customer's key in eFuses, and HS-FS, where any key passes. The SPL banner told you this EVM is HS-FS: `SoC: AM62LX SR1.0 HS-FS`. TI's development key signs `tiboot3.bin`, `tispl.bin` and `u-boot.img`, so the ROM and TIFS checks run but can't refuse anything, and U-Boot enforces only the last link, U-Boot to Zephyr. -The EVM ships as HS-FS. The SPL banner told you so: `SoC: AM62LX SR1.0 HS-FS`. TI signs `tiboot3.bin`, `tispl.bin` and `u-boot.img` with a development key that ships in the U-Boot source. On HS-FS, the ROM and TIFS accept it. - -So the checks on `tiboot3.bin`, `tispl.bin` and `u-boot.img` run on your board, but they can't refuse anything. U-Boot enforces only the last link, U-Boot to Zephyr. - -Why this matters: the public half of `key-a` lives inside `u-boot.img`, and `u-boot.img` sits on an unprotected FAT partition. Anyone who can write the card can replace `u-boot.img` with one that carries their own key, or a key node without the `required` property. So the root of trust, the key everything else is checked against, is in a file on the card, not yet in silicon. +The public half of `key-a` lives inside `u-boot.img`, on an unprotected FAT partition, so anyone who can write the card can replace it with one that carries their own key. The root of trust is in a file on the card, not in silicon. ## What production needs -Each of the following changes closes one gap left open by the demo setup. - ### Fuse your key and move to HS-SE -TI's keywriter procedure burns your key into the eFuses, and you re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with it. From then on the ROM and TIFS refuse any `u-boot.img` that isn't signed with your key, so the `key-a` public half it carries is itself authenticated and the root of trust is in silicon. The procedure is TI-specific and out of scope here. +TI's keywriter procedure burns your key into the eFuses, and you re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with it. From then on the ROM and TIFS refuse any `u-boot.img` that isn't signed with your key, so the `key-a` public half it carries is itself authenticated. The procedure is TI-specific and out of scope here. ### Keep the environment built in -U-Boot's environment is its set of named variables. `bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. `saveenv` writes the variables to storage. TI's configuration ends up with `CONFIG_ENV_IS_NOWHERE=y` (the default when no environment storage is chosen), so `saveenv` has nowhere to write and both variables always come from the binary you built. Keep it that way, because a writable environment is a writable boot command. +`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. TI's configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, so `saveenv` has nowhere to write and both variables always come from the binary you built. Keep it that way: a writable environment is a writable boot command. {{% notice Warning %}} -Don't enable `CONFIG_ENV_IS_IN_FAT` on a production build. It stores the environment in a `uboot.env` file on the boot media (the SD card with `CONFIG_ENV_FAT_DEVICE_AND_PART="1:1"`; TI's default `"0:1"` is the eMMC), and a saved environment overrides `bootcmd` and `preboot`. Anyone with the card can then set `bootcmd` to `fatload` and `go` and skip the check. It's a development convenience only. +Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the environment in `uboot.env` on the boot media: a saved environment overrides `bootcmd` and `preboot`, so anyone with the card can skip the check. {{% /notice %}} ### Lock the console -With `CONFIG_BOOTDELAY=3`, anyone with a serial cable can press a key during the countdown, get the `=>` prompt and type `fatload` and `go` by hand. Set `CONFIG_BOOTDELAY=-2` (autoboot with no delay and no check for a key press), or use `CONFIG_AUTOBOOT_KEYED` so that only a known string stops autoboot. Both settings only cover the countdown. If `bootcmd` returns, for example after a refused image, U-Boot still drops to the `=>` prompt. On a production build, end `zboot` with `reset` after the `echo`, so a refusal restarts the board instead of opening a prompt. +With `CONFIG_BOOTDELAY=3`, anyone with a serial cable can stop the countdown, get the `=>` prompt and type `fatload` and `go` by hand. Set `CONFIG_BOOTDELAY=-2` (no delay, no key check), or use `CONFIG_AUTOBOOT_KEYED` so that only a known string stops autoboot. Both settings only cover the countdown: if `bootcmd` returns, for example after a refused image, U-Boot still drops to the `=>` prompt. On a production build, end `zboot` with `reset` after the `echo`, so a refusal restarts the board instead of opening a prompt. ### Close the other boot paths -Every boot command compiled into U-Boot is one that someone at the prompt, or a boot script on the card, can run instead of `zboot`, and none of them goes through your check. TI's configuration turns on several: +Any other boot command compiled into U-Boot can be run instead of `zboot`, and none of them goes through your check. TI's configuration turns on several: | Path | Symbols | What it can do | |---|---|---| @@ -74,30 +60,30 @@ Every boot command compiled into U-Boot is one that someone at the prompt, or a | Raw kernel commands | `CONFIG_CMD_BOOTI=y`, `CONFIG_CMD_BOOTZ=y` | Starts a bare Linux kernel file with no FIT and no signature | | Network and DFU (Device Firmware Upgrade) | `CONFIG_CMD_NET=y`, `CONFIG_CMD_DFU=y` | Loads an image over Ethernet or USB | -`CONFIG_LEGACY_IMAGE_FORMAT` is already off, which is right, because that older single-image format carries no signature. Audit the rest and turn off everything your product doesn't use. +`CONFIG_LEGACY_IMAGE_FORMAT` is already off; keep it off, because that older format carries no signature. Audit the rest and turn off everything your product doesn't use. ### Use real keys and keep them off the build machine -`sha256,rsa2048` is fine for a demo. TI's own K3 flow uses `sha512,rsa4096`. To match it, change `rsa_keygen_bits:2048` to `rsa_keygen_bits:4096` in the `openssl genpkey` command from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), and `algo = "sha256,rsa2048"` to `algo = "sha512,rsa4096"` in `zephyr-a.its` and in the `key.its` carrier; the commands stay the same. Generate the production key on a hardware security module (HSM), or at least on a machine that isn't the build host. The `key-a` and `key-b` pairs you generated there in `$KEYS` are throwaway. +`sha256,rsa2048` is fine for a demo. TI's own K3 flow uses `sha512,rsa4096`. To match it, change `rsa_keygen_bits:2048` to `rsa_keygen_bits:4096` in the `openssl genpkey` command from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), and `algo = "sha256,rsa2048"` to `algo = "sha512,rsa4096"` in `zephyr-a.its` and in the `key.its` carrier; the commands stay the same. Generate the production key on a hardware security module (HSM), or at least on a machine that isn't the build host. ### Sign in a release step -Running `mkimage -k` on a developer machine is fine for `key-a`. For the production key, signing belongs in the release pipeline, the only place that holds the private key. No developer machine ever sees it. +Running `mkimage -k` on a developer machine is fine for `key-a`. For the production key, signing belongs in the release pipeline, the only place that holds the private key. ## Take it to another Cortex-A board -The board-specific parts are few, and most of them sit on one line of the boot command. Three things change. +Three things change. -The first is the load address. `0x82000000` is the start of the memory node that the AM62L board device tree selects as `zephyr,sram`, so it is Zephyr's link address, the FIT `load` and `entry`, and the `go` target. On another board, take the start of that node from its device tree source (DTS) and use it in all three places. Load the FIT itself at a different address, as you did with `0x90000000`; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. +The first is the load address. `0x82000000` is the start of the memory node that the AM62L board device tree selects as `zephyr,sram`, so it is Zephyr's link address, the FIT `load` and `entry`, and the `go` target. On another board, take the start of that node from its device tree source and use it in all three places. Load the FIT itself at a different address, as you did with `0x90000000`; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. -The second is the storage device and partition in `fatload`. `mmc 1:1` means MMC device 1, partition 1: on the AM62L EVM that is the SD card's FAT partition, while `mmc 0` is the eMMC. On your board both numbers can differ. +The second is the storage device and partition in `fatload`. `mmc 1:1` is the SD card's FAT partition on the AM62L EVM, while `mmc 0` is the eMMC; on your board both numbers can differ. -The third is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Some boards take the DTB from a prior stage instead (`CONFIG_OF_BOARD`). On those, the `/signature` node has to go into that DTB, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same `key.its` carrier from the [U-Boot page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. +The third is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Boards that take the DTB from a prior stage (`CONFIG_OF_BOARD`) need the `/signature` node in that DTB instead, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same `key.its` carrier from the [U-Boot page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. -What doesn't change is the `.its` file apart from the addresses, the keys, and the `signature.dtsi` recipe. The shape of the boot command, `bootm start && bootm loados && ... go`, and the three test images also stay the same. U-Boot's FIT signature check is generic code, not board code, so it behaves the same everywhere. +Everything else stays the same: the `.its` file apart from the addresses, the keys, the `signature.dtsi` recipe, the boot command and the three test images. ## What you've accomplished -You can now say what your board verifies and what it doesn't, and you have a checklist of the changes between a working demo and a production device. The signing flow, the way the public key goes into U-Boot, and the boot command are generic. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the three board-specific items and keep the rest. +You can now say what your board verifies and what it doesn't, and you have a checklist for a production device. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the three board-specific items and keep the rest. -To go further with a trainer, Ac6 runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming) and on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), which covers the U-Boot and TF-A side of this chain. There is also a course on [AI-assisted embedded development](https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development). +Ac6 runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming), on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), and on [AI-assisted embedded development](https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp index b40cb6e9c570ea4050a01f05aea5d0544907b634..0b6fe27953cd3dfbbe24ab84dd6202b7ed68757e 100644 GIT binary patch literal 85360 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 literal 85712 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-toolchain.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-toolchain.webp index 6998ceab4227af517994c71d60f21900df62b34d..565aa603a815710d86dda7637ee6588751f4f91f 100644 GIT binary patch literal 82270 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 I{b#HFe-P9bXaE2J literal 82626 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-west-workspace.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-west-workspace.webp index 26be3b34e6501970f363938cd9136ae1af18bd2e..f2f652bbc3783b54608323d51aeee1d8c6f1faae 100644 GIT binary patch literal 79006 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%0AdYXvEgtL>H3uV)%;1B5Unh2aMY#ap3T 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%0Dc_%{e4M(YUt7ZmENEN%-jka>knT6LU?Y1k+F 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
u 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�G!Cq`pkW*U&vcEdz~CAh@$MbQH%5Ie&%A`jHIeTFK(B z@+opRw1kTcYeY%KMj`Xr#397|DAqXiSA;2ZVpgbzMw*sSBa2(7D^=Ag_tzOramV|* z{RD(w^t92~^u0y$4BK-NPaoEg$El6O`lP`*`ZGKbi5f&S-EaB*fb&VU1BvQRMxf~( ztA@}h&khe+#UFHP)m(-!-2;%nHiQCH_ZjWC1gn9>U}%J?sZnwL)B;4%#hDZK#%Np$ zW0zr|yv%%HRZgQMTN?i~o~(jTyP^cXi2rmEo91jeb8i=rC>AX*H?$n2-JsJm_Uj7) zqnLYVfPJ=$kIOib(Ok?2Q~D{M7d}gx(gbRnDmFNdCFeV9Il-hXl&OE;ik;MQyJ> z?gTl#WMZ&+JHIBKmD8m(=(6{rjj#%>M;HqPBUx7xSW9daNvt(t%LGT`$5i&^u^Ndv z@8<61?K5jRSas!ZO%73g0h}AvY^S$o%Ms^#=oDz>!@wL^2a4tf)_P9$jH@@$>DnnA zMWiMj(l3!e;P5oFrUpak27=>y_-z_2z$n_y&>$sSTqRL73hR~4=&sg zb1IOEJcy~+5hp^Gef8`v!S{sI<_8~cTHrw$%&@yV_7eruL+*fsuO?HuuAgj#emS~# z<`7+t6q(t@t25G2V@qVf3LcXgGAVa(SB!~3E)tGAWtn_gfu znXaI@ef-jpEUpr@QOHAk^q*5H8uF?Gk&JGV{}^4>{g4vB|9KzSRyc2NIW9IC(S_kR`a7V|QIF0^E|6;= z`?!>szviz$om4%1S7V?q|KGzeYXhL~Z!QU-zh0o^0^4YJ$r=SJ>nxP$Gl6iEUJ?22 zWD!`|mLz1fxHTiT7TBM`GDAq7I%5gUph3l+sJ^jxjk-}vG1u{TM1_TFj9%jrdwfd=Fep1%g5OCwaMB~P9jld zPX!7&1xfH>AEtNr61D^D?;=JvUcQto=m%gm>W1v=wW*QFxP@JGMxoC<889Q?ne(H3 z>StbDqd?EcmG`hfFbyV&GP%A8_YXV0j&VS?+9#`~P8LrPWtn}&&kpvPDRx1j9rGW| zMZT%#=@T4-?i*dRQTd|V2XEaiJ)H^VHNx~Wfd)~&)~r(&eCha*?ugbY7w43n6MZT& zCepeY5H1N%?(Ifl7I2*xqs#r}g*DaBGrI!L5u8-Pn75`Z#U<#jqi`3D4YY6dW-^nV zrih<`q?~e-uih2zsx;0ndx$t_UiMEC_Rr%uh+h^O0RzuQWA!=Vr={NAnK>uWRJ#Jk z&d%4kpkwR6MeO(U5l!fU18aNi!4ch#hD7|r!I|eZV)i|?!7O6w9#S(T-(9K)Hs@^$||AqKF(R!&BTXDmnbZv z(s31?W!BOWkfSJmpm})VI2?b48L%folK7~5+Er^6g+W8(MZ z%|;&)!g~^!NfWes%vVfq;p(zE)c z!%cn=sl~K~XT_L0D{1?kEE4Zqd-6DVIQm}Kc)$q1X@LbyiCU~qTDbTEAX)t2tkR#% zMs~*nsT@Lsf7;FIMvOUR9m@Fr+NuMt>b9g>%ol+_lSVi&E5RqQpcwS^EJ#qask|0z zTZJAXtGI(&$38z-k9D_-M79n(CrROTZH;s-7LJye$rfqGg3r}(fYs5qyoS0B0`Qs; zRql0JQGR9&QbHTlDqE7GJ@36A~&z$?qCk!z5d9&7zec?d1is0^A; z&{+#fpBSK7Hdz7hXJeF~A63{CCeN&B<2gw~ z$kioGWUd-YE5$d<0|*r_BWK#1XSvT#weF822lVgGYtpq-U*SD*s%6Umu62$rN+e5et|`9<*}7od8nE%mc2Y5U8Em z9b}Mhw$bh6SRvL;lQPC*(TpoQ>*jkRgcr^6pM_w8{jy=ojh>RX&9}cn7ZAH_zoKj( z2o-K~Kp$dn@ne^Un){!WC4!6Oo6_PGYtQO~%<4DE*N_fW`R5P^>eUbN@uRM$=A7l~ z?_$IxJ@Tvj?xCwhc;f=!V&qG6jQEE4$gMrCBHCcq1DQNww|(B^DT`2l#Y830H5{Lj z(>RySY?De8rhyJPN`lhSrtF`bqREa_f~M_aH(kNRl=Ns)bR>|mrQp$J@}IAS9;$lV+!@##UVv0A`_tr1e~6Eu$}hzHXUS#{0!5G2*NxjakWfk z38(Wp9CZAT2kGma(WYcM1l@MJj0E75Uz621ws$k^B*J1LDr=i|5}h3?@i(=sL1Mbe zltW3+yo??T4~;izlZ{i6y~@c~IH0t3Z$J3gaV)ewvNZrM`wurjq?LG?@u>XQU?)wl z(}`>f#8<%#E&eK8STp)+C~?j7<=01XjZm6VlkU-cKM)+aVzyTF(5sEiq@j!GW;`GX%S5T~mgMQc_bI$`wT`FPVM;eST?lYkYuv&vt( zRK)4DW0PWpzjl$jKkWw#d&OeScKNT0v3g(1dSViTkEkd zKHuS$0clfmShj~F(-@h5uy)#%OwG-mHEC%jI0?0$CU)0$nvY0&bwV;92jXz9F8{2b zOWv(mG2{Lg*6+3`6d30Bx$d>gtxu>Hi=bPs4ye>OMi%yGo45<%Tr|+E6L@XIy>qcC zDv~Yc|8v&A`hx;wLi0FvpNZ{*Po6N9-!no-PGNQQ0PBO)(|Z zbOXdV6RE?| zlm2cmyCAUi@-?B5T!jDwO&9U~w|!v7wnL; z#-bQWH~9X#^W|grzG2Y-8|5mW#N< zgU4!nLbMRI^#_ST&Vkj5pFv3qL_!buzp~`IJ+n5*0Gjx>@gZTyPULSIOvtxatI0_o z0<{AN`hkN;IBh?|py{{EV@V_iY=J{@7>_2PGvksUH4n8}cf%)DZqe~j(;MAFsl^fm zDhd(Gqhih52sp~R2BBiu7@8cFH)8x>afcAA%==ooIENOK{HlxgZ6@9h} z5NOGWto+|jDiRDML1hZ*<~^x_eoL`{9;c8k+=L{ckhR$_viP;;Gl8ONV&5p0TO=B%Cit^7mc6%(eSZJ73ukC zAP)0t>6|atKz25AT=a$dpeL)=Z-^-X&Jxd`vcwK86(2G#w0H z%K)sE&h*jwj4REURKs4e*!E*CVdfbvs#4>L=R^^l{U2~M?|iWuO<@$;TXwI;(9Nzt zrZ0~S%L0yod@*{f>g9NeoA08djovJ+xcH~&PvW5VyKnD`M=>L-&4*|<1I#qc;s~pY z)Vj*W#RN#Lg+bbpY%Y=rV)6i|B*k!GXAtO;sogpa1D5;CJ8O{>lUZw}HlpUv!3D-E z{s_^ZF=$8U&s%YQn-0%ba43=^VGC_xB;HSkaM)f8YOxBH!2C8gkJp36zcFgC`W(ap zmh#s%te}`FL5;03mUI(s55dHuU|Voe6W@OLy}AJp9_85`ALi_dq^kE3(UPb7@$8h9 z*PYfJyYz$c79x9461>2?l4$tbAA-RJQ#;msKfP76=LSnu?v@_xVJ_ruirl;gq3oL^ zbxIn1a~lZJjk*U+pblGNdOar{!Dk}5w_BCd34R)R)`OA2Cj9xBO?1uLg_G0ytz(a_ z;89V-{b_F!lzrz?%ou{1=xba+;+oihUuTU9CVUVO2=f|A1|it`QAK#wng|~EScWM^ zaARV(70$wsZc?ip7SW-GIVlDkpQ0?4hJJg04yWev@N4hn)#CK-3Gdt=xPT?kw~-f* zT+gs%8WfzWUok~_PzGT`Ei5uz!9B=C8@EW^g_;@X$ z{7N21C7F~)sf{B3shVK~WM>Q-5gB{@&lV!7h#T}vi@V}XNcjUw0$0P>S$ zE22zr@Uqa=bAZW4XeD~jZE8tyNiEIVpo}9Pg@SAw z#PEUFnLk_)RMk`wdDCm|B#JvFTOSo- zZD5QO*WFByy=g}Z=#qASAQTH+v-QI+dxMuG_dK)~9Q#MpRoluTy{xh; z)hL*q8G04h-amELuG!L8Cg z0B^=Y$k(;=I09uR^Ot=~FyeuPg%=@J zt75D~OW6;YHKI$~H}lQ5X84j{z?9l4=+)2Kxppiy67xq+6~Uf#0M{zifPV4Fs+3+U ztCOADJkM}1ah)*>oFVLv1e^9CPmfATQI^l8 zWC?5$qSXDWv zV+2Qjf7_F$Y?ePS5;wwuTY=t?42F=bE1V6)Z*!65Z&sVjLWi6sjc0lTeO%9WCgA2c zO1(eeD}g0NhJHzDA@$|Q4`;{nn>R3}q+5fE{)Xgrpzd|K0b$%z^phIcTH>+)x$*#o zgjhfmCCZ{4IskEUL?n&~xc4(OKzGF$g6@7t>J4#JW|4(3I@UU+{?v2k7KP`Wt>WIg ztL7l(hDsCdVcO_H8^8IM(AZ8t^91H^`&zl9V1W(VUo2ER7fWCV@y0Vz?EZ!+OHC+X z`bkn#pu-s34-=dcm%784mi#e+XR_bfe78JHkD3;Y-*dNfa(P!Xy$Qx(J-(n9*!o)` zvYAH*V`76ke6a0C;FtO;=izk z^snNSiS?3})vf6oQ(u3mZ#W2?@AF}Ek6$~8NZm^c-C)+;RX#J*@>VkNyJ$UU0AFBe zb9z?#sxICiwm`ArV?rTdrDV%(aQugUZ$3a5SlmMQM<>{3<@jL+MDIRB7;f~ZVYPFy zl|c9H2V~tICSO$tb&d#mDiIKk;5m-nrNe9S$jUJ)m$kNaN0!xPlAQ)~#*l81pQ9fT zczybuz+V<4jAI33Z8K`peXVCPk7o3uD}<{*Bn$bRNidJ(+#un5&aj){*m`>{90K_^ z#F3WqY7$-@osGt2$RxaVcNEb8B<<3&>c0cxb-GhhN;()8^R)&gX&O(_*1p>sy8ORr zK(*GNVg{3s?WVm>*)I7qZXwLgUh9>4i3wg*__KWbkOwF!C8oOTc}Ky^qmLdaL)r!& z(YC>#V|;Hj)O7nqUD$m!SqLD$#9=Ti?H%Fj;Kj;FBKB!&o~{gWiqGOUwrpGC)wg#O zS(-B3ODBZ7O+Z8mNAFI?Ejb9F8Ui?Ka!#>1+(NSLsv#P&54se^6-)?INNrbhSkBYs+y3% z=lD@5VT|oHe8#S&Z?P2j7K2(fH`~6`&4Ja^Y{4!IFT$6}e!?RrpjTHH?d2Z8yF}QA z!OLp-9d4`PB}Vfq3x!PJAh86!n~pqFSr;!iD{NJ>^K)n!dik;40yw@?jwjS5AzSq< zIRsUGHJxG`?xUT_p|`_yTzlS$gyc9LG-jAfQrA^zjPbdYHR40zPn5J>NuxYx3rJ8_ z3+B{Zu_G0?Gvb_RvXQ@X>qmLQo2*%Z;1TtD$(_|oW;Mv8vDUUo0jRE1%$a@K*BY;c zgnWslFBHrH%jf`mls;2>^}63)CxSSgF&IDZ$U)$W)$zMM(@JWS^^ddL%-t7>;G7>v zZP(FcRVX1Ct4-pLh8{DI0B zvDe8BW0I@zN&K1tHUw&Oc1XhY&2qnJI0LCaMxRx=)FhXs?lJfkw{wLiH}el*I^OJo zMP@nBgmfOpm|dUHvEe#Rmnv%Ogg^=;&Spsf2xvJDSv@30_*kdPOFR^d;o) z85|-I`09T{fI$Ys5kDPy;|h_xwlwK3VoAob+4*`!ZtU5i-DLJ}VbIXY2I|l# z(8fml(istk>)sTx6LzqQ`?IHeS;j7C-qA*Xr(tvszu=_sbaR&KoPUsb#k&VH$ZHS`oyxIg9ljaRVNg1bmUio=ei=eC#aBBO zyf#@;7Tu<&0Sty04C(uiqSj0({yqC+;2z(O0@=n&m!eUrc!!*~sz!y>SM0fp$&n~{ zbuEC@?ZZ&<75T|~Gy>@wvr-kqk9R81?aV+)OAsBg(JyQQTUwK_c29)Nw_+ztKjqDI zC%M!Y>;7;`Qc>6zxf|plX_V9oYN1NB=$TA2F$UMWrVpPx)3~VAaxVVIW8$>FtB|?* z8Y}VdQ39Z)hK2ExybS&d__M%)y?kV*S(eH_{(r$M5SD4v05TP}o0hj=Ix!STik&2r zjtqo1zibh7qB5N!In>fMhRY$M#Pja-I;M9Vk{V5#p!!ahjb17fww*U9-HaxLHN;^N z=?M8xoxyv6qlMlM&BegfKB2Rvm0Y1Qui^X?Tx`H=pP;}0u=*F$`0Gi!aN9ggm*zdB zAD_^QsADgX3T%g_%9LH>0-Q|Y7JY5p2AotJNjUt** z4%J7v?G*(F+y?*#Q77C<{j2cDmGDJdbppshh&nxJA5xp6xM5+!LjE99j~;?lj2y)B zi+Gy8Ael;$jnMgiY^qDHPa=+9)S()j{Rm~e`+k4A1_fF)n|HnaBu8F4_%JyN%m0;3|x_MnHR|%nDaMxxh!WT z6yJ7=CH@Zs(jA}o%nD%Jd=LW|ds_PEG&=V*1!i9g;KU7ed^cCnqnflf8zRwS_jc_W zx|6ENF_2Lh5R@8rYu?&&uywc8=d*Ooc(#CDNg?-0n@zkb znR9E<C3)P|7>KdSsT(=b?* zwka>ob6=kYm@&A%Lt#w(S#lUoCqpd6_Etw+cRSAu_Lsz=+#H_M$BNk`72mbtuxaXe zKjYVAkcM;yl!Y^7(}QyfT!M51GP7Hm8il1F?)g#PUZ)M)hDva{3*ycnwryVbUgOya zn6Q|}0Ysm*Sa}`nyi2DH(02KKbq#vr;T+re@u*!n6v)=*87Pk?VmvS5$6EF}RD>fM zaIhvJ+*0IxP&e9GCWL|OiFoN}coPmGU$y~Yj8oHb!y!WMBY+xdw$?=@hBlG#;EJMR z`%G{Yc)niM0-4Y@+dma8EUQn0baC_2NSN+Cs@-KSHOLZFo=|15<=76;!h<|5R$KQ( z6qy4$_YT==1P<#r+H+q!w9w5KJM5PU7I>x&34d1Es9_tZofLsbE6eA)SOonWFlEt( zi*`ax8i+9`It_UICDO?3TK(I_nOf^?7acRBClg5(>rsFxoG|$vx<#k32K!ytbLkeo zwj(pDaa&Kk8ECy7OTEA!5{hg(TQj2s5z-Y81@i5MNAtIwo1T>a4V`Jv{G-!;f@P;+jwJWD=*0p@5 zHfIcNFu|Y>gLr#1y3*s^_?u)f?-nKm3|b<$#Bc}XEJ-bnZZ8&n@3{%8HC!4nS;&Hx z^1AGKPoQ-rxw8lj+Jjcq%bTQ23#Va+gy8TDfD`&w{!)Z`oRxahTsxx$4$RHppo@Jk zb$Imd<7L|qO$&|=Sr9tlcWqku!&*rIoYf-bk6N+V*l7S;rEHCD)(s7cSx*%B2vPVO z8^_3@Sra7Fv+O^MC(Tfh@$CMS;yD`gMRn#SOzYfJjRgy+%}DEcWFTlpCh!~)Cf zhx{Qx4Zzd(f(y^Tkg)`70sas(IS%st#0*gMVqxCGNr7Wq~)eG^E46<_V( z^l67NuQuZ1Hz5~ot^oYUOe4PkRFqJY4?f%+j~Xmu)`ZU2kq$v&#teR_Wqg}R0{c*p zjs}1x0{laMTNdB;RSkO(UQ0eavB=8!gBtJZ$u`l6*1P>fs7(p>dg47ytH34nt_*m? z-T1Alnq<#POf;F{LjkRRppSO&1|~gE1+#eL2#wDp-fDVxsMmu*DP~4dzjhd#lwm<_5+0 zVM(X2R4%Jj#>(tRO+8gtOa#AoPlz_v;RV5N0Lsn`mK+G;}7 zBoH(w$cP%JAN(JLZ7}gMd3W@gSgzvn`u2}-9hR=o)dWU`zciZHQgNO1D0o}r#Le;I zQ3wx8S=iU2yxAe=bM_TQDf18{mF-R{EdDF5b4^kOXZ*IqqS1rf=Pl%ZpL6U&^x)6g zRhX~k0TH}trWz@4g>UNXNxb9W*NebJq<2)sECzQFGy&o%t?f2mwh`r)hplf2@iV3t z(cYuaeMkR%;Syw~F!Zsr!5m~U@_s_h?NV|@(~`d;`8N&`a*Wc}=E)k}MhVyXYXfVp zbAl?*lr~4@D%n@XIxjTMISpqshFm~A7L)9siyk0QR-ZfmUp7b+s1?{#mZ2cxGxlxJ zrnyso4|I~kY+|%pNQ>(zKzgzO$lY2S*1|+;TK*63;?IGL+D##m8WZTf5Hb>9G4h`_LR?j^_Lj!1N zMyBB0M8BVn0Q#ZqeCrm#PgD+EODtowV{%E-e~Ky4{@eMim}4( zy8sJ7HSXkfL;jJ?lV1qj{rdQaUBmFIn?cuD%1U%Yv)90mKkJjMzVrpZ&d7GE45;Tc zJ)f9r>n;rwG->yeelx#0!pj0gG>5Nr#={!B`~gwj;(aT6aq7?)8hmT3sj-R(gmKXw z(zS;o57b$P%jKt4ZcS_T1;c9cZM|dV+dpY2?l?8WA5t=WYqAokzxW$_2Il2<{{~p- zwT?2%;P8!)lh!m-5?&`gd>p6R&P;7R4aqj2obntJ@?kb~q#GA2A z_EBfwSJ3(McS{2V`_j1$F&U~6SLQ>0BnK(AH{gaEPxkFZ9ou9Mbk|UX?QDJ2*fbc# z8AyC(ZQS<~Cd)5z5IvzxBQL;UW#RlJ9JJ5tG=pO>_m*(&t{Qti_u_{cUg;}d&88hm zVdfP`pfH13@iNE4IhiwP0y48>ij_A)vY(7k``hEk0&QDZb_2;G{)E^>2JVMCz8{m= z-Rf5^_YIFT2{9Ngo3Tk7U50b2fJ-WydF`}yz z(EwP;nyd-JH^}TFvGSb^T2VN~Xfu&Vd!gAl!>9VHd?2nS@=Vza|Ze7@pRW+_G9S0b&X4qyX(Z{ok_lz;3m#=BLNu2&lmWnP4;i?F0X;HR!G99%3T{ zs_h8qKK3SQLXj#BAF5n@)ipQCWf}jOp(#By^Q4NR#l%@SXjQ7407r#pu>Dg@Tst;7 z3wL;7))#u<d%=iXs5#OPRW}u%T&05Mp+jLxJ`5&IC(7hMqVenSf`Tn}q z9u)x^$Da%nYiCZ`(5r++)nC_6*v%=r|+54`VLlTgw9 z!+)IvBDd+lzwwVmNQONAdWwtlmK=ak9g-!-z4KhZG*L)Un~p98v^`wu>n&Oz9iGv@ zuyYQs5C2=~_GhQv<+~-AB)ZX(do+O%_Xe~%yyLbyfCNTgNuU}cJXEo$b1d=BdB)&b ztMpuKYG@Tzo;G>%%SF;1Wx5Rl6j4cgELJfk0{sjlt3Bu79Gc`)eKYWHq*-dbCAM?8JO_-g*h4el-4$4((b5X3zksPJiM6WmPE zWEG6WY7{eVPZMBka1co^t6%4*={YgIe@9pc(}@&cmN(IL_K@wX=0Rd z(GS@5t|h>CTS)`->t!vt?^=a7M1Dl_Z2Wt7cSN2AQFFw4b^PD}001ToDcLN|Euqi2 zO!Z6H!jyFkiBxGUi!Mt%HfVJdOMJBH%OB+u!y)4S6kiUdll;-*V9$xzP`=st8`Agw zZU}kGUK0-hzp@ecR74ce3ITe#A?WR_w&GPahrHnLzW4S|`5XzQe>RI`G z2A0x1PkWaj^%prEFK~{HpX5jI9a1w45pIb|-+WQ4sm^OFSZwgq_4oKr9%FzDTt^2# zYP6pudcJHDDz>@~1C)=$WDEKo)yW0KyXj8wIbTaR#{DvGuvnovWC^L&>Tk;dqcREY|u*#<{IJhp2wu?nL3uTZTd{Ib*gY@ zqg__%)U}gu(q)saQ-eJk>bFj%tebw5C)zc%(3)!lZ-AM3Gje$x5Mvq~4Pn6V6Hjjx zy#JfNG0*aEFy%i68dv!?@_br8l@QP&LDOAo1b_el027bXnI`xd) zQ%E0>{$Ej2hRuy8jz*l#g(a0}qkPa!lWrX#9{Y?yH}onK4Bs)i?UJ-{Rk)}jy-{xe zl|_^xv88is&Y<0+5^h{$iomYlE^FA5z%}pMaO9|L$q&q5R@SJo#j^3QTMNr7N1bLS`sX_>T1(;iJ!ud4v!6ev}-7V7$hD{TB$ ze1IsFvi5OfMu$?c4zTvqCIBh}Z$=*EgtLp_c0*y4)C%D5H%wxU=VzjN`Bt?e9ly|Y zsQ#C7GBluti?gOX$383eOoNedeE;{dFdJ5h)S_J}88#tOAr~02*yQtA9*hfyA5akO znbJ@KMc#XJ#eKFU&i;isjyL1IY7M1H+dyr}DyF2IN`x&YskBiTGKb8t5y)<&z z;j04dBq4fHwMJAn(Kxttt%xb-0`t~H1iQPX_>kZL=#v)wmXrxRWv2T8%D+Sv;a(Q0{tmr&qZGf7kR!8SHKLL(&haq{A~Z+ zltb5>*EnKm;)GzfpW)O%KF;Adv`xv{wzJpLPSVLXx_ZVxb>;^0xV{ug3 zrRNTN$kv}aKzGXo{@=L;@x7qGr_h*`;XN>Ms&5+E&B-_>p05hEi8)bj`MG(AEXZzX zPih5QPQozH&?P_Ji+nuyoC@24F+-%p1g*G*KXlPHss^^vB^=)8m1Bdya;ee8Nb%)3Z(N{8A#VFusL z?`kb)iC}FVKwqm!_B)Byd2;M1fSfz8lCH^$q|0uK#3?4$Q0!V-XUiXr@ zBv~G!=FQ>({>TUWH zQBP<=fN!$K=ZjWPn(eXP8B0!V+Wp#=()XWoc&k%|GFEo}>~=9ST!6C%rOkkB5&K&i z_m#^)iPzexI~4~Ncy1qz00000000000003IjT5mw@V8B>#YOwrPwxskw&{I-)YlpH zFk+e-3fB*mh0R}f&Q)#XC03%SQNdmv-$O&E?_y7O^ z00lNuQBW4u1y0RqGhw_MvOrc>p)UXsTZhLLxL3xuwOYpIcE!{>47JFe*TM)xmXX}^ zPgwWX%e%Jtfjw5$AywtI{ z|KXKNE6XH`kROXS>T&6lG*cOeQ9S=asel= zKb-TToEmqHKU~h#P8MwRW7E(-_=Z5~^x(~B5>kF!_>(@ZBXPjlEQ4Qp#mX(K90;ym zLDTXx&9Vc*G8uxgt`g-~_l6TS*f1|YItr=Am-HCS2BL0CADTF1lMk)TLxFTq__lY< zeL>TSm9^K#OTt+arsd5NuWD`XWa=jwp*>uOWSx~RcmsKLV%*2E3ugB|zHRMax&IpL zKoNbX%$cOnXauUr-q%v&3q?lNia|#dtYtalR@c-%tDkVU$#hw@z{ar)vVttJMm|O) zCpzFpJUGU$yzq5BVXMX&iy6Gfp*z2R9lvPNk#$-EuwH3Plp)8Z_BT^sk)uOHN#ZRG zo{}H_BK`>KlTgH1B)9UvP3z#*irWxQ4S*{suaPf1;3StE+yucn=j}=n^ooP-Pr~;i zol$QsO>GN@Xz;*8eG)JFRGc$yh%qtfm)rgtW~#CMz73bSv-S~+G}8afH&YybhL}vd zknTok5)S=GqIrdf!QdPM%+Nd6fAaisaD2UTi4@a_zNqT7Ky-#c_w0lqDM<&(g@{A> zS*>>ZaBiTo(U$N~%3vLsV09XG@+jo!3S9E^dac?Dyu;Ep&c$DTUvehxrRv?#m}1;D zI?OtL@!}Y&n&K|YX5=GpOG|ngfaslW(+xte-74Wbo1Vboec+u)0-BQ4iaHjbdVJ)k z`$^WR79ceo1vzQVMm=-i`AhNF3Ms#fxl%N>Uu-rzKLo1#sy_1oE3X5AaO|D-DCLQ!*UcAnhBmnb8insxp zYq5KablmLBIrs;;_^?ys-Z=3b;iY$wcuNHqZ&MZd6H1HHVWIW0wjt<#+<{VuF=hXF z$q0YphzrcriikhI_~=eXAw;BvFaAW& z-pL5k^zk_jp9wJE@=9!`CvkK^+3_5zX-z@Xnu@%U& zQ~ZhhMz>w87T)sZ%$pGnN+dV;>Cj!VdG&w?>@W{T%0Lv4H7qKV5;>^SM0QQx$Qx%| zhg~nkzD3>~>Qf3UU`+|=UyrFFx1+^E)UVaD zwzjoUV?jk#F>GKW&zaI2j%c+qo|Z>(;HGUWq5*ijj_&djH{;lok18INGI`vK$B8V$ z@wm!m5szNpX2b16p6z7CauZ+g5W5s+QC`VB(p~)@oFgD3EDzE3U3Jt zj8(7QV)DXtM^NtTnE9OK)B)8!FY9{!w=$vs;5T%LVDNe~>RMQF<;C9>b3M@F?PPk( zPSR>DcgL$qr`JhX@;9OZT9bQ`2aydwc}d4f|9&$0oi6~>lrrL(H9o_X)54@E`x$Ot zg2E}LiVVd7aN=s+lUHr@@tvBqf!rKZ-d8UgnC%zwSOa`gnLyF3zQKR0e#qB*Exfi0 zC{IdtM1dzqr+=-O8mF&RxLH8&I!`lQcvtSor z)PxCc--#2ttpW03xv3I%-c_!ok~6s`6jkKVGoz_ET3~|Nj~9w&Q63if8C;8v7~pO5 zt-;;~1r2ocP=MV z_R^4uKxWw{|JDq*!6P}B!x=2y-V&W-)l%jP)ETVi&Tk$pP%qti^L;l-I_)kGfXqb` zLU*mPXq2JOaXA6mwRdVug#+^?{|)zBfS}A#G_`P=mS5%P^756tZL-7txIg%r_#%@K zRj;n$R)u~r`#gt?KFV3U=ReUKK^aRzXkhRQD#zhi9->>Ionoqi@RZVL41JT``yZyR zXij^OYzg{ep8_PBvp^Kua3Wmazp?bW@v%!?f2HrL0#J@8%xmt5!uK& z4jM{nHWgjRXsMAjrB2oYCO(cY#$xEU`b*$P!3UM2?_GtG5m#PPykRx8T#uk zg~!ICJ~AUvGBP9mvAh+0G4Vr@B-x(c&LJz{ZsC+lKd1z|6Na`en?*+#?QsJ+o&9d| z>C3J-Tu$vV^=btxIu<9GrWBP`PkY#21d^f*8)<*jibxJ|#h~kFs59bnFLbdC^-LkF zPsQnE7DeQ4nN$yDHDm!=-&(j)MQlEyRZ5~8n)RGAr}cSriL1C$F9&!JzyJUM0DaaD z-(&#U5&U$`76OxDyd(#_?I!b5rJYyB&p`@2up1l!?>GzG+m|h$4^(r{ZNx-3z z2PqH1?vn_->lq79p5?&JX;rmk(;?K~LjNS*PkboLqN`O7BU(h_ar|eYfW?v5CtJW~ zlLO_DJHq31`G}gEQZ3REdsZxd^u)5x@LXc$wlo~0Jy`{|iTeOgb6se3{vr|1^T(k4xPHUqi@+|K1JNs6`gE_{3CVrVfjxIwVlDo;0Er5h{y!&a)%cv zvMCzSyPte4I}!L4BLWu1gS+XE&mI{3*`beXfr+uQaSD%?i4VyOvglNR0nS3!M_v2{ zs)?rIn|CLIP-Py8j$`$j#ksM9Gl(rkR^Sb1)_jey z1GV2;#w|9oeGNmAUF}gE#P806TTWH+yxtgauM6Teg4evY;a)IPbyknqaOjjNnc=Wx z&NWYZHTI#ydTS1nVS{vM%7+$=fqxI9m*L4?d-!Uccu$p59KK1%33hDk%B#>85*duC z{O2hKsK4>!ll=_h}IN{kwYt@?6Q=zvXAoPlZF`DZ%y)5#zTwHfxb&4(apg}6%p z3MmGd^)JMCwOFKN0faG&R?x>^x*b(oxvASpP~FEOQXoemM1~xh0~t=5&atdX7N6hh94oN~#}vdj*I74{a?E?>EWg-yD? zE4fZTm5N^c0&~rXjj7}bF$3mPig)$SML z?Ur#wyjxj(f2orM*=8WP000000iJcIsNez?5~pbmxyz5qUt)ywkx&LAu6Z__)1r<|*0wV4hjJMN7^fsH$0Wl;XNW;2|^N}UgyJqW$4cizh81_BHLF+h&1 zDdo`%hXI5|#;%Zn^F#mu066{!a%O-400000000000;3H80000Lhacc}WqY;h8v;Nd z22y{vOj5sAbm=I8>@JbkI+fX*!MqUO-Pxg(m><KR%K-I-_#w-^IMHQ~*rDok3V-hJk7 zhMZ77HxWu_UR|VSV>BJd8f|0rwtDk>K3)(d`IQ2U$dJ&quhPc2Xx-cH{W9C=@}uYm zD0~IHchdLLFfVnT5Be|kFz}de=FU;(oIgP4p&{#NY+DSW=+}BS=4Q8NmLzWg&7TJ( z@|ur_hc{@EO*8~C`I`ig2~^4S{b*+qPi|BDOksRMt#J`I0HlIa52x04IlFb#s9s6o zyISiXtVd|C=`T56Dm*lEehj%3U>5vce+j*_3SFq%sU-`o8!NH+W0YFKXpaM|!vgz= zVzh(eBx!EAGlCtcf#T4^LF4lQuqL@eS%Z|7l?-f{3~BO2{k zy5YS@5siCl2ReH2F$=Emu@V{3x^}>SdC{PTzivSg<(;fP2<^v-icb*#6c+%K-0F`S zDNc#h8kR?-vK)|EUnfT3{yluQZNTdW1vN&Dp(}@ZfHl;N4Ej%F*+3|E|L({q$ zh@x!*oQU++^0d&b>Y2ZH;tm8N3CyI2gEymdA2PW?bOR)@M08Mc0z9WC1=r( zS2!ceH?R!|6ZtS9gG%IwK-WyeqF20=Yi{)b_%gMnq5j<-xH8A>7%$=B1ugpK9zCim z$Sy>=)!z~p;vv;|iR*}gyD8wpWXnvF4MiS4$g^}JQ=LXiEc;o^x}ND_IA%aV^iDI( z;zck_%8C~jG}!0l3#ZQ{UIbKr+o!Ostt|`M{+OXdfp3qCZQ+`v{`#Mvm^#q;@^NOp*pFndWsFyRkgwNP_ZPiQ5a*s|0~i@!U506S;}tFxoNK`C3*)*kZ?<+Ql^Fuc(~(bBxU zyo@M~tk?y5Y<5U=%=&^_c9|^nCE6*n2` zQ*dr&MVfoQ`b#RxJ279PXJbpcPayoTs_D?gT0j4m zAITIHEPk5J1FSw6mA*eUwi<+C&+-Pn?qyOOSqa~m?DN6oRajz~E#>{9)tT(K83ZD; zBGeQz+89OuI|mzywr!kMFSca?gi6sIrcqa*;IM*#u{d&CC>*!#X${O9T5d_}J8ru1 zEY%?0%=})}<}6E{Wqc|J*mJMcT-wnIty$k(%FQmeXD%D(?Cn`_(@4*Z!JAZabBfVd~(38hMr1q>8 z3tp<(Qm%HJO>ATxmhR)$*G+<(2%p~f(wJ^^UejrmqZC}m-CnFPwHo^sUNDX=ImKz zfcX7Bo}G%K$*0d_V@2XN@Kx~!twcztXaqq_mQ<^rc89Zm;*n8l6vU4Ki(35zSFSEc z#;<()!}k(I+5qU%d;Ktkvh5ck#{ZjqK~CWdP$;YkVg!MKlA*3VQh;b}pY%3MQO3Vj zG9k+1C8AH^cDX>U-n4YoO`cMA*obi?E%~8@VM*lU#XN%|Y0IQJI|NKs-b;HK*?ja& zgFQtvdXg?go(@YPvBnzzRcvjxmIET$gS5GbeyH`&4ccbayDCeI58EpgIsi6iQG+3- z#2@U(#5(ulP#%%dRG*nXK!l5U6pm}n4^A460iu0Owx-;@8$aGN@YBu+6hA&|l;rTh z|I%=37;a1pXot`xZNX@DUQ~={B3sAG38Z4!ZifvTs7e<2)fo0{#HP=940u;SEQ7n)(^`Urp zEo{f6R*SeM(s(+P$qA%*yT@q3a_F%8PLOREF_ouVunA-1MYb>;MtQY1em22Wc#~-m zz9S!2S6wZ7ZB&$ZDf?=?l-FMbs%gC#5f|L^So&-V+x9nf*6nGU>a;g(d0y z(J^DkE?v$Rm^f9^%yWdJSni%%!t2ILBfg>gqjK{MNVtdp$-6m6)JL5P6Mp2%3FxqC zUv#^+q2&3?=F`AL5PGe&m}VA9s`Ki|g$GsS2#c2L-#zg9M39kYvx(1s$s7NzDg{&= zsin7HAprlGGhb!t0=GVVzV?vBU?-?fR}~WefO%olwtJy(<#sE(KyS3WddMSl+VQ!k zT5gycBLlp0u&eLnaXX0Tz5X|%Fo$KLt_S6em>&>SBq&KvJLec@Th4$V`J$rnZb`D+ zCETp@RH7daR|`)mx8I3Q(>}1VMsrNSG7E2z4ni01;_gk_0+!JCXrkN6f$Q+R`;G!G zXhGYhZEJ4SY1DD~tsi)gAB);s2diHed?_#K#;9>So?u}Cmq0K4Jf9N&Gugd#6AySx zcGP$X>}9tdefGbovx=-ZAc0*x7S!K);0_OLf1MjGaUx}}-`C9W`Px^nfKrD4@O|LK zS8wO}vEyXxGcb|plilXSWf!iyRMj!-%eS#_lI1PtAmwquRW@rngCHO*%hhnevsiWqYE8hwkd4J#I8QcwS zsP&&qQ*tcz9V{5I-}JWhAaD*2;|HNzS6v%ihWwdm$dA(DD=$aq3?a zKX%yBU+ghJ^8biApF)QO(ItA&WW<}g}L)fF^QB40w>@~I|)Go={TD#wWFl97R$I)YSe z{>1elrhn|7WFo)mvQ}yNy^?=GhzY~U&-+KMY9dCFs*4!-=$1g9mbr|rhtB6MzV*r# z+~`m+xgfYd+ut#C^zn_Lxl;So#XC$b3Z=e}ohM+1jGGc==y+{&P49mw7A3~8I;5V3 zpc3BN>@{Rz@&%D}rza=#5Ioh2?5Cb%=nhn4Fw6i&CX3Y?2^Ugn7j8$8J?#Z-i0n^j z9XYf2sQYa9Y?l6KG&%hl3zS7c8pI^(SViqEgsyeG_Y~1|>UJF)5_%Px z^sQ9I3FFFbvF%cGOI8VgU5Wv*=F0_a1d&;=3ir9{?Sn!Za_{(eJaJAjPi-&r1egf; zivCZIt!b!7e3c6f)uFeKWt|e2DcUvO5|PNEAseK`sKJ;a0is@%W5}n#mjidX8kQ_0 zP+lC{&kt?uF!b&{Qi+v&opV=}k`)s7bY}V+zq+UG_w4VkHp&DABSj<9758;5ohRsC zx&;#*B!V^4Rfnltvnxqy3&+E_cHzSn1YU<^T_G3gIx;`=ylo7FlCucRI%j+}KuLY;g}5g~fTGD|SPTsE z!_7f5Dgn1vbv?t@@0q z68Y#V>PjTa76(6=>bRxgK5 zqE-G+&aUZ>iey!;UDk?Zvs^G8S&e-%*wRUt}S?`Y#NSqpPaJ+-{4fuz(?NPES{Ok?R8r zLj$Qq-fZdHK`h@V!eWEANG;&2<|#Gw10B>ajT|&&U~QEFt0_VMct*V+%=$93Sl8^l z#WvfE*jDOZvwEB@xd*TH8)h*bk%)_vqf+k!6!x68;Gb--;Nx;m0XG)fH!I^3D*EhF zsQLS(`m@xcn14T(@y7)fD8IfsH#srU=Xz6T!;@a zh|W+om$_NRJGHZ!>@pih?72a$e-&huedFjuPgOE$>zvsRg3zh5y=P)VNVFpnt<}jg z$1&RpIa^f*9f0^yp?YERt9Q8h^66h=P6+Qsjc&d>>Vz8;^BeA`29I{FcS5Lp4DZE5 zYalxF@SRLg;W+J&VwbkW+W4v(KtLQ_=;&6N&uk4As7Cub;EM1d0P`Qy{7 zB>lRw3le;G1h00}G)&^WN9uyvg-X4NoM0jsFsxc9mJ_gXSg8!aN?|j?F2)Z`kl@4j zK!N@)Ke!aqE5Ukh`G6l;=!m4yqgINCoG;0=ahHMix57`Nnfbl_6jEB4brX)*4+OD_7308>HQyq}#astr&?W;P=pPW_QY?JXR~M4AHV@fC zQ7Uhj^$^bI@qY>D$RXhH9rF5N4dOv@_IVm34Y$(2`{S?{&B;7>%iGS{nF$Mb^X;hU zGfHcNQhQgIn0RITR++m@fWPk1h~?}CO4<(vD#u?A&rC`lfYdh1m+91%-}Z}^dZ74x zR4*0n^lC9(0c`zzCp5^n9N?wDKJ*{FatO~+N0*5MnHn>enRbsJHsN9XD%iYh?pFd6 z4qF>jf8z~~1euJN&j^oQUsh~T>^aOJm^z$qEuN{e3!F|3EoR-CyOh1>rh5CQ2D>0#7Fz`61e$l%Wbgt%WQ+w^q$M&iJQF-kGyUyzEn6J8QrbcY)~?JsokvV^mWrGtYS3uk1<2f8g9(OE-JJxZaxeY0ce*sO24d5ZxH` zgs(|riRa5}V8C72BRJHhA5A*LF!|t#96iYWRR}x(<~T%Gi0bpZFTX-d=h7z4TpVP; z_0(zh47A8uz) zN#VLPyNP+k3Bu?}LX~5d^so<7uQR$kgFLpZbM9Ot<#YVa*QRIp*EQ^gR3)ZNBXvr$ z{kx6ev%;Q|EHrg{va)O{h;EAv%_DyS>(WwXc|K5q(eyL^{To?hi5P?2@sS6S7YCesC)6Lzzv1P+s& z@;h^sr7n<^i(H?4rUuc{j9N{o^C=L4m=J+NNAmNoHUb1=GCNQTr7#7)EBbGU1+L<(# zdE<7$2QcFay%{mH$O5|l-$%Uw6U}t$V;?S!TP1zsT9a6$1H_*k=`G2UPL*skO+c8i zsFRL^G_$&7!;HU^9$7&g=s2}uiM1znB3V+$G7w3oMqHxx^SVS_hmJ$C9k`Sz|AeC} z{b(*0jky(?F7Tx9lG!zd+0VxiUD98? z!Q7e-VKalWkC2{0tpyuJ=YQLa!sq6av1MxAzi)7=s5|VgdcPrgh2;h2W~H3>0$}U1 zFgoa<#gp#q(2;68p-e!5{GU6g$6z0sk$}?{g`sr^q5b%Ia@-kX-9(0p%|5##q?16f3!`BorxG-01cmsH++lPnHgzQx zA$7k2Me~)Z_TBsw1So`Uv5M!j+Ld{@^yN;HDb*X<5AUb+%hfT=WH#Ze2K7mt`CEK^ z%b^x<0cPG|mNrkRb6wCN%DHym_B3Vbd;xZZOya$Jd7BPc2KISP{gPm~ceHRo>G~t% zB>dL^&U&rh8(@I-gjk`G1ZAX?m<_u;4^F0q*ZRR4LsN2yJb!8ysNs051bjwp-{zsS zHnkO#J|*ViDwT{NM}wo4;Y?_RLMn0z-p|&E8u`);#dqQ89Wo{|UuOJ32EB~*2yEXz z*D0R8SPA=lU;W7*8{qxDJCVv6xiJn&j4H?bgT(K3ANXf67ceb27yBFE8Gog&M9=WD z0a-6l{P5<|Zb{XG?$tqAU(W#Qyu&yTZOT%pzMy-S7GFquaUvGY`8_+~h7)AeE^faA z`65WYVJy4amYl&2+Ar1@xM%>P#F3y{LzP?8x2WP(QjH||G2m+ch3{};!L8vWm`A%C z7NYb9@>rZ6x$EQ)?H|(W1lL@o;Wv3$bP@B)>h*GfptXIN<=e7payg95pRLl^N6Fzr z)Hxgg$?=4Jy7psOsj6-xT-UQASlbQhKBxC!f<$fbIVCr$yGa76%P*%;N^&YC#h@Yq zuG`y|Q%bs3i1bZ|OlolhomOax!zRsSck|=%|AYhtzugv8Z8p zJq^gnJ0oDBwZFWPY6B<4J= zQT~?j1OkI_dK=707cFfwkM^-mrki~IHmsTH(~I?3Zv~FVBwZUpbZ&=Vllx3E7%3oP#g&|SosLR z>t0X&QkjRWL@?BP6SQ=lXwKz7HxTgwfSo#`e*yZWf_Bk&=Y=MpK{XEvJ{XYu1rjO@k)(289vv6%WNy*)VRv@ChFzrWT z(RJV+4Vyr(wVazwwV&wg3HwQF2a!X2%y0w{Dfj*!G>90bf;QE4p zt4dV`PkAl}#%a^FQ@g_hH44Gzx#tJj%6>1#(Z8SNA#hu=UKI(%-7>1IJY^n1hwuMU zW9wa}nnMHUf$WG(ui(i{=9REqSt}QHV>PMF=z~_jR@u$9q1X%=csON^1x>8fTkkql z?jz|f8Kyd7C~C0rvqZ&_)->Q%h8N5`78~-C`!Q*kVRZqP&cMuGn3)d<5Oe00>erb- z$S`v|Dg6PW4}xtALBX~<>C{$HT>F8wVgU`MFhA!zRTgGjuD=#blNUh^`M0Fz7?nw4 z)!UMjfDvmQcKLa>eoxxRzQ8-S+il7@V#bJX#zrYqYpM0NnqwJk!8ExHn8OR?<7#YA zF-ZxKvH|E8YnTiwQ7QvvreODp2e8!Ly`5! z2`4#V7%j=YcCnzJeiTFJJcszPUpVU6sFW7l;1#fs>rIg9IDHfO+W8z1jO?Nr#3eM+ z&^Ws2%8ReKx_fT?K54Ia{ZFF&^~t}jmSb90z|U8d0C8sZG?DMPyk9LS=(-Y=M*MYr zcQiJC585H{;|~RoE75aj4?{%EAboEq{Nj{wPX4z!)ZBm^`@R8;1 zS0_UmM`Ap(pjdSAWMSri>s{${$*pLSAuZ zBgO4TqMVWN*Bk{446r#1-E*L*L2Iixyz``a>4Lt+pH%!w43<`AVE8rQ#2fwz0F%#4 zsXqWCpBE^)hs+!vPc7iZzV9xLLI9`aPJn}N^oKt+)y`qoaB;ZpJd$r&QI_?Nb`Q_H2|yMpm{x;uCu zJnt&-)zPNIg}0Y=};uk4RG-XIoQn*0CJ$t!Ls~T_Pr2ex^kTdlD@h`Dq6@o~G zi}$1d(oZol^Rg;raME!yxZU3{t#(@s-IkDg=hT|2c7SEf`KHUW}z zYi5zJFI^Ph9-4u4TQb3HOR>}(0l_D{ zte^3-nm1UQ@UpBd-PzBj3$o3ecFOwv3N><1`&j2)?wFyH23oRgyj1~79E$#nO>^bp z1Y~5X=ANxk;8vA&KcMABRdIivK`-<+X)GMhH2W4L{i^ijHGmswy@8)iF&3dE@N=#u zmJ5p$qWpmtJkLBy2Kp>nqPeF#Aw1kxd*jZ0~qC*f44r@!{8I56wov*#EI-fUVH|dF=&P@>+MpI z^lt>iLS3yp?oqgK;DP5V*pxD>v1yvtxOe>+Hc(Z_NZw*gm zTFcZuSuR|s$gZzZM+}ZQ7b}Z5$e05r`T+No!Dv=|r8jVgiowOPfYp-2iJRv>`}En1 z_r2n2-R+t$crV14DuEMlM zDH3Pq@&ss@PR7tyoWVP2zh+}JSaHOow|Pg?CBJlY{2W6CqA?u~+CK+)B)N|s7$aVr zR@Md$@HVb?C~JYT*>#=Lki@u}0H);F0<7t&wpW8uk?65i?&Qhqi$K&j_D^NBLBE#j z8*luIH4W#XZljRQ6ei0Ms4f%Dc1mqqGPRCq4G*c`#xC?nt-&|RW+Eb8K z(Q!sxV_m42euJ(jM@-1^H=x9&_3y7ehLFo=vgW54)I%+_$7w5=hYh)}zj+$_>|KcM zH1^`#Cysm>0PgX@Gq+tN`7r*{bB7``Y$8TnT+TUM*{}cr000000043v0NwiEwEtb9 z@V*F)hF5G-C63spM?92cy$A!kf^Yx;7TrDD?d9io7?sNs00000000000005*0002Q zhZ7HE*thSyMa0>KKoPurpceQG*dHbi-`QM%^dBrZtFG@YtaJbX00005`Ad9Y*TpGA zi>c5BUhWM505@nQ9bUM1Rl9Tvphl9rI@doqBYj@e?hh>`=VbC2{ruLu!v=!XC2`>Y z{Y3|9UNG?!o0Px-^86QWTn{xGBn>I6tXo6?0$FFiH#+nYEl28*7u6A!h$5zaD1ZO} z2XK?m%%Va@BHyy&EIPxUxGe?%EO{vhlDx#FE3_6;lFY{seWL-4=0-VaT1pRky`PTc zX;ds$IBkusH~Sok?5z&5$o!E?)KbB%q&7%xFsVj}?<)2~>Ky*hb^@YzwBuLiG!_sSiP&@`aP-b z&qpEF@yb?5n<%Vw7bx?v9Pq*h!M5IbwdsI{%O)<`Mn{*q2YlGAs9@ov>%Tu4zNpUch@+XgO&jQ2?h zH0-9Vl0Y>=UbIfg77`wU14zpne?C({3~}|fNbTm^fn#b8 z*eUJl$VWQDOYF!kvd0WT;8^?ArqXJ1lMsjiM7lXo+}>X>UWTlM7Gi% zzQej=|}VgISl!DcYXA@9;ICM1RaGkGTdY3q8&ql_6sQvdXX z1R}}GyttHY?T(88UH||900)u?^`gW(sf~@AA)bF9@gx=Ruu;9ysG+)K~>P3RZxXcX-P zm!SPkbp-ckxG(iY;Li&KWQ2$1pSJJ$EV{McFom_}-Afk2pc8qNR%vh@C+pb$(c5?> z2bG#ROdyc`mwn7F+AxJA8_}fa!;s;V<&HAa2}A0e`{gs55%1N^t6$|!t^#TE1#hNv z=20FUQHjXiycx67EjP(feRLS~@zSk!DWmKDJ{aY&L;b%Gy$hW2-sRQYuq>Okb`k>e zZdqHKql4za zx1?X^D8Au3*pDJ39J({>VF0t$bRqtuh;d%SdF@cI0D1RScGL1oQ3t2A^KN%hCMm(e z+^t?`9bzP9?fTPr?$Al-R!*~yIzcsOm0OEEFqxCbwkMm?Am5fG&GSdbtjehqMB z(RW(UAkGyA0rpO)4M@I%FB93L+K9Dvaz{loKvjd#2l#({dlg3_SovsK5g7B4=f=eN zYy&;FDSX4;{Ha=csavuxG(8` z8_B9QYPITICz-Q;7!2)po`k{&idm%xB^aav8PQKJ+qB_izn6(}Quc;kSl6e_OB|GW zG#B&PWP-0i9-Y}vJWmiJ4g_zJTd}UaV9Vc6B1Bm_xjYk5K#1A2ZHC@3;k-YaKdCugG-*}`BU4VL#U|@ct=1-rP zpq&AYQHF~*GZy}WKKed}qFZ||8;lbgnc;P{(Df?ZM+Bj_L!-ak_p3GoVg;=Yd{I3_ zKhy{P#qFX_u%|w%slzrm2B6su4tB?F!m8xwO345NJL#DZRM6tqB46jW&@%=Gui3=a z?}KMofaSWaZ&lwV#FonOVcTNH}BadlHki+D+T z4awPn6~dX%B)s4cJ-zWxWH+im3o%3lguhQGs7XkFQP)S6>+3$C=!!;Ut4_B2QrQa= zIgOWOG$~Z1bJOU>nT0_dJ^(~T(5rjOt*|(AQPm86 z5%xIRCCu!7eFwuXZFG7|&dbN++K;^~9`*|M*r4K4uJ!nPZQWKDBlgfMX&xd=>?(!B ztvrY2P=4Q4D+ z#yp8eunHLZW8BWW4me2&XoP?r8gBOVoDEBsT@p!upvY7;8ih?54F z61X^b5<8^VtX~Q@SL)#3@Rp$tgEBtxpb_t=tpxC{t0ltArBfU>^_PVs$g{Uejcp(M!zp zrCXbb?=S47_BAH7v=`FX9mHy;3VKsN6N6KlO{DtPi&RMvPqQ)T_Ou0K@gowdfAc`w zjkE?cVe&kK3FFx|ITZ)-2)b}1A{F|Ru-qwQc!qvOZ-rVF>Lk=x$T89D5KE@?QPNc ztW);vg!1(Q>6?3^)uO8dCfiY&x_n~jVH==_ERFS?6N7|BC5y0XW(dCVUfnd4`?o)Qs_N_ zT0NN@ftg#LBw%K^*07Sa#eFuuv;JJA6!u~Wh$1c$i-DI7#t1#1Q7>gIUgw3nl9pdH z9l4VnouYb4h6q)3m6^ePBgOAHXs02}<0Uwf?6<_h6Q|_KjKx+m_F)Cv+j3~a9n5fR z?*v0#7Iz){sv+{Gj2x%G6E!iI(RaOTewS);RkNXYK`$dYz#2WY`VOa4b3MM$M9Q6Y zxL_On!}&Q}9W&2$hYs@GN7uP9mCaA;`5yZEP@3sKp)Km`yCtNHBNko&q^EFsHy`~&&6=0HWB8F}ikXaYu6larG^W9uyYuDeC4Vvo7c7+dYl`@nr{o62 zh6H{nJzdVUlDo?{T5Ti|T)iU+CLFkC8b?h}7{E!K7w<*2E;v78XM7uSYD5GHJ(S^k z+Z{$xYHX?LDfDlBX`bRZxS}FB@RBYCP++)x>@b(yTqy& zTW9rH*%D3M3TCwZC)vS#%I0-89fy$a4(R2jpryoLGdTi2ZRB5q&&L4`H85_+ zKF@AM#o#=6=e$XoR@*0d-wQ`%WUtdGj ze~_GTVuBPuE0Mzg%DcUiW_LGOe9)4%bdZ&r8!wt;0^>q$$Vc7@s4jpIjN9)Wg z)X(?5ZCvz?w1*sG44kFCIox`z@g9C zhcV`YFbRvM1rB{#wGxav_ILTzw@v`xLu>V(lC$COEE6l*v6qXLFJCr&ISKVOpfyc|9aa?YN3% zw<7UcM}JnI3_7D!E?>*YV#zkcIXt&$cx-Y99i))#!)_ zKBX{XM0COyKsZq#Eu+9^N8r#O7LYuQ>SLdXVk-5nJZ~1aAY9u2eff#xv_XHVI7$7E z8DXtphG}fu$Q!oC=*v&s8jJEbjk7klAQDl}3%8(ABUVV8Lzf+oCTayeZd;Naz!k67 z5BPPu70f>vp+Ea@vPjO=VEC}4Z^W}@_Y>xR`yq(Ob+m!5!!QOcuFvrY<}|eAQ|+r> zju)D|@A(@$A(&(`)+9evL8M2_*KYop{{!|kkb?Y46pl_=>9wnHYIF&*3#iPNO%cff zwe~g)8PPGDUL~{Z0||g#ZQBWfC8k;l@n&ox#&4Dk#fwp$P}QaIVy?%dVjj!R?~IC# zxoOy_g<|xiV*JrAWA5O`o<&*5RWxxGMt2va`3=)nHdm2xEi=AQg^^5+=P){@n$~-u zY=4!SY3x0MKx;HemE}$nykzu49f{PX(nSR3w1R+kve5uF`!3XP-BZD048KGMNvH?M zLI>IEhn0{<7KsDB_z#y+--jW)40bJ^zA2ZGP6By%v;j6&M62#U1q+S)z0_e4lz*fr z`F!)bZ(TFb%vE#u;g{J5Bw?XdINj+#N2Zp#5q|d9mS@;y*;(%;frM|PHsD#Y9`X*8 z8~D{F9?2*45G9wKuv%H#Y`v(E*S_dg^#G zftTeuY(qR)h5Y3|C_Pju2iM34MZYIpSt6oQ^a;=`MiCy4%Dtt>I+Em&!5C`td-wa- zfL<{8v#Eod4DblSBDElskMGj_#q>vUC(a}o5z2-tpW8)u@*NR+PJ-MpYy#Bu#ZJU%UxA85K-!s3s{nf zHyy>t@jEO|q6gN^9Fi+?EsdZoG%@rp8TdPYy&ZIzN<}35`D-kHUi&Qz=-9y1|6Lac z)1q9OjJ2h|y zr(sJ)r3^>wC{uQTLPG^)sf8Nc7A0Y$3m!k+YKH3 zFR~^^3#7#~utuVr z|5()b+l(=6&;brXNA; z(`+VCSsQ?J3KfrsgZFoML9HJDgdr1kd;v%(E3j|wA1~V`xH${^(p`bd8xpc+^~fTP zzy4I(aX#<`zQqT<8r`q%90=xNd#IfZljqnJ@MXFY8pOn?OSRequ>oUZ!832V1zyJUM000ZbVq2l( zm6?y7ANh!3{?fv^xiCHz_C-`ZrQ{*}gyH-V5!CMDPk`eOJI`=eIGKd*>W zYT|}IR{tdPv-LQ@d0%zu#%o!@7@ckoss@%RYlcY-6}d(Qg~0L=$0auUsB*O(0O_Kw z(efOj)u?hX7;coctFAKAOz3pgO`k(}G+$?udqar>4K1<=J#djsDsV?i??7jUob8y0 zoofmc)?_9PDOiO=WhC=9erYjw2s^#D2ExuolZ=OqN@~(^?hrdBpO(Ioj5^G+g2i$= zG{CUBX~~?qRl}vxa0tZ9#v3OE6OuR6^Jq(eVx$vQ&!~=zDWG8^*bJv{mqAs^s8{jrnT195?&kVF>;5a=erL-$6S6Igs z4Om)|0wo_SF=Nh{!jDi198AR$VxPXXX8$|&@Dlc@k}D@8sKvBl=-j&+|70^!`Y()M zAWoJtnbGjvZk9<@)Y?`Iw>BG~(ujviy%L~L9P&sbYcRezLh$oJ@Sfd+hf5-j*4BWP zEIA`~p^ttzH<_$>(6+zJxHj~%D&Su!ytW*y)0g@=(`ht&3%z>>i~Wa}KUE?~^1i<_ zqp{OdZPobj8%SZ1id`A2JGf=-WzySo6d1u5R3cU$jE%tyoYQf$VqjC*Vz>|KY(c~a zAp(mgoXgp(NI+H3ByIrTnOwX{HNhH7je^&~M>7n1qMk}2wWul&xpY@PL(?WJW4Dvv zMXmZ0Tt<~G*WW-28G;+;=={S%7mg2ao$6q0qxLoJn;2{~{6_V9*Hy5_fVs|s@0E3x z9?}^T5_J5F!pN2gK2tPMMuXCGzl`2hy!rcL z`JU0F<4S8Jj;25mQl={5(k&=}DGd)B5LiO=UfV8x^fe%O*Dsfy9FYMHHwKY-vkB>R zq$Zj`-GWZ|c$Ni1{D^KL`9h4B#aDy@j~|%XS*E*SdSg-$(wuPd$0?h)&f2r{*pVkH zuWiMvnkEjGz}Oo3n8CE^D=h<*kwXscwTcjK+AHREhk*RD<^*tF-T39JYicf$P$8R0 z!vHk{z)kN$M?XS~_>i9LLjy+Gf*CTNo3)p9^kN|Lf5xgA=5+yWR@kCRr6@9y4MWSd za9T&zDEvoGow+PqcP4!OSi<;|8PHz><6=pZ3OH5+$?i6+{fUjUrbApapx)hNH1uedLgZ6rRr#r@a`We2Ja2|Hqhnp~-c+3`aUA((2#bn&e;D0kd zJfT`X)Yt&juvu3pX(=a!IuT;QsnL2mIO_RVLB8ld}z*2p`38pvW%&44Kt2>Mp^ za`@WNc9p-)ibeuqdv&^1g0Hr0@cil{rTP>43OiJYV1v;rW_SVPSx;uq$hZu7&uzc$ z&63*nZGScPhjo8Op!^K37Q3wove1Ugmakdgk{P=SXIwmJiDQ4PhkYrp-j!Q7sh9I< zw7@-@Kc-S@Y!47;abM_A3_UX_Y8DT?TX^g$AU5&XSiHkHb^Xpu~FKF(k8iom@7M1nS8x3j3mW=M^8KjsQm z3^+y%Yqo6a9v?m0PvK#c;%G+tXj$oylqEMH2Z1cLs-%=QO;fnq1mIFP=Aej4TG9&gUE4@iu;UIF*wQ-~)`vJE!K_S? z*{8!(CWv|T{~d@n^LY$lmoad57WGn?NPq69GQQsTU9J>hu_5v!oOjf_K_9FLhD~wu zy2aLbb9*YR{W|X9;#d_rv}Cc-P%7RcQX`R4`geCa*YIAq_KUJt1^O5qqFE9i1M{-^@4Vv_dvLF$k`$q1!ii2q4WjcEjIq(9o3K%B9|A=96Hu=aBp?Tp>aE;$F-#uHsH!pF8 zK{R6eRx9B9h~Z%qQG5GF;!u#xgF$8d-R$Hfz@CghxF~oT>|X2pa+=4R_qOr*c@4Ru zLe)C+G9RuI%jk%@BrS30H*6eO1>WIBf5P^ux)@DY!Px<#*}&19z0>z^zQhOMOcss< zHlX8?*Wh5l7(bp5Eg%AcXu}uVu;pBgVCm}2z|%@PI}#Z(K>Pse?%ecM#gSW!oht#gv@fY7g%{>pIX#z^$ifIi<2AGUrE|p zazK~hyiUGhE_s;@(ddl7l2e=kERK`xOx+vq9|$n*V3^EhZIG-nQ_V9|&!#_SVN3K1 zHixO>;3+_rSEiI(;&pj@%WVZugbCPzqnSE&tcY98Yy@-5 zk#yg1$+OsbMbZYQJJW@t{*6GZY(RiR6PLT!UH2I%4^uyKBXqLG=dH_Sl9L5b9}KI~ ziSB^ZUF&L8iOW3Ou7$l1y_;Zy`&S+M)S67RQ9HqKQKhc$G(l&YS zD8Lf=2sTM!otSQQW;PTM*G**Gv97abWOCRS<}y)5_t3rMqc19fgaeBUfA6a?+Ve_j z{Gwm##ESLjXmzs}3gykgpalRT-0Zh&G(q%8!Mk?>`h+xZRsE}w%Y_B9pa&?IQO}kC z$OPD}a(Q@K^o@4y$TcViHGX_p=4SH*%i5Wfi5WwZraUi6Y<{(rP@cj(ibt9Uia{ON zX7I0JFa`V#LEVHc`4~X`rhbDRMXM2x&`kL&a>$-z;AR)f0b_Wk=>2`R*t|Lr$Ng%xLrC7Mt&RYIYO zq=TDuu*`IFs5+uI zKA!^MA}xLkfV}5+_W}G6XX56~Umaqq4c}b4gKGvjjoQelOW!*FBW(VR_9Air3xD__ z%8ukaztNxCON-9ANRjg>n4G%Bo#@7ZR+3NXll3d|Yjb+z3yu5ZwqVJ)W#Q3S!2v$u z&qNOO6vHkj*mH~J=C4|XMOZIND5&yP2<)v?*K2w)G=pYAR-Py*%jh6o61_DqeB_Dm z6Z=CxLScaU_bqP1;JWmU-a$YrYmj5i*(=Jx8?TMjo};n3FkK$0e-Haol%eqW4_N-R zzJXB?fO;gy{qex$LI^1=t+J04hbr&grz3{!TO6tR{MU!j+WT13He(}6-B?mQIj)b{ z6Wo`1H$F?-p?I>Qtx10*`w#*3QLx}AI`-$LTm7KLhObFCyAoDZ`o9V4p4YdpTRj|p z7Y=!A_|ls|22xpKo`r!WL?Sy86fy|jX0v`InL^!=(m3?f_8k zIX4;U?nIICvkn?l-dt}B-PM(HGE#iO_ z8BT3=9xp86IF)TvGYOxUw@ftJ5k{321#D|vXP#>jS108_hB<1+Q5kav0%c>B& z?3McM%<^VpYwwIPhobR6rBuorrFXChDYeQm7FR|_w2m6j23wT#^bEjq%h635t$uOi z%Q)Qgg%Qi7segFtDgo`T3u>nGi@v{=v-9~=jL9llb_87T6Q~#kC&g??GHP&<2ECXe zJ)S0#BKuCYR3b1jtmT{>nrL4R!F%uT>jNpnequCL3AY^CiVqcO+Yq`*sw$U|Oz=kX zGHT1V{^RPU5>f@KArI*qaH@+YFB;OzsnFzDA2(ofic$5$UPPgI?Rl=CSTD-`V|>f8 zk*1Szsa*&Gkt27A0@NXg!IwcYehliwt)%{Dg^TZypo);4-pgQOm{XR=vm?azIck!ZI#Q)b2GhMh`X4{um8DWG;^jyJ9-GwWU; zd}l$B(4u}Cwx|#m$fC1P$KFyl&nwcrJ;wrgjJ*# zR@$b->}e)CoA#K!k3)lMEvC0gPDI7+Zr@BMfejH6E-$AB-(ZIBPuA3u2CueFoXh&S z7*;HXr)Za1X2Kc9ilfLDLy&OFFZk7a(BSsms>q>Z3ahkppKosE_&XK*4nQc33y$W- z87584`_A0Tz+8!vK&ucoHRwIOOMty#+|18c`K>?3x_ ztEY~1?U!u3Xg>=@*0wSe=gycyPQD0IhXp0v@*|5y+*Yp-VPxK0`nrcWuMS7DP2O6)>o!W%>YYvNHOxD+9YG0t^@;&62U(U#;*!6?6O{?h zf>|Nl5^D^aiD(|P$Bju6pNnNH&noOFnp95!R$PoD7se;w?#@o!BKUo={oW#gxJzU5 z%#1Un!2C5?mTcNOdCiw*yCG0rda(Y^X%q$seiJ|IhJuXlG6p5;uG38Vbose{IiF!0 zwnbe#rA3j}WAtr1tF?u1j+6fo?In7Guz`Gcv$4%z=G%0L_pY<)~cAmA55h z%3D2e;S;OqFoPgj^*>Od1~x5%7gho;pQTO>w2BXy&lrHN7a?Ewz!vxp@JMxt?hvHJ zOXN%BaGLU(Xhe}{{U&JX%;RjIg``WZZF_K)AFIs{9Y3*F4D(@BX1&(No!1eTWdz33 z8JAPkdRWG-?CLFimI!OaV?bYQ(cs$kJ)(lONK*QY54qKjaQy&IRi5G^=-a2*HKp1z z;NdDiDD26#fD4yfYzU4))-I?oxCYj^q|TnxX5ilJKNhHwxP@m+KZ-gP&@PYMW*u$w z;x;I>+f`~iVpfrd2e1Qg#U4yz0s-7!nZ-z(L`tjKbObPb`-q7LiIBbGB!zv(8F*`Y zkEgkqMck$6xl-j%W1lK7k@Vw37bd|~)|C9zHipQ?sK^BeK~oc`0LCCCz+^BoEGIaB zz)*xcDH6(+Wm_EY=RMmPR?mwzI&IXxQ`)@4_hU*qH;S7I6S> zZJUu}xI&W=FOeqcd0T@^^LTCw$_WBT2L>t#ZshU#vFTtA_F2K?+E7!UW^+SgRVzU4lypZz=pt^*v1rg71U z%7A)YnWz}ww?A+}fSg>c*pv?7z|pm9-FW#@0`I0hf!+pZ__9rV_3#M?*Z?WtVfS0! zzW(iRZ+bnag^)>!Xg181R42TkV+%tlQrz@`@lOBy?wf7_>%WD{D0ryX-ls`4m}vCo z?{+64qSbt@yP-|m#~?i-!-7&_Y{TnYeickRfND2WG}QxRWZ-%>7aPkcW0dU%9pgIuqv)&_@+9%|Ro!^8h$`)hV%LfS(+>8RU?sxm;1k~j36Q}kR-lrfQ&kto zN$V{&wZdxm5J~C}wXi`Rm4TOll-^@5@furdr96SAkaZB1u^q_;3)r@Avoj8$d%3bH z>}Et$KCI51p#yupK^2hVPBz*F%q!?x3Q6cps@op=-NN?Hvt9+arBvg5)ED~}tK@`) zFxZiTJuVTt9XrXa*&Ca!hXb1PxZm>)V6e#$XSi+bmSsdzfJRdZ3A&JQ{K}~Af^+LJ z@uVT6O|5u8_0Wcaw-3FH5_q77w$7cPPHRxm8@II#25+m*E zo#1+K?YRo~4l1DvV!7+RjKwx8Bmdzl1$*#-w$5ihFaPJaAm-Yd(nU-ncdxY7%2}hC zv_?sPnk=-%EIS|kau_0v3Yb6?#KX-brs>Y@h||NbG<6>JB%a9XkB^WgboUXk$}Fby zFyY;&PsNaAXQLnAaYDBi1 zbzBQyU>pvjdhcdLEbNH;IV?sB0(U_lqqqrUInZ4&X(kwT@fSt2E@hzboZHtAERA5x zsoMar$7Kl@Lqo#AUO4B+cAP2!Z|Nz`M!#Z2<)d3p|z~x6NRW2=S`89Hl95ERKN`e~s4^C{XgpDSsCX=CAJ`z-l2h zHqG|pb3YGXq^4`}6`$9CWULh{4K8%24pRE=?PgR{Yw{7ry2|nT+r8N1B8`P;E`f~waE5Aw|LlN;jV+Q;&a%5$?I1NdJ_iAkDNw!l`7*w zXJBxZXeUBau*|JG$#WfCyW4W!h$rK|Sq)uR#l{rYFxI-HV`=(#yqy57h|AQ0SldjV z)Y?pFuL2lxhKP4uGc{-pU1-r$JUC0*And|~5hguq#`R1`#HOQCGg7Oivma3ePO~2< zw9A7IXoCIN5QYLy8Z~s|6YG7f(6XVAqCUmb^WEWX>Z==1ci@X@3^b3&pFLF45^hF5 zTvfR$w$;|Fq_kjsdI$>_g%?q{QAjspjrh(S4=-~x6Hz!M&J2)Sw$JTA-MlU4w^B#; z(Rxrsd{4Kc^qO1jme`O+ZcFXUZEFozh5Ok532Re?$)JNVV-W7w6;sv|q+}nTBfo{` zreDob$BwzZLZw7UK!ucd9NYtYmr~`Y$m~X2A)Jt8sDGQqfg@ulwV~7;PT$N@dboNp zkr5r69nPdes4?REcGtb!RcWv3z!J#mKE%z^5tDy#eMw$i0jTR2pKl?hqN!i4jy5$7t!S#7Ga@SFINZDsaA-T2W6@n90C@;utZ#%V)UYB-flc z7@+kvpECIW7g$d>CXr*0MGVM(xxDzNgg!wEQd-Ebv+A?m!V!%0lIs|@CpJ_`$Abv4 zwmRNH@Z9blq;SC|dNfo$TV&H~r#-pD;1L`maarcj7B@xzW2WjmfuaTVG8^xt*LW4?NI`CD9|Ti3*Turk(wF4dBBkNx(WO*tFtB) zfKnh1FMoSz88{h);jJ1>K+fT_s3z2*rl`O??tD0fJxwQ#{7^b}x33)c6{13q`6euS z5X-xBn-^!=M1`WOSpG}U$4OJ`8O^vjr+zoWL2ke<5H9a7mOf4ukQ%PRoYagX?rt>; z5G$17NLV^=HNMA`Z#h3{4221Y%G>Z3`Aft(i;irB-qn8eST7M zqGVIi$m~`KoLVQaFwKI(ffcPd^%sseDTqlV9Qt*X{1k24D{NJ`yztJJ0f$?k>oIxc zo!RJv8NL!H*OsAb7;i*%yijPsH(p5EA<3ZqMMl$LNN&?Y?y&T0+L)i~#QKR<gxP?!ud<)O0eWT_!D>EDd&4N&YuYEA6F)>YdRaEi?xFBd$u_X_Leo$cLNov=W^ zM`UYpjsbxH^IL% zvF|nB*qawNV=>|6DcwWJsExcSqYj7FY_zkkX$TeqaK#j)x{fD?1x5EeM}1kkZyYRD%J zrFRJysFR0@?ztbFvcu$4C7n=m736DLzV5ipw6hX$9qRrTD4XxOd`QB2RNP~= z4Ocj#U4{~nT+3)Is$U8oTOVNV#*$(aiJZ7*@iyN;7_PwxefIaFRu^o=H7clRsih$+ zEEHg3D{U?&Xrj2l(RAtMvz*7~T_~telgNE29!9jwV!D1FGS3iJrI7oK$r6R9ar)9GGPk7@a8{jWXoqp)KG?s2v;j0dO9wJTgQwc zRp>I79rhCY;4)gzpH_TV#sZ+6L}qXfxo+_&Wm^_X=cO0%~Wn~!_J{Ka*tUI5rqh(98}VSH@D$K zQz9*t*uv>WSm#2#Z`7vQ^WS??4(Ro!qQA}33Ge`{b%Cx-r>5IStd(KPEe@uU!p7tzYdo3d+vjK5u?3^@{5 z$fGa1-wJnD3L_B$I{6zYQ(OuNjQE4RuE(jrA7f`HlzN|30)+y#FSvTZzZJjc1At!I zBZXlGSX-&d3G0dgid#Yc&A)=t1vou~E?#Q=Rhs=@>o3NfXD3|4~m4wEDnu$WLH)7bYq~M)uLzeKXB;^~ zm|hP-uy^AuXLGSJO;Cy7>=O$wBZl(cKqBJ5NUqpGJ(@s4pH`(|bp63@qU4dYyCRNf z`?=ymx}T5UllwRUr>67Sz)x1DM{f@M8-0Op(}c_Un~I6frCzS%WtT zNuPf54cqpck3|s0--0WcBiov4v|vaVM=9DsL2-o$_k{5EDT*xdp+~Av5N5CZ-J_4} z(riz;x1eDyaMVSlbP;mXACGP5{uNQN=8?f3pZ(hM6^$Z1DD;&X++$(hIY zE}5ItHBdVbubM(;kNQ8H!u{TmTs=enlWcz@2vA4%v|fW9`#X@Q_R+_YDM^C0zpz8y zg>x$`U*xJ&_!0>xYV3L|B?l~I5JNlCYsh->#>=>vVLjQ}Mx~wUpSo zAhW04w+{kt38r+RGn2;|FaMNY@s9^_lym(Dcw`#agl!p-;{|U`E66&=l1mYdzjF5{ zu-3vawYKD}!9Q;lxG2g#U8TlMRa8XLJ@#@9tTk&6Y8g5q|5uOOa(8Dn1LBrCj^wITgC zr49UO4YH=g_2{b9Qb8;&zZz^YlAEYKpA~Brv(83(RgL`ghaJ~b}zBp-CPG58=6hO^!(A1h(;4i2GpdWNo3(+^? zKrtET$<0vS2eQ8u(k&0R)uxK4Ov&&+x3~uidpM$P2pY59-ezySHYkYvX>tNy*4>l? z{R$E3>#zJtOcHz6e~DWIlg7WrMHJ0H%>1TgVh23=(M2~lnZ-8=pUs8f!Z!u<16};T z)$WLYNDWeNtER`WAJvvyykT)VtTDZ)L_jN@1tP2!3;y>8rX%a>4Lw6?=V`E(yZ5?t z-eYRBV@s&u=MwAk0CPZ$zgnjk<4g%LjUXm5xkE228Ff)W2kMN+Z65(;Bw$fPkfo3Z z6T!W}k*p;933ESVb!3`qxjOwoh7b4NO>C}+14qdZNToqyp%gKeN{!s>idJ)rNCD!k zJH&!QYAFQ64}GxP;lOuQgCkfM0=}Q*I*{(i$b!dY22ELXM?l51X0a5O@PFQxOq3F~ z#Vn{_JOk*#AhW04upZsa+w3OKEH04Z6_&^2*~(sD&NE@_MwXbN(#nsF3y3mhfOf@Y z_=fl^#52+HSse9s@Cff=R}+qEMd=1y7oxNvPpa|=5uLsyXf4nx=h{UV14h&MpGBUd z)>0&>YD9O)yX4rcuH+4F#@P+XzQ>3H{@&mmh}4vBRDBVFWu#GFcB{)fK>5wuLDX%uJ( z0MGVlo<_-^00qjU%9HZNL&G<^VQEL(QO2XMS{ogC1c|8j>j|#fYQzB{H&Eo zAj%9tTM(wF^e|=`E%Q=&l$>X_~46w(s-h7J{V{}gD{w#~)acmoewyhV>uaNmDv zR4p6(J0#2XL0a)#!Ofi5Y0l6l#btLbGB2^~f1f_`|AlK*EVyPOx%lQ8N0%WIo>pu) zAZ$P~B{itR4>IxLY~xOGOit4A5ku6noxLvkzG~clih2o(@HZ&0Up;KL0Kh*Q_`aD$ z;&Szu{);_FtfWa$gQ%UmWQ}r(7HI$rg7i9eey!?55Lb|ZaJwzI@4STaJvuD#?9gY? zau5*HpnFn)2C=HDz*Ka6wAn2jEWwEeMH{1G?1Jnl|8`OfN%j-u7n?V=*K5<7dLMDb z%qMY?jeRkw8CtHXl?du;59@1W6txY=PJk-^?V|kg)@JF`5Z!D>N=F&;_i=pbGG4O_ zzo-pcBI|?~I`bhhkLYvjimU5pmxJKB?nj&)nk0Zuv&Wed`%Np^--f9cCNc zKVOboxJyQ%Tl7*cZFJ00-3aGmn?!)!OCFXT+$&w^&#t7!1t4W6QF!9g{_m0rJUJ(` zlq#T$i&Ac5Jyn;!9Wp!_GKE!__^c6#`{|uoO?NgF$)y2%M#-Vz;4rmNgJo#ZHx7PMnr>0gQ~ZicdB%KzmgLVy3^lyP&24zT$j_lr zX^)Y}{VL*>N^fLFi!|0a74Seo0fD7F5{>cghd+Mcl>{6Sny$e-yRP!81|E?BknV;( zLwR4J-s@!}Sz6-5f{HFDzUp*!_iU5vCWd+ibxwCmn8Mt!){Y33%;t)@>-QRe7wx+L z6tI<;PmKJ30WU|v+c%RsI~+KepIImp()$ix3v!E_VznWYVAV4HL&5n}EI{t^oB+tV z2ZkUe+{D&HgAd6Qf(8>e=wf_s#{DLJI)pPoNWkiY&dH_T$h?^U81i##%CoLr5`CM< z+(M_J<(oI6Rac>`c%})OEqJwK;ZwQo7v1mg}QY8JW@e}=MR@q~v-t3ZRS zNjRWHgtSsLIYq^g~`Wz7X!%Z9{v3 zHayE?3znPXHF8fo0P@2Mn|LO`xol_?w6h~U(ZnBZdq5rI#rCO#T}Slc%7~;)IE63W znir5>3ps`M_?}kp4;SkzDkGS3{9ryEw2vX4=yjLS`a7QNb;5eXgc#DixTyKTK++#V zzxi4S2P*6*Jbog6Zru?G!G|=6BZ8CEg&Z$|{^j>OTTf$0NRw(GKdhRyppENf!ld%* zcT07m=_`{FtfD9sRsiy1aP%ekF?L-tw*G7yFruK9f9pCkb6)b6w5#)<&^FsZpZ=G>P5Yd*-VQ0=D%M3!QR)FuNirgh8C^U`E&Rwqa*}h*QRlvBtMK5 zFX7*|{^k|B_kzn&ds;&`F1h6QJVO&G^#!`++Ar`Pca(UjjFq*y(LJq$0<~b4jLX)i z(oU5BP*Aetgd`2qIr!@yV|cSCh-P-_wBvOMTzec z?!kn9iz?&z{&L98cdm$?rb;kihDCf97@M;Fv=)o6=jnk$QQ+5E8@b<{tV94bxxej- zTc!l23%Brusd9iM>YNAFPz>L3y#R7k_uccSm6Cuw14J+uxAiPs3bS)ksGPRokS1N|`*%Sae7e!@o*Qbv2SAT? zpbHzAvIjoSw$_%*K+vDr;v}~+zABT}S^(hWLGRX8xr2Qy$lQ@^w<>vs7_TVJtm;f#lT}jjio}h+%iKp&OD`9s< zS!XYVIE#QT{5-=Q=H+@|;Px`Et&etil489SB1GP{JK`_~%Pju|N_j8YzOXWX+rXJ+ zoeDIJOJDeVwBUP7Gg*~rTL`1PO^-Ab0SSYujYO}gEznQkpr&Nn=&;2@(cNfj#+h|| zqOQ(b%oI0i+=Yn>(AUn$c^@4h;kB(IHt1HVH<9-^xqfUv+~iSI`~z-$Qxn&5)E`|z zWfig=8g5FRdv7->L>lvfA7HmEx7Gq(siIx8_{rk0HiG|bwc3SR)F{b;Vt8eswxTFm zjNp}lhZ?2Ek&a)hT$bGEyzyppJB%7d#zl3G;Hoj`V5td9*iD2Na(J2?3Ccx1VJN57 ziH|zlk7bsNTfKIJQQMHy<4R?ph8g861E1^tGSosXB1p^#0O3LQJKz_f%ifYxCoEw7 zKlF5AAPpv27*ni;__`q0d$d zt*3SQDEGpG4Q58o82KurPicH9%3@kRogi(^{g*=8^qZtB8MsDP&vi)}65ImpX4M@Z;OujBJl@b39Ml{O)lkr<{%EZa;?7zmOxoBASbl0K$fdB5|uvsA;#2miqx z1+z-5st*jdVIRthudbJzK7wJsc{tc?Bu{Mnrbc9hb0;pous|@ToMILhu%}j>DPYa7 z138)IWuhHN(8NuwYJIvjaM&_{O~DhFb13U;XaKU4qtGDk#A&SOx^+O;>j23SgcqtZ z2~n6{*aV*@Nv1eF`i@o&oNUd08)!9f0}$HY!)i+^EgAvJe=%H0FZ5-z9Nd|DD8=YP zr}wZ+ez=>1kHbPEm2BpnVWh4fuggb>_ymb0mbg_!aP`P6XYd?j-}$Wn{W~Wc)t~=S z*|9V#U6Q@mKkUo@Yn_;EF z{Yb<0nF$y8aXv`Aom3o};fC?f;tmjX$W&5K4`<=?&HgxtQkLpp0_V6lel%T}%-6|E z;1f0sl*7Gnr-f_zfKV^l`KSqVud~^!q%jP61tkd2Oy#@PZ|!BMDr`g(=2B2Jm~ao8 zzmO|7zi{Z?!RS_Lvm*ayO5#M41WI7#!60Eru^~h&^14D>Zn)2LH~7AYgr+RCx{Uyd zy)=z-59ig$wVaP{(UQ3`4*gYR^1UEgI@IAT@<5!+2`ap8>_pm{e~-T<%Ly(5few+s zXs#UWT1-Dnt^Y|5?5u_-%X~Vzga#BQ;jWS94;6Z?u0mj5DD^z0dm^_~HOv;(=1cLo zfDmtYcsw$pDpXCDJx3k@vN`%d!rW5Pb4G6?Q19<|&H;?GXrKzuQyGEq-Z3{MuTWK* zh%~&ymYHO47444e^5Hvbo)OL%eH)SH4hJKZqgBzr4^Vo}&yRs8f_>FgF_g{b_vJoI-0)LWfsx91(#%@q-M-)rZ@2_ zGnq4^|5~!s!69dg)*D^jK4*?`40R!$z`(}MI-+=t#T?!4G5Mvxt58_Ulxoj^sitYC zAJYPaqrtASMeI4QX;G(9!ghrho7vwUsuXw(IND$OZ}`R`>H(YX0Ra0b{=?p{EtS_l zNC4ZDTMkfrUqQ%(>JPYWX5;PZwkq`np|0VxMRC4rSrP|g62Cl7nM+%J*ZcR;HHLpy- z<L(gjiQMX454i~<)V^SgP6D~o}a3(4=s#~+2+I{~ z?ilaXA|w+;G~>@T?Lr)lLJM6TZoA_$u1suYZXA7~mE>>%23KV9*R&ELH**rp_BQdv_DyMVD(s>VB%+a-f*O~!?o#&^bz#KS%rtGBJx)tX+)*QTlMF6$ zrxvXSf&Kt-Q$v({Az^SlgmKADx=b2GA*T`#_l=mlC46h!?Aw~teQ4{Z!cvaAr1cmWUB#s3%(w#r}xHE+E8)Lw8l!g8I)?Km!wI2SQs1HpD zTTYh;hy2?s(ly}@L2Ud=Gkjlb&U5pBSVzKB?vhHN#sIrBj^p1S)BX z#~Q9w>gUte6b{cN;r~)gnL<*#X*I{A&`61GxNUwH9qov*nM0_5|+p={nAi&l$)Sr-=)HajlP ze0*PROuM%KvbJd7WH~VzvDyvkK}4 ze9|6+<^nd^c5yD#;Q0ScjX0{FwiO4oG*aK}iXs?~)9Fu6_kR5wK4oJgDDve2P;zS2 z{|DO+{>R=yr?&UZ(jaN7rk8)FLHO6hG(BsE{cszUc&8v3AcW)||1>jQK&%hqt1 z9e;ThQ|C4uPcU^jiZ`aF2*|VM0sxVlOv*H^Vv)`3fc3W_?|pV$u4ym--XD^UwM)}YyHUz3!p#PoHI zSn~+iMN^lNJ+``;Qi-2R&+~CLgT!5tK{q-79+@96YA5Bek^(bXwQkj%`hW37EqM;? zpdRmKL$NH^p(VqK)o!zxK5;)9C8xyIuHO_i;jp{+F_V&w#zLt^%l%sXCX$43Tjn}7 z86OA}c*}EAFa5r*U=Lm^-1WYrpWt|Cnl2RbX|&H8JP8mNK|AFN;!8AsW6|rMPgUO1 zw=Z(BMph5y;^ExRv}P9pQR}h=ZbV0(Te}!1b!oGx1jgcZ9a8sB2$B5RXjUT_hf%JoL^m^|vDoR^%+)x|IXIgMzyug_?t^rb z>XwHkM<(@A?;#nulcA6xiKM09}?JH|2c;;k!Y>%_tEuD z`b3=bSCd!p@NWnbxs*tn>X3rU!~jNyS_v@j9W+Rcm@m6tMvLw;PzZ!1>&)0DU!>J* zD*+m@PXY*u*majx-zU?Qk-u?5i$C>NspWEDl+rRbG{*z+>-vcrmalI zZp^~S9?gT7?kKKZfN&d7hVh!elv~JP!I4+N^jdkF4!7O!V9xO?d>Kc9_I`jtYEdxXZ7cSKrnPTmHhk~KnU5wSsF-o zWm|v;jo9l0))i;sNh9%zkb6Qs{gnt6Y=n2))haV!geu5vpwpz;tqV+Dl^8q#M+Z_< zoSPDSNYW|wptt9T|A#10e()V2O(QOi&s&7!iIP;z0PTPSWmPX%n?T0FpDZ)R9V7L8!ymbNiZ&Hr^#|x~wOHfim|+HD zue0~haf7~mzz$|k2?sV4Jo<-m#7!6@me0Z&&`x)v=1^XqVlFU$WAFS&K5Vu)d)jU( zT;&i4cGc?3YL9yKkQkr!Gj3^xEz0vaPiI?RR*RwJQa<3xLd2#spMF0Y{?k|pG z&RqTXr(SYq1G-wh$2}sRgk%Nr{wxFnrMu*T1uOt27E;pb}Ke%wQ(re z76Q}GCIxeE(i;a%fQbGg{0Y&>OZ6i_&3XoErK2JfS*e@(o>`_=Er&vaCPM5O*q_j#En-KtY+b% zJtDd)?k&F;vb}kV0erdY>B!7eTb&Nu#@Eq@;53=J26~bUNvJOLJ&+OdJ}rNMhclKj zE{5DX&z>3%@yooSMUwjV?s)|0 z3^#St5V*^B&}N#@mV&z%08&JlMb(ubKF@wHJRZ%( z#vjJD6H0n&nri;gNGFfzR>7w|G4pU{O_N83CKZcWF9y(@*i^WB@Ea|Y5nLy$gp%Kf zOVO-9B#u*q-kbgDn&Ym^8wM<951N)SaeMGcC^mcS+gQWeJcfRK~vhW zJA-qZR#jrFQ1Z)fA5mXJA|lpW;d0~&a$}T5#Ic#vn%;ajU>uE3x-z{WQp9qh$~n0d zqT&EPNP2XMs=$QJNH5wKvO1-o@j5N%10cr(1w9bXaf zMcbnt6;6N~Qbj~k{QFREQ}Ws46m1G97g)+OTa$WuN8;EV?j|=D+0rC3Hsv#N2PK(4u zbC!(NVA-FG!~s=a1LB!YBUZJcUPC(7W?PlEq|SE7 z55N~c5<^clxEcIVh?vS?krN&u(8YW zP5?wAu`jYNzu0_-wf8djA9-}WNNku07T4I#5+{P7Xea!Eyq#m0`d2^BEp|QNk6axm z!CVd&FdU31K1mHP#c(l$*kT%}b^d(^UKcJ#Dup>I698Iz=0|*ob`AXRZkp*HC-jD) z%E~h(n_wxf@X!L7d8oZhG)_|$<6uH}8imFo%I!Q%tZ@^*jUp4?{HNw~rJ|M1Ln8&I zbkTU0G+~Um7s?V+7&2i=&Nips6=T~X%#WBN<6{5VP zx?D$G-Rc>qXTdzJ{M}H;c~r6+K#2SGU7}<(0^nVGdtCHuB(Y^67o&Wx!{NJCQ8eRn z0aruO@xrVn;ccHY?WGGGE0xU=n0Yhle8%Q9CVE57vrU7@p#M-{31j<&cvxV5m2_qc z5Y;_bs?4FLJ3L4rJ2oOLnarK$vrsV;J+oN&E`Qt8uNmYa*?CLU1Jn}KrGmP3X}EQu z2o5O7JDxj}iY58B2kA?S?-Me6|9ZpA4uy2cm-{0(cc0sBmWFSE1J0)Xr+Lrnj{zEMC5=II7+nxOO@JKH1F zQ+^_;0FkeI(jM5<`KQY@+m|K=NxsI`12izawtUH&sX{rms!7!4N3$P7B8}M;B=BXc zU2qsR+(I~`9y-a_VLF-djgcV#QH}}E(nkuOLeyKcm5&Q*W#?-pq>9>3arV@1sA0-g zHFaH2LI^hQofa8Dkr7$8-bXH>zvE7v0bic_%sPP)Dm>a>mOLq#Oj!Thgql>?6AIb8 z;_0Z|_As$i!?SBICF7T8*!6szMHUu1ER2dzL?QU_c9DAdSx3O5eN=j;do9)&7VM{i zZtbH5OVYWlxgDmZ#{e@Gt3%*ToPt1D8nSQ;VrgH91$(j+wPeb@?dDcAFtUAkPs4

HdeqpGul@`SU1&L2~F(md}gRZ9IZbQ0Z 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 z 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 O37`M~000000001e46+db literal 123594 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 z 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 f0RsR4000000000000000od5s;0000000000T40cd From 496dba4e16d89dc729f07abcd46681f800824ff7 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 15 Sep 2026 18:57:59 +0300 Subject: [PATCH 04/66] Learning Path: full test-program outputs, key lines called out - The fit_check_sign, mkimage and board-run outputs are complete again: no line is replaced by an ellipsis. - Every output block is followed by a "Lines to look for" call-out that names the lines carrying the verdict, then the explanation of those lines as it stood before the prose was lightened. --- .../4-sign-zephyr.md | 22 ++++- .../5-build-uboot.md | 47 +++++++++- .../6-boot-the-board.md | 12 +-- .../7-test-the-checks.md | 85 ++++++++++++++++--- 4 files changed, 141 insertions(+), 25 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index f5a0bcac3f..ab644d6739 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -140,19 +140,35 @@ Compile and sign the FIT. `-k $KEYS` tells `mkimage` where the private key is: $UBOOT_OUT/tools/mkimage -f $FIT/zephyr-a.its -k $KEYS $FIT/zephyr-a.itb ``` -`mkimage` prints the image contents. Trimmed, the output is similar to: +`mkimage` prints the image contents. Your timestamps, `Hash value` and `Sign value` differ, and the `Sign value` is shortened here. The output is similar to: ```output +FIT description: Zephyr RTOS for AM62L Cortex-A53, signed with key-a +Created: Tue Sep 15 18:52:31 2026 + Image 0 (kernel-1) + Description: Zephyr RTOS image + Created: Tue Sep 15 18:52:31 2026 Type: Kernel Image - ... + Compression: uncompressed + Data Size: 58340 Bytes = 56.97 KiB = 0.06 MiB + Architecture: AArch64 OS: U-Boot Load Address: 0x82000000 Entry Point: 0x82000000 Hash algo: sha256 - ... + Hash value: 1d1d375f14c3354579e9e5310986a69b831bcd1944cd6b35aa8e83632b658166 + Default Configuration: 'conf-1' + Configuration 0 (conf-1) + Description: Zephyr on AM62L Cortex-A53 + Kernel: kernel-1 Sign algo: sha256,rsa2048:key-a + Sign value: 6d5f9933722189a0dcee58791243429d0bf28fe0dce96ac093da23c1f24ead70... + Timestamp: Tue Sep 15 18:52:31 2026 +Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-a.itb', node '/configurations/conf-1/signature-1' ``` +**Lines to look for:** `Sign algo: sha256,rsa2048:key-a` and the last line say that `mkimage` found `key-a` in `$KEYS` and wrote its signature into `conf-1`. `OS: U-Boot` and `Load Address: 0x82000000` are the FIT source as you wrote it, and `Hash value` is the SHA-256 of `zephyr.bin`, which U-Boot recomputes on the board. + Don't use the `mkimage -K` option here: the public key goes into U-Boot's own device tree at build time, on the next page. Print the same listing for any FIT with: diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index 82def7d4b5..a8a715fa65 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -250,7 +250,7 @@ With the long values shortened, the output is similar to: }; ``` -Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's: +Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's, and a mistake shows up now rather than at the serial console. `-f` names the FIT and `-k` the DTB that holds the keys: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -261,11 +261,52 @@ The output is similar to: ```output Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-a+ Verified OK, loading images -... +## Loading kernel (any) from FIT Image at 7a44a7686000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... +sha256,rsa2048:key-a+ +OK + + Trying 'kernel-1' kernel subimage + Description: Zephyr RTOS image + Created: Fri Sep 11 19:14:00 2026 + Type: Kernel Image + Compression: uncompressed + Data Size: 58340 Bytes = 56.97 KiB = 0.06 MiB + Architecture: AArch64 + OS: U-Boot + Load Address: 0x82000000 + Entry Point: 0x82000000 + Hash algo: sha256 + Hash value: 1d1d375f14c3354579e9e5310986a69b831bcd1944cd6b35aa8e83632b658166 + Verifying Hash Integrity ... +sha256+ +OK + + Decrypting Data ... +OK + + Loading Kernel Image to 0 +## Loading fdt (any) from FIT Image at 7a44a7686000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... +sha256,rsa2048:key-a+ +OK + +Could not find subimage node type 'fdt' +## Loading ramdisk (any) from FIT Image at 7a44a7686000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... +sha256,rsa2048:key-a+ +OK + +Could not find subimage node type 'ramdisk' Signature check OK ``` -The lines cut with `...` check the `kernel-1` hash (`sha256+ OK`) and report no `fdt` and no `ramdisk`, which is correct. The exit code is 0. +**Lines to look for:** the first line, `sha256,rsa2048:key-a+`, is the signature of `conf-1` verified with `key-a`, the `+` being the pass mark, and the last line, `Signature check OK`, is the verdict. The exit code is 0. + +Between them the tool walks the FIT the way `bootm` will on the board: it lists `kernel-1`, checks its hash (`sha256+` then `OK`), prints `Loading Kernel Image to 0` (the host tool loads nothing), and reports that the FIT has no `fdt` and no `ramdisk`. That's correct: it holds Zephyr and nothing else. The `FIT Image at` address is the tool's buffer on the host and changes every run, and the host tool breaks `sha256,rsa2048:key-a+ OK` over two lines where the board prints one. [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) runs the same tool on an image signed with `key-b` and on a tampered copy, and expects it to refuse both. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md index 678b76d907..982fdf4c2b 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md @@ -123,13 +123,13 @@ Move the SD card to the board, then power the board through a USB-C PD supply on SoC: AM62LX SR1.0 HS-FS ``` -`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. +`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. ## Watch the trusted image boot -After a three-second countdown, autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). +U-Boot counts down for three seconds and then autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. -Your `Created` time, `Hash value` and read time differ. The output is similar to: +Your `Created` time, `Hash value` and read time differ; the lines that matter are the same. The output is similar to: ```output 60198 bytes read in 7 ms (8.2 MiB/s) @@ -167,9 +167,11 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is the RSA signature of `conf-1` verified with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the image bytes matching the signed hash. `Loading Kernel Image to 82000000` is the verified payload copied to Zephyr's link address. The `+` marks a pass; a failed check prints `-` instead, as [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows. +**Lines to look for:** `sha256,rsa2048:key-a+ OK`, `sha256+ OK` and `Loading Kernel Image to 82000000` are the verification; `## Starting application at 0x82000000 ...` is the jump; `Hello from ZEPHYR IMAGE A` is the verified program running. -`## Starting application at 0x82000000 ...` is printed by `go` and is the last line from U-Boot; everything after it comes from the program U-Boot verified. +Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. + +`go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. ## If nothing prints diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index 3cba11722e..55f27c617a 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -37,7 +37,7 @@ sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.it $UBOOT_OUT/tools/mkimage -f $FIT/zephyr-b.its -k $KEYS $FIT/zephyr-b.itb ``` -The line to check in the `mkimage` summary is `Sign algo: sha256,rsa2048:key-b`. +`mkimage` prints the same summary as for the trusted image. **Lines to look for:** `Sign algo: sha256,rsa2048:key-b`, and a `Hash value` that differs from image A's, because `hello_b` is a different binary. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. ## Make a tampered copy of the trusted image @@ -64,7 +64,7 @@ The output is similar to: If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. -Expect the signature check to pass and the hash check to fail: the signature covers the configuration node and the `hash-1` node, and `hash-1` covers the payload bytes you changed. +This image proves that U-Boot catches a change made after signing. Expect the signature check to pass and the hash check to fail. `mkimage` signed the configuration node and the `hash-1` node of the image, and the byte you changed is in neither, so the RSA signature still verifies. The payload bytes are covered by `hash-1`, and they no longer match it, so the hash check fails. The signature makes the hash trustworthy, and the hash catches the change. All three `.itb` files are the same size, 60198 bytes in this build; only verification tells them apart. @@ -86,7 +86,9 @@ Failed to verify required signature 'key-key-a' Signature check bad (error 1) ``` -Two checks fail: the DTB has no `key-b`, and `required = "conf"` demands a `key-a` signature on every configuration. +**Lines to look for:** `sha256,rsa2048:key-b-` followed by `error!`, then `Failed to verify required signature 'key-key-a'`, then `Signature check bad (error 1)`. The exit code is 1. + +Two checks fail. The `-` after the key name is the failed signature: the DTB has no `key-b`. The `Failed to verify required signature` line is the `required = "conf"` rule, which demands a `key-a` signature on every configuration, and this FIT has none. Then check the tampered image: @@ -99,15 +101,49 @@ The output is similar to: ```output Verifying Hash Integrity for node 'conf-1'... sha256,rsa2048:key-a+ Verified OK, loading images -... +## Loading kernel (any) from FIT Image at 7ae29b84a000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... +sha256,rsa2048:key-a+ +OK + + Trying 'kernel-1' kernel subimage + Description: Zephyr RTOS image + Created: Fri Sep 11 19:14:00 2026 + Type: Kernel Image + Compression: uncompressed + Data Size: 58340 Bytes = 56.97 KiB = 0.06 MiB + Architecture: AArch64 + OS: U-Boot + Load Address: 0x82000000 + Entry Point: 0x82000000 + Hash algo: sha256 + Hash value: 1d1d375f14c3354579e9e5310986a69b831bcd1944cd6b35aa8e83632b658166 + Verifying Hash Integrity ... sha256 error! Bad hash value for 'hash-1' hash node in 'kernel-1' image node Bad Data Hash -... + +## Loading fdt (any) from FIT Image at 7ae29b84a000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... +sha256,rsa2048:key-a+ +OK + +Could not find subimage node type 'fdt' +## Loading ramdisk (any) from FIT Image at 7ae29b84a000 ... + Using 'conf-1' configuration + Verifying Hash Integrity ... +sha256,rsa2048:key-a+ +OK + +Could not find subimage node type 'ramdisk' Signature check bad (error 1) ``` -The signature passes and only the hash fails. +**Lines to look for:** `sha256,rsa2048:key-a+` on the first line, then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node`, then `Signature check bad (error 1)`. The exit code is 1. + +The signature still passes and only the hash fails, as you expected when you made the tampered image. The `Hash value` line is the hash `mkimage` stored; the bytes no longer produce it. You'll see the same `sha256 error!` and `Bad hash value for 'hash-1'` lines on the board. ## Add the two images to the card @@ -155,18 +191,23 @@ Move the card to the board, open the console with `picocom` as on the previous p The expected output is: ```output -... +60198 bytes read in 7 ms (8.2 MiB/s) +## Loading kernel (any) from FIT Image at 90000000 ... + Using 'conf-1' configuration Verifying Hash Integrity ... sha256,rsa2048:key-b- error! Verification failed for '' hash node in 'conf-1' config node Failed to verify required signature 'key-key-a' Bad Data Hash ERROR -2: can't get kernel image! + *** REFUSED: Zephyr was NOT started *** ``` -These are the same two failures as on the host: U-Boot found a signature naming `key-b` and has no such key, and the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) demands a valid `key-a` signature on every configuration. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page; the lines before them name the failed check. +**Lines to look for:** `sha256,rsa2048:key-b- error!`, then `Failed to verify required signature 'key-key-a'`, and last `*** REFUSED: Zephyr was NOT started ***`. No `Loading Kernel Image` line and no Zephyr banner. + +U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The first line says it found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page, so the lines before them are the ones that name the failed check. -Because `bootm start` returns an error, the `&&` chain stops there: `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. +Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You're back at the U-Boot prompt; image B never ran. ## Run the tampered test @@ -179,27 +220,43 @@ Still at the prompt, run the tampered test: The expected output is: ```output -... +60198 bytes read in 7 ms (8.2 MiB/s) +## Loading kernel (any) from FIT Image at 90000000 ... + Using 'conf-1' configuration Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK Trying 'kernel-1' kernel subimage - ... + Description: Zephyr RTOS image + Created: 2026-09-11 14:40:50 UTC + Type: Kernel Image + Compression: uncompressed + Data Start: 0x900000e8 + Data Size: 58340 Bytes = 57 KiB + Architecture: AArch64 + OS: U-Boot + Load Address: 0x82000000 + Entry Point: 0x82000000 + Hash algo: sha256 + Hash value: 1d1d375f14c3354579e9e5310986a69b831bcd1944cd6b35aa8e83632b658166 Verifying Hash Integrity ... sha256 error! Bad hash value for 'hash-1' hash node in 'kernel-1' image node Bad Data Hash ERROR -2: can't get kernel image! + *** REFUSED: Zephyr was NOT started *** ``` -This time the signature check passes and the hash check fails, as you expected when you made the tampered image and as the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. +**Lines to look for:** `sha256,rsa2048:key-a+ OK` (the signature passes), then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` (the hash fails), then `*** REFUSED: Zephyr was NOT started ***`. + +This time the signature check passes and the hash check fails. That surprises people at first, and it's exactly what the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. The byte you flipped is in the payload, which the signed `hash-1` node covers, not in the nodes the signature covers, as you saw when you made the tampered image. The `Hash value` line is the hash `mkimage` stored, and the bytes U-Boot just read no longer produce it. U-Boot stops before `bootm loados` again. {{% notice Note %}} If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and write the card again. {{% /notice %}} -To boot the trusted image again, type `run a` at the prompt. +To boot the trusted image again, type `run a` at the prompt. The output is the same as on the previous page: the `IMAGE A` banner, then the four lines Zephyr prints after it. ## What you've accomplished and what's next -`zephyr-a.itb`, signed with the key compiled into U-Boot, runs; `zephyr-b.itb`, signed with a valid key U-Boot doesn't have, is refused at the signature step; `zephyr-tampered.itb`, changed after signing, passes the signature step and is refused at the hash step. In every case the refusal stops the `&&` chain before `go`, so a rejected image never runs. +You've watched the three results that make the check credible. `zephyr-a.itb`, signed with the key compiled into U-Boot, verifies and runs. `zephyr-b.itb`, signed with a valid key U-Boot doesn't have, is refused at the signature step. `zephyr-tampered.itb`, signed with the right key and changed afterwards, passes the signature step and is refused at the hash step. In every case a refusal stops the `&&` chain before `go`, so a rejected image never runs. Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) separates what these runs proved from what they didn't, and what still stands between this setup and a production device. From c0d9ff2f86c9b8c011ed140b3e4a8f43903aff57 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 15 Sep 2026 19:25:26 +0300 Subject: [PATCH 05/66] Learning Path: generic spine with the AM62L EVM as a marked example - env.sh opens with a board block (BOARD, ZEPHYR_ADDR, FIT_ADDR, BOOT_DEV, UBOOT_DEFCONFIG) and a vendor SDK block; the .its, the CONFIG_PREBOOT fragment and the make lines take their values from it. The expanded fragment is byte-identical to the former literal one. - Each page keeps a generic section first and marks the TI-specific parts (SDK install, card image, boot switches, console, binman make variables) as AM62L EVM sections. HS-FS and HS-SE are TI's names for the development and production security states, given once on the first page. - The porting section on the last page is a checklist that maps onto the env.sh blocks. - Review fixes: the ROM/partition claims are no longer stated for every Cortex-A SoC; any key passes in the development state; the wrong-key mkimage output is shown in full; timestamps agree across pages. --- .../1-boot-chain.md | 33 ++++----- .../2-set-up-tools.md | 73 ++++++++++++------- .../3-build-zephyr.md | 32 ++++---- .../4-sign-zephyr.md | 44 +++++------ .../5-build-uboot.md | 42 ++++++----- .../6-boot-the-board.md | 38 +++++----- .../7-test-the-checks.md | 47 +++++++++--- .../8-production.md | 35 +++++---- .../_index.md | 10 +-- 9 files changed, 204 insertions(+), 150 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 29d7e5b2d8..3b364e1f07 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -1,6 +1,6 @@ --- title: Understand where Zephyr sits in the Cortex-A boot chain -description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how the TI AM62L boot chain hands control to it. +description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how a Cortex-A boot chain hands control to it, with the TI AM62L EVM as the example. weight: 2 ### FIXED, DO NOT MODIFY @@ -9,36 +9,31 @@ layout: learningpathall ## Zephyr is the last stage, not the first -On a microcontroller (MCU), Zephyr starts at the reset vector and nothing runs before it, so secure boot on Cortex-M means adding a bootloader yourself, such as MCUboot. That bootloader is the root of trust. +On a microcontroller (MCU), Zephyr starts at the reset vector and nothing runs before it, so secure boot on Cortex-M means adding a bootloader yourself, such as MCUboot. That bootloader is the root of trust, the one piece nothing checks and everything depends on. A Cortex-A processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several pieces of firmware run before your code does: your image is the last thing that runs, not the first. That order makes verification possible: the stage before Zephyr can check it before starting it. On a Cortex-A board, that stage is usually U-Boot, the bootloader most Arm boards use. -A U-Boot host tool packs a program and its signature into a FIT (Flattened Image Tree) image, and U-Boot checks it. Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers the combination you ship, Zephyr signed on a Cortex-A, using the TI AM62L EVM (evaluation module). The FIT, the keys, the way the key goes into U-Boot and the boot command are generic, so you can move them to any Cortex-A board that runs U-Boot. The SDK, the SD card layout and the boot switches are specific to TI. +A U-Boot host tool packs a program and its signature into a FIT (Flattened Image Tree) image, and U-Boot checks it. Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers the combination you ship, Zephyr signed on a Cortex-A. + +The FIT, the keys, the way the key goes into U-Boot and the boot command are the same on any Cortex-A board that runs U-Boot. The example board is the TI AM62L EVM (evaluation module). Its SDK, SD card layout and boot switches sit in marked sections; swap those for your board's own. ## The boot chain on a Cortex-A board On an Armv8-A board with U-Boot, the boot chain is: the boot ROM in the SoC, then early firmware, then U-Boot, then the payload. The payload is what U-Boot loads from storage and starts: Linux on most boards, Zephyr here. -The early firmware is usually three things. The SPL (Secondary Program Loader) is a cut-down build of U-Boot whose only job is to load the full U-Boot. TF-A (Trusted Firmware-A) is Arm's reference firmware for the Secure world; it starts U-Boot in the Non-secure world. OP-TEE (Open Portable Trusted Execution Environment) is a trusted operating system that also lives in the Secure world. +The early firmware is usually three things. The SPL (Secondary Program Loader) is a cut-down build of U-Boot whose only job is to load the full U-Boot. TF-A (Trusted Firmware-A) is Arm's reference firmware for the Secure world, the half of the processor that TrustZone walls off from normal software; it starts U-Boot in the Non-secure world. OP-TEE (Open Portable Trusted Execution Environment) is a trusted operating system that also lives in the Secure world. Many SoCs add the vendor's own security firmware, which does the checking for the later stages. -You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE come prebuilt in the TI SDK, as `bl1.bin`, `bl31.bin` and `bl32.bin`. +You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE usually come prebuilt in the vendor's SDK; on the AM62L they are `bl1.bin`, `bl31.bin` and `bl32.bin`. Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps: it holds a public key and refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. ![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. The first two arrows are checked by the vendor's ROM and firmware; the last arrow, from U-Boot to Zephyr, is checked by U-Boot with your key and is the link this Learning Path adds.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") -On the AM62L, the chain has four steps. TIFS (TI Foundational Security) is TI's security firmware; it checks the boot files that the ROM doesn't. - -| Step | What loads what | Who checks it | -|---|---|---| -| 1 | The boot ROM loads `tiboot3.bin`, which holds the first stage of TF-A (BL1) and the TIFS firmware | The boot ROM | -| 2 | BL1 loads `tispl.bin`, which holds the TF-A runtime firmware (BL31), OP-TEE and the U-Boot SPL | TIFS | -| 3 | The SPL loads `u-boot.img`, which is U-Boot proper | TIFS | -| 4 | U-Boot loads the payload, normally a Linux FIT image | U-Boot's own FIT check | +### The same chain on the AM62L EVM -TI's chip checks the first three files itself, and U-Boot checks the fourth, which is Zephyr here. You build `tiboot3.bin`, `tispl.bin` and `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). +On the AM62L, the vendor's early stages are two files. `tiboot3.bin` holds the first stage of TF-A (BL1) and TIFS (TI Foundational Security), the SoC's security firmware; the boot ROM checks it. `tispl.bin` holds the TF-A runtime firmware (BL31), OP-TEE and the U-Boot SPL; TIFS checks it, and then checks `u-boot.img`, which is U-Boot proper. U-Boot checks the fourth file, the payload, which is Zephyr here. You build the three files when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). ![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") @@ -66,16 +61,16 @@ The signature does not cover the image bytes: it covers the configuration node p This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source: the public key and the boot command go in as Kconfig options. The page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows the boot command. -What this Learning Path doesn't do is put your key into the chip. TI devices hold the owner's key in eFuses, one-time-programmable bits in silicon. A chip with that key fused is HS-SE (High Security, Security Enforced): it refuses any boot file not signed with the owner's key. A chip without it yet is HS-FS (High Security, Field Securable): the check runs, but any key passes. +What this Learning Path doesn't do is put your key into the chip. Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon, and have two security states. With the key fused, the production state, the ROM and the vendor's firmware refuse any boot file not signed with the customer's key. Without it, the development state, the checks still run but pass for any key. TI calls the two states HS-SE (High Security, Security Enforced) and HS-FS (High Security, Field Securable). -The EVM ships as HS-FS, and its first three boot files are signed with TI's development key, so those checks can't refuse anything. U-Boot's check of Zephyr refuses on HS-FS and HS-SE alike. +The AM62L EVM ships as HS-FS, so the checks on its first three boot files, which TI signs with a development key, can't refuse anything. U-Boot's check of Zephyr is enforced in both states: a bad image is refused whether the key is fused or not. {{% notice Note %}} -Moving a device to HS-SE, fusing your own key and re-signing the boot files with it, is a separate TI procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what that step changes and what else production needs. +Moving a device to its production state, fusing your own key and re-signing the boot files with it, is a separate, vendor-specific procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what that step changes and what else production needs. {{% /notice %}} ## What you've learned and what's next -Zephyr on a Cortex-A is the last stage of a boot chain, so U-Boot can verify it before starting it. A FIT holds the image, its hash and a signed configuration, and `required = "conf"` in U-Boot's control device tree makes U-Boot refuse anything it can't verify. On the AM62L EVM, only that last check is enforced today. +Zephyr on a Cortex-A is the last stage of a boot chain, so U-Boot can verify it before starting it. A FIT holds the image, its hash and a signed configuration, and `required = "conf"` in U-Boot's control device tree makes U-Boot refuse anything it can't verify. On a board in its development state, such as the AM62L EVM, only that last check is enforced today. -Next, you [set up the host tools and the TI SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), and create the working directory and environment file that every later page uses. +Next, you [set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), and create the working directory and environment file that every later page uses. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 733f90b5df..76a2344648 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -1,6 +1,6 @@ --- -title: Set up the host tools and the TI SDK -description: Install the Ubuntu packages, the TI Processor SDK and TI's SD card image on your host, and create the environment file that every later page of this Learning Path loads. +title: Set up the host tools and the board's SDK +description: Install the Ubuntu packages, get the board's U-Boot source, early firmware and cross compiler from the vendor SDK, download the vendor's SD card image, and create the environment file that every later page of this Learning Path loads. weight: 3 ### FIXED, DO NOT MODIFY @@ -9,11 +9,13 @@ layout: learningpathall ## What you need -The board is the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM). It boots from a micro-SD card, so you need one and a way to write it. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, usually the first. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. +From your board vendor you need three things: the U-Boot source tree for the board, the prebuilt firmware that runs before U-Boot, and the cross compiler that builds U-Boot. On the example board, the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM), all three come in one installer, the TI Processor SDK. + +The AM62L EVM boots from a micro-SD card, so you need one and a way to write it. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, usually the first. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with about 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The SDK download is 4.5 GB and unpacks to 11 GB. -You build Zephyr with Workbench for Zephyr, an open-source Visual Studio Code extension by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: the AM62L needs Zephyr 4.4 or later and an AArch64 toolchain, and you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +You build Zephyr with Workbench for Zephyr, an open-source Visual Studio Code extension by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: a Cortex-A board needs an AArch64 toolchain, and the AM62L needs Zephyr 4.4 or later; you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## Install the host packages @@ -23,32 +25,39 @@ U-Boot's build and the signing tools need a few packages beyond a normal Zephyr sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools u-boot-tools xz-utils curl picocom ``` -`swig` and `python3-dev` let U-Boot build `pylibfdt`, `libssl-dev` gives `mkimage` its RSA code, and `libgnutls28-dev` and `uuid-dev` are for `mkeficapsule`, which TI's configuration builds even though you don't use it. `device-tree-compiler` provides `dtc`, which reads the public key node out of a blob when you build U-Boot. - -`mtools` edits the SD card image without root, `xz-utils` unpacks TI's card image, `openssl` creates the keys, `curl` downloads the two TI files, and `picocom` is the serial terminal. +`swig` and `python3-dev` are for U-Boot's Python device tree bindings, `libssl-dev` gives `mkimage` its RSA code, `libgnutls28-dev` and `uuid-dev` are for a tool the AM62L configuration builds but you never use, and `device-tree-compiler` provides `dtc`. `mtools` edits the SD card image without root, `xz-utils` unpacks the vendor's card image, `openssl` creates the keys, `curl` downloads the SDK and the card image, and `picocom` is the serial terminal. -`u-boot-tools` is optional: it installs Ubuntu's own `mkimage` as a fallback, but you build `mkimage` from TI's U-Boot tree when you [create the signing keys and sign the image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). +`u-boot-tools` is optional: it installs Ubuntu's own `mkimage` as a fallback, but you build `mkimage` from the board's U-Boot tree when you [create the signing keys and sign the image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). ## Create the working directory and environment file Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. -Create the directory and write the environment file. The heredoc is quoted, so `$HOME` and `$WORK` stay as text in the file and expand when you load it: +Create the directory and write the environment file. The heredoc (the `cat > ... <<'EOF'` block) is quoted, so `$HOME` and `$WORK` stay as text in the file and expand when you load it: ```bash mkdir -p $HOME/zephyr-secure-boot cat > $HOME/zephyr-secure-boot/env.sh <<'EOF' export WORK=$HOME/zephyr-secure-boot -export TISDK=$WORK/tisdk -export UBOOT_SRC=$TISDK/board-support/ti-u-boot-2026.01+git -export PREBUILT=$TISDK/board-support/prebuilt-images/am62lxx-evm -export CROSS=$TISDK/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux- -export SYSROOT=$TISDK/linux-devkit/sysroots/aarch64-oe-linux + +# Board values +export BOARD=am62l_evm/am62l3/a53 +export ZEPHYR_ADDR=0x82000000 +export FIT_ADDR=0x90000000 +export BOOT_DEV="mmc 1:1" +export UBOOT_DEFCONFIG=am62lx_evm_defconfig + +# Vendor SDK: U-Boot source, prebuilt early firmware, cross compiler +export SDK=$WORK/tisdk +export UBOOT_SRC=$SDK/board-support/ti-u-boot-2026.01+git +export PREBUILT=$SDK/board-support/prebuilt-images/am62lxx-evm +export CROSS=$SDK/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux- +export SYSROOT=$SDK/linux-devkit/sysroots/aarch64-oe-linux + +# Your build outputs export UBOOT_OUT=$WORK/uboot-build export KEYS=$WORK/keys export FIT=$WORK/fit -export ZEPHYR_ADDR=0x82000000 -export FIT_ADDR=0x90000000 EOF ``` @@ -59,17 +68,21 @@ source $HOME/zephyr-secure-boot/env.sh mkdir -p $KEYS $FIT ``` -The first group of variables points into the TI SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, and `CROSS` is the cross compiler prefix. `SYSROOT` is the library path the SDK's compiler needs through `--sysroot`. `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. +The first block holds the board values. `BOARD` is the Zephyr board identifier. `ZEPHYR_ADDR` is where Zephyr is built to run, and `FIT_ADDR` is where U-Boot puts the signed image while it checks it; they must not overlap, because U-Boot copies Zephyr from one to the other. `BOOT_DEV` is the U-Boot device and partition that hold the files, and `UBOOT_DEFCONFIG` is the board's U-Boot configuration. To take this Learning Path to another board, you change this block and the vendor SDK block after it, and nothing else in the file; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) says where each value comes from. -`ZEPHYR_ADDR` is where Zephyr is built to run, and `FIT_ADDR` is where U-Boot puts the signed image while it checks it. They must not overlap, because U-Boot copies Zephyr from one to the other. +The second block points into the vendor SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, `CROSS` is the cross compiler prefix, and `SYSROOT` is the library path the SDK's compiler needs through `--sysroot`. The last block is yours: `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. The variables live only in the shell that loaded them, so every later page starts with `source $HOME/zephyr-secure-boot/env.sh`. -## Install the TI Processor SDK +## Install the vendor SDK + +Any vendor's SDK or BSP (board support package) has to give you the three pieces named above; point `UBOOT_SRC`, `PREBUILT`, `CROSS` and `SYSROOT` at them. -You use three things from the TI Processor SDK Linux for AM62Lx and nothing from Linux itself: the U-Boot source tree `ti-u-boot-2026.01+git`, the prebuilt firmware that runs before U-Boot, and the aarch64 GCC toolchain (GCC 15.3.0). +### Install the TI Processor SDK for the AM62L EVM -The prebuilt firmware is TF-A as `bl1.bin` and `bl31.bin`, OP-TEE 4.10 as `bl32.bin`, and TI's system firmware in the `ti-sysfw` directory. These binaries are the ones inside TI's own image, so you don't build them. +On the AM62L EVM, the three pieces come from the TI Processor SDK Linux for AM62Lx: the U-Boot source tree `ti-u-boot-2026.01+git`, the prebuilt firmware that runs before U-Boot, and the aarch64 GCC toolchain (GCC 15.3.0). You use nothing from Linux itself. + +The prebuilt firmware is TF-A as `bl1.bin` and `bl31.bin`, OP-TEE 4.10 as `bl32.bin`, and TIFS, the SoC's security firmware from the boot chain page, in the `ti-sysfw` directory. These binaries are the ones inside TI's own image, so you don't build them. Download the installer from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): @@ -81,10 +94,10 @@ Make it executable and run it without the graphical wizard: ```bash chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin -$WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $TISDK +$WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $SDK ``` -`--mode unattended` accepts every default, and `--prefix` installs into `$TISDK` without root. +`--mode unattended` accepts every default, and `--prefix` installs into `$SDK` without root. Check that the three paths exist and the compiler runs: @@ -107,9 +120,13 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 `prebuilt-images` also contains a directory named `am62lxx-evm-jailhouse`. Don't use it. Its firmware is built for the Jailhouse hypervisor memory layout, not for the one Zephyr and this Learning Path use. `PREBUILT` in `env.sh` already points at the right one. {{% /notice %}} -## Download TI's SD card image +## Download the vendor's SD card image + +What a boot ROM reads from the card is vendor-specific: a file on a FAT partition on some SoCs, raw sectors at a fixed offset on others. The vendor's own SD card image is the one layout known to work, so this Learning Path uses it as a template. For another board, download the vendor's own SD card image instead of the file below. + +### Download TI's card image for the AM62L EVM -The `.wic.xz` file is TI's complete SD card image, compressed with `xz`. You don't boot Linux from it. When you [prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), you keep its first partition as a template and replace only the files inside, because the AM62L boot ROM is picky about that partition's layout. +On the AM62L EVM, that image is the `.wic.xz` file, TI's complete SD card image compressed with `xz`. You don't boot Linux from it. When you [prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), you keep its first partition as a template and replace only the files inside. Download it into the working directory: @@ -117,10 +134,10 @@ Download it into the working directory: curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz ``` -The compressed file is about 1.3 GB. Leave it compressed: that page reads the part it needs straight out of `xz`. +The compressed file is about 1.3 GB. Leave it compressed: the SD card page reads the part it needs straight out of `xz`. ## What you've accomplished and what's next -Your host now has the build packages and the TI SDK: U-Boot source, prebuilt firmware and toolchain. `$WORK/env.sh` holds every path, and TI's card image is on disk as the boot partition template. +Your host now has the build packages and the board's SDK: U-Boot source, prebuilt firmware and toolchain. `$WORK/env.sh` holds the board values and every path, and the vendor's card image is on disk as the boot partition template. -Next, you [build a small Zephyr application for the AM62L EVM](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/) and check that its binary starts with a branch instruction, so U-Boot's `go` command can start it. +Next, you [build a small Zephyr application for the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/) and check that its binary starts with a branch instruction, so U-Boot's `go` command can start it. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 6df95bf36b..3d69a9fa9a 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -1,6 +1,6 @@ --- title: Build a Zephyr image that U-Boot can start -description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for the Cortex-A53 on the TI AM62L EVM, then check that the binary starts with a branch instruction that U-Boot's go command can jump to. +description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for a Cortex-A board, the TI AM62L EVM in this example, then check that the binary starts with a branch instruction that U-Boot's go command can jump to. weight: 4 ### FIXED, DO NOT MODIFY @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -You build Zephyr with Workbench for Zephyr in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace; this page does the same for the AM62L with the AArch64 toolchain and a Zephyr 4.4 workspace from the Texas Instruments template. +You build Zephyr with Workbench for Zephyr in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for a Cortex-A board: an AArch64 toolchain, and a Zephyr 4.4 workspace built from your board vendor's template, Texas Instruments here. Open VS Code on your working directory: @@ -25,7 +25,7 @@ The screenshots were taken on Windows with the Zephyr SDK installed globally, so ## Import the AArch64 toolchain -The AM62L's Cortex-A53 cores need the Zephyr SDK's `aarch64-zephyr-elf` compiler, and the Minimal SDK type downloads only that one. +Cortex-A cores need the Zephyr SDK's `aarch64-zephyr-elf` compiler, and the Minimal SDK type downloads only that one. In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: @@ -41,20 +41,20 @@ In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the Select **Import**. The download takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. -## Add a West workspace with Zephyr 4.4 or later +## Add a West workspace -Board support for the AM62L EVM entered Zephyr in version 4.4, so the workspace needs Zephyr 4.4.0 or later. Select **Add West Workspace** and fill in the form: +The workspace needs a Zephyr release that supports your board. Board support for the AM62L EVM entered Zephyr in version 4.4, so this example uses 4.4.2. Select **Add West Workspace** and fill in the form: - **Source location**: **From template** - **Minimal**, not **Full**, under the **Path** field -- **Template**: **Texas Instruments** +- **Template**: your board vendor's, **Texas Instruments** for the AM62L EVM - **Revision**: v4.4.2, or a later 4.x release - **Location**: `/home/user/zephyr-secure-boot` - **Subfolder**: `zephyrproject` ![The Add West Workspace form in Workbench for Zephyr with red rectangles around the fields to set: Add West Workspace in the sidebar, the From template source, the Minimal option, the Texas Instruments template, the v4.4.2 revision, the Location field and the Import button#center](images/wz-add-west-workspace.webp "Add West Workspace, set to Zephyr 4.4.2 with the Texas Instruments template") -Select **Import**. Workbench clones Zephyr, the TI HAL and the other modules into `zephyrproject/deps`, the longest step on this page, and `zephyrproject` appears in the **West workspaces** view. +Select **Import**. Workbench clones Zephyr, the vendor's HAL (hardware abstraction layer) and the other modules into `zephyrproject/deps`, the longest step on this page, and `zephyrproject` appears in the **West workspaces** view. ## Create the application @@ -63,13 +63,15 @@ Select **Add Application** and fill in the wizard: - **Select West Workspace**: `zephyrproject` - **Select Toolchain**: `zephyr-sdk-1.0.1` - **SDK Variant**: **GNU GCC** -- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)**, Zephyr identifier `am62l_evm/am62l3/a53` +- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)** - **New or existing application?**: **Create new application** - **Select template**: `hello_world`, under `deps/zephyr/samples/hello_world` - **Project Name**: `hello` - **Application type**: **West workspace application** - **Project Location**: `zephyrproject/applications/hello`, filled in by the wizard +The board's Zephyr identifier, `am62l_evm/am62l3/a53`, is the `BOARD` value in `env.sh`; on another board, select the entry that matches your `BOARD`. + ![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM") Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. @@ -89,7 +91,7 @@ CONFIG_AARCH64_IMAGE_HEADER=y `CONFIG_PRINTK` gives you `printk()` on the console, and `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, the first sign that the jump from U-Boot landed. -Replace the contents of `src/main.c` with the following code. The banner names the image and its key, so that on the optional [test page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) the console tells you which of two images ran. +Replace the contents of `src/main.c` with the following code. The banner names the image and its key, so that on the optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) the console tells you which of two images ran. ```c #include @@ -119,13 +121,13 @@ Save both files. `CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one U-Boot hands it. Without it, the driver of the GICv3 (Generic Interrupt Controller) never programs the Non-secure registers, the timer interrupt never arrives, and Zephyr hangs right after its banner. -`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image, whose first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot only needs that branch at offset 0: without the header, `go` jumps into whatever the linker placed there. +`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The header's first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot only needs that branch at offset 0: without the header, `go` jumps into whatever the linker placed there. The board configuration for `am62l_evm/am62l3/a53` already sets both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. ## Build the application -In the **Applications** view, right-click `hello` and select **Build**. Workbench runs `west build` in the terminal with the build directory `build/primary` inside the application, and the linker prints its memory report near the end. The expected output is: +In the **Applications** view, right-click `hello` and select **Build**. Workbench runs `west build` in the terminal with the build directory `build/primary` inside the application, and the linker prints its memory report near the end. The output is similar to: ```output Memory region Used Size Region Size %age Used @@ -136,7 +138,7 @@ Memory region Used Size Region Size %age Used ![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") -There is no flash on this board target; `RAM` is the part of the DDR that Zephyr may use. The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB, linked at `0x82000000`, the start of the device tree's `zephyr,sram` node past the first 32 MB of DDR where TF-A and OP-TEE live. Every following page uses that address as the FIT `load` and `entry` address and as the `go` target. +There is no flash on this board target; `RAM` is the part of the DDR that Zephyr may use. The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB. It is linked at `0x82000000`, the `ZEPHYR_ADDR` value in `env.sh`. That address is the start of the memory node the board device tree selects as `zephyr,sram`; on the AM62L it sits past the first 32 MB of DDR, where TF-A and OP-TEE live. Every following page uses that address as the FIT `load` and `entry` address and as the `go` target. ## Check the image starts with a branch @@ -146,13 +148,13 @@ Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the od -An -tx1 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin ``` -The expected output is: +The output is similar to: ```output 53 04 00 14 ``` -Those four bytes, read as a little-endian 32-bit word, are one AArch64 `b` (branch) instruction: the last byte, `14`, is the opcode and the other three hold the distance to `__start`, so they can differ in your build. +Those four bytes, read as a little-endian 32-bit word, are one AArch64 `b` (branch) instruction: the top six bits of the last byte (`14` here) are the opcode and the remaining 26 bits hold the distance to `__start`, so the first three bytes can differ in your build. Now check the header's magic number at offset `0x38`: @@ -169,7 +171,7 @@ The expected output is: `0x64` is the ASCII code for `d`, so `A R M d` is the magic `ARM\x64`. {{% notice Note %}} -If the last of the four bytes isn't `14`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/zephyrproject/applications/hello/build/primary/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. +If the last of the four bytes isn't in the range `14` to `17`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/zephyrproject/applications/hello/build/primary/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. {{% /notice %}} ## What you've accomplished and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index ab644d6739..3c82868d07 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -1,6 +1,6 @@ --- title: Create signing keys and sign the Zephyr image into a FIT -description: Build mkimage from the TI U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image that U-Boot can verify. +description: Build mkimage from the board's U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image that U-Boot can verify. weight: 5 ### FIXED, DO NOT MODIFY @@ -13,13 +13,13 @@ Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.s `mkimage` builds and signs a FIT image. `fit_check_sign` verifies a signed FIT on the host. Both come from the same U-Boot tree as the board's U-Boot, so signer and verifier match. -The `tools` target needs the board's `.config` first, so select the AM62L EVM defconfig: +The `tools` target needs the board's `.config` first, so run the defconfig target named by `UBOOT_DEFCONFIG` in `env.sh`: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" am62lx_evm_defconfig +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" $UBOOT_DEFCONFIG ``` -`CC="${CROSS}gcc --sysroot=$SYSROOT"` gives the SDK's compiler the library path `SYSROOT` from `env.sh`; without it the U-Boot link fails. Keep it on every `make` line, including the three on the next page. +`CC="${CROSS}gcc --sysroot=$SYSROOT"` gives the SDK's compiler the library path `SYSROOT` from `env.sh`; on the AM62L SDK the U-Boot link fails without it. Keep it on every `make` line, including the three on the next page. Then build the host tools: @@ -27,7 +27,7 @@ Then build the host tools: make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" tools ``` -Check that `mkimage` runs: +Both tools land in `$UBOOT_OUT/tools/`. Check that `mkimage` runs: ```bash $UBOOT_OUT/tools/mkimage -V @@ -41,7 +41,7 @@ mkimage version 2026.01-g5fb294342321 {{% notice Note %}} If the `tools` build stops early, the fix depends on where it stops: -- At `pylibfdt` or `swig`: install `swig python3-dev` as described in [Set up the host tools and the TI SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). If you'd rather not build U-Boot's own `dtc` and `pylibfdt`, add `DTC=$(which dtc)` to the `make` line and install the `python3-libfdt` package, because U-Boot still checks that `import libfdt` works in `python3` +- At `pylibfdt` or `swig`: install `swig python3-dev` as described in [Set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), or add `DTC=$(which dtc)` to the `make` line and install the `python3-libfdt` package - At `mkeficapsule` with `fatal error: gnutls/gnutls.h: No such file or directory`: install `libgnutls28-dev uuid-dev`, or add the line `# CONFIG_TOOLS_MKEFICAPSULE is not set` to `$UBOOT_OUT/.config`, then run the `tools` step again. You don't need that tool {{% /notice %}} @@ -71,7 +71,7 @@ key-a.crt key-a.key key-b.crt key-b.key `mkimage -k

` expects this layout. `.key` holds the private key, `.crt` is a self-signed certificate wrapping the public key, and `` is the `key-name-hint` you write in the FIT source. -`sha256,rsa2048` is enough for a demo. The production page covers stronger keys and where to keep them. +`sha256,rsa2048` is enough for a demo. {{% notice Warning %}} These are throwaway development keys, generated on the build machine. Production keys are generated and kept elsewhere. See [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). @@ -79,15 +79,15 @@ These are throwaway development keys, generated on the build machine. Production ## Write the FIT source -You describe the FIT from [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) in a `.its` file (image tree source), and `mkimage` compiles and signs it into an `.itb` (image tree blob). +You write the FIT that [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) introduced as a `.its` file (image tree source), and `mkimage` compiles and signs it into an `.itb` (image tree blob). -Write the source with a heredoc, so `$WORK` expands to the absolute path of the Zephyr binary you built on the previous page: +Write the source with an unquoted heredoc, so `$WORK` expands to the path of the Zephyr binary from the previous page and `$ZEPHYR_ADDR` to its link address: ```bash cat > $FIT/zephyr-a.its <; images { kernel-1 { @@ -97,15 +97,15 @@ cat > $FIT/zephyr-a.its <; - entry = <0x82000000>; + load = <$ZEPHYR_ADDR>; + entry = <$ZEPHYR_ADDR>; hash-1 { algo = "sha256"; }; }; }; configurations { default = "conf-1"; conf-1 { - description = "Zephyr on AM62L Cortex-A53"; + description = "Zephyr on Cortex-A"; kernel = "kernel-1"; signature-1 { algo = "sha256,rsa2048"; @@ -122,7 +122,7 @@ EOF `os = "u-boot"` is U-Boot's slot for a standalone program: the payload is verified and copied, nothing else. With `os = "linux"`, U-Boot would look for a device tree in the FIT and parse a Linux kernel header. -`load` and `entry` are `0x82000000`, Zephyr's link address on this board, where U-Boot copies the verified payload. +`load` and `entry` are `ZEPHYR_ADDR`, `0x82000000` on the AM62L EVM: Zephyr's link address, where U-Boot copies the verified payload. `hash-1 { algo = "sha256"; }` is the hash of the payload bytes. It sits in the image node, and the signature covers it. @@ -130,7 +130,7 @@ EOF `signature-1` sits under the configuration, not under the image, because the `required = "conf"` rule you build into U-Boot on the next page demands a valid signature on the configuration it boots. With `sign-images = "kernel"`, `mkimage` signs the configuration node plus the hash node of the kernel image. `key-name-hint = "key-a"` names the key files in `$KEYS` and, later, the key node U-Boot looks up. -Both `description` properties are mandatory. `mkimage` refuses the source without them. +The top-level and image `description` properties are mandatory: `mkimage` refuses the source without them. The one in `conf-1` is optional and only appears in the listing. ## Sign the image @@ -143,11 +143,11 @@ $UBOOT_OUT/tools/mkimage -f $FIT/zephyr-a.its -k $KEYS $FIT/zephyr-a.itb `mkimage` prints the image contents. Your timestamps, `Hash value` and `Sign value` differ, and the `Sign value` is shortened here. The output is similar to: ```output -FIT description: Zephyr RTOS for AM62L Cortex-A53, signed with key-a -Created: Tue Sep 15 18:52:31 2026 +FIT description: Zephyr RTOS, signed with key-a +Created: Fri Sep 11 19:14:00 2026 Image 0 (kernel-1) Description: Zephyr RTOS image - Created: Tue Sep 15 18:52:31 2026 + Created: Fri Sep 11 19:14:00 2026 Type: Kernel Image Compression: uncompressed Data Size: 58340 Bytes = 56.97 KiB = 0.06 MiB @@ -159,15 +159,17 @@ Created: Tue Sep 15 18:52:31 2026 Hash value: 1d1d375f14c3354579e9e5310986a69b831bcd1944cd6b35aa8e83632b658166 Default Configuration: 'conf-1' Configuration 0 (conf-1) - Description: Zephyr on AM62L Cortex-A53 + Description: Zephyr on Cortex-A Kernel: kernel-1 Sign algo: sha256,rsa2048:key-a Sign value: 6d5f9933722189a0dcee58791243429d0bf28fe0dce96ac093da23c1f24ead70... - Timestamp: Tue Sep 15 18:52:31 2026 + Timestamp: Fri Sep 11 19:14:00 2026 Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-a.itb', node '/configurations/conf-1/signature-1' ``` -**Lines to look for:** `Sign algo: sha256,rsa2048:key-a` and the last line say that `mkimage` found `key-a` in `$KEYS` and wrote its signature into `conf-1`. `OS: U-Boot` and `Load Address: 0x82000000` are the FIT source as you wrote it, and `Hash value` is the SHA-256 of `zephyr.bin`, which U-Boot recomputes on the board. +**Lines to look for:** `Sign algo: sha256,rsa2048:key-a` and the last line, `Signature written to ... node '/configurations/conf-1/signature-1'`, say that `mkimage` found `key-a` in `$KEYS` and wrote its signature into `conf-1`. + +`OS: U-Boot` and `Load Address: 0x82000000` are the FIT source as you wrote it, and `Hash value` is the SHA-256 of `zephyr.bin`, which U-Boot recomputes on the board. Don't use the `mkimage -K` option here: the public key goes into U-Boot's own device tree at build time, on the next page. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index a8a715fa65..dbb0e1d67b 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -32,7 +32,7 @@ U-Boot keeps its FIT verification keys in the control device tree, the DTB packe The `rsa,` properties are the public half of `key-a`. `required = "conf"` is the fail-closed rule from [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): no valid signature by this key, no boot. -`am62lx_evm_defconfig` already turns on everything else. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: +The board's defconfig has to turn on the verifier, and the AM62L one already does. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: ```bash grep -E '^CONFIG_(FIT|FIT_SIGNATURE|RSA|OF_SEPARATE)=|LEGACY_IMAGE_FORMAT' $UBOOT_OUT/.config @@ -52,7 +52,7 @@ CONFIG_RSA=y Legacy image support is off: the older uImage format carries no signature, so `bootm` has nothing unsigned to fall back to. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers the other boot commands. -Only the key and the boot command are missing. Both are build configuration, so the U-Boot source stays untouched. +Only the key and the boot command are missing. Both are build configuration, so the U-Boot source stays untouched. If your board's `.config` lacks one of the four `=y` lines, add it to the fragment you write in *Configure and build*; if it has `CONFIG_LEGACY_IMAGE_FORMAT=y`, add `# CONFIG_LEGACY_IMAGE_FORMAT is not set` to the fragment as well. ## Generate the key node @@ -123,13 +123,13 @@ The expected output is: ## Write a boot command that fails closed -Zephyr's own board page starts the AM62L EVM from the U-Boot prompt with one unverified line: +Zephyr's board documentation usually gives a one-line U-Boot command to start Zephyr. For the AM62L EVM it is: ```console => fatload mmc 1:1 0x82000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x82000000 ``` -Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, the chain is: +Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, with the AM62L values from `env.sh` filled in, the chain is: ```text fatload mmc 1:1 0x90000000 ${fit} && @@ -142,11 +142,11 @@ echo "*** REFUSED: Zephyr was NOT started ***" Each piece has one job: -- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from partition 1 of the SD card (`mmc 1`; `mmc 0` is the eMMC) to `0x90000000`, clear of `0x82000000`, so `loados` can't copy Zephyr over the FIT it is reading. +- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. On the AM62L EVM, `mmc 1:1` is partition 1 of the SD card (`mmc 0` is the eMMC). `FIT_ADDR` is clear of `ZEPHYR_ADDR`, so `loados` can't copy Zephyr over the FIT it is reading. - `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. -- `bootm loados` copies the verified payload to its `load` address, `0x82000000`. -- The four cache commands hand the CPU over the way Zephyr expects. -- `go 0x82000000` is a jump. It verifies nothing. +- `bootm loados` copies the verified payload to its `load` address, `ZEPHYR_ADDR`. +- The four cache commands flush and turn off the caches, and on arm64 `dcache off` also turns the MMU off, the state Zephyr expects at entry. +- `go 0x82000000` jumps to `ZEPHYR_ADDR`. It verifies nothing. Why not a plain `bootm`? A full `bootm` continues past `loados` into OS-specific boot code; stopping after `loados` and jumping with `go` uses U-Boot as a verifier only, not as an OS loader. @@ -161,32 +161,32 @@ That chain becomes the environment variable `zboot`, and three one-line wrappers | `b` | `setenv fit zephyr-b.itb; run zboot` | | `t` | `setenv fit zephyr-tampered.itb; run zboot` | -`a` boots the trusted image. `b` and `t` name images that don't exist yet, for [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). `CONFIG_PREBOOT` defines all four before autoboot, U-Boot's countdown to running `bootcmd` on its own, so they exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. +`a` boots the trusted image. `b` and `t` name images that don't exist yet, for [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). Autoboot is U-Boot's countdown to running `bootcmd` on its own. `CONFIG_PREBOOT` defines all four before that countdown starts, so they exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. -The commands are compiled into U-Boot rather than stored on the card, where anyone could edit a boot script to skip the check. TI's default `CONFIG_ENV_IS_NOWHERE=y` gives the environment no storage, so nothing on the card can override them. +The commands are compiled into U-Boot rather than stored on the card, where anyone could edit a boot script to skip the check. The AM62L configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, which gives the environment no storage, so nothing on the card can override them; check your board's `.config` for the same line. ## Configure and build -Reset to TI's defconfig so the fragment lands on a known `.config`: +Reset to the board's defconfig so the fragment lands on a known `.config`: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" am62lx_evm_defconfig +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" $UBOOT_DEFCONFIG ``` -Append the fragment to `.config`. The heredoc is unquoted so `$WORK` expands; `\${fit}` keeps `${fit}` in the file for U-Boot to expand at run time: +Append the fragment to `.config`. The heredoc is unquoted, so `$WORK` and the board values `$BOOT_DEV`, `$FIT_ADDR` and `$ZEPHYR_ADDR` expand; `\${fit}` keeps `${fit}` in the file for U-Boot to expand at run time: ```bash cat >> $UBOOT_OUT/.config < $WORK/sdcard.img @@ -87,9 +89,9 @@ Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition suc On Windows or macOS, write `sdcard.img` with balenaEtcher. -## Set the boot switches +## Set the AM62L EVM boot switches -The boot switches tell the ROM where to look for `tiboot3.bin`. On the AM62L EVM, **ON** means HIGH, with the knob towards the **ON** label on the switch bank. +Boot switches tell the ROM where to look for the first-stage file; most boards have some form of them, as switches, jumpers or resistors, and some have a fixed boot order instead. On the AM62L EVM, **ON** means HIGH, with the knob towards the **ON** label on the switch bank. The [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8) (SPRUJG8B) gives two ways to select the SD card. The full pincount setting uses all 16 BOOTMODE bits across three switch banks; the reduced pincount setting uses only the four switches of **SW3**. Start with the reduced setting. @@ -109,27 +111,27 @@ The reduced pincount setting uses only **SW3**; the ROM ignores **SW2** and **SW ## Connect the console and power on -Connect the micro-USB port **J7** to your host. The FTDI FT4232HL behind it creates four serial ports: SoC UART0, SoC UART1, WKUP UART0 and SoC UART4. The console is SoC UART0, at 115200 baud, 8 data bits, no parity, one stop bit, usually `/dev/ttyUSB0` on Linux. Open it: +On the AM62L EVM, connect the micro-USB port **J7** to your host. The USB-to-serial chip behind it, an FTDI FT4232HL, creates four serial ports: SoC UART0, SoC UART1, WKUP UART0 and SoC UART4. The console is SoC UART0, at 115200 baud, 8 data bits, no parity, one stop bit, usually `/dev/ttyUSB0` on Linux. Open it: ```bash picocom -b 115200 /dev/ttyUSB0 ``` -If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press `Ctrl` and `A`, then `Ctrl` and `X`. +If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press **Ctrl+A**, then **Ctrl+X**. -Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Early in the log, the SPL shows the device type: +Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Early in the log, the SPL shows the SoC's security state: ```output SoC: AM62LX SR1.0 HS-FS ``` -`HS-FS` means no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. +`HS-FS` is TI's name for the development state: no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. ## Watch the trusted image boot U-Boot counts down for three seconds and then autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. -Your `Created` time, `Hash value` and read time differ; the lines that matter are the same. The output is similar to: +Your `Created` time, `Hash value` and read time differ. The lines that matter are the same on any board; only the two addresses, `FIT_ADDR` and `ZEPHYR_ADDR` from `env.sh`, change. The output is similar to: ```output 60198 bytes read in 7 ms (8.2 MiB/s) @@ -138,7 +140,7 @@ Your `Created` time, `Hash value` and read time differ; the lines that matter ar Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK Trying 'kernel-1' kernel subimage Description: Zephyr RTOS image - Created: 2026-09-11 14:40:50 UTC + Created: 2026-09-11 17:14:00 UTC Type: Kernel Image Compression: uncompressed Data Start: 0x900000e8 @@ -167,24 +169,26 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -**Lines to look for:** `sha256,rsa2048:key-a+ OK`, `sha256+ OK` and `Loading Kernel Image to 82000000` are the verification; `## Starting application at 0x82000000 ...` is the jump; `Hello from ZEPHYR IMAGE A` is the verified program running. +**Lines to look for:** `sha256,rsa2048:key-a+ OK` and `sha256+ OK` are the verification; `Loading Kernel Image to 82000000` is the copy; `## Starting application at 0x82000000 ...` is the jump; `Hello from ZEPHYR IMAGE A` is the verified program running. -Three lines carry the proof. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. +`sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. `go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. ## If nothing prints -If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list: +If the terminal stays empty, the ROM did not load the first-stage file, `tiboot3.bin` on the AM62L EVM. On the AM62L EVM, work down this list: 1. Open all four serial ports that **J7** creates; SoC UART0 isn't always the first one. 2. Check the boot switches against the tables, or try the other setting. 3. Check the card layout against TI's FAT16 partition. 4. Flash TI's unchanged `.wic.xz` to a card and boot it. If it prints nothing either, the cause is the switches, the port, or the power, not your files. -5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours and write the card again: `mcopy -o -i $M $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. `u-boot.img` still carries the key and the boot command. +5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $WORK/sdcard.img@@1048576 $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. + +On another board the same list applies, with your vendor's first-stage file, card image and console port. If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A_NS` is missing from the [Zephyr build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## What you've accomplished and what's next -You built a bootable SD card from TI's boot partition and watched U-Boot on real silicon verify the FIT signed with `key-a` and start Zephyr. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves both refusals on the board. After it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a production device needs on top: a fused key, a locked console, and no other boot path. +You built a bootable SD card from the vendor's boot partition and watched U-Boot on real silicon verify the FIT signed with `key-a` and start Zephyr. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves both refusals on the board. After it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a production device needs on top: a fused key, a locked console, and no other boot path. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index 55f27c617a..df67d98a74 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -1,6 +1,6 @@ --- title: Test that U-Boot refuses a wrong key and a tampered image -description: "Optional: sign a second Zephyr image with a key U-Boot doesn't have, tamper with a copy of the trusted FIT, check both with fit_check_sign on the host, then watch U-Boot refuse both on the AM62L EVM." +description: "Optional: sign a second Zephyr image with a key U-Boot doesn't have, tamper with a copy of the trusted FIT, check both with fit_check_sign on the host, then watch U-Boot refuse both on the board." weight: 8 ### FIXED, DO NOT MODIFY @@ -37,7 +37,34 @@ sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.it $UBOOT_OUT/tools/mkimage -f $FIT/zephyr-b.its -k $KEYS $FIT/zephyr-b.itb ``` -`mkimage` prints the same summary as for the trusted image. **Lines to look for:** `Sign algo: sha256,rsa2048:key-b`, and a `Hash value` that differs from image A's, because `hello_b` is a different binary. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. +The output is similar to: + +```output +FIT description: Zephyr RTOS, signed with key-b +Created: Fri Sep 11 19:14:00 2026 + Image 0 (kernel-1) + Description: Zephyr RTOS image + Created: Fri Sep 11 19:14:00 2026 + Type: Kernel Image + Compression: uncompressed + Data Size: 58340 Bytes = 56.97 KiB = 0.06 MiB + Architecture: AArch64 + OS: U-Boot + Load Address: 0x82000000 + Entry Point: 0x82000000 + Hash algo: sha256 + Hash value: 42bf9a7ae3d4fe62f6acc09a1ca7abbd803d26c4b12f0dff717acce06e2b6a9b + Default Configuration: 'conf-1' + Configuration 0 (conf-1) + Description: Zephyr on Cortex-A + Kernel: kernel-1 + Sign algo: sha256,rsa2048:key-b + Sign value: 6137633e965eee69ee2cc27b1a904330cf056e1b9ec2371abaf26865763117ed... + Timestamp: Fri Sep 11 19:14:00 2026 +Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-b.itb', node '/configurations/conf-1/signature-1' +``` + +**Lines to look for:** `Sign algo: sha256,rsa2048:key-b`, and a `Hash value` that differs from image A's, because `hello_b` is a different binary. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. ## Make a tampered copy of the trusted image @@ -48,7 +75,7 @@ cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null ``` -The first `0xe8` (232) bytes of the file belong to the FIT itself and the Zephyr binary follows, so offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own nodes. +The payload starts at offset `0xe8` (232), the `Data Start` you saw on the board, and is 58340 bytes long, so offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own structure. Check that the copy now differs from the original: @@ -70,7 +97,7 @@ All three `.itb` files are the same size, 60198 bytes in this build; only verifi ## Check both images on the host -`fit_check_sign` gives the same verdict as U-Boot on the board. Run it as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), first on the wrong-key image: +`fit_check_sign` gives the same verdict as U-Boot on the board. Your `Created` time and the `FIT Image at` address differ; the lines that matter are the same. Run it as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), first on the wrong-key image: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb @@ -88,7 +115,7 @@ Signature check bad (error 1) **Lines to look for:** `sha256,rsa2048:key-b-` followed by `error!`, then `Failed to verify required signature 'key-key-a'`, then `Signature check bad (error 1)`. The exit code is 1. -Two checks fail. The `-` after the key name is the failed signature: the DTB has no `key-b`. The `Failed to verify required signature` line is the `required = "conf"` rule, which demands a `key-a` signature on every configuration, and this FIT has none. +Two checks fail: the `-` after `key-b` is the missing key, and the `Failed to verify required signature` line is the `required = "conf"` rule. The wrong-key test on the board explains both. Then check the tampered image: @@ -143,7 +170,7 @@ Signature check bad (error 1) **Lines to look for:** `sha256,rsa2048:key-a+` on the first line, then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node`, then `Signature check bad (error 1)`. The exit code is 1. -The signature still passes and only the hash fails, as you expected when you made the tampered image. The `Hash value` line is the hash `mkimage` stored; the bytes no longer produce it. You'll see the same `sha256 error!` and `Bad hash value for 'hash-1'` lines on the board. +The signature still passes and only the hash fails, as you expected when you made the tampered image. You'll see the same `sha256 error!` and `Bad hash value for 'hash-1'` lines on the board. ## Add the two images to the card @@ -172,7 +199,7 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -`mdir` shows the FAT short name `ZEPHYR~1.ITB` in front and the long name `zephyr-tampered.itb` at the end of its line; U-Boot's `fatload` finds it by the long name. Six files: the three boot stages and the three FITs. +`mdir` shows the FAT short name `ZEPHYR~1.ITB` in front and the long name `zephyr-tampered.itb` at the end of its line; U-Boot's `fatload` finds it by the long name. Six files: the boot files from the previous page and the three FITs. Write the image to the card again with the same `dd` command as on the previous page, taking the same care with `/dev/sdX`: @@ -205,7 +232,7 @@ ERROR -2: can't get kernel image! **Lines to look for:** `sha256,rsa2048:key-b- error!`, then `Failed to verify required signature 'key-key-a'`, and last `*** REFUSED: Zephyr was NOT started ***`. No `Loading Kernel Image` line and no Zephyr banner. -U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The first line says it found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page, so the lines before them are the ones that name the failed check. +U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The `sha256,rsa2048:key-b- error!` line says U-Boot found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` end both refusals on this page and don't say which check failed; the lines before them do. Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You're back at the U-Boot prompt; image B never ran. @@ -226,7 +253,7 @@ The expected output is: Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK Trying 'kernel-1' kernel subimage Description: Zephyr RTOS image - Created: 2026-09-11 14:40:50 UTC + Created: 2026-09-11 17:14:00 UTC Type: Kernel Image Compression: uncompressed Data Start: 0x900000e8 @@ -247,7 +274,7 @@ ERROR -2: can't get kernel image! **Lines to look for:** `sha256,rsa2048:key-a+ OK` (the signature passes), then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` (the hash fails), then `*** REFUSED: Zephyr was NOT started ***`. -This time the signature check passes and the hash check fails. That surprises people at first, and it's exactly what the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. The byte you flipped is in the payload, which the signed `hash-1` node covers, not in the nodes the signature covers, as you saw when you made the tampered image. The `Hash value` line is the hash `mkimage` stored, and the bytes U-Boot just read no longer produce it. U-Boot stops before `bootm loados` again. +This time the signature check passes and the hash check fails, as the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. The byte you flipped is in the payload, which the signed `hash-1` node covers, not in the nodes the signature covers. The `Hash value` line is the hash `mkimage` stored, and the bytes U-Boot just read no longer produce it. `bootm start` fails, so `bootm loados` and `go` never run. {{% notice Note %}} If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and write the card again. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index aaa0f96d34..8cd6bd1015 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,6 +1,6 @@ --- title: Review what is verified and what production needs -description: Separate what the trusted boot proved, and what the optional refusal tests add, from what neither proved, then list the changes a production device needs before the whole chain can be trusted. +description: Separate what the boot and the optional refusal tests proved from what they didn't, then list what a production device needs before the whole chain can be trusted. weight: 9 ### FIXED, DO NOT MODIFY @@ -21,25 +21,25 @@ The three runs give these results: | `run b` | `zephyr-b.itb` | Signed with `key-b`, a key U-Boot doesn't have | Refused: `Failed to verify required signature 'key-key-a'` | | `run t` | `zephyr-tampered.itb` | Signed with `key-a`, one payload byte changed after signing | Refused: `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` | -You did this without changing a line of U-Boot source: the public key went in through `CONFIG_DEVICE_TREE_INCLUDES` and the boot commands through `CONFIG_PREBOOT`, so both carry to a newer TI U-Boot without a patch. +You did this without changing a line of U-Boot source: the public key went in through `CONFIG_DEVICE_TREE_INCLUDES` and the boot commands through `CONFIG_PREBOOT`, so both carry to a newer U-Boot without a patch. ## What you haven't proved Each stage checks the next, so the chain is only as trustworthy as the stage that checked U-Boot. -TI K3 devices come in two security states, which you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): HS-SE, with the customer's key in eFuses, and HS-FS, where any key passes. The SPL banner told you this EVM is HS-FS: `SoC: AM62LX SR1.0 HS-FS`. TI's development key signs `tiboot3.bin`, `tispl.bin` and `u-boot.img`, so the ROM and TIFS checks run but can't refuse anything, and U-Boot enforces only the last link, U-Boot to Zephyr. +Most Cortex-A SoCs have the two security states you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): the production state, with the customer's key in eFuses, and the development state, where any key passes. The SPL banner told you this EVM is in the development state, HS-FS in TI's words: `SoC: AM62LX SR1.0 HS-FS`. On the AM62L EVM, TI's development key signs the three boot files, so the ROM and security-firmware checks run but can't refuse anything, and U-Boot enforces only the last link, U-Boot to Zephyr. The public half of `key-a` lives inside `u-boot.img`, on an unprotected FAT partition, so anyone who can write the card can replace it with one that carries their own key. The root of trust is in a file on the card, not in silicon. ## What production needs -### Fuse your key and move to HS-SE +### Fuse your key and move to the production state -TI's keywriter procedure burns your key into the eFuses, and you re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with it. From then on the ROM and TIFS refuse any `u-boot.img` that isn't signed with your key, so the `key-a` public half it carries is itself authenticated. The procedure is TI-specific and out of scope here. +On TI devices the procedure is the keywriter, which burns your key into the eFuses and moves the chip to HS-SE, TI's name for the production state; you then re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with that key. From then on the ROM and the security firmware refuse any boot file that isn't signed with your key, U-Boot included, so the `key-a` public half inside it is itself authenticated. The procedure is vendor-specific and out of scope here. ### Keep the environment built in -`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. TI's configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, so `saveenv` has nowhere to write and both variables always come from the binary you built. Keep it that way: a writable environment is a writable boot command. +`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. The AM62L configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, so `saveenv` has nowhere to write and both variables always come from the binary you built. Keep it that way: a writable environment is a writable boot command. {{% notice Warning %}} Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the environment in `uboot.env` on the boot media: a saved environment overrides `bootcmd` and `preboot`, so anyone with the card can skip the check. @@ -51,11 +51,11 @@ With `CONFIG_BOOTDELAY=3`, anyone with a serial cable can stop the countdown, ge ### Close the other boot paths -Any other boot command compiled into U-Boot can be run instead of `zboot`, and none of them goes through your check. TI's configuration turns on several: +Any other boot command compiled into U-Boot can be run instead of `zboot`, and none of them goes through your check. The AM62L configuration turns on several, and most vendor defconfigs do the same: | Path | Symbols | What it can do | |---|---|---| -| Standard boot (bootstd, bootflow) | `CONFIG_BOOTSTD_FULL=y` | Scans storage for something to boot and starts it | +| Standard boot (bootstd, bootflow) | `CONFIG_BOOTSTD=y` (and `CONFIG_BOOTSTD_FULL=y`) | Scans storage for something to boot and starts it | | EFI | `CONFIG_EFI_LOADER=y`, `CONFIG_CMD_BOOTEFI=y` | Starts an EFI application from the card | | Raw kernel commands | `CONFIG_CMD_BOOTI=y`, `CONFIG_CMD_BOOTZ=y` | Starts a bare Linux kernel file with no FIT and no signature | | Network and DFU (Device Firmware Upgrade) | `CONFIG_CMD_NET=y`, `CONFIG_CMD_DFU=y` | Loads an image over Ethernet or USB | @@ -64,7 +64,7 @@ Any other boot command compiled into U-Boot can be run instead of `zboot`, and n ### Use real keys and keep them off the build machine -`sha256,rsa2048` is fine for a demo. TI's own K3 flow uses `sha512,rsa4096`. To match it, change `rsa_keygen_bits:2048` to `rsa_keygen_bits:4096` in the `openssl genpkey` command from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), and `algo = "sha256,rsa2048"` to `algo = "sha512,rsa4096"` in `zephyr-a.its` and in the `key.its` carrier; the commands stay the same. Generate the production key on a hardware security module (HSM), or at least on a machine that isn't the build host. +`sha256,rsa2048` is fine for a demo. The AM62L's own boot chain uses `sha512,rsa4096`. To match it, change `rsa_keygen_bits:2048` to `rsa_keygen_bits:4096` in the `openssl genpkey` command from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), and `algo = "sha256,rsa2048"` to `algo = "sha512,rsa4096"` in `zephyr-a.its` and in the `key.its` carrier; the commands stay the same. Check that `$UBOOT_OUT/.config` has `CONFIG_SHA512=y`: the AM62L configuration turns it on, and another board may need it in the fragment you append. Generate the production key on a hardware security module (HSM), or at least on a machine that isn't the build host. ### Sign in a release step @@ -72,18 +72,23 @@ Running `mkimage -k` on a developer machine is fine for `key-a`. For the product ## Take it to another Cortex-A board -Three things change. +Every board-specific value sits in the first two blocks of `env.sh`, so porting is a checklist: -The first is the load address. `0x82000000` is the start of the memory node that the AM62L board device tree selects as `zephyr,sram`, so it is Zephyr's link address, the FIT `load` and `entry`, and the `go` target. On another board, take the start of that node from its device tree source and use it in all three places. Load the FIT itself at a different address, as you did with `0x90000000`; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. +- `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. +- `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It is Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. +- `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. +- `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC; `mmc list` at the U-Boot prompt shows your board's numbering. +- `UBOOT_DEFCONFIG` is the board's U-Boot configuration. +- `SDK`, `UBOOT_SRC`, `PREBUILT`, `CROSS` and `SYSROOT`, the second block, point at the vendor's SDK: its U-Boot source, early firmware, cross compiler and the compiler's sysroot. -The second is the storage device and partition in `fatload`. `mmc 1:1` is the SD card's FAT partition on the AM62L EVM, while `mmc 0` is the eMMC; on your board both numbers can differ. +Two things sit outside `env.sh`. The `make` line that builds U-Boot takes whatever the vendor's tree expects for its early stages, `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, and the SD card page follows the vendor's card layout, switches and console. -The third is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Boards that take the DTB from a prior stage (`CONFIG_OF_BOARD`) need the `/signature` node in that DTB instead, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same `key.its` carrier from the [U-Boot page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. +The last difference is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Boards that take the DTB from a prior stage (`CONFIG_OF_BOARD`) need the `/signature` node in that DTB instead, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same throwaway `key.its` from [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. -Everything else stays the same: the `.its` file apart from the addresses, the keys, the `signature.dtsi` recipe, the boot command and the three test images. +Everything else stays the same: the `.its` file, the keys, the `signature.dtsi` recipe, the boot command and the three test images. ## What you've accomplished -You can now say what your board verifies and what it doesn't, and you have a checklist for a production device. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the three board-specific items and keep the rest. +You can now say what your board verifies and what it doesn't, and you have a checklist for a production device. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the board block in `env.sh` and keep the rest. Ac6 runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming), on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), and on [AI-assisted embedded development](https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 113a88dcc1..497ffa6b02 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -5,17 +5,17 @@ description: Learn how to sign a Zephyr image in a FIT, build the public key int minutes_to_complete: 120 -who_is_this_for: This is an advanced topic for embedded developers who run Zephyr on an Arm Cortex-A processor behind U-Boot and want the bootloader to verify the Zephyr image before it starts. +who_is_this_for: This is an advanced topic for embedded developers who run Zephyr on an Arm Cortex-A processor behind U-Boot and want the bootloader to verify the Zephyr image before starting it. learning_objectives: - Explain where a Zephyr image sits in the Cortex-A boot chain and which stage can verify it - Build and sign a Zephyr image in a FIT, and build the public key into U-Boot without changing U-Boot source - - Write a U-Boot boot command that starts Zephyr only after the signature and hash checks pass, and prove it on the board with a wrong key and a tampered image - - Explain what an HS-FS board leaves unverified and what a production device needs, such as a fused key, a locked console and no unverified boot path + - Write a U-Boot boot command that starts Zephyr only after the signature and hash checks pass, and optionally prove on the board that it refuses a wrong key and a tampered image + - Explain what a board in its development state leaves unverified, and what a production device needs on top prerequisites: - - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card, a micro-USB cable for the console, and a USB-C PD power supply - - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space + - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card, a micro-USB cable for the console, and a USB-C Power Delivery (PD) power supply + - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; the TI SDK ships its installer and cross compiler as x86_64 binaries only - Visual Studio Code with the Workbench for Zephyr extension and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line From fe40889a43e20cd24e8752e10ca5841ca29b3333 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 15 Sep 2026 20:31:26 +0300 Subject: [PATCH 06/66] Learning Path: board outputs taken from the AM62L EVM console recording - The boot log, the trusted boot and the two refusals on pages 6 and 7 now reproduce what the EVM printed (Tera Term recording of 11 September): TF-A and SPL lines, the U-Boot banner with SoC AM62LX SR1.1 HS-FS, the real read times and FIT timestamp, and Zephyr's second-core line. - The demo-only echo lines of the recording are replaced by the echo the Learning Path's own boot command prints. - Page 8 quotes the same banner line. --- .../6-boot-the-board.md | 48 ++++++++++++++++--- .../7-test-the-checks.md | 10 ++-- .../8-production.md | 2 +- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md index e828b62adc..a5234ea9cc 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md @@ -119,13 +119,48 @@ picocom -b 115200 /dev/ttyUSB0 If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press **Ctrl+A**, then **Ctrl+X**. -Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Early in the log, the SPL shows the SoC's security state: +Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Your dates, version strings and countdown differ. The log up to the countdown is similar to: ```output -SoC: AM62LX SR1.0 HS-FS +NOTICE: Booting Trusted Firmware +NOTICE: BL1: v2.14.0(release):12.00.00.06-28-gb54338ab6 +NOTICE: BL1: Built : 09:15:06, Jul 8 2026 +NOTICE: BL1: dram_class: 11 +NOTICE: BL1: dram_size: 0x80000000 +NOTICE: DDR init done +NOTICE: ENTERING WFI - end of bl1 +NOTICE: BL31: v2.14.0(release):12.00.00.06-28-gb54338ab6 +NOTICE: BL31: Built : 09:15:06, Jul 8 2026 +NOTICE: SYSFW ABI: 4.0 (firmware rev 0x000c '12.1.2--v12.01.02 (Clever Cat)') +ERROR: Agent 0 Protocol 0x10 Message 0x7: not supported + +U-Boot SPL 2026.01-ti-g5fb294342321 (Jul 09 2026 - 22:23:09 +0000) +SPL initial stack usage: 1920 bytes +Trying to boot from MMC2 +Authentication passed +Authentication passed +ERROR: Agent 0 Protocol 0x10 Message 0x7: not supported + + +U-Boot 2026.01-g5fb294342321 (Sep 11 2026 - 18:13:32 +0200) + +SoC: AM62LX SR1.1 HS-FS +Model: Texas Instruments AM62L3 Evaluation Module +DRAM: 2 GiB +ERROR: Agent 0 Protocol 0x10 Message 0x7: not supported +Core: 89 devices, 34 uclasses, devicetree: separate +MMC: mmc@fa10000: 0, mmc@fa00000: 1 +Loading Environment from nowhere... OK +In: serial@2800000 +Out: serial@2800000 +Err: serial@2800000 +Net: eth0: ethernet@8000000port@1, eth1: ethernet@8000000port@2 +Hit any key to stop autoboot: 3 ``` -`HS-FS` is TI's name for the development state: no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. +**Lines to look for:** the `NOTICE: BL1:` and `BL31:` lines are TF-A, from `tiboot3.bin` and `tispl.bin`; `Authentication passed` is TIFS accepting what the SPL loads, `u-boot.img`; `SoC: AM62LX SR1.1 HS-FS` is U-Boot's banner naming the SoC's security state; `MMC:` lists `mmc 0`, the eMMC, and `mmc 1`, the SD card in `BOOT_DEV`. + +`HS-FS` is TI's name for the development state: no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. The three `ERROR: Agent 0 Protocol 0x10 Message 0x7: not supported` lines come from TI's firmware, and the boot continues past them. In this log the first two stages are TI's prebuilt files, so the `U-Boot SPL` line carries TI's build date; with the files you built it carries yours. ## Watch the trusted image boot @@ -134,13 +169,13 @@ U-Boot counts down for three seconds and then autoboot runs `bootcmd`, which is Your `Created` time, `Hash value` and read time differ. The lines that matter are the same on any board; only the two addresses, `FIT_ADDR` and `ZEPHYR_ADDR` from `env.sh`, change. The output is similar to: ```output -60198 bytes read in 7 ms (8.2 MiB/s) +60198 bytes read in 1 ms (57.4 MiB/s) ## Loading kernel (any) from FIT Image at 90000000 ... Using 'conf-1' configuration Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK Trying 'kernel-1' kernel subimage Description: Zephyr RTOS image - Created: 2026-09-11 17:14:00 UTC + Created: 2026-09-11 16:14:00 UTC Type: Kernel Image Compression: uncompressed Data Start: 0x900000e8 @@ -155,6 +190,7 @@ Your `Created` time, `Hash value` and read time differ. The lines that matter ar Loading Kernel Image to 82000000 ## Starting application at 0x82000000 ... *** Booting Zephyr OS build 4.4.2 *** +Secondary CPU core 1 (MPID:0x1) is up ################################################ # # @@ -173,7 +209,7 @@ this image was verified by U-Boot before it ran. `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. -`go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. +`go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. `Secondary CPU core 1 (MPID:0x1) is up` is Zephyr starting the second Cortex-A53 core through TF-A, the firmware you met on the first page. ## If nothing prints diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index df67d98a74..c8103f8119 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -218,7 +218,7 @@ Move the card to the board, open the console with `picocom` as on the previous p The expected output is: ```output -60198 bytes read in 7 ms (8.2 MiB/s) +60198 bytes read in 1 ms (57.4 MiB/s) ## Loading kernel (any) from FIT Image at 90000000 ... Using 'conf-1' configuration Verifying Hash Integrity ... sha256,rsa2048:key-b- error! @@ -226,11 +226,10 @@ Verification failed for '' hash node in 'conf-1' config node Failed to verify required signature 'key-key-a' Bad Data Hash ERROR -2: can't get kernel image! - *** REFUSED: Zephyr was NOT started *** ``` -**Lines to look for:** `sha256,rsa2048:key-b- error!`, then `Failed to verify required signature 'key-key-a'`, and last `*** REFUSED: Zephyr was NOT started ***`. No `Loading Kernel Image` line and no Zephyr banner. +**Lines to look for:** `sha256,rsa2048:key-b- error!`, then `Failed to verify required signature 'key-key-a'`, and last `*** REFUSED: Zephyr was NOT started ***`, printed by the `echo` in your boot command. No `Loading Kernel Image` line and no Zephyr banner. U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The `sha256,rsa2048:key-b- error!` line says U-Boot found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` end both refusals on this page and don't say which check failed; the lines before them do. @@ -247,13 +246,13 @@ Still at the prompt, run the tampered test: The expected output is: ```output -60198 bytes read in 7 ms (8.2 MiB/s) +60198 bytes read in 2 ms (28.7 MiB/s) ## Loading kernel (any) from FIT Image at 90000000 ... Using 'conf-1' configuration Verifying Hash Integrity ... sha256,rsa2048:key-a+ OK Trying 'kernel-1' kernel subimage Description: Zephyr RTOS image - Created: 2026-09-11 17:14:00 UTC + Created: 2026-09-11 16:14:00 UTC Type: Kernel Image Compression: uncompressed Data Start: 0x900000e8 @@ -268,7 +267,6 @@ The expected output is: Bad hash value for 'hash-1' hash node in 'kernel-1' image node Bad Data Hash ERROR -2: can't get kernel image! - *** REFUSED: Zephyr was NOT started *** ``` diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 8cd6bd1015..e7d373af73 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -27,7 +27,7 @@ You did this without changing a line of U-Boot source: the public key went in th Each stage checks the next, so the chain is only as trustworthy as the stage that checked U-Boot. -Most Cortex-A SoCs have the two security states you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): the production state, with the customer's key in eFuses, and the development state, where any key passes. The SPL banner told you this EVM is in the development state, HS-FS in TI's words: `SoC: AM62LX SR1.0 HS-FS`. On the AM62L EVM, TI's development key signs the three boot files, so the ROM and security-firmware checks run but can't refuse anything, and U-Boot enforces only the last link, U-Boot to Zephyr. +Most Cortex-A SoCs have the two security states you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): the production state, with the customer's key in eFuses, and the development state, where any key passes. U-Boot's banner told you this EVM is in the development state, HS-FS in TI's words: `SoC: AM62LX SR1.1 HS-FS`. On the AM62L EVM, TI's development key signs the three boot files, so the ROM and security-firmware checks run but can't refuse anything, and U-Boot enforces only the last link, U-Boot to Zephyr. The public half of `key-a` lives inside `u-boot.img`, on an unprotected FAT partition, so anyone who can write the card can replace it with one that carries their own key. The root of trust is in a file on the card, not in silicon. From cd7cf6ac95b16db7f5d23676805e57f2e4f4cf33 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Wed, 16 Sep 2026 22:27:17 +0300 Subject: [PATCH 07/66] Learning Path: boot-chain diagrams with brackets that point at their boxes - The range brackets in both diagrams now open downwards, towards the boxes they group, and start and end exactly on those boxes' edges; the blue bracket no longer starts in the gap before the Zephyr box. - Bracket labels are centred on their bracket and no wider than it. - The generic diagram names who checks each box under that box, as the AM62L one does, instead of under the gaps between boxes. - The grey labels say what TI's documentation says: before the key is fused, any key passes. --- .../1-boot-chain.md | 4 +-- .../images/boot-chain-generic.svg | 28 +++++++++------- .../images/boot-chain.svg | 32 +++++++++++-------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 3b364e1f07..7b96fb692e 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -29,13 +29,13 @@ You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE usually com Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps: it holds a public key and refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. -![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. The first two arrows are checked by the vendor's ROM and firmware; the last arrow, from U-Boot to Zephyr, is checked by U-Boot with your key and is the link this Learning Path adds.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") +![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. A grey bracket over the early boot stages and U-Boot says the silicon vendor's ROM and firmware check them, against your fused key or, before fusing, with any key passing. A blue bracket over Zephyr says U-Boot checks it with your key, the link this Learning Path adds. Under each checked box the diagram names who checks it: the ROM, the firmware, and U-Boot, which then starts Zephyr with go.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") ### The same chain on the AM62L EVM On the AM62L, the vendor's early stages are two files. `tiboot3.bin` holds the first stage of TF-A (BL1) and TIFS (TI Foundational Security), the SoC's security firmware; the boot ROM checks it. `tispl.bin` holds the TF-A runtime firmware (BL31), OP-TEE and the U-Boot SPL; TIFS checks it, and then checks `u-boot.img`, which is U-Boot proper. U-Boot checks the fourth file, the payload, which is Zephyr here. You build the three files when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). -![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") +![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") ## What a FIT image is diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg index 88c11853b8..8089d7312d 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain-generic.svg @@ -1,4 +1,4 @@ - + Generic Cortex-A boot chain with U-Boot verifying the Zephyr FIT image @@ -8,13 +8,17 @@ - + - - Checked by the silicon vendor's ROM and firmware, with the vendor's or your fused key - - Checked by U-Boot with your key - + + + Checked by the silicon vendor's ROM and firmware + against your fused key; before fusing, any key passes + + + Checked by U-Boot + with your key + @@ -42,9 +46,9 @@ - - ROM loads and checks - firmware loads and checks - U-Boot verifies the - FIT signature, then go + + checked by the ROM + checked by the firmware + checked by U-Boot, + then started with go diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg index a1073ce261..6d0f733a6f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg @@ -1,4 +1,4 @@ - + AM62L boot chain with the U-Boot to Zephyr verification added @@ -8,13 +8,17 @@ - - - - Checked by TI's ROM and TIFS. On an HS-FS device, TI's development key is accepted. - - Checked by U-Boot with your key - + + + + + Checked by TI's ROM and TIFS + On an HS-FS device such as this EVM, any key passes + + + Checked by U-Boot + with your key + @@ -48,10 +52,10 @@ - - checked by the ROM - checked by TIFS - checked by TIFS - checked by U-Boot, - then started with go + + checked by the ROM + checked by TIFS + checked by TIFS + checked by U-Boot, + then started with go From 43fae02e75bdd9c10c2beaa1a5bee57566f9eaee Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Wed, 16 Sep 2026 23:31:49 +0300 Subject: [PATCH 08/66] Learning Path: link Workbench for Zephyr's site and Marketplace page - The prerequisites link the extension's Visual Studio Marketplace page. - The setup page links both, in the same sentence form as the published Workbench for Zephyr Learning Path. - The Zephyr build page links the Workbench for Zephyr site where the walkthrough starts. --- .../zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md | 2 +- .../zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md | 2 +- .../zephyr-signed-fit-uboot-cortex-a/_index.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 76a2344648..db7e66d8a9 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -15,7 +15,7 @@ The AM62L EVM boots from a micro-SD card, so you need one and a way to write it. The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with about 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The SDK download is 4.5 GB and unpacks to 11 GB. -You build Zephyr with Workbench for Zephyr, an open-source Visual Studio Code extension by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: a Cortex-A board needs an AArch64 toolchain, and the AM62L needs Zephyr 4.4 or later; you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open-source [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: a Cortex-A board needs an AArch64 toolchain, and the AM62L needs Zephyr 4.4 or later; you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## Install the host packages diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 3d69a9fa9a..f559e08588 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -You build Zephyr with Workbench for Zephyr in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for a Cortex-A board: an AArch64 toolchain, and a Zephyr 4.4 workspace built from your board vendor's template, Texas Instruments here. +You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/) in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for a Cortex-A board: an AArch64 toolchain, and a Zephyr 4.4 workspace built from your board vendor's template, Texas Instruments here. Open VS Code on your working directory: diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 497ffa6b02..97e41aee0f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -16,7 +16,7 @@ learning_objectives: prerequisites: - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card, a micro-USB cable for the console, and a USB-C Power Delivery (PD) power supply - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; the TI SDK ships its installer and cross compiler as x86_64 binaries only - - Visual Studio Code with the Workbench for Zephyr extension and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) + - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line author: Roy Jamil From 56a7fc814ea83da14a8adee57928335255b8eed0 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Thu, 17 Sep 2026 00:52:42 +0300 Subject: [PATCH 09/66] Learning Path: trim repeated and low-value prose - About 30% less prose; every command and output a reader runs or checks is still there. - Each idea is explained once: the security states on the production page, the required-signature rule on the boot chain page, the fail-closed && chain on the U-Boot page. - The boot switch section keeps the SW3 setting; the full pincount setting is a link in the troubleshooting list. - env.sh carries a comment per board value instead of two paragraphs. - Removed the branch-byte check, which the header magic check covers, the mkimage -l tip and a duplicate signature-node block. --- .../1-boot-chain.md | 36 +++------- .../2-set-up-tools.md | 52 +++++--------- .../3-build-zephyr.md | 32 ++------- .../4-sign-zephyr.md | 42 +++--------- .../5-build-uboot.md | 67 +++++-------------- .../6-boot-the-board.md | 58 ++++++---------- .../7-test-the-checks.md | 34 +++------- .../8-production.md | 32 +++------ .../_index.md | 2 +- 9 files changed, 96 insertions(+), 259 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 7b96fb692e..f4dfb2f8cd 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -9,31 +9,23 @@ layout: learningpathall ## Zephyr is the last stage, not the first -On a microcontroller (MCU), Zephyr starts at the reset vector and nothing runs before it, so secure boot on Cortex-M means adding a bootloader yourself, such as MCUboot. That bootloader is the root of trust, the one piece nothing checks and everything depends on. +On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a bootloader such as MCUboot. A Cortex-A processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several firmware stages run before your code. Zephyr is the last stage, so the stage before it, usually U-Boot, can check it before starting it. -A Cortex-A processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several pieces of firmware run before your code does: your image is the last thing that runs, not the first. +U-Boot checks images packed with their signature into a FIT (Flattened Image Tree). Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers Zephyr signed on a Cortex-A. -That order makes verification possible: the stage before Zephyr can check it before starting it. On a Cortex-A board, that stage is usually U-Boot, the bootloader most Arm boards use. - -A U-Boot host tool packs a program and its signature into a FIT (Flattened Image Tree) image, and U-Boot checks it. Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers the combination you ship, Zephyr signed on a Cortex-A. - -The FIT, the keys, the way the key goes into U-Boot and the boot command are the same on any Cortex-A board that runs U-Boot. The example board is the TI AM62L EVM (evaluation module). Its SDK, SD card layout and boot switches sit in marked sections; swap those for your board's own. +Everything except the board setup works on any Cortex-A board that runs U-Boot. The example board is the TI AM62L EVM (evaluation module); its SDK, SD card layout and boot switches sit in marked sections. ## The boot chain on a Cortex-A board On an Armv8-A board with U-Boot, the boot chain is: the boot ROM in the SoC, then early firmware, then U-Boot, then the payload. The payload is what U-Boot loads from storage and starts: Linux on most boards, Zephyr here. -The early firmware is usually three things. The SPL (Secondary Program Loader) is a cut-down build of U-Boot whose only job is to load the full U-Boot. TF-A (Trusted Firmware-A) is Arm's reference firmware for the Secure world, the half of the processor that TrustZone walls off from normal software; it starts U-Boot in the Non-secure world. OP-TEE (Open Portable Trusted Execution Environment) is a trusted operating system that also lives in the Secure world. Many SoCs add the vendor's own security firmware, which does the checking for the later stages. - -You build the SPL as part of U-Boot on a later page. TF-A and OP-TEE usually come prebuilt in the vendor's SDK; on the AM62L they are `bl1.bin`, `bl31.bin` and `bl32.bin`. - -Each stage loads the next one into memory and jumps to it. Secure boot means each stage checks the next one before it jumps: it holds a public key and refuses to run anything that isn't signed by the matching private key. If one link skips the check, everything after that link runs unverified. +The early firmware is usually the SPL (Secondary Program Loader), a small U-Boot that loads the full one, plus TF-A (Trusted Firmware-A) and OP-TEE (Open Portable Trusted Execution Environment), which run in the Secure world. Many SoCs add the vendor's own security firmware, which checks the later stages. You build the SPL with U-Boot; the rest comes prebuilt in the vendor's SDK. ![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. A grey bracket over the early boot stages and U-Boot says the silicon vendor's ROM and firmware check them, against your fused key or, before fusing, with any key passing. A blue bracket over Zephyr says U-Boot checks it with your key, the link this Learning Path adds. Under each checked box the diagram names who checks it: the ROM, the firmware, and U-Boot, which then starts Zephyr with go.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") ### The same chain on the AM62L EVM -On the AM62L, the vendor's early stages are two files. `tiboot3.bin` holds the first stage of TF-A (BL1) and TIFS (TI Foundational Security), the SoC's security firmware; the boot ROM checks it. `tispl.bin` holds the TF-A runtime firmware (BL31), OP-TEE and the U-Boot SPL; TIFS checks it, and then checks `u-boot.img`, which is U-Boot proper. U-Boot checks the fourth file, the payload, which is Zephyr here. You build the three files when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) and copy them to the card when you [prepare the SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/). +On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships as HS-FS, TI's name for the development state described below. ![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") @@ -49,28 +41,20 @@ One FIT holds three things: `mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the board, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. -This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. RSA is the public-key algorithm whose private half signs and public half verifies. +This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`: every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature at all still boots. ![Diagram of a signed FIT image next to U-Boot's control device tree. The FIT contains an images node with the Zephyr binary and its hash, and a configurations node with a signature. The control device tree contains a /signature node holding the public key with required set to conf. Arrows show the signature covering the configuration and the hash node, and the hash covering the image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") -The signature does not cover the image bytes: it covers the configuration node plus the hash node, and the hash covers the bytes. The optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows the difference. +The signature does not cover the image bytes: it covers the configuration node plus the hash node, and the hash covers the bytes. ## What this Learning Path adds -This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. You don't change a line of U-Boot source: the public key and the boot command go in as Kconfig options. The page [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) shows the boot command. +This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. -What this Learning Path doesn't do is put your key into the chip. Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon, and have two security states. With the key fused, the production state, the ROM and the vendor's firmware refuse any boot file not signed with the customer's key. Without it, the development state, the checks still run but pass for any key. TI calls the two states HS-SE (High Security, Security Enforced) and HS-FS (High Security, Field Securable). - -The AM62L EVM ships as HS-FS, so the checks on its first three boot files, which TI signs with a development key, can't refuse anything. U-Boot's check of Zephyr is enforced in both states: a bad image is refused whether the key is fused or not. - -{{% notice Note %}} -Moving a device to its production state, fusing your own key and re-signing the boot files with it, is a separate, vendor-specific procedure and out of scope here. The page [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what that step changes and what else production needs. -{{% /notice %}} +This Learning Path doesn't fuse your key into the chip, so the SoC stays in its development state, where the ROM and the vendor's firmware accept boot files signed with any key; U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. ## What you've learned and what's next -Zephyr on a Cortex-A is the last stage of a boot chain, so U-Boot can verify it before starting it. A FIT holds the image, its hash and a signed configuration, and `required = "conf"` in U-Boot's control device tree makes U-Boot refuse anything it can't verify. On a board in its development state, such as the AM62L EVM, only that last check is enforced today. - -Next, you [set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), and create the working directory and environment file that every later page uses. +Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it, and `required = "conf"` makes U-Boot refuse any FIT it can't verify. Next, you [set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index db7e66d8a9..13362df03a 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -11,29 +11,21 @@ layout: learningpathall From your board vendor you need three things: the U-Boot source tree for the board, the prebuilt firmware that runs before U-Boot, and the cross compiler that builds U-Boot. On the example board, the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM), all three come in one installer, the TI Processor SDK. -The AM62L EVM boots from a micro-SD card, so you need one and a way to write it. The micro-USB connector **J7** is the serial console. It shows up on the host as four serial ports, and the console is the one named SoC UART0, usually the first. Power comes from a USB-C supply that supports Power Delivery (PD), on **J17** or **J19**. - -The host is an x86_64 PC running Ubuntu 22.04 or 24.04 with about 20 GB of free disk space. TI ships the SDK installer and its cross compiler as x86_64 binaries, so an Arm host doesn't work here. The SDK download is 4.5 GB and unpacks to 11 GB. - -You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open-source [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps: a Cortex-A board needs an AArch64 toolchain, and the AM62L needs Zephyr 4.4 or later; you add both from Workbench when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open-source [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps; you add a Cortex-A toolchain and workspace when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## Install the host packages U-Boot's build and the signing tools need a few packages beyond a normal Zephyr setup. Install them in one command: ```bash -sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools u-boot-tools xz-utils curl picocom +sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools xz-utils curl picocom ``` -`swig` and `python3-dev` are for U-Boot's Python device tree bindings, `libssl-dev` gives `mkimage` its RSA code, `libgnutls28-dev` and `uuid-dev` are for a tool the AM62L configuration builds but you never use, and `device-tree-compiler` provides `dtc`. `mtools` edits the SD card image without root, `xz-utils` unpacks the vendor's card image, `openssl` creates the keys, `curl` downloads the SDK and the card image, and `picocom` is the serial terminal. - -`u-boot-tools` is optional: it installs Ubuntu's own `mkimage` as a fallback, but you build `mkimage` from the board's U-Boot tree when you [create the signing keys and sign the image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). - ## Create the working directory and environment file Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. -Create the directory and write the environment file. The heredoc (the `cat > ... <<'EOF'` block) is quoted, so `$HOME` and `$WORK` stay as text in the file and expand when you load it: +Create the directory and write the environment file: ```bash mkdir -p $HOME/zephyr-secure-boot @@ -41,20 +33,20 @@ cat > $HOME/zephyr-secure-boot/env.sh <<'EOF' export WORK=$HOME/zephyr-secure-boot # Board values -export BOARD=am62l_evm/am62l3/a53 -export ZEPHYR_ADDR=0x82000000 -export FIT_ADDR=0x90000000 -export BOOT_DEV="mmc 1:1" -export UBOOT_DEFCONFIG=am62lx_evm_defconfig +export BOARD=am62l_evm/am62l3/a53 # Zephyr board identifier +export ZEPHYR_ADDR=0x82000000 # Zephyr link address, FIT load and go target +export FIT_ADDR=0x90000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR +export BOOT_DEV="mmc 1:1" # U-Boot device and partition that hold the files +export UBOOT_DEFCONFIG=am62lx_evm_defconfig # the board's U-Boot configuration -# Vendor SDK: U-Boot source, prebuilt early firmware, cross compiler +# Vendor SDK: U-Boot source, firmware that runs before U-Boot, cross compiler and its libraries export SDK=$WORK/tisdk export UBOOT_SRC=$SDK/board-support/ti-u-boot-2026.01+git export PREBUILT=$SDK/board-support/prebuilt-images/am62lxx-evm export CROSS=$SDK/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux- export SYSROOT=$SDK/linux-devkit/sysroots/aarch64-oe-linux -# Your build outputs +# Your build outputs: U-Boot build, signing keys, signed FITs export UBOOT_OUT=$WORK/uboot-build export KEYS=$WORK/keys export FIT=$WORK/fit @@ -68,11 +60,7 @@ source $HOME/zephyr-secure-boot/env.sh mkdir -p $KEYS $FIT ``` -The first block holds the board values. `BOARD` is the Zephyr board identifier. `ZEPHYR_ADDR` is where Zephyr is built to run, and `FIT_ADDR` is where U-Boot puts the signed image while it checks it; they must not overlap, because U-Boot copies Zephyr from one to the other. `BOOT_DEV` is the U-Boot device and partition that hold the files, and `UBOOT_DEFCONFIG` is the board's U-Boot configuration. To take this Learning Path to another board, you change this block and the vendor SDK block after it, and nothing else in the file; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) says where each value comes from. - -The second block points into the vendor SDK, which you install next. `UBOOT_SRC` is the U-Boot source, `PREBUILT` holds the firmware that runs before U-Boot, `CROSS` is the cross compiler prefix, and `SYSROOT` is the library path the SDK's compiler needs through `--sysroot`. The last block is yours: `UBOOT_OUT` receives the U-Boot build, `KEYS` holds the signing keys, and `FIT` holds the signed images. - -The variables live only in the shell that loaded them, so every later page starts with `source $HOME/zephyr-secure-boot/env.sh`. +Only the `# Board values` and `# Vendor SDK` blocks depend on the board; for another board, change those and leave the rest of the file as it is. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) says where each value comes from. The variables live only in the shell that loaded them, so every later page starts with `source $HOME/zephyr-secure-boot/env.sh`. ## Install the vendor SDK @@ -80,11 +68,7 @@ Any vendor's SDK or BSP (board support package) has to give you the three pieces ### Install the TI Processor SDK for the AM62L EVM -On the AM62L EVM, the three pieces come from the TI Processor SDK Linux for AM62Lx: the U-Boot source tree `ti-u-boot-2026.01+git`, the prebuilt firmware that runs before U-Boot, and the aarch64 GCC toolchain (GCC 15.3.0). You use nothing from Linux itself. - -The prebuilt firmware is TF-A as `bl1.bin` and `bl31.bin`, OP-TEE 4.10 as `bl32.bin`, and TIFS, the SoC's security firmware from the boot chain page, in the `ti-sysfw` directory. These binaries are the ones inside TI's own image, so you don't build them. - -Download the installer from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): +On the AM62L EVM, the three pieces come from the TI Processor SDK Linux for AM62Lx; you use nothing from Linux itself. The installer is 4.5 GB and unpacks to 11 GB. Download it from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): ```bash curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin @@ -116,17 +100,13 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 ... ``` -{{% notice Note %}} -`prebuilt-images` also contains a directory named `am62lxx-evm-jailhouse`. Don't use it. Its firmware is built for the Jailhouse hypervisor memory layout, not for the one Zephyr and this Learning Path use. `PREBUILT` in `env.sh` already points at the right one. -{{% /notice %}} - ## Download the vendor's SD card image -What a boot ROM reads from the card is vendor-specific: a file on a FAT partition on some SoCs, raw sectors at a fixed offset on others. The vendor's own SD card image is the one layout known to work, so this Learning Path uses it as a template. For another board, download the vendor's own SD card image instead of the file below. +The vendor's own SD card image has a layout the boot ROM is known to accept, so this Learning Path uses it as a template. For another board, download your vendor's image instead of the file below. ### Download TI's card image for the AM62L EVM -On the AM62L EVM, that image is the `.wic.xz` file, TI's complete SD card image compressed with `xz`. You don't boot Linux from it. When you [prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), you keep its first partition as a template and replace only the files inside. +On the AM62L EVM, the image is TI's `.wic.xz` file. You don't boot Linux from it: you keep its first partition and replace the files inside. Download it into the working directory: @@ -138,6 +118,4 @@ The compressed file is about 1.3 GB. Leave it compressed: the SD card page reads ## What you've accomplished and what's next -Your host now has the build packages and the board's SDK: U-Boot source, prebuilt firmware and toolchain. `$WORK/env.sh` holds the board values and every path, and the vendor's card image is on disk as the boot partition template. - -Next, you [build a small Zephyr application for the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/) and check that its binary starts with a branch instruction, so U-Boot's `go` command can start it. +Your host has the build packages, the board's SDK, the vendor's card image, and `env.sh` with every path. Next, you [build a small Zephyr application for the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index f559e08588..2eeca8893f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -1,6 +1,6 @@ --- title: Build a Zephyr image that U-Boot can start -description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for a Cortex-A board, the TI AM62L EVM in this example, then check that the binary starts with a branch instruction that U-Boot's go command can jump to. +description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for a Cortex-A board, the TI AM62L EVM in this example, then check the arm64 image header that U-Boot's go command relies on. weight: 4 ### FIXED, DO NOT MODIFY @@ -138,25 +138,11 @@ Memory region Used Size Region Size %age Used ![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") -There is no flash on this board target; `RAM` is the part of the DDR that Zephyr may use. The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB. It is linked at `0x82000000`, the `ZEPHYR_ADDR` value in `env.sh`. That address is the start of the memory node the board device tree selects as `zephyr,sram`; on the AM62L it sits past the first 32 MB of DDR, where TF-A and OP-TEE live. Every following page uses that address as the FIT `load` and `entry` address and as the `go` target. +The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB linked at `ZEPHYR_ADDR`, the start of the board's `zephyr,sram` memory node. -## Check the image starts with a branch +## Check the arm64 image header -Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment with `source $HOME/zephyr-secure-boot/env.sh`, and print the first four bytes of the binary: - -```bash -od -An -tx1 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin -``` - -The output is similar to: - -```output - 53 04 00 14 -``` - -Those four bytes, read as a little-endian 32-bit word, are one AArch64 `b` (branch) instruction: the top six bits of the last byte (`14` here) are the opcode and the remaining 26 bits hold the distance to `__start`, so the first three bytes can differ in your build. - -Now check the header's magic number at offset `0x38`: +Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment with `source $HOME/zephyr-secure-boot/env.sh`, and print the header's magic number at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -168,14 +154,8 @@ The expected output is: A R M d ``` -`0x64` is the ASCII code for `d`, so `A R M d` is the magic `ARM\x64`. - -{{% notice Note %}} -If the last of the four bytes isn't in the range `14` to `17`, or the magic isn't at `0x38`, then `CONFIG_AARCH64_IMAGE_HEADER` isn't set in the build. Check `$WORK/zephyrproject/applications/hello/build/primary/zephyr/.config` for `CONFIG_AARCH64_IMAGE_HEADER=y`. -{{% /notice %}} +`ARMd` is the arm64 image magic, so the header is in place and the image starts with the branch instruction that `go` jumps to. If you see anything else, check that `$WORK/zephyrproject/applications/hello/build/primary/zephyr/.config` contains `CONFIG_AARCH64_IMAGE_HEADER=y`. ## What you've accomplished and what's next -You've built one Zephyr image for the Cortex-A53 on the AM62L EVM with Workbench for Zephyr, linked at `0x82000000`, starting with a branch instruction and carrying the arm64 header. That's all U-Boot needs to start it with `go`, and all `mkimage` needs to wrap it in a FIT on the next page. - -Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). +You've built a Zephyr image for the AM62L's Cortex-A53, linked at `ZEPHYR_ADDR` and carrying the arm64 header that `go` needs. Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index 3c82868d07..e1d50346bc 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -40,9 +40,7 @@ mkimage version 2026.01-g5fb294342321 ``` {{% notice Note %}} -If the `tools` build stops early, the fix depends on where it stops: -- At `pylibfdt` or `swig`: install `swig python3-dev` as described in [Set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/), or add `DTC=$(which dtc)` to the `make` line and install the `python3-libfdt` package -- At `mkeficapsule` with `fatal error: gnutls/gnutls.h: No such file or directory`: install `libgnutls28-dev uuid-dev`, or add the line `# CONFIG_TOOLS_MKEFICAPSULE is not set` to `$UBOOT_OUT/.config`, then run the `tools` step again. You don't need that tool +If the `tools` build stops at `pylibfdt`, `swig` or `gnutls/gnutls.h`, a package is missing: run the `apt install` command from [Set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/) again, then the `tools` step. {{% /notice %}} ## Create two signing keys @@ -71,17 +69,11 @@ key-a.crt key-a.key key-b.crt key-b.key `mkimage -k ` expects this layout. `.key` holds the private key, `.crt` is a self-signed certificate wrapping the public key, and `` is the `key-name-hint` you write in the FIT source. -`sha256,rsa2048` is enough for a demo. - -{{% notice Warning %}} -These are throwaway development keys, generated on the build machine. Production keys are generated and kept elsewhere. See [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). -{{% /notice %}} +These 2048-bit keys, generated on the build machine, are fine for a demo; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production keys. ## Write the FIT source -You write the FIT that [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) introduced as a `.its` file (image tree source), and `mkimage` compiles and signs it into an `.itb` (image tree blob). - -Write the source with an unquoted heredoc, so `$WORK` expands to the path of the Zephyr binary from the previous page and `$ZEPHYR_ADDR` to its link address: +You describe the FIT in a `.its` file (image tree source), and `mkimage` compiles and signs it into an `.itb` (image tree blob). Write the source; the heredoc is unquoted, so `$WORK` and `$ZEPHYR_ADDR` expand: ```bash cat > $FIT/zephyr-a.its < $FIT/zephyr-a.its <; - rsa,modulus = <...>; - rsa,exponent = <0x00 0x10001>; - rsa,n0-inverse = <...>; - rsa,num-bits = <0x800>; - key-name-hint = "key-a"; - }; - }; -}; -``` - -The `rsa,` properties are the public half of `key-a`. `required = "conf"` is the fail-closed rule from [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): no valid signature by this key, no boot. - -The board's defconfig has to turn on the verifier, and the AM62L one already does. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: +The board's defconfig must turn on the verifier, and the AM62L one does. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: ```bash grep -E '^CONFIG_(FIT|FIT_SIGNATURE|RSA|OF_SEPARATE)=|LEGACY_IMAGE_FORMAT' $UBOOT_OUT/.config @@ -48,11 +27,7 @@ CONFIG_OF_SEPARATE=y CONFIG_RSA=y ``` -`CONFIG_FIT_SIGNATURE` and `CONFIG_RSA` are the verifier. `CONFIG_OF_SEPARATE` builds the control DTB from source, so you can add a node to it at build time. - -Legacy image support is off: the older uImage format carries no signature, so `bootm` has nothing unsigned to fall back to. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers the other boot commands. - -Only the key and the boot command are missing. Both are build configuration, so the U-Boot source stays untouched. If your board's `.config` lacks one of the four `=y` lines, add it to the fragment you write in *Configure and build*; if it has `CONFIG_LEGACY_IMAGE_FORMAT=y`, add `# CONFIG_LEGACY_IMAGE_FORMAT is not set` to the fragment as well. +`CONFIG_FIT_SIGNATURE` and `CONFIG_RSA` are the verifier, `CONFIG_OF_SEPARATE` builds the control DTB from source so you can add a node to it, and legacy images, which carry no signature, are off. Only the key and the boot command are missing, and both are build configuration, so the U-Boot source stays untouched. ## Generate the key node @@ -63,7 +38,7 @@ printf '/dts-v1/;\n/ { };\n' | dtc -I dts -O dtb -o $WORK/scratch.dtb printf 'payload' > $WORK/payload.bin ``` -Write the throwaway FIT's source, a copy of the `zephyr-a.its` from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/) with placeholders for the payload and the addresses: +Write the throwaway FIT's source, the same layout as `zephyr-a.its` with a placeholder payload: ```bash cat > $WORK/key.its <<'EOF' @@ -91,7 +66,7 @@ cat > $WORK/key.its <<'EOF' EOF ``` -Both `description` properties must stay, as on the previous page. `dtc` looks for `payload.bin` next to `key.its`. +`mkimage` refuses the file without its two `description` properties, and `dtc` looks for `payload.bin` next to `key.its`. Sign the throwaway FIT and convert the scratch DTB to `signature.dtsi`: @@ -115,11 +90,7 @@ The expected output is: key-name-hint = "key-a"; ``` -`key-b` must not appear: U-Boot never gets its public half. - -## Why a .dtsi and not mkimage -K on u-boot.dtb - -`mkimage -K` can also write the key straight into `u-boot.dtb`, but every `make` rebuilds the control DTB from source and the injected key is gone. `CONFIG_DEVICE_TREE_INCLUDES` lists extra `.dtsi` files to include in that build, so the key is compiled in every time. +`key-b` must not appear: U-Boot never gets its public half. The build includes this file through `CONFIG_DEVICE_TREE_INCLUDES`, because writing the key into `u-boot.dtb` with `mkimage -K` doesn't last: every `make` rebuilds that DTB from source. ## Write a boot command that fails closed @@ -146,9 +117,7 @@ Each piece has one job: - `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. - `bootm loados` copies the verified payload to its `load` address, `ZEPHYR_ADDR`. - The four cache commands flush and turn off the caches, and on arm64 `dcache off` also turns the MMU off, the state Zephyr expects at entry. -- `go 0x82000000` jumps to `ZEPHYR_ADDR`. It verifies nothing. - -Why not a plain `bootm`? A full `bootm` continues past `loados` into OS-specific boot code; stopping after `loados` and jumping with `go` uses U-Boot as a verifier only, not as an OS loader. +- `go 0x82000000` jumps to `ZEPHYR_ADDR` and verifies nothing. Stopping after `bootm loados` keeps U-Boot a verifier, not an OS loader; a plain `bootm` would go on into OS-specific boot code. `&&` is what makes it fail closed: `a && b` runs `b` only if `a` succeeded, while `a; b` would fall through to `go` after a failed check. `go` never returns, so the `echo` prints only when a step failed. @@ -163,7 +132,7 @@ That chain becomes the environment variable `zboot`, and three one-line wrappers `a` boots the trusted image. `b` and `t` name images that don't exist yet, for [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). Autoboot is U-Boot's countdown to running `bootcmd` on its own. `CONFIG_PREBOOT` defines all four before that countdown starts, so they exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. -The commands are compiled into U-Boot rather than stored on the card, where anyone could edit a boot script to skip the check. The AM62L configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, which gives the environment no storage, so nothing on the card can override them; check your board's `.config` for the same line. +The commands are compiled into U-Boot rather than stored on the card, where anyone could edit a boot script to skip the check. ## Configure and build @@ -188,10 +157,6 @@ EOF The `\"` around the `echo` text stay: that's how a Kconfig string holds a literal quote. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` to check that the board values, not the variable names, landed in the file. -{{% notice Note %}} -The fresh defconfig starts from a clean `.config`. If the `tools` build on the previous page needed `# CONFIG_TOOLS_MKEFICAPSULE is not set`, add that line to the fragment. If it needed `DTC=$(which dtc)`, add it to both `make` lines that follow. -{{% /notice %}} - Let Kconfig resolve the fragment: ```bash @@ -208,7 +173,7 @@ The output is similar to: .config:2360:warning: override: reassigning to symbol BOOTDELAY ``` -The five warnings are expected (six if you added the `mkeficapsule` line): your lines replace values the defconfig already set. The line numbers can differ. +The five warnings are expected: your lines replace values the defconfig already set. ### Build for the AM62L EVM @@ -225,7 +190,7 @@ The build takes a few minutes. Check the three boot files: ls -l $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img ``` -The sizes are about 0.2 MB, 1.5 MB and 1.4 MB. These are the three files of the AM62L chain on the first page. On another board, the `make` line takes whatever the vendor's tree expects for its early stages, such as `BL31=` for TF-A, and the vendor's tree names the outputs too: often `u-boot.img` or `u-boot.itb` plus an SPL file, sometimes a single packed image. +The sizes are about 0.2 MB, 1.5 MB and 1.4 MB. ## Check the key is inside U-Boot @@ -252,7 +217,9 @@ With the long values shortened, the output is similar to: }; ``` -Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's, and a mistake shows up now rather than at the serial console. `-f` names the FIT and `-k` the DTB that holds the keys: +The `rsa,` properties are the public half of `key-a`, and `required = "conf"` is the rule U-Boot enforces with it. + +Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's. `-f` names the FIT and `-k` the DTB that holds the keys: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -308,12 +275,8 @@ Signature check OK **Lines to look for:** the first line, `sha256,rsa2048:key-a+`, is the signature of `conf-1` verified with `key-a`, the `+` being the pass mark, and the last line, `Signature check OK`, is the verdict. The exit code is 0. -Between them the tool walks the FIT the way `bootm` will on the board: it lists `kernel-1`, checks its hash (`sha256+` then `OK`), prints `Decrypting Data ... OK` (nothing in this FIT is encrypted, so there is nothing to do) and `Loading Kernel Image to 0` (the host tool loads nothing), and reports that the FIT has no `fdt` and no `ramdisk`. That's correct: it holds Zephyr and nothing else. The `FIT Image at` address is the tool's buffer on the host and changes every run, and the host tool breaks `sha256,rsa2048:key-a+ OK` over two lines where the board prints one. - -[Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) runs the same tool on an image signed with `key-b` and on a tampered copy, and expects it to refuse both. +The lines in between are the tool walking the FIT the way `bootm` does; the two `Could not find subimage node type` lines are expected, because the FIT holds only Zephyr. ## What you've accomplished and what's next -You built the board's U-Boot with the public half of `key-a` compiled into its control device tree, and a boot command that starts Zephyr only after `bootm` has verified the signature and the hash. You did it without touching the U-Boot source. `fit_check_sign` has shown on the host that the trusted FIT verifies against that key. - -Next, you [put the boot files and the trusted FIT on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and watch U-Boot make the same decisions on the board. +You built U-Boot with `key-a`'s public half and a boot command that starts Zephyr only after `bootm` verifies it, and `fit_check_sign` confirmed on the host that the trusted FIT passes. Next, you [put the boot files and the trusted FIT on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and boot the board. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md index a5234ea9cc..9973d438bb 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md @@ -7,15 +7,15 @@ weight: 7 layout: learningpathall --- -## What the card must hold +## Why you start from the vendor's card image Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. -Some boot ROMs look for the first-stage file by name on a FAT partition, as the AM62L's does; others read it from a fixed offset on the card. Where the ROM expects its first stages is vendor-specific and rarely documented, so the safest template is the vendor's own SD card image, which you downloaded when you [set up the tools](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). What is the same on every board is that U-Boot's `fatload` later reads `zephyr-a.itb` from the device and partition in `BOOT_DEV`, so that partition holds `u-boot.img` and the FIT, and nothing else. +Some boot ROMs look for the first-stage file by name on a FAT partition, as the AM62L's does; others read it from a fixed offset on the card. That is why you start from the vendor's own card image. On every board, U-Boot's `fatload` then reads `zephyr-a.itb` from the partition in `BOOT_DEV`. ## Build the SD card image from the vendor's boot partition -On the AM62L EVM, the boot ROM looks for `tiboot3.bin` by name on the first FAT partition of the SD card, and it is picky about that partition: a FAT32 volume with 512-byte clusters loads nothing, and the console stays empty. TI's image does boot: its first partition starts at sector 2048, is 262144 sectors (128 MiB) long, has the bootable flag set, has partition type `0x0c`, and is formatted FAT16 with four sectors per cluster. Keep that partition byte for byte and replace only the files in it. +On the AM62L EVM, the boot ROM reads `tiboot3.bin` from the card's first FAT partition and is picky about its format: TI's FAT16 partition boots, while a FAT32 one with 512-byte clusters leaves the console empty. Keep TI's partition byte for byte and replace only the files; it starts at sector 2048 and is 262144 sectors long, which is where the numbers in the next command come from. Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: @@ -46,8 +46,6 @@ mcopy -o -i $M $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img mcopy -o -i $M $FIT/zephyr-a.itb :: ``` -`uEnv.txt` is TI's Linux boot environment; your U-Boot never reads it, but delete it so nothing on the card describes a Linux boot. - List the volume to check the result: ```bash @@ -71,10 +69,6 @@ zephyr-a itb 60198 2026-09-15 16:49 Four files: the three boot stages you built and the FIT you signed. -{{% notice Note %}} -If you prefer not to edit the image on the host, flash TI's `.wic.xz` to the card unchanged. balenaEtcher reads `.wic.xz` directly, and on Linux `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress` does the same. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. -{{% /notice %}} - ## Write the card Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Write the image to the whole card: @@ -89,29 +83,21 @@ Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition suc On Windows or macOS, write `sdcard.img` with balenaEtcher. -## Set the AM62L EVM boot switches - -Boot switches tell the ROM where to look for the first-stage file; most boards have some form of them, as switches, jumpers or resistors, and some have a fixed boot order instead. On the AM62L EVM, **ON** means HIGH, with the knob towards the **ON** label on the switch bank. - -The [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8) (SPRUJG8B) gives two ways to select the SD card. The full pincount setting uses all 16 BOOTMODE bits across three switch banks; the reduced pincount setting uses only the four switches of **SW3**. Start with the reduced setting. - -The full pincount value is BOOTMODE `0x0E43`: SD card in filesystem mode as the primary boot device, UART as backup, 25 MHz reference clock: +{{% notice Note %}} +If you prefer not to edit the image on the host, write TI's `.wic.xz` to the card unchanged, with balenaEtcher or with `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress`, taking the same care with `/dev/sdX`. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. +{{% /notice %}} -| Bank | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -|---|---|---|---|---|---|---|---|---| -| **SW4** (BOOTMODE 0-7) | ON | ON | OFF | OFF | OFF | OFF | ON | OFF | -| **SW2** (BOOTMODE 8-11) | OFF | ON | ON | ON | | | | | -| **SW3** (BOOTMODE 12-15) | OFF | OFF | OFF | OFF | | | | | +## Set the AM62L EVM boot switches -The reduced pincount setting uses only **SW3**; the ROM ignores **SW2** and **SW4**: +Set **SW3** as shown below, the reduced pincount setting from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8), in which the ROM ignores **SW2** and **SW4**. **ON** is towards the **ON** label on the switch bank. -| Bank | 1 | 2 | 3 | 4 | +| Switch | 1 | 2 | 3 | 4 | |---|---|---|---|---| | **SW3** | OFF | ON | OFF | ON | ## Connect the console and power on -On the AM62L EVM, connect the micro-USB port **J7** to your host. The USB-to-serial chip behind it, an FTDI FT4232HL, creates four serial ports: SoC UART0, SoC UART1, WKUP UART0 and SoC UART4. The console is SoC UART0, at 115200 baud, 8 data bits, no parity, one stop bit, usually `/dev/ttyUSB0` on Linux. Open it: +Connect the micro-USB port **J7** to your host. It creates four serial ports; the console is usually the first one, `/dev/ttyUSB0`, at 115200 baud. Open it: ```bash picocom -b 115200 /dev/ttyUSB0 @@ -158,15 +144,13 @@ Net: eth0: ethernet@8000000port@1, eth1: ethernet@8000000port@2 Hit any key to stop autoboot: 3 ``` -**Lines to look for:** the `NOTICE: BL1:` and `BL31:` lines are TF-A, from `tiboot3.bin` and `tispl.bin`; `Authentication passed` is TIFS accepting what the SPL loads, `u-boot.img`; `SoC: AM62LX SR1.1 HS-FS` is U-Boot's banner naming the SoC's security state; `MMC:` lists `mmc 0`, the eMMC, and `mmc 1`, the SD card in `BOOT_DEV`. +**Lines to look for:** the `NOTICE: BL1:` and `BL31:` lines are TF-A, from `tiboot3.bin` and `tispl.bin`; `Authentication passed` is TIFS accepting `u-boot.img`; `SoC: AM62LX SR1.1 HS-FS` says the SoC is in its development state, which TI calls HS-FS; `MMC:` lists the eMMC as device 0 and the SD card as device 1. The `ERROR:` lines come from TI's firmware and are harmless. -`HS-FS` is TI's name for the development state: no customer key is fused in this device yet; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains what that leaves unverified. The check you watch next, U-Boot verifying Zephyr, doesn't depend on it. The three `ERROR: Agent 0 Protocol 0x10 Message 0x7: not supported` lines come from TI's firmware, and the boot continues past them. In this log the first two stages are TI's prebuilt files, so the `U-Boot SPL` line carries TI's build date; with the files you built it carries yours. +This log comes from a board running TI's prebuilt first two stages, so its `U-Boot SPL` line shows TI's build date instead of yours. ## Watch the trusted image boot -U-Boot counts down for three seconds and then autoboot runs `bootcmd`, which is `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It loads `zephyr-a.itb`, verifies it, copies Zephyr to `0x82000000` and jumps there. - -Your `Created` time, `Hash value` and read time differ. The lines that matter are the same on any board; only the two addresses, `FIT_ADDR` and `ZEPHYR_ADDR` from `env.sh`, change. The output is similar to: +After the three-second countdown, autoboot runs `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Your times and hash differ, and on another board so do `FIT_ADDR` and `ZEPHYR_ADDR`. The output is similar to: ```output 60198 bytes read in 1 ms (57.4 MiB/s) @@ -205,19 +189,15 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -**Lines to look for:** `sha256,rsa2048:key-a+ OK` and `sha256+ OK` are the verification; `Loading Kernel Image to 82000000` is the copy; `## Starting application at 0x82000000 ...` is the jump; `Hello from ZEPHYR IMAGE A` is the verified program running. - -`sha256,rsa2048:key-a+ OK` is `bootm start` verifying the RSA signature of `conf-1` with the `key-a` public key compiled into U-Boot. `sha256+ OK` is the same step checking that the image bytes match the signed hash. `Loading Kernel Image to 82000000` is `bootm loados` copying the verified payload to Zephyr's link address. The `+` after a key name or hash algorithm is U-Boot's shorthand for a pass. A failed signature check prints `-` instead, and [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) shows one. - -`go`, not `bootm`, prints `## Starting application at 0x82000000 ...`. It is the last line from U-Boot. The program that U-Boot verified a moment earlier prints everything after it, starting with the Zephyr banner. `Secondary CPU core 1 (MPID:0x1) is up` is Zephyr starting the second Cortex-A53 core through TF-A, the firmware you met on the first page. +**Lines to look for:** `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the signature with the `key-a` public key in U-Boot, and `sha256+ OK` is the image hash matching; `+` means pass. `Loading Kernel Image to 82000000` is `bootm loados` copying Zephyr to its link address, and `## Starting application at 0x82000000 ...` is `go`, the last line from U-Boot. Everything after it comes from Zephyr: its banner, `Secondary CPU core 1 (MPID:0x1) is up` when it starts the second core, and `Hello from ZEPHYR IMAGE A`. ## If nothing prints -If the terminal stays empty, the ROM did not load the first-stage file, `tiboot3.bin` on the AM62L EVM. On the AM62L EVM, work down this list: +If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list: -1. Open all four serial ports that **J7** creates; SoC UART0 isn't always the first one. -2. Check the boot switches against the tables, or try the other setting. -3. Check the card layout against TI's FAT16 partition. +1. Try all four serial ports that **J7** creates; the console isn't always the first one. +2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks: BOOTMODE `0x0E43` in the same guide. +3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. 4. Flash TI's unchanged `.wic.xz` to a card and boot it. If it prints nothing either, the cause is the switches, the port, or the power, not your files. 5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $WORK/sdcard.img@@1048576 $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. @@ -227,4 +207,4 @@ If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A ## What you've accomplished and what's next -You built a bootable SD card from the vendor's boot partition and watched U-Boot on real silicon verify the FIT signed with `key-a` and start Zephyr. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves both refusals on the board. After it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a production device needs on top: a fused key, a locked console, and no other boot path. +You built the SD card and watched U-Boot verify the FIT signed with `key-a` and start Zephyr on the board. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves the refusals; after it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a product needs on top. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index c8103f8119..3d129baab2 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -9,9 +9,9 @@ layout: learningpathall ## Prove the refusal, not only the acceptance -On the previous page, U-Boot verified `zephyr-a.itb` and started Zephyr. You've seen the verifier accept; you haven't seen it refuse. This page makes two images it must refuse, one signed with the wrong key and one changed after signing, checks them on the host, and watches U-Boot refuse each one at the serial console. +This page makes two images U-Boot must refuse, one signed with the wrong key and one changed after signing, checks them on the host, and watches U-Boot refuse each one at the serial console. -This page is optional. It reuses the `hello` application, the two key pairs in `$KEYS`, the `mkimage` and `fit_check_sign` tools, the U-Boot you built with `key-a`, and the card image in `$WORK`. The `b` and `t` commands compiled into U-Boot are waiting for the two files this page makes. +This page is optional, and the `b` and `t` commands in your U-Boot are already waiting for its two files. Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. @@ -30,7 +30,7 @@ The replacement text is the same length as the original, so the box stays aligne ## Sign the second image with a key U-Boot doesn't have -`key-b` is the second key pair you created when you [signed the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). It's a valid key, but U-Boot never sees its public half. Copy the FIT source with `sed`, swapping `key-a` for `key-b` and `hello` for `hello_b`, then sign it: +`key-b` is the second key pair you created when you [signed the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). Copy the FIT source with `sed`, swapping `key-a` for `key-b` and `hello` for `hello_b`, then sign it: ```bash sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.its @@ -91,13 +91,11 @@ The output is similar to: If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. -This image proves that U-Boot catches a change made after signing. Expect the signature check to pass and the hash check to fail. `mkimage` signed the configuration node and the `hash-1` node of the image, and the byte you changed is in neither, so the RSA signature still verifies. The payload bytes are covered by `hash-1`, and they no longer match it, so the hash check fails. The signature makes the hash trustworthy, and the hash catches the change. - -All three `.itb` files are the same size, 60198 bytes in this build; only verification tells them apart. +This image proves that U-Boot catches a change made after signing. Expect the signature check to pass and the hash check to fail: the signature covers the configuration and the `hash-1` node, which you didn't touch, and `hash-1` covers the payload bytes, which you changed. ## Check both images on the host -`fit_check_sign` gives the same verdict as U-Boot on the board. Your `Created` time and the `FIT Image at` address differ; the lines that matter are the same. Run it as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), first on the wrong-key image: +Your times, hash values and `FIT Image at` addresses differ from the outputs on this page. Run `fit_check_sign` as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), first on the wrong-key image: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb @@ -115,8 +113,6 @@ Signature check bad (error 1) **Lines to look for:** `sha256,rsa2048:key-b-` followed by `error!`, then `Failed to verify required signature 'key-key-a'`, then `Signature check bad (error 1)`. The exit code is 1. -Two checks fail: the `-` after `key-b` is the missing key, and the `Failed to verify required signature` line is the `required = "conf"` rule. The wrong-key test on the board explains both. - Then check the tampered image: ```bash @@ -170,8 +166,6 @@ Signature check bad (error 1) **Lines to look for:** `sha256,rsa2048:key-a+` on the first line, then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node`, then `Signature check bad (error 1)`. The exit code is 1. -The signature still passes and only the hash fails, as you expected when you made the tampered image. You'll see the same `sha256 error!` and `Bad hash value for 'hash-1'` lines on the board. - ## Add the two images to the card Add the two new FITs to the card image with `mcopy`, at the same `@@1048576` volume offset you used when you [built the card image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), then list the volume: @@ -199,7 +193,7 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -`mdir` shows the FAT short name `ZEPHYR~1.ITB` in front and the long name `zephyr-tampered.itb` at the end of its line; U-Boot's `fatload` finds it by the long name. Six files: the boot files from the previous page and the three FITs. +Six files: the boot files and the three FITs. Write the image to the card again with the same `dd` command as on the previous page, taking the same care with `/dev/sdX`: @@ -229,11 +223,7 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -**Lines to look for:** `sha256,rsa2048:key-b- error!`, then `Failed to verify required signature 'key-key-a'`, and last `*** REFUSED: Zephyr was NOT started ***`, printed by the `echo` in your boot command. No `Loading Kernel Image` line and no Zephyr banner. - -U-Boot reports two separate failures, the same two that `fit_check_sign` reports on the host. The `sha256,rsa2048:key-b- error!` line says U-Boot found a signature naming `key-b` and has no such key; U-Boot doesn't have the public half of `key-b`. The `Failed to verify required signature 'key-key-a'` line is the `required = "conf"` rule you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). It says every configuration must carry a valid signature by `key-a`, and this one doesn't. An image with no signature node at all fails that second check in the same way. `Bad Data Hash` and `ERROR -2: can't get kernel image!` end both refusals on this page and don't say which check failed; the lines before them do. - -Because `bootm start` returns an error, the `&&` chain stops there. `bootm loados` and `go` never run, and the `echo` after the `;` prints the `REFUSED` line. You're back at the U-Boot prompt; image B never ran. +**Lines to look for:** `sha256,rsa2048:key-b- error!` says the FIT is signed with `key-b`, which U-Boot doesn't have; `-` means fail. `Failed to verify required signature 'key-key-a'` is the `required = "conf"` rule, which an unsigned image fails too. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page whichever check failed; the lines above them say which one. `bootm start` failed, so the `&&` chain skipped `go` and the `echo` printed `*** REFUSED: Zephyr was NOT started ***`, with no Zephyr banner. ## Run the tampered test @@ -270,18 +260,14 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -**Lines to look for:** `sha256,rsa2048:key-a+ OK` (the signature passes), then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` (the hash fails), then `*** REFUSED: Zephyr was NOT started ***`. - -This time the signature check passes and the hash check fails, as the FIT diagram in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/) shows. The byte you flipped is in the payload, which the signed `hash-1` node covers, not in the nodes the signature covers. The `Hash value` line is the hash `mkimage` stored, and the bytes U-Boot just read no longer produce it. `bootm start` fails, so `bootm loados` and `go` never run. +**Lines to look for:** `sha256,rsa2048:key-a+ OK` shows the signature passes; `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` show the payload no longer matches the stored `Hash value`; `*** REFUSED: Zephyr was NOT started ***` follows. {{% notice Note %}} If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and write the card again. {{% /notice %}} -To boot the trusted image again, type `run a` at the prompt. The output is the same as on the previous page: the `IMAGE A` banner, then the four lines Zephyr prints after it. +To boot the trusted image again, type `run a`. ## What you've accomplished and what's next -You've watched the three results that make the check credible. `zephyr-a.itb`, signed with the key compiled into U-Boot, verifies and runs. `zephyr-b.itb`, signed with a valid key U-Boot doesn't have, is refused at the signature step. `zephyr-tampered.itb`, signed with the right key and changed afterwards, passes the signature step and is refused at the hash step. In every case a refusal stops the `&&` chain before `go`, so a rejected image never runs. - -Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) separates what these runs proved from what they didn't, and what still stands between this setup and a production device. +U-Boot started the trusted image and stopped the wrong-key image at the signature and the tampered one at the hash, both before `go`. Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) separates what these runs proved from what a product still needs. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index e7d373af73..4dfbd57aaf 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -9,11 +9,7 @@ layout: learningpathall ## What you've proved -The boot in [Prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) proved that Zephyr runs only after `bootm start` has verified the signature and the hash. The `## Starting application at 0x82000000` line came from `go`, which sits behind `&&` and so never runs unless `bootm start` says yes. - -The [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), if you ran it, proved the two refusals: U-Boot rejects an image signed with a key it doesn't have, and it rejects an image changed after signing. - -The three runs give these results: +The boot in [Prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) showed U-Boot verifying the signature and the hash before it started Zephyr, and the optional tests on the [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) showed it refusing the other two images: | Command | Image | What is different | Result | |---|---|---|---| @@ -21,13 +17,11 @@ The three runs give these results: | `run b` | `zephyr-b.itb` | Signed with `key-b`, a key U-Boot doesn't have | Refused: `Failed to verify required signature 'key-key-a'` | | `run t` | `zephyr-tampered.itb` | Signed with `key-a`, one payload byte changed after signing | Refused: `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` | -You did this without changing a line of U-Boot source: the public key went in through `CONFIG_DEVICE_TREE_INCLUDES` and the boot commands through `CONFIG_PREBOOT`, so both carry to a newer U-Boot without a patch. - ## What you haven't proved Each stage checks the next, so the chain is only as trustworthy as the stage that checked U-Boot. -Most Cortex-A SoCs have the two security states you met in [Understand where Zephyr sits in the Cortex-A boot chain](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain/): the production state, with the customer's key in eFuses, and the development state, where any key passes. U-Boot's banner told you this EVM is in the development state, HS-FS in TI's words: `SoC: AM62LX SR1.1 HS-FS`. On the AM62L EVM, TI's development key signs the three boot files, so the ROM and security-firmware checks run but can't refuse anything, and U-Boot enforces only the last link, U-Boot to Zephyr. +Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon. Until the key is fused, the SoC is in its development state: the ROM and the vendor's firmware still check the boot files, but any key passes. Once it is fused, in the production state, they refuse anything not signed with that key. TI calls the two states HS-FS (High Security, Field Securable) and HS-SE (High Security, Security Enforced), and U-Boot's banner showed `SoC: AM62LX SR1.1 HS-FS`. So on the AM62L EVM the checks before U-Boot can't refuse anything, and only the last link, U-Boot to Zephyr, is enforced. The public half of `key-a` lives inside `u-boot.img`, on an unprotected FAT partition, so anyone who can write the card can replace it with one that carries their own key. The root of trust is in a file on the card, not in silicon. @@ -35,11 +29,11 @@ The public half of `key-a` lives inside `u-boot.img`, on an unprotected FAT part ### Fuse your key and move to the production state -On TI devices the procedure is the keywriter, which burns your key into the eFuses and moves the chip to HS-SE, TI's name for the production state; you then re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with that key. From then on the ROM and the security firmware refuse any boot file that isn't signed with your key, U-Boot included, so the `key-a` public half inside it is itself authenticated. The procedure is vendor-specific and out of scope here. +On TI devices the procedure is the keywriter, which burns your key into the eFuses and moves the chip to HS-SE; you then re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with that key. From then on the ROM and the security firmware refuse any boot file that isn't signed with your key, U-Boot included, so the `key-a` public half inside it is itself authenticated. The procedure is vendor-specific and out of scope here. ### Keep the environment built in -`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. The AM62L configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, so `saveenv` has nowhere to write and both variables always come from the binary you built. Keep it that way: a writable environment is a writable boot command. +`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. The AM62L configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, so `saveenv` has nowhere to write and both variables always come from the binary you built. Check your board's `.config` for the same line, and keep it that way: a writable environment is a writable boot command. {{% notice Warning %}} Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the environment in `uboot.env` on the boot media: a saved environment overrides `bootcmd` and `preboot`, so anyone with the card can skip the check. @@ -62,26 +56,22 @@ Any other boot command compiled into U-Boot can be run instead of `zboot`, and n `CONFIG_LEGACY_IMAGE_FORMAT` is already off; keep it off, because that older format carries no signature. Audit the rest and turn off everything your product doesn't use. -### Use real keys and keep them off the build machine - -`sha256,rsa2048` is fine for a demo. The AM62L's own boot chain uses `sha512,rsa4096`. To match it, change `rsa_keygen_bits:2048` to `rsa_keygen_bits:4096` in the `openssl genpkey` command from [Create signing keys and sign the Zephyr image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/), and `algo = "sha256,rsa2048"` to `algo = "sha512,rsa4096"` in `zephyr-a.its` and in the `key.its` carrier; the commands stay the same. Check that `$UBOOT_OUT/.config` has `CONFIG_SHA512=y`: the AM62L configuration turns it on, and another board may need it in the fragment you append. Generate the production key on a hardware security module (HSM), or at least on a machine that isn't the build host. - -### Sign in a release step +### Use real keys and sign in a release step -Running `mkimage -k` on a developer machine is fine for `key-a`. For the production key, signing belongs in the release pipeline, the only place that holds the private key. +`sha256,rsa2048` is fine for a demo; the AM62L's own boot chain uses `sha512,rsa4096`. To match it, generate the keys with `rsa_keygen_bits:4096`, set `algo = "sha512,rsa4096"` in `zephyr-a.its` and `key.its`, and check that `$UBOOT_OUT/.config` has `CONFIG_SHA512=y`, adding it to the `.config` fragment if it doesn't. Generate the production key on a hardware security module (HSM), or at least off the build host, and sign in the release pipeline, the only place that holds the private key. ## Take it to another Cortex-A board -Every board-specific value sits in the first two blocks of `env.sh`, so porting is a checklist: +Every board-specific value sits in the `# Board values` and `# Vendor SDK` blocks of `env.sh`, so porting is a checklist: - `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. - `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It is Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. - `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. - `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC; `mmc list` at the U-Boot prompt shows your board's numbering. -- `UBOOT_DEFCONFIG` is the board's U-Boot configuration. -- `SDK`, `UBOOT_SRC`, `PREBUILT`, `CROSS` and `SYSROOT`, the second block, point at the vendor's SDK: its U-Boot source, early firmware, cross compiler and the compiler's sysroot. +- `UBOOT_DEFCONFIG` is the board's U-Boot configuration. It must enable `CONFIG_FIT`, `CONFIG_FIT_SIGNATURE` and `CONFIG_RSA`: add any that is missing as `CONFIG_=y` to the `.config` fragment in [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), and if the board has `CONFIG_LEGACY_IMAGE_FORMAT=y`, add `# CONFIG_LEGACY_IMAGE_FORMAT is not set` too. +- `SDK`, `UBOOT_SRC`, `PREBUILT`, `CROSS` and `SYSROOT`, the `# Vendor SDK` block, point at the vendor's SDK: its U-Boot source, early firmware, cross compiler and the compiler's sysroot. -Two things sit outside `env.sh`. The `make` line that builds U-Boot takes whatever the vendor's tree expects for its early stages, `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, and the SD card page follows the vendor's card layout, switches and console. +Two things sit outside `env.sh`. The `make` line that builds U-Boot takes whatever the vendor's tree expects for its early stages, `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, and the tree names its own outputs, often `u-boot.img` or `u-boot.itb` plus an SPL file. The SD card page follows the vendor's card layout, switches and console. The last difference is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Boards that take the DTB from a prior stage (`CONFIG_OF_BOARD`) need the `/signature` node in that DTB instead, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same throwaway `key.its` from [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. @@ -89,6 +79,6 @@ Everything else stays the same: the `.its` file, the keys, the `signature.dtsi` ## What you've accomplished -You can now say what your board verifies and what it doesn't, and you have a checklist for a production device. Point `data` in `zephyr-a.its` at your own application's `zephyr.bin`, sign it again with `mkimage`, and watch U-Boot refuse anything else. When you move to your own hardware, change the board block in `env.sh` and keep the rest. +You know what your board verifies, what it doesn't, and what a product needs on top. To use your own application, point `data` in `zephyr-a.its` at its `zephyr.bin` and sign it again; to use your own board, work through the checklist above. Ac6 runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming), on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), and on [AI-assisted embedded development](https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 97e41aee0f..bdbd1f2f07 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -14,7 +14,7 @@ learning_objectives: - Explain what a board in its development state leaves unverified, and what a production device needs on top prerequisites: - - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card, a micro-USB cable for the console, and a USB-C Power Delivery (PD) power supply + - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card and an SD card reader for your host, a micro-USB cable for the console, and a USB-C Power Delivery (PD) power supply - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; the TI SDK ships its installer and cross compiler as x86_64 binaries only - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line From 657adbd7d88f410fdf2b727cee32a6a946dfed2d Mon Sep 17 00:00:00 2001 From: BelachewRachel Date: Thu, 17 Sep 2026 17:10:40 +0300 Subject: [PATCH 10/66] Add Llama ONNX GenAI validated path --- .../2-build-and-run.md | 1 + .../4-compare-runtime-adapters.md | 29 ++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/2-build-and-run.md b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/2-build-and-run.md index 5bb5e25cca..8bfeee4d0c 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/2-build-and-run.md +++ b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/2-build-and-run.md @@ -87,6 +87,7 @@ When you want to try another runtime or workload, return to the following table: | [SmolLM2 360M Instruct](https://huggingface.co/Arm/smollm2-360m-instruct-8da4w-xnnpack-executorch) | ExecuTorch 1.1.0 | Text generation | `smollm2-executorch` | | [BGE Base English v1.5](https://huggingface.co/Arm/bge-base-en-v1.5-int8-litert) | LiteRT 1.4.2 | Text embedding | `bge-base-litert` | | [TinyLlama 1.1B Chat](https://huggingface.co/Arm/tinyllama-1-1b-chat-onnx-genai-int4-kquantlast-emb-int8-vivo-x300) | ONNX Runtime GenAI | Text generation | `tinyllama-onnx-genai` | +| [Llama 3.2 1B Instruct](https://huggingface.co/Arm/llama-3-2-1b-instruct-onnx-genai-int4-kquantlast-emb-int8-vivo-x300) | ONNX Runtime GenAI | Text generation | `llama-3-2-onnx-genai` | The model and runtime change together in these examples, so their results and timings aren't controlled runtime benchmarks. diff --git a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md index e338631573..2cc75a52f1 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md +++ b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md @@ -24,7 +24,7 @@ The downloaded model package isn't an Android executable. Gradle packages the ru ## Choose a text-generation path -The application includes two validated text-generation paths that share the interface and deployment flow. However, each needs an adapter because its runtime API, model format, tokenizer handling, and output contract differ. +The application includes three validated text-generation examples that share the interface and deployment flow. However, each needs an adapter because its runtime API, model format, tokenizer handling, and output contract differ. The following table describes the paths: @@ -32,6 +32,7 @@ The following table describes the paths: | --- | --- | --- | --- | --- | | SmolLM2 with ExecuTorch | `executorch` | `inference/models/smollm2/ExecuTorchTextGenerationAdapter` | `.pte`, configuration, tokenizer, and chat template | The recommended default and smallest validated generation example. | | TinyLlama with ONNX Runtime GenAI | `onnxruntime` | `inference/models/tinyllama/OnnxTextGenerationAdapter` | ONNX model directory, configuration, tokenizer, and chat template | A directory-based GenAI package with an additional Android AAR dependency. | +| Llama 3.2 with ONNX Runtime GenAI | `onnxruntime` | `inference/models/llama32/OnnxTextGenerationAdapter` | ONNX model directory, configuration, tokenizer, and chat template | The same GenAI runtime flow with the Llama 3.2 package. | The repository also contains `inference/models/bge/LiteRtEmbeddingAdapter` for the catalog runtime `litert`. That adapter runs the BGE text-embedding workload and returns vectors rather than generated text, so it is listed separately from the text-generation paths. @@ -53,9 +54,9 @@ This checks compatibility with the adapter and doesn't evaluate the model's lang ### Prepare the ONNX Runtime GenAI path -The TinyLlama example uses `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. First, complete the [ONNX Runtime GenAI Android Learning Path](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/) to build `onnxruntime-genai-release.aar`. +The ONNX Runtime GenAI examples use `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. First, complete the [ONNX Runtime GenAI Android Learning Path](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/) to build `onnxruntime-genai-release.aar`. -Create a separate project and download the complete model directory: +Create a separate project and select one ONNX Runtime GenAI example: {{< tabpane code=true >}} {{< tab header="macOS or Linux" language="bash" >}} @@ -64,9 +65,15 @@ git clone https://github.com/arm-education/ai-portal-android-app-text-to-text.gi ai-portal-android-app-text-to-text-onnx cd ai-portal-android-app-text-to-text-onnx -cp -R adapter-examples/tinyllama-onnx-genai/app/. app/ - +# Choose one validated ONNX Runtime GenAI example. +export ONNX_EXAMPLE="tinyllama-onnx-genai" export MODEL_ID="tinyllama-1-1b-chat-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" +# Or use Llama 3.2 instead: +# export ONNX_EXAMPLE="llama-3-2-onnx-genai" +# export MODEL_ID="llama-3-2-1b-instruct-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" + +cp -R "adapter-examples/$ONNX_EXAMPLE/app/." app/ + export MODEL_DIR="../model-onnx" ../.hf-venv/bin/hf download "Arm/$MODEL_ID" --local-dir "$MODEL_DIR" {{< /tab >}} @@ -76,10 +83,16 @@ git clone https://github.com/arm-education/ai-portal-android-app-text-to-text.gi ai-portal-android-app-text-to-text-onnx Set-Location ai-portal-android-app-text-to-text-onnx -Copy-Item -Path "adapter-examples\tinyllama-onnx-genai\app\*" ` +# Choose one validated ONNX Runtime GenAI example. +$ONNX_EXAMPLE = "tinyllama-onnx-genai" +$MODEL_ID = "tinyllama-1-1b-chat-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" +# Or use Llama 3.2 instead: +# $ONNX_EXAMPLE = "llama-3-2-onnx-genai" +# $MODEL_ID = "llama-3-2-1b-instruct-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" + +Copy-Item -Path "adapter-examples\$ONNX_EXAMPLE\app\*" ` -Destination "app" -Recurse -Force -$MODEL_ID = "tinyllama-1-1b-chat-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" $MODEL_DIR = "..\model-onnx" ..\.hf-venv\Scripts\hf.exe download "Arm/$MODEL_ID" --local-dir $MODEL_DIR {{< /tab >}} @@ -89,7 +102,7 @@ Copy the generated AAR to `app/libs/onnxruntime-genai-release.aar` before contin ## Build and run the selected alternative -The ONNX Runtime GenAI alternative now follows the same workflow: build the APK, install the APK, copy the chosen model package to the directory named by its catalog ID, and start the application. +The selected ONNX Runtime GenAI alternative now follows the same workflow: build the APK, install the APK, copy the chosen model package to the directory named by its catalog ID, and start the application. Continue in the same terminal so that `MODEL_ID` and `MODEL_DIR` remain set: From b3e49095d5e167194e31ecf3e81c9c87718cb8ad Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Thu, 17 Sep 2026 23:40:39 +0300 Subject: [PATCH 11/66] Add a QEMU option beside the AM62L EVM The Learning Path needed a board. It now runs on the TI AM62L EVM or in QEMU, as one generic story with tabs where the two targets differ. - page 1 gains a comparison table and tabs the target-specific chain - page 2 writes env-am62l.sh or env-qemu.sh and takes the U-Boot source from the TI SDK or from the U-Boot project - pages 4 and 5 use UBOOT_CC, and page 5 tabs how the key reaches the control device tree: CONFIG_DEVICE_TREE_INCLUDES on the EVM, a dumped QEMU device tree merged with signature.dtsi and passed with EXT_DTB - 6-boot-the-board.md becomes 6-boot-the-target.md, "Boot the target": the vendor card image or a 64 MiB disk image, the board or QEMU - page 7 uses BOOT_IMG, so its commands are identical on both targets - the Add Application screenshot gains a QEMU call-out Page 8 drops the "what you've proved" framing: a Summary section says what U-Boot checks with key-a and what the stages below it accept, the boot-path audit table is gone, and the closing section says what to change next instead of listing courses. The FIT signature diagram loses its failure-modes box, which repeated messages the test page already shows. The QEMU track was run end to end with unpatched U-Boot 2025.07: trusted boot, wrong-key refusal and tampered-image refusal. --- .../1-boot-chain.md | 42 +++++- .../2-set-up-tools.md | 117 ++++++++++++----- .../3-build-zephyr.md | 20 +-- .../4-sign-zephyr.md | 22 ++-- .../5-build-uboot.md | 100 +++++++++++--- ...boot-the-board.md => 6-boot-the-target.md} | 122 +++++++++++++----- .../7-test-the-checks.md | 34 +++-- .../8-production.md | 50 ++----- .../_index.md | 19 ++- .../images/fit-signature.svg | 8 +- .../images/wz-add-application.webp | Bin 85360 -> 89608 bytes 11 files changed, 365 insertions(+), 169 deletions(-) rename content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/{6-boot-the-board.md => 6-boot-the-target.md} (53%) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index f4dfb2f8cd..7100354390 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -1,6 +1,6 @@ --- title: Understand where Zephyr sits in the Cortex-A boot chain -description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how a Cortex-A boot chain hands control to it, with the TI AM62L EVM as the example. +description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how a Cortex-A boot chain hands control to it, on a TI AM62L EVM or in QEMU. weight: 2 ### FIXED, DO NOT MODIFY @@ -13,7 +13,7 @@ On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a boo U-Boot checks images packed with their signature into a FIT (Flattened Image Tree). Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers Zephyr signed on a Cortex-A. -Everything except the board setup works on any Cortex-A board that runs U-Boot. The example board is the TI AM62L EVM (evaluation module); its SDK, SD card layout and boot switches sit in marked sections. +Everything except the target setup works on any Cortex-A board that runs U-Boot. You can follow this Learning Path on a TI AM62L EVM (evaluation module) or, with no hardware at all, in QEMU; the next section compares them, and the few steps that differ are in tabs. ## The boot chain on a Cortex-A board @@ -23,11 +23,39 @@ The early firmware is usually the SPL (Secondary Program Loader), a small U-Boot ![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. A grey bracket over the early boot stages and U-Boot says the silicon vendor's ROM and firmware check them, against your fused key or, before fusing, with any key passing. A blue bracket over Zephyr says U-Boot checks it with your key, the link this Learning Path adds. Under each checked box the diagram names who checks it: the ROM, the firmware, and U-Boot, which then starts Zephyr with go.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") -### The same chain on the AM62L EVM +## Choose your target +Pick one target now. Every page is written for both, and marks the few steps that differ. + +| | AM62L EVM | QEMU | +|---|---|---| +| Hardware | The board, a micro-SD card and reader, a micro-USB cable, a USB-C PD supply | None | +| Download | TI Processor SDK, 4.5 GB, unpacks to 11 GB | U-Boot source, 32 MB | +| Stages before U-Boot | Boot ROM, `tiboot3.bin`, `tispl.bin` | None: QEMU starts `u-boot.bin` directly | +| Zephyr board | `am62l_evm/am62l3/a53` | `qemu_cortex_a53` | +| Boot media | FAT partition on a micro-SD card, `mmc 1:1` | FAT partition in a 64 MiB disk image, `virtio 0:1` | +| Console | USB serial at 115200 baud | The terminal you start QEMU in | + +QEMU proves the link this Learning Path adds, and nothing underneath it: it has no boot ROM, no vendor firmware and no eFuses, and `u-boot.bin` is handed to the machine on the command line, so nothing authenticates U-Boot itself. + +### The same chain on your target + +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships as HS-FS, TI's name for the development state described below. -![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") +![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg "The same chain on the AM62L, with TI's file names") + {{< /tab >}} + {{< tab header="QEMU" >}} +QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: + +```text +QEMU -bios u-boot.bin -> U-Boot -> Zephyr inside a FIT image +``` + +The U-Boot code that checks the FIT is the same code the board runs. What is missing is everything below it: nothing checks U-Boot itself. + {{< /tab >}} +{{< /tabpane-normal >}} ## What a FIT image is @@ -39,7 +67,7 @@ One FIT holds three things: - A hash of that image, so U-Boot can tell if a byte changed - A configuration that names the image to use (`kernel = "kernel-1"`) and carries a signature -`mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the board, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. +`mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the target, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. @@ -53,8 +81,8 @@ The signature does not cover the image bytes: it covers the configuration node p This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. -This Learning Path doesn't fuse your key into the chip, so the SoC stays in its development state, where the ROM and the vendor's firmware accept boot files signed with any key; U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. +This Learning Path doesn't fuse your key into the chip, so the SoC stays in its development state, where the ROM and the vendor's firmware accept boot files signed with any key; in QEMU there is no key to fuse and nothing checks U-Boot at all. U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. ## What you've learned and what's next -Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it, and `required = "conf"` makes U-Boot refuse any FIT it can't verify. Next, you [set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). +Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it, and `required = "conf"` makes U-Boot refuse any FIT it can't verify. Next, you [set up the host tools for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 13362df03a..6df11ce0c6 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -1,6 +1,6 @@ --- -title: Set up the host tools and the board's SDK -description: Install the Ubuntu packages, get the board's U-Boot source, early firmware and cross compiler from the vendor SDK, download the vendor's SD card image, and create the environment file that every later page of this Learning Path loads. +title: Set up the host tools for your target +description: Install the Ubuntu packages, get the U-Boot source and cross compiler for your target, from the vendor SDK for the AM62L EVM or from the U-Boot project for QEMU, and create the environment file that every later page of this Learning Path loads. weight: 3 ### FIXED, DO NOT MODIFY @@ -9,7 +9,7 @@ layout: learningpathall ## What you need -From your board vendor you need three things: the U-Boot source tree for the board, the prebuilt firmware that runs before U-Boot, and the cross compiler that builds U-Boot. On the example board, the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM), all three come in one installer, the TI Processor SDK. +Whichever target you chose, you need a U-Boot source tree that supports it and a cross compiler that builds U-Boot. On the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) you also need the prebuilt firmware that runs before U-Boot, and all three come in one installer, the TI Processor SDK. For QEMU, the U-Boot release and two Ubuntu packages are everything. You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open-source [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps; you add a Cortex-A toolchain and workspace when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). @@ -18,26 +18,32 @@ You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open- U-Boot's build and the signing tools need a few packages beyond a normal Zephyr setup. Install them in one command: ```bash -sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools xz-utils curl picocom +sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools dosfstools xz-utils curl picocom ``` -## Create the working directory and environment file +If you chose QEMU, add the emulator and a cross compiler; the AM62L EVM gets both from the TI SDK instead: -Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. +```bash +sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu +``` + +## Create the working directory and environment file -Create the directory and write the environment file: +Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. Write the file for your target, then load it and create the directories the later pages write into: +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} ```bash mkdir -p $HOME/zephyr-secure-boot -cat > $HOME/zephyr-secure-boot/env.sh <<'EOF' +cat > $HOME/zephyr-secure-boot/env-am62l.sh <<'EOF' export WORK=$HOME/zephyr-secure-boot -# Board values +# Target values export BOARD=am62l_evm/am62l3/a53 # Zephyr board identifier export ZEPHYR_ADDR=0x82000000 # Zephyr link address, FIT load and go target export FIT_ADDR=0x90000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR export BOOT_DEV="mmc 1:1" # U-Boot device and partition that hold the files -export UBOOT_DEFCONFIG=am62lx_evm_defconfig # the board's U-Boot configuration +export UBOOT_DEFCONFIG=am62lx_evm_defconfig # the target's U-Boot configuration # Vendor SDK: U-Boot source, firmware that runs before U-Boot, cross compiler and its libraries export SDK=$WORK/tisdk @@ -45,44 +51,67 @@ export UBOOT_SRC=$SDK/board-support/ti-u-boot-2026.01+git export PREBUILT=$SDK/board-support/prebuilt-images/am62lxx-evm export CROSS=$SDK/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux- export SYSROOT=$SDK/linux-devkit/sysroots/aarch64-oe-linux +export UBOOT_CC="${CROSS}gcc --sysroot=$SYSROOT" -# Your build outputs: U-Boot build, signing keys, signed FITs +# Your build outputs: U-Boot build, signing keys, signed FITs, and the boot volume export UBOOT_OUT=$WORK/uboot-build export KEYS=$WORK/keys export FIT=$WORK/fit +export BOOT_IMG=$WORK/sdcard.img@@1048576 EOF +source $HOME/zephyr-secure-boot/env-am62l.sh +mkdir -p $KEYS $FIT ``` + {{< /tab >}} + {{< tab header="QEMU" >}} +```bash +mkdir -p $HOME/zephyr-secure-boot +cat > $HOME/zephyr-secure-boot/env-qemu.sh <<'EOF' +export WORK=$HOME/zephyr-secure-boot -Load the file and create the directories the later pages write into: +# Target values +export BOARD=qemu_cortex_a53 # Zephyr board identifier +export ZEPHYR_ADDR=0x40000000 # Zephyr link address, FIT load and go target +export FIT_ADDR=0x48000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR +export BOOT_DEV="virtio 0:1" # U-Boot device and partition that hold the files +export UBOOT_DEFCONFIG=qemu_arm64_defconfig # the target's U-Boot configuration -```bash -source $HOME/zephyr-secure-boot/env.sh +# No vendor SDK: U-Boot from the U-Boot project, cross compiler from Ubuntu +export UBOOT_SRC=$WORK/u-boot-2025.07 +export CROSS=aarch64-linux-gnu- +export UBOOT_CC="${CROSS}gcc" + +# Your build outputs: U-Boot build, signing keys, signed FITs, and the boot volume +export UBOOT_OUT=$WORK/uboot-build +export KEYS=$WORK/keys +export FIT=$WORK/fit +export BOOT_IMG=$WORK/disk.img@@1048576 +EOF +source $HOME/zephyr-secure-boot/env-qemu.sh mkdir -p $KEYS $FIT ``` + {{< /tab >}} +{{< /tabpane-normal >}} -Only the `# Board values` and `# Vendor SDK` blocks depend on the board; for another board, change those and leave the rest of the file as it is. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) says where each value comes from. The variables live only in the shell that loaded them, so every later page starts with `source $HOME/zephyr-secure-boot/env.sh`. - -## Install the vendor SDK +Only the `# Target values` block and the paths under it depend on the target; for another board, copy `env-am62l.sh`, change those, and leave the rest as it is. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) says where each value comes from. The variables live only in the shell that loaded them, so every later page starts by loading your file again. -Any vendor's SDK or BSP (board support package) has to give you the three pieces named above; point `UBOOT_SRC`, `PREBUILT`, `CROSS` and `SYSROOT` at them. +## Get the U-Boot source and the cross compiler -### Install the TI Processor SDK for the AM62L EVM - -On the AM62L EVM, the three pieces come from the TI Processor SDK Linux for AM62Lx; you use nothing from Linux itself. The installer is 4.5 GB and unpacks to 11 GB. Download it from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} +The U-Boot source, the firmware that runs before U-Boot and the cross compiler all come from the TI Processor SDK Linux for AM62Lx; you use nothing from Linux itself. The installer is 4.5 GB and unpacks to 11 GB. Download it from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): ```bash curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin ``` -Make it executable and run it without the graphical wizard: +Make it executable and run it without the graphical wizard. `--mode unattended` accepts every default, and `--prefix` installs into `$SDK` without root: ```bash chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $SDK ``` -`--mode unattended` accepts every default, and `--prefix` installs into `$SDK` without root. - Check that the three paths exist and the compiler runs: ```bash @@ -100,22 +129,46 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 ... ``` -## Download the vendor's SD card image +The boot ROM only accepts a card laid out the way it expects, so you start from TI's own SD card image and replace the files inside. Download it; it is about 1.3 GB and stays compressed, because the boot page reads the part it needs straight out of `xz`: -The vendor's own SD card image has a layout the boot ROM is known to accept, so this Learning Path uses it as a template. For another board, download your vendor's image instead of the file below. +```bash +curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz +``` + {{< /tab >}} + {{< tab header="QEMU" >}} +There is no vendor SDK. Download the U-Boot release from the U-Boot project and unpack it into your working directory; the archive is about 32 MB: -### Download TI's card image for the AM62L EVM +```bash +curl -L -o $WORK/u-boot-2025.07.tar.bz2 https://ftp.denx.de/pub/u-boot/u-boot-2025.07.tar.bz2 +tar -xf $WORK/u-boot-2025.07.tar.bz2 -C $WORK +ls -d $UBOOT_SRC +``` -On the AM62L EVM, the image is TI's `.wic.xz` file. You don't boot Linux from it: you keep its first partition and replace the files inside. +The expected output is: -Download it into the working directory: +```output +/home/user/zephyr-secure-boot/u-boot-2025.07 +``` + +The source stays unpatched: the key and the boot command are configuration. Check that the compiler you installed above runs: ```bash -curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz +${CROSS}gcc --version +``` + +The output is similar to: + +```output +aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 +... ``` -The compressed file is about 1.3 GB. Leave it compressed: the SD card page reads the part it needs straight out of `xz`. +`qemu-system-aarch64 --version` prints the emulator's version; this Learning Path uses only long-standing QEMU options, so any recent version works. + +There is no card image to download: you build a 64 MiB disk image from nothing when you [boot the target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/). + {{< /tab >}} +{{< /tabpane-normal >}} ## What you've accomplished and what's next -Your host has the build packages, the board's SDK, the vendor's card image, and `env.sh` with every path. Next, you [build a small Zephyr application for the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +Your host has the build packages, the U-Boot source for your target, its cross compiler, and an environment file with every path. Next, you [build a small Zephyr application for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 2eeca8893f..0a4ad333f6 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/) in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for a Cortex-A board: an AArch64 toolchain, and a Zephyr 4.4 workspace built from your board vendor's template, Texas Instruments here. +You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/) in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for Cortex-A: an AArch64 toolchain, and a Zephyr 4.4 workspace. The steps are the same for both targets; only the board you pick differs. Open VS Code on your working directory: @@ -43,11 +43,11 @@ Select **Import**. The download takes a few minutes. When it finishes, the **Too ## Add a West workspace -The workspace needs a Zephyr release that supports your board. Board support for the AM62L EVM entered Zephyr in version 4.4, so this example uses 4.4.2. Select **Add West Workspace** and fill in the form: +The workspace needs a Zephyr release that supports your board. Board support for the AM62L EVM entered Zephyr in version 4.4, so this Learning Path uses 4.4.2; `qemu_cortex_a53` has been in Zephyr for years, and the same workspace builds it. Select **Add West Workspace** and fill in the form: - **Source location**: **From template** - **Minimal**, not **Full**, under the **Path** field -- **Template**: your board vendor's, **Texas Instruments** for the AM62L EVM +- **Template**: your board vendor's, **Texas Instruments** here; it works for QEMU too, because the template is upstream Zephyr plus the vendor's HAL - **Revision**: v4.4.2, or a later 4.x release - **Location**: `/home/user/zephyr-secure-boot` - **Subfolder**: `zephyrproject` @@ -63,16 +63,16 @@ Select **Add Application** and fill in the wizard: - **Select West Workspace**: `zephyrproject` - **Select Toolchain**: `zephyr-sdk-1.0.1` - **SDK Variant**: **GNU GCC** -- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)** +- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)**, or type `qemu` and select **QEMU Emulation for ARM Cortex-A53** - **New or existing application?**: **Create new application** - **Select template**: `hello_world`, under `deps/zephyr/samples/hello_world` - **Project Name**: `hello` - **Application type**: **West workspace application** - **Project Location**: `zephyrproject/applications/hello`, filled in by the wizard -The board's Zephyr identifier, `am62l_evm/am62l3/a53`, is the `BOARD` value in `env.sh`; on another board, select the entry that matches your `BOARD`. +The identifier under the board name, `am62l_evm/am62l3/a53` or `qemu_cortex_a53`, is the `BOARD` value in your environment file; on another board, select the entry that matches your `BOARD`. -![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM") +![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button. A call-out beside the board field says to select QEMU Emulation for ARM Cortex-A53 instead if you follow the QEMU option.#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM; the call-out gives the QEMU board") Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. @@ -123,7 +123,7 @@ Save both files. `CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The header's first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot only needs that branch at offset 0: without the header, `go` jumps into whatever the linker placed there. -The board configuration for `am62l_evm/am62l3/a53` already sets both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. +The configurations for `am62l_evm/am62l3/a53` and `qemu_cortex_a53` already set both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. ## Build the application @@ -138,11 +138,11 @@ Memory region Used Size Region Size %age Used ![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") -The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary of about 58 KB linked at `ZEPHYR_ADDR`, the start of the board's `zephyr,sram` memory node. +The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. It is about 58 KB for the AM62L EVM and about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM instead of 2016 MB. ## Check the arm64 image header -Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment with `source $HOME/zephyr-secure-boot/env.sh`, and print the header's magic number at offset `0x38`: +Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment for your target with `source $HOME/zephyr-secure-boot/env-am62l.sh` or `source $HOME/zephyr-secure-boot/env-qemu.sh`, and print the header's magic number at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -158,4 +158,4 @@ The expected output is: ## What you've accomplished and what's next -You've built a Zephyr image for the AM62L's Cortex-A53, linked at `ZEPHYR_ADDR` and carrying the arm64 header that `go` needs. Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). +You've built a Zephyr image for your target's Cortex-A53, linked at `ZEPHYR_ADDR` and carrying the arm64 header that `go` needs. Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index e1d50346bc..2d96bb794f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -1,6 +1,6 @@ --- title: Create signing keys and sign the Zephyr image into a FIT -description: Build mkimage from the board's U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image that U-Boot can verify. +description: Build mkimage from your target's U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image that U-Boot can verify. weight: 5 ### FIXED, DO NOT MODIFY @@ -9,22 +9,22 @@ layout: learningpathall ## Build U-Boot's host tools first -Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. -`mkimage` builds and signs a FIT image. `fit_check_sign` verifies a signed FIT on the host. Both come from the same U-Boot tree as the board's U-Boot, so signer and verifier match. +`mkimage` builds and signs a FIT image. `fit_check_sign` verifies a signed FIT on the host. Both come from the same U-Boot tree as your target's U-Boot, so signer and verifier match. -The `tools` target needs the board's `.config` first, so run the defconfig target named by `UBOOT_DEFCONFIG` in `env.sh`: +The `tools` target needs the target's `.config` first, so run the defconfig target named by `UBOOT_DEFCONFIG` in your environment file: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" $UBOOT_DEFCONFIG +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -`CC="${CROSS}gcc --sysroot=$SYSROOT"` gives the SDK's compiler the library path `SYSROOT` from `env.sh`; on the AM62L SDK the U-Boot link fails without it. Keep it on every `make` line, including the three on the next page. +`UBOOT_CC` is the compiler command from your environment file. On the AM62L it carries `--sysroot`, the SDK's library path, without which the U-Boot link fails; in QEMU it is the plain cross compiler. Keep `CC="$UBOOT_CC"` on every `make` line, including the ones on the next page. Then build the host tools: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" tools +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" tools ``` Both tools land in `$UBOOT_OUT/tools/`. Check that `mkimage` runs: @@ -39,8 +39,10 @@ The output is similar to: mkimage version 2026.01-g5fb294342321 ``` +The version string names the U-Boot tree you built from; in QEMU it reads `mkimage version 2025.07`. + {{% notice Note %}} -If the `tools` build stops at `pylibfdt`, `swig` or `gnutls/gnutls.h`, a package is missing: run the `apt install` command from [Set up the host tools and the board's SDK](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/) again, then the `tools` step. +If the `tools` build stops at `pylibfdt`, `swig` or `gnutls/gnutls.h`, a package is missing: run the `apt install` command from [Set up the host tools for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/) again, then the `tools` step. {{% /notice %}} ## Create two signing keys @@ -151,7 +153,9 @@ Created: Fri Sep 11 19:14:00 2026 Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-a.itb', node '/configurations/conf-1/signature-1' ``` -**Lines to look for:** `Sign algo: sha256,rsa2048:key-a` and the last line, `Signature written to ... node '/configurations/conf-1/signature-1'`, say that `mkimage` found `key-a` in `$KEYS` and wrote its signature into `conf-1`. `Hash value` is the SHA-256 of `zephyr.bin`, which U-Boot recomputes on the board. +**Lines to look for:** `Sign algo: sha256,rsa2048:key-a` and the last line, `Signature written to ... node '/configurations/conf-1/signature-1'`, say that `mkimage` found `key-a` in `$KEYS` and wrote its signature into `conf-1`. `Hash value` is the SHA-256 of `zephyr.bin`, which U-Boot recomputes on the target. + +In QEMU the listing shows the QEMU values instead: `Data Size: 37040 Bytes` and `Load Address: 0x40000000`. Don't use the `mkimage -K` option here: the public key goes into U-Boot's own device tree at build time, on the next page. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index ee4bbf3740..048a07b375 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -9,9 +9,9 @@ layout: learningpathall ## Check that U-Boot can verify signatures -Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. -The board's defconfig must turn on the verifier, and the AM62L one does. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: +The target's defconfig must turn on the verifier, and both of these do. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: ```bash grep -E '^CONFIG_(FIT|FIT_SIGNATURE|RSA|OF_SEPARATE)=|LEGACY_IMAGE_FORMAT' $UBOOT_OUT/.config @@ -29,6 +29,8 @@ CONFIG_RSA=y `CONFIG_FIT_SIGNATURE` and `CONFIG_RSA` are the verifier, `CONFIG_OF_SEPARATE` builds the control DTB from source so you can add a node to it, and legacy images, which carry no signature, are off. Only the key and the boot command are missing, and both are build configuration, so the U-Boot source stays untouched. +In QEMU one line differs: `qemu_arm64_defconfig` prints `CONFIG_LEGACY_IMAGE_FORMAT=y`, leaving that unsigned format on. The QEMU tab of the fragment below turns it off. + ## Generate the key node `mkimage` only writes a public key while it signs something, so you sign a throwaway FIT into an empty scratch DTB and turn that DTB back into source. Create the empty DTB and a tiny payload in `$WORK`: @@ -90,7 +92,7 @@ The expected output is: key-name-hint = "key-a"; ``` -`key-b` must not appear: U-Boot never gets its public half. The build includes this file through `CONFIG_DEVICE_TREE_INCLUDES`, because writing the key into `u-boot.dtb` with `mkimage -K` doesn't last: every `make` rebuilds that DTB from source. +`key-b` must not appear: U-Boot never gets its public half. The build compiles this file into U-Boot's control device tree, which is why `mkimage -K` is not used here: it writes the key into a finished `u-boot.dtb`, and the next `make` rebuilds that file without it. ## Write a boot command that fails closed @@ -100,7 +102,7 @@ Zephyr's board documentation usually gives a one-line U-Boot command to start Ze => fatload mmc 1:1 0x82000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x82000000 ``` -Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, with the AM62L values from `env.sh` filled in, the chain is: +Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, with the AM62L values from the environment file filled in, the chain is: ```text fatload mmc 1:1 0x90000000 ${fit} && @@ -113,7 +115,7 @@ echo "*** REFUSED: Zephyr was NOT started ***" Each piece has one job: -- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. On the AM62L EVM, `mmc 1:1` is partition 1 of the SD card (`mmc 0` is the eMMC). `FIT_ADDR` is clear of `ZEPHYR_ADDR`, so `loados` can't copy Zephyr over the FIT it is reading. +- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. On the AM62L EVM, `mmc 1:1` is partition 1 of the SD card (`mmc 0` is the eMMC); in QEMU the same chain reads `virtio 0:1`, the FAT partition of the disk image, at `0x48000000` and `0x40000000`. `FIT_ADDR` is clear of `ZEPHYR_ADDR`, so `loados` can't copy Zephyr over the FIT it is reading. - `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. - `bootm loados` copies the verified payload to its `load` address, `ZEPHYR_ADDR`. - The four cache commands flush and turn off the caches, and on arm64 `dcache off` also turns the MMU off, the state Zephyr expects at entry. @@ -139,14 +141,13 @@ The commands are compiled into U-Boot rather than stored on the card, where anyo Reset to the board's defconfig so the fragment lands on a known `.config`: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" $UBOOT_DEFCONFIG +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -Append the fragment to `.config`. The heredoc is unquoted, so `$WORK` and the board values `$BOOT_DEV`, `$FIT_ADDR` and `$ZEPHYR_ADDR` expand; `\${fit}` keeps `${fit}` in the file for U-Boot to expand at run time: +Append the fragment to `.config`. The heredoc is unquoted, so the target values `$BOOT_DEV`, `$FIT_ADDR` and `$ZEPHYR_ADDR` expand; `\${fit}` keeps `${fit}` in the file for U-Boot to expand at run time: ```bash cat >> $UBOOT_OUT/.config <}} + {{< tab header="AM62L EVM" >}} +TI's tree builds its control device tree from source at every `make`, so one line is enough. `CONFIG_DEVICE_TREE_INCLUDES` is the list of extra `.dtsi` files the build compiles into that tree: + +```bash +cat >> $UBOOT_OUT/.config <}} + {{< tab header="QEMU" >}} +QEMU hands U-Boot a device tree at run time, so `qemu_arm64_defconfig` builds none of its own and `CONFIG_DEVICE_TREE_INCLUDES` would have nothing to add to. Instead you build the control device tree yourself in the next step and pass it to the build. These lines turn that on, and close two gaps the AM62L defconfig doesn't have: + +```bash +cat >> $UBOOT_OUT/.config <<'EOF' +CONFIG_OF_SEPARATE=y +# CONFIG_OF_BOARD is not set +# CONFIG_OF_OMIT_DTB is not set +# CONFIG_LEGACY_IMAGE_FORMAT is not set +CONFIG_CMD_CACHE=y +# CONFIG_ENV_IS_IN_FLASH is not set +CONFIG_ENV_IS_NOWHERE=y +EOF +``` + +`CONFIG_OF_BOARD` and `CONFIG_OF_OMIT_DTB` off make U-Boot carry a control device tree of its own, the one your key goes into. `CONFIG_LEGACY_IMAGE_FORMAT` off closes the older image format, which carries no signature. `CONFIG_CMD_CACHE` adds the `dcache` and `icache` commands the boot command uses, and `CONFIG_ENV_IS_NOWHERE` keeps the environment out of flash, so nothing saved at the prompt can replace your boot command. + {{< /tab >}} +{{< /tabpane-normal >}} Let Kconfig resolve the fragment: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" olddefconfig +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" olddefconfig ``` The output is similar to: @@ -173,14 +205,16 @@ The output is similar to: .config:2360:warning: override: reassigning to symbol BOOTDELAY ``` -The five warnings are expected: your lines replace values the defconfig already set. +The warnings are expected: your lines replace values the defconfig already set. In QEMU there are a few more, one for each extra line in the target block. -### Build for the AM62L EVM +### Build U-Boot +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} TI's U-Boot tree packs the early stages itself, with binman, U-Boot's image packaging tool. Point `BL1`, `BL31` and `TEE` at the prebuilt TF-A and OP-TEE, and `BINMAN_INDIRS` at the directory that holds TI's system firmware, all from the SDK: ```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="${CROSS}gcc --sysroot=$SYSROOT" -j$(nproc) \ +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ BL1=$PREBUILT/bl1.bin BL31=$PREBUILT/bl31.bin TEE=$PREBUILT/bl32.bin BINMAN_INDIRS=$PREBUILT ``` @@ -190,11 +224,43 @@ The build takes a few minutes. Check the three boot files: ls -l $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img ``` -The sizes are about 0.2 MB, 1.5 MB and 1.4 MB. +The sizes are about 0.2 MB, 1.5 MB and 1.4 MB, and the control device tree lands beside them as `u-boot.dtb`. + {{< /tab >}} + {{< tab header="QEMU" >}} +First get the device tree QEMU builds for the machine you boot later, so U-Boot's drivers, console and memory sizing match it. QEMU writes the file and exits: + +```bash +qemu-system-aarch64 -machine virt,gic-version=3,dumpdtb=$WORK/qemu-virt.dtb -cpu cortex-a53 -m 1G -nographic +``` + +Add your key node to it. `dtc` merges repeated root nodes, so decompiling that tree, appending `signature.dtsi` and compiling the two together gives the same tree with `/signature` added: + +```bash +dtc -I dtb -O dts -q $WORK/qemu-virt.dtb > $WORK/uboot-control.dts +cat $WORK/signature.dtsi >> $WORK/uboot-control.dts +dtc -I dts -O dtb -q -o $WORK/uboot-control.dtb $WORK/uboot-control.dts +``` + +Build U-Boot with that file as its control device tree. `EXT_DTB` is the make variable that hands it over, and the two targets are named explicitly because U-Boot's `scripts/check-of.sh` refuses the default `all` target on a machine that normally takes its device tree from a prior stage: + +```bash +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ + EXT_DTB=$WORK/uboot-control.dtb u-boot.bin u-boot.dtb +``` + +The build takes a couple of minutes. Check the two files: + +```bash +ls -l $UBOOT_OUT/u-boot.bin $UBOOT_OUT/u-boot.dtb +``` + +`u-boot.bin` is about 1.4 MB and ends with the bytes of `u-boot.dtb`, the control device tree with your key inside. + {{< /tab >}} +{{< /tabpane-normal >}} ## Check the key is inside U-Boot -Decompile `$UBOOT_OUT/u-boot.dtb`, the control DTB that went into `u-boot.img`, and print its `/signature` node: +Decompile `$UBOOT_OUT/u-boot.dtb`, the control device tree that went into U-Boot, and print its `/signature` node: ```bash dtc -I dtb -O dts -q $UBOOT_OUT/u-boot.dtb | sed -n '/signature {/,/^\t};/p' @@ -219,7 +285,7 @@ With the long values shortened, the output is similar to: The `rsa,` properties are the public half of `key-a`, and `required = "conf"` is the rule U-Boot enforces with it. -Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the board's. `-f` names the FIT and `-k` the DTB that holds the keys: +Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the target's. `-f` names the FIT and `-k` the DTB that holds the keys: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -279,4 +345,4 @@ The lines in between are the tool walking the FIT the way `bootm` does; the two ## What you've accomplished and what's next -You built U-Boot with `key-a`'s public half and a boot command that starts Zephyr only after `bootm` verifies it, and `fit_check_sign` confirmed on the host that the trusted FIT passes. Next, you [put the boot files and the trusted FIT on an SD card](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) and boot the board. +You built U-Boot with `key-a`'s public half and a boot command that starts Zephyr only after `bootm` verifies it, and `fit_check_sign` confirmed on the host that the trusted FIT passes. Next, you [put the boot files and the trusted FIT on the boot media](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/) and boot the target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md similarity index 53% rename from content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md rename to content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index 9973d438bb..57f7d91680 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -1,21 +1,23 @@ --- -title: Prepare the SD card and boot the board -description: Build a bootable SD card image with mtools, set the AM62L EVM boot switches, and watch U-Boot verify the signed Zephyr image and start it on the board. +title: Boot the target +description: Build the boot media for your target, start the board or QEMU, and watch U-Boot verify the signed Zephyr image before it starts it. weight: 7 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Why you start from the vendor's card image +## What your target boots from -Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. -Some boot ROMs look for the first-stage file by name on a FAT partition, as the AM62L's does; others read it from a fixed offset on the card. That is why you start from the vendor's own card image. On every board, U-Boot's `fatload` then reads `zephyr-a.itb` from the partition in `BOOT_DEV`. +Some boot ROMs look for the first-stage file by name on a FAT partition, as the AM62L's does; others read it from a fixed offset on the card. That is why you start from the vendor's own card image on a board. QEMU has no boot ROM: it takes `u-boot.bin` on the command line, so its disk carries nothing but the FIT. On both, U-Boot's `fatload` then reads `zephyr-a.itb` from the partition in `BOOT_DEV`. -## Build the SD card image from the vendor's boot partition +## Build the boot media -On the AM62L EVM, the boot ROM reads `tiboot3.bin` from the card's first FAT partition and is picky about its format: TI's FAT16 partition boots, while a FAT32 one with 512-byte clusters leaves the console empty. Keep TI's partition byte for byte and replace only the files; it starts at sector 2048 and is 262144 sectors long, which is where the numbers in the next command come from. +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} +The boot ROM reads `tiboot3.bin` from the card's first FAT partition and is picky about its format: TI's FAT16 partition boots, while a FAT32 one with 512-byte clusters leaves the console empty. Keep TI's partition byte for byte and replace only the files; it starts at sector 2048 and is 262144 sectors long, which is where the numbers in the next command come from. Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: @@ -36,20 +38,14 @@ The partition table has been altered. Syncing disks. ``` -Replace TI's Linux files in the FAT volume with yours using `mtools`. The `@@1048576` suffix tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: +Replace TI's Linux files in the FAT volume with yours using `mtools`. `BOOT_IMG` from your environment file is the image plus the `@@1048576` suffix, which tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: ```bash -M=$WORK/sdcard.img@@1048576 -mdeltree -i $M ::EFI -mdel -i $M ::Image ::uEnv.txt -mcopy -o -i $M $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img :: -mcopy -o -i $M $FIT/zephyr-a.itb :: -``` - -List the volume to check the result: - -```bash -mdir -i $M :: +mdeltree -i $BOOT_IMG ::EFI +mdel -i $BOOT_IMG ::Image ::uEnv.txt +mcopy -o -i $BOOT_IMG $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img :: +mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: +mdir -i $BOOT_IMG :: ``` The output is similar to: @@ -68,26 +64,54 @@ zephyr-a itb 60198 2026-09-15 16:49 ``` Four files: the three boot stages you built and the FIT you signed. + {{< /tab >}} + {{< tab header="QEMU" >}} +There is no boot ROM to satisfy and no vendor image to copy, so you build the disk from nothing. Create a 64 MiB file, give it one MBR partition of type `0x0e` (FAT16 with LBA addressing) starting at sector 2048, and format that partition. None of it needs root: -## Write the card +```bash +truncate -s 64M $WORK/disk.img +printf 'label: dos\nstart=2048, size=129024, type=e\n' | sfdisk $WORK/disk.img +mkfs.vfat --offset 2048 -F 16 -n ZEPHYRFIT $WORK/disk.img +``` -Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Write the image to the whole card: +Copy the FIT in. `BOOT_IMG` from your environment file is the image plus the `@@1048576` suffix, which tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: ```bash -sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress +mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: +mdir -i $BOOT_IMG :: ``` +The output is similar to: + +```output + Volume in drive : is ZEPHYRFIT + Volume Serial Number is B4EA-EA2A +Directory for ::/ + +zephyr-a itb 38742 2026-09-17 22:11 + 1 file 38 742 bytes + 65 871 872 bytes free +``` + +One file: the FIT you signed. `type=e` is what makes U-Boot's DOS partition driver present this volume as `virtio 0:1`, the `BOOT_DEV` in `env-qemu.sh`. + {{< /tab >}} +{{< /tabpane-normal >}} + +## Start the target + {{% notice Warning %}} -Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. +The AM62L EVM steps write to a whole disk with `dd`. Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. {{% /notice %}} -On Windows or macOS, write `sdcard.img` with balenaEtcher. +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} +Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Write the image to the whole card: -{{% notice Note %}} -If you prefer not to edit the image on the host, write TI's `.wic.xz` to the card unchanged, with balenaEtcher or with `xz -dc $WORK/tisdk-default-image.wic.xz | sudo dd of=/dev/sdX bs=4M status=progress`, taking the same care with `/dev/sdX`. Then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. -{{% /notice %}} +```bash +sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress +``` -## Set the AM62L EVM boot switches +On Windows or macOS, write `sdcard.img` with balenaEtcher. If you prefer not to edit the image on the host, write TI's `.wic.xz` to the card unchanged instead, then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. Set **SW3** as shown below, the reduced pincount setting from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8), in which the ROM ignores **SW2** and **SW4**. **ON** is towards the **ON** label on the switch bank. @@ -95,8 +119,6 @@ Set **SW3** as shown below, the reduced pincount setting from the [AM62L EVM Use |---|---|---|---|---| | **SW3** | OFF | ON | OFF | ON | -## Connect the console and power on - Connect the micro-USB port **J7** to your host. It creates four serial ports; the console is usually the first one, `/dev/ttyUSB0`, at 115200 baud. Open it: ```bash @@ -105,7 +127,23 @@ picocom -b 115200 /dev/ttyUSB0 If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press **Ctrl+A**, then **Ctrl+X**. -Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. Your dates, version strings and countdown differ. The log up to the countdown is similar to: +Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. + {{< /tab >}} + {{< tab header="QEMU" >}} +Start the machine. `-bios` hands QEMU the U-Boot you built, `-nographic` puts the serial console in your terminal, and the `-drive` and `-device` pair attaches `disk.img` as the virtio block device U-Boot sees as `virtio 0:1`: + +```bash +qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic -no-reboot \ + -bios $UBOOT_OUT/u-boot.bin \ + -drive if=none,file=$WORK/disk.img,format=raw,id=hd0 \ + -device virtio-blk-device,drive=hd0 +``` + +The machine must match the one you dumped the device tree from when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/): same `-machine`, same `-cpu`, same `-m`. U-Boot starts printing at once. To leave QEMU, press **Ctrl+A**, then **X**. + {{< /tab >}} +{{< /tabpane-normal >}} + +On the AM62L EVM the log up to the countdown is similar to the one below. Your dates, version strings and countdown differ. ```output NOTICE: Booting Trusted Firmware @@ -148,9 +186,11 @@ Hit any key to stop autoboot: 3 This log comes from a board running TI's prebuilt first two stages, so its `U-Boot SPL` line shows TI's build date instead of yours. +In QEMU there is no TF-A and no SPL, so the log starts at U-Boot's own banner and is about ten lines long. Three of them are worth knowing: `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are QEMU telling you that nothing ran before U-Boot, which is exactly the case, and `Loading Environment from nowhere... OK` is the environment you compiled in. + ## Watch the trusted image boot -After the three-second countdown, autoboot runs `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Your times and hash differ, and on another board so do `FIT_ADDR` and `ZEPHYR_ADDR`. The output is similar to: +After the three-second countdown, autoboot runs `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Your times and hash differ, and on another target so do `FIT_ADDR` and `ZEPHYR_ADDR`. The output is similar to: ```output 60198 bytes read in 1 ms (57.4 MiB/s) @@ -191,20 +231,34 @@ this image was verified by U-Boot before it ran. **Lines to look for:** `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the signature with the `key-a` public key in U-Boot, and `sha256+ OK` is the image hash matching; `+` means pass. `Loading Kernel Image to 82000000` is `bootm loados` copying Zephyr to its link address, and `## Starting application at 0x82000000 ...` is `go`, the last line from U-Boot. Everything after it comes from Zephyr: its banner, `Secondary CPU core 1 (MPID:0x1) is up` when it starts the second core, and `Hello from ZEPHYR IMAGE A`. +In QEMU the same block reads `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000` and `board : qemu_cortex_a53/qemu_cortex_a53`, and there is no `Secondary CPU core 1` line, because that board configuration starts one core. + ## If nothing prints +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list: 1. Try all four serial ports that **J7** creates; the console isn't always the first one. 2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks: BOOTMODE `0x0E43` in the same guide. 3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. 4. Flash TI's unchanged `.wic.xz` to a card and boot it. If it prints nothing either, the cause is the switches, the port, or the power, not your files. -5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $WORK/sdcard.img@@1048576 $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. +5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. On another board the same list applies, with your vendor's first-stage file, card image and console port. + {{< /tab >}} + {{< tab header="QEMU" >}} +QEMU always prints something, so read what it says: + +1. Nothing at all, or a hang after the banner: the control device tree does not match the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu` and `-m` you start QEMU with. +2. `Failed to load 'zephyr-a.itb'`: U-Boot found the volume but not the file. List it on the host with `mdir -i $BOOT_IMG ::`. +3. `** Bad device specification virtio 0 **`: the partition type is not `0x0e`. Check with `sfdisk -l $WORK/disk.img` and build the image again. +4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` did not make it into `.config`; add it and build U-Boot again. + {{< /tab >}} +{{< /tabpane-normal >}} If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A_NS` is missing from the [Zephyr build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). ## What you've accomplished and what's next -You built the SD card and watched U-Boot verify the FIT signed with `key-a` and start Zephyr on the board. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves the refusals; after it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a product needs on top. +You built the boot media and watched U-Boot verify the FIT signed with `key-a` and start Zephyr on your target. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves the refusals; after it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a product needs on top. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index 3d129baab2..de62670b9a 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -1,6 +1,6 @@ --- title: Test that U-Boot refuses a wrong key and a tampered image -description: "Optional: sign a second Zephyr image with a key U-Boot doesn't have, tamper with a copy of the trusted FIT, check both with fit_check_sign on the host, then watch U-Boot refuse both on the board." +description: "Optional: sign a second Zephyr image with a key U-Boot doesn't have, tamper with a copy of the trusted FIT, check both with fit_check_sign on the host, then watch U-Boot refuse both on your target." weight: 8 ### FIXED, DO NOT MODIFY @@ -9,11 +9,11 @@ layout: learningpathall ## Prove the refusal, not only the acceptance -This page makes two images U-Boot must refuse, one signed with the wrong key and one changed after signing, checks them on the host, and watches U-Boot refuse each one at the serial console. +This page makes two images U-Boot must refuse, one signed with the wrong key and one changed after signing, checks them on the host, and watches U-Boot refuse each one on your target's console. This page is optional, and the `b` and `t` commands in your U-Boot are already waiting for its two files. -Open a terminal and load the environment: `source $HOME/zephyr-secure-boot/env.sh`. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. ## Build a second Zephyr image @@ -26,7 +26,7 @@ In Workbench for Zephyr, select **Add Application** again. Use the same workspac printk("# signed with key-b (NOT trusted by U-Boot) #\n"); ``` -The replacement text is the same length as the original, so the box stays aligned. Build `hello_b` the same way, with a right-click on it in the **Applications** view and **Build**. The result is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`, again about 58 KB. +The replacement text is the same length as the original, so the box stays aligned. Build `hello_b` the same way, with a right-click on it in the **Applications** view and **Build**. The result is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`, the same size as the first image. ## Sign the second image with a key U-Boot doesn't have @@ -75,7 +75,7 @@ cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null ``` -The payload starts at offset `0xe8` (232), the `Data Start` you saw on the board, and is 58340 bytes long, so offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own structure. +The payload starts at the `Data Start` offset you saw when U-Boot loaded the FIT, a couple of hundred bytes into the file, and is tens of kilobytes long, so offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own structure. Check that the copy now differs from the original: @@ -166,14 +166,13 @@ Signature check bad (error 1) **Lines to look for:** `sha256,rsa2048:key-a+` on the first line, then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node`, then `Signature check bad (error 1)`. The exit code is 1. -## Add the two images to the card +## Add the two images to the boot media -Add the two new FITs to the card image with `mcopy`, at the same `@@1048576` volume offset you used when you [built the card image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/), then list the volume: +Add the two new FITs with `mcopy`, at the same `BOOT_IMG` volume you used when you [built the boot media](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/), then list the volume: ```bash -M=$WORK/sdcard.img@@1048576 -mcopy -o -i $M $FIT/zephyr-b.itb $FIT/zephyr-tampered.itb :: -mdir -i $M :: +mcopy -o -i $BOOT_IMG $FIT/zephyr-b.itb $FIT/zephyr-tampered.itb :: +mdir -i $BOOT_IMG :: ``` The output is similar to: @@ -193,17 +192,26 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -Six files: the boot files and the three FITs. +Six files on the card: the boot files and the three FITs. In QEMU the disk image holds the three FITs and nothing else. +{{< tabpane-normal >}} + {{< tab header="AM62L EVM" >}} Write the image to the card again with the same `dd` command as on the previous page, taking the same care with `/dev/sdX`: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress ``` +Move the card to the board, open the console with `picocom`, and power the board on. + {{< /tab >}} + {{< tab header="QEMU" >}} +Nothing to write: `disk.img` is the disk. Start QEMU again with the same command as on the previous page; it reads the image fresh at every start. + {{< /tab >}} +{{< /tabpane-normal >}} + ## Run the wrong-key test -Move the card to the board, open the console with `picocom` as on the previous page, and power the board on. Press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A; power the board off and on and try again. At the prompt, run the wrong-key test: +Press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A; start the target again and try once more. At the prompt, run the wrong-key test: ```console => run b @@ -263,7 +271,7 @@ ERROR -2: can't get kernel image! **Lines to look for:** `sha256,rsa2048:key-a+ OK` shows the signature passes; `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` show the payload no longer matches the stored `Hash value`; `*** REFUSED: Zephyr was NOT started ***` follows. {{% notice Note %}} -If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and write the card again. +If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and put the files on the boot media again. {{% /notice %}} To boot the trusted image again, type `run a`. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 4dfbd57aaf..6fc91ddff5 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,29 +1,19 @@ --- title: Review what is verified and what production needs -description: Separate what the boot and the optional refusal tests proved from what they didn't, then list what a production device needs before the whole chain can be trusted. +description: See what U-Boot checks with your key on the target you built, what the stages below it accept, and what a production device needs before the whole chain can be trusted. weight: 9 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## What you've proved +## Summary -The boot in [Prepare the SD card and boot the board](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-board/) showed U-Boot verifying the signature and the hash before it started Zephyr, and the optional tests on the [previous page](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) showed it refusing the other two images: +U-Boot verifies the last link of the chain, and only that one. It read `zephyr-a.itb` from the boot media, checked `conf-1` against the `key-a` node built into its own device tree, checked the hash of the payload, and only then jumped to `ZEPHYR_ADDR`. The optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) show the two ways it stops instead: a FIT signed with `key-b` fails at `Failed to verify required signature 'key-key-a'`, and a FIT with one byte changed after signing fails at `Bad hash value for 'hash-1'`. Zephyr never starts in either case. -| Command | Image | What is different | Result | -|---|---|---|---| -| `run a` | `zephyr-a.itb` | Signed with `key-a` | Zephyr starts | -| `run b` | `zephyr-b.itb` | Signed with `key-b`, a key U-Boot doesn't have | Refused: `Failed to verify required signature 'key-key-a'` | -| `run t` | `zephyr-tampered.itb` | Signed with `key-a`, one payload byte changed after signing | Refused: `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` | +Below that link, nothing is checked against your key. Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon. Until that key is fused, the SoC is in its development state: the ROM and the vendor's firmware still check the boot files, but any key passes. TI calls the two states HS-FS (High Security, Field Securable) and HS-SE (High Security, Security Enforced), and U-Boot's banner on the EVM read `SoC: AM62LX SR1.1 HS-FS`. In QEMU there is less still: no ROM, no security firmware and no eFuses, and you hand `u-boot.bin` to the machine on the command line. -## What you haven't proved - -Each stage checks the next, so the chain is only as trustworthy as the stage that checked U-Boot. - -Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon. Until the key is fused, the SoC is in its development state: the ROM and the vendor's firmware still check the boot files, but any key passes. Once it is fused, in the production state, they refuse anything not signed with that key. TI calls the two states HS-FS (High Security, Field Securable) and HS-SE (High Security, Security Enforced), and U-Boot's banner showed `SoC: AM62LX SR1.1 HS-FS`. So on the AM62L EVM the checks before U-Boot can't refuse anything, and only the last link, U-Boot to Zephyr, is enforced. - -The public half of `key-a` lives inside `u-boot.img`, on an unprotected FAT partition, so anyone who can write the card can replace it with one that carries their own key. The root of trust is in a file on the card, not in silicon. +So the key that matters, the public half of `key-a`, travels inside `u-boot.img` on an unprotected FAT partition, where anyone who can write the boot media can swap it for their own. Your chain of trust starts on the card, not in the silicon. Moving it there is what the rest of this page is about. ## What production needs @@ -33,7 +23,7 @@ On TI devices the procedure is the keywriter, which burns your key into the eFus ### Keep the environment built in -`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. The AM62L configuration ends up with `CONFIG_ENV_IS_NOWHERE=y`, so `saveenv` has nowhere to write and both variables always come from the binary you built. Check your board's `.config` for the same line, and keep it that way: a writable environment is a writable boot command. +`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. Both builds end up with `CONFIG_ENV_IS_NOWHERE=y`, the AM62L from its defconfig and QEMU from the target block you added, so `saveenv` has nowhere to write and both variables always come from the binary you built. Check your board's `.config` for the same line, and keep it that way: a writable environment is a writable boot command. {{% notice Warning %}} Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the environment in `uboot.env` on the boot media: a saved environment overrides `bootcmd` and `preboot`, so anyone with the card can skip the check. @@ -43,42 +33,30 @@ Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the e With `CONFIG_BOOTDELAY=3`, anyone with a serial cable can stop the countdown, get the `=>` prompt and type `fatload` and `go` by hand. Set `CONFIG_BOOTDELAY=-2` (no delay, no key check), or use `CONFIG_AUTOBOOT_KEYED` so that only a known string stops autoboot. Both settings only cover the countdown: if `bootcmd` returns, for example after a refused image, U-Boot still drops to the `=>` prompt. On a production build, end `zboot` with `reset` after the `echo`, so a refusal restarts the board instead of opening a prompt. -### Close the other boot paths - -Any other boot command compiled into U-Boot can be run instead of `zboot`, and none of them goes through your check. The AM62L configuration turns on several, and most vendor defconfigs do the same: - -| Path | Symbols | What it can do | -|---|---|---| -| Standard boot (bootstd, bootflow) | `CONFIG_BOOTSTD=y` (and `CONFIG_BOOTSTD_FULL=y`) | Scans storage for something to boot and starts it | -| EFI | `CONFIG_EFI_LOADER=y`, `CONFIG_CMD_BOOTEFI=y` | Starts an EFI application from the card | -| Raw kernel commands | `CONFIG_CMD_BOOTI=y`, `CONFIG_CMD_BOOTZ=y` | Starts a bare Linux kernel file with no FIT and no signature | -| Network and DFU (Device Firmware Upgrade) | `CONFIG_CMD_NET=y`, `CONFIG_CMD_DFU=y` | Loads an image over Ethernet or USB | - -`CONFIG_LEGACY_IMAGE_FORMAT` is already off; keep it off, because that older format carries no signature. Audit the rest and turn off everything your product doesn't use. - ### Use real keys and sign in a release step `sha256,rsa2048` is fine for a demo; the AM62L's own boot chain uses `sha512,rsa4096`. To match it, generate the keys with `rsa_keygen_bits:4096`, set `algo = "sha512,rsa4096"` in `zephyr-a.its` and `key.its`, and check that `$UBOOT_OUT/.config` has `CONFIG_SHA512=y`, adding it to the `.config` fragment if it doesn't. Generate the production key on a hardware security module (HSM), or at least off the build host, and sign in the release pipeline, the only place that holds the private key. ## Take it to another Cortex-A board -Every board-specific value sits in the `# Board values` and `# Vendor SDK` blocks of `env.sh`, so porting is a checklist: +Every target-specific value sits in the `# Target values` block of your environment file and the paths under it, so porting is a checklist: - `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. - `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It is Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. - `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. - `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC; `mmc list` at the U-Boot prompt shows your board's numbering. - `UBOOT_DEFCONFIG` is the board's U-Boot configuration. It must enable `CONFIG_FIT`, `CONFIG_FIT_SIGNATURE` and `CONFIG_RSA`: add any that is missing as `CONFIG_=y` to the `.config` fragment in [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), and if the board has `CONFIG_LEGACY_IMAGE_FORMAT=y`, add `# CONFIG_LEGACY_IMAGE_FORMAT is not set` too. -- `SDK`, `UBOOT_SRC`, `PREBUILT`, `CROSS` and `SYSROOT`, the `# Vendor SDK` block, point at the vendor's SDK: its U-Boot source, early firmware, cross compiler and the compiler's sysroot. +- `UBOOT_SRC`, `CROSS` and `UBOOT_CC` point at the U-Boot source and the compiler that builds it, with `SDK`, `PREBUILT` and `SYSROOT` added when they come from a vendor SDK, as on the AM62L. +- `BOOT_IMG` is the boot volume `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. -Two things sit outside `env.sh`. The `make` line that builds U-Boot takes whatever the vendor's tree expects for its early stages, `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, and the tree names its own outputs, often `u-boot.img` or `u-boot.itb` plus an SPL file. The SD card page follows the vendor's card layout, switches and console. +Two things sit outside the environment file. The `make` line that builds U-Boot takes whatever the target's tree expects: `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, `EXT_DTB` in QEMU, and the tree names its own outputs, often `u-boot.img` or `u-boot.itb` plus an SPL file. The boot page follows the target's own media, switches and console. -The last difference is how the key reaches the control DTB. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds its control DTB from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`). Boards that take the DTB from a prior stage (`CONFIG_OF_BOARD`) need the `/signature` node in that DTB instead, because that is the tree U-Boot reads keys from. `mkimage -K` writes the node into an existing DTB, and the same throwaway `key.its` from [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/) gives it the key. +The last difference is how the key reaches the control device tree. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds that tree from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`), as the AM62L does. A board that takes its device tree from a prior stage (`CONFIG_OF_BOARD=y`) has no tree of its own to add a node to; the QEMU option shows the way around it, merging `signature.dtsi` into a dump of that tree and building with `EXT_DTB=`. Everything else stays the same: the `.its` file, the keys, the `signature.dtsi` recipe, the boot command and the three test images. -## What you've accomplished +## Where to go from here -You know what your board verifies, what it doesn't, and what a product needs on top. To use your own application, point `data` in `zephyr-a.its` at its `zephyr.bin` and sign it again; to use your own board, work through the checklist above. +To run your own application, point `data` in `zephyr-a.its` at its `zephyr.bin` and sign it again; nothing else in the chain changes. To move to another Cortex-A board, work through the checklist above. -Ac6 runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming), on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), and on [AI-assisted embedded development](https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development). +The next page lists the further reading, including U-Boot's FIT signature documentation and the board pages for both targets. Ac6, where this Learning Path was written, runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming) and on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), which covers the fusing and release-signing steps above. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index bdbd1f2f07..bffcaf0087 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -1,7 +1,7 @@ --- title: Boot Zephyr from a signed FIT image with U-Boot on Arm Cortex-A -description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on an Arm Cortex-A board only after U-Boot verifies it, using the TI AM62L EVM as the example. +description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on Arm Cortex-A only after U-Boot verifies it, on a TI AM62L EVM or in QEMU with no hardware. minutes_to_complete: 120 @@ -10,12 +10,12 @@ who_is_this_for: This is an advanced topic for embedded developers who run Zephy learning_objectives: - Explain where a Zephyr image sits in the Cortex-A boot chain and which stage can verify it - Build and sign a Zephyr image in a FIT, and build the public key into U-Boot without changing U-Boot source - - Write a U-Boot boot command that starts Zephyr only after the signature and hash checks pass, and optionally prove on the board that it refuses a wrong key and a tampered image - - Explain what a board in its development state leaves unverified, and what a production device needs on top + - Write a U-Boot boot command that starts Zephyr only after the signature and hash checks pass, and optionally prove on the target that it refuses a wrong key and a tampered image + - Explain what a board in its development state, and what an emulator, each leave unverified, and what a production device needs on top prerequisites: - - A TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card and an SD card reader for your host, a micro-USB cable for the console, and a USB-C Power Delivery (PD) power supply - - An x86_64 Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; the TI SDK ships its installer and cross compiler as x86_64 binaries only + - One of two targets, either a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card and an SD card reader for your host, a micro-USB cable for the console and a USB-C Power Delivery (PD) power supply, or QEMU, which needs no hardware at all + - A Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space for the AM62L EVM or 5 GB for QEMU; the EVM also needs an x86_64 host, because the TI SDK ships its installer and cross compiler as x86_64 binaries only - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line @@ -41,6 +41,7 @@ tools_software_languages: - Workbench for Zephyr - Visual Studio Code - U-Boot + - QEMU - OpenSSL - GCC - C @@ -61,6 +62,14 @@ further_reading: title: Zephyr AM62L EVM board documentation link: https://docs.zephyrproject.org/latest/boards/ti/am62l_evm/doc/index.html type: documentation + - resource: + title: U-Boot documentation for the QEMU Arm board + link: https://docs.u-boot.org/en/latest/board/emulation/qemu-arm.html + type: documentation + - resource: + title: Zephyr QEMU Cortex-A53 board documentation + link: https://docs.zephyrproject.org/latest/boards/qemu/cortex_a53/doc/index.html + type: documentation - resource: title: Workbench for Zephyr link: https://z-workbench.com/ diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg index a63c715e34..d31b572d26 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/fit-signature.svg @@ -1,4 +1,4 @@ - + What the FIT signature covers and how U-Boot checks it @@ -8,7 +8,7 @@ - + @@ -64,8 +64,4 @@ 3. Copy the bytes to 0x82000000 Then: go 0x82000000 - - - Signed with another key: step 1 fails, "Failed to verify required signature 'key-key-a'". - One byte changed after signing: step 1 still passes, step 2 fails, "Bad hash value for 'hash-1'". Zephyr never starts in either case. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/wz-add-application.webp index 0b6fe27953cd3dfbbe24ab84dd6202b7ed68757e..82578c5d4877b401f905da602c09454f96fbbb76 100644 GIT binary patch literal 89608 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 From b6a6294eb0bec4f6fd0dfb03f0b923ddd8949a48 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Tue, 22 Sep 2026 22:06:50 +0100 Subject: [PATCH 12/66] Lead with QEMU, keep the EVM as the run on real silicon Every page now presents QEMU first and the AM62L EVM as the same work on hardware: the comparison table, all nine tab blocks, the environment lines, the prerequisites and the board lists. Where an output block is the board's, the text now says so, and page 3 warns that the Workbench screenshots were captured with the EVM selected. Also corrects the name of TI's tool: the AM62L uses Keywriter Lite. --- .../1-boot-chain.md | 34 ++--- .../2-set-up-tools.md | 120 +++++++++--------- .../3-build-zephyr.md | 16 +-- .../4-sign-zephyr.md | 8 +- .../5-build-uboot.md | 72 ++++++----- .../6-boot-the-target.md | 110 ++++++++-------- .../7-test-the-checks.md | 10 +- .../8-production.md | 8 +- .../_index.md | 6 +- 9 files changed, 193 insertions(+), 191 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 7100354390..2ee8438fb9 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -1,6 +1,6 @@ --- title: Understand where Zephyr sits in the Cortex-A boot chain -description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how a Cortex-A boot chain hands control to it, on a TI AM62L EVM or in QEMU. +description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how a Cortex-A boot chain hands control to it, in QEMU and on a TI AM62L EVM. weight: 2 ### FIXED, DO NOT MODIFY @@ -13,7 +13,7 @@ On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a boo U-Boot checks images packed with their signature into a FIT (Flattened Image Tree). Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers Zephyr signed on a Cortex-A. -Everything except the target setup works on any Cortex-A board that runs U-Boot. You can follow this Learning Path on a TI AM62L EVM (evaluation module) or, with no hardware at all, in QEMU; the next section compares them, and the few steps that differ are in tabs. +Everything except the target setup works on any Cortex-A board that runs U-Boot. This Learning Path is written for QEMU first, so you can follow every step with no hardware at all, and then shows the same work on a TI AM62L EVM (evaluation module); the next section compares them, and the few steps that differ are in tabs. ## The boot chain on a Cortex-A board @@ -25,27 +25,22 @@ The early firmware is usually the SPL (Secondary Program Loader), a small U-Boot ## Choose your target -Pick one target now. Every page is written for both, and marks the few steps that differ. +Pick one target now. QEMU is the default and needs nothing but your host; the AM62L EVM shows the same work on real silicon. Every page is written for both, and marks the few steps that differ. -| | AM62L EVM | QEMU | +| | QEMU | AM62L EVM | |---|---|---| -| Hardware | The board, a micro-SD card and reader, a micro-USB cable, a USB-C PD supply | None | -| Download | TI Processor SDK, 4.5 GB, unpacks to 11 GB | U-Boot source, 32 MB | -| Stages before U-Boot | Boot ROM, `tiboot3.bin`, `tispl.bin` | None: QEMU starts `u-boot.bin` directly | -| Zephyr board | `am62l_evm/am62l3/a53` | `qemu_cortex_a53` | -| Boot media | FAT partition on a micro-SD card, `mmc 1:1` | FAT partition in a 64 MiB disk image, `virtio 0:1` | -| Console | USB serial at 115200 baud | The terminal you start QEMU in | +| Hardware | None | The board, a micro-SD card and reader, a micro-USB cable, a USB-C PD supply | +| Download | U-Boot source, 32 MB | TI Processor SDK, 4.5 GB, unpacks to 11 GB | +| Stages before U-Boot | None: QEMU starts `u-boot.bin` directly | Boot ROM, `tiboot3.bin`, `tispl.bin` | +| Zephyr board | `qemu_cortex_a53` | `am62l_evm/am62l3/a53` | +| Boot media | FAT partition in a 64 MiB disk image, `virtio 0:1` | FAT partition on a micro-SD card, `mmc 1:1` | +| Console | The terminal you start QEMU in | USB serial at 115200 baud | -QEMU proves the link this Learning Path adds, and nothing underneath it: it has no boot ROM, no vendor firmware and no eFuses, and `u-boot.bin` is handed to the machine on the command line, so nothing authenticates U-Boot itself. +QEMU proves the link this Learning Path adds, and nothing underneath it: it has no boot ROM, no vendor firmware and no eFuses, and `u-boot.bin` is handed to the machine on the command line, so nothing authenticates U-Boot itself. That is what the board adds. Start in QEMU to learn the mechanism, where every step is reproducible and nothing can go wrong with a cable; move to the AM62L EVM to see the stages underneath, which only real silicon has. ### The same chain on your target {{< tabpane-normal >}} - {{< tab header="AM62L EVM" >}} -On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships as HS-FS, TI's name for the development state described below. - -![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg "The same chain on the AM62L, with TI's file names") - {{< /tab >}} {{< tab header="QEMU" >}} QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: @@ -55,6 +50,11 @@ QEMU -bios u-boot.bin -> U-Boot -> Zephyr inside a FIT image The U-Boot code that checks the FIT is the same code the board runs. What is missing is everything below it: nothing checks U-Boot itself. {{< /tab >}} + {{< tab header="AM62L EVM" >}} +On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships as HS-FS, TI's name for the development state described below. + +![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg "The same chain on the AM62L, with TI's file names") + {{< /tab >}} {{< /tabpane-normal >}} ## What a FIT image is @@ -81,7 +81,7 @@ The signature does not cover the image bytes: it covers the configuration node p This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. -This Learning Path doesn't fuse your key into the chip, so the SoC stays in its development state, where the ROM and the vendor's firmware accept boot files signed with any key; in QEMU there is no key to fuse and nothing checks U-Boot at all. U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. +In QEMU there is no key to fuse and nothing checks U-Boot at all. On the board, this Learning Path doesn't fuse your key into the chip either, so the SoC stays in its development state, where the ROM and the vendor's firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. ## What you've learned and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 6df11ce0c6..17345f736e 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -1,6 +1,6 @@ --- title: Set up the host tools for your target -description: Install the Ubuntu packages, get the U-Boot source and cross compiler for your target, from the vendor SDK for the AM62L EVM or from the U-Boot project for QEMU, and create the environment file that every later page of this Learning Path loads. +description: Install the Ubuntu packages, get the U-Boot source and cross compiler for your target, from the U-Boot project for QEMU or from the vendor SDK for the AM62L EVM, and create the environment file that every later page of this Learning Path loads. weight: 3 ### FIXED, DO NOT MODIFY @@ -9,7 +9,7 @@ layout: learningpathall ## What you need -Whichever target you chose, you need a U-Boot source tree that supports it and a cross compiler that builds U-Boot. On the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) you also need the prebuilt firmware that runs before U-Boot, and all three come in one installer, the TI Processor SDK. For QEMU, the U-Boot release and two Ubuntu packages are everything. +Whichever target you chose, you need a U-Boot source tree that supports it and a cross compiler that builds U-Boot. For QEMU, the U-Boot release and two Ubuntu packages are everything. On the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) you also need the prebuilt firmware that runs before U-Boot, and all three come in one installer, the TI Processor SDK. You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open-source [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps; you add a Cortex-A toolchain and workspace when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). @@ -21,7 +21,7 @@ U-Boot's build and the signing tools need a few packages beyond a normal Zephyr sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools dosfstools xz-utils curl picocom ``` -If you chose QEMU, add the emulator and a cross compiler; the AM62L EVM gets both from the TI SDK instead: +On QEMU, add the emulator and a cross compiler; the AM62L EVM gets both from the TI SDK instead, so skip this command if you are on the board: ```bash sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu @@ -32,6 +32,34 @@ sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. Write the file for your target, then load it and create the directories the later pages write into: {{< tabpane-normal >}} + {{< tab header="QEMU" >}} +```bash +mkdir -p $HOME/zephyr-secure-boot +cat > $HOME/zephyr-secure-boot/env-qemu.sh <<'EOF' +export WORK=$HOME/zephyr-secure-boot + +# Target values +export BOARD=qemu_cortex_a53 # Zephyr board identifier +export ZEPHYR_ADDR=0x40000000 # Zephyr link address, FIT load and go target +export FIT_ADDR=0x48000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR +export BOOT_DEV="virtio 0:1" # U-Boot device and partition that hold the files +export UBOOT_DEFCONFIG=qemu_arm64_defconfig # the target's U-Boot configuration + +# No vendor SDK: U-Boot from the U-Boot project, cross compiler from Ubuntu +export UBOOT_SRC=$WORK/u-boot-2025.07 +export CROSS=aarch64-linux-gnu- +export UBOOT_CC="${CROSS}gcc" + +# Your build outputs: U-Boot build, signing keys, signed FITs, and the boot volume +export UBOOT_OUT=$WORK/uboot-build +export KEYS=$WORK/keys +export FIT=$WORK/fit +export BOOT_IMG=$WORK/disk.img@@1048576 +EOF +source $HOME/zephyr-secure-boot/env-qemu.sh +mkdir -p $KEYS $FIT +``` + {{< /tab >}} {{< tab header="AM62L EVM" >}} ```bash mkdir -p $HOME/zephyr-secure-boot @@ -61,34 +89,6 @@ export BOOT_IMG=$WORK/sdcard.img@@1048576 EOF source $HOME/zephyr-secure-boot/env-am62l.sh mkdir -p $KEYS $FIT -``` - {{< /tab >}} - {{< tab header="QEMU" >}} -```bash -mkdir -p $HOME/zephyr-secure-boot -cat > $HOME/zephyr-secure-boot/env-qemu.sh <<'EOF' -export WORK=$HOME/zephyr-secure-boot - -# Target values -export BOARD=qemu_cortex_a53 # Zephyr board identifier -export ZEPHYR_ADDR=0x40000000 # Zephyr link address, FIT load and go target -export FIT_ADDR=0x48000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR -export BOOT_DEV="virtio 0:1" # U-Boot device and partition that hold the files -export UBOOT_DEFCONFIG=qemu_arm64_defconfig # the target's U-Boot configuration - -# No vendor SDK: U-Boot from the U-Boot project, cross compiler from Ubuntu -export UBOOT_SRC=$WORK/u-boot-2025.07 -export CROSS=aarch64-linux-gnu- -export UBOOT_CC="${CROSS}gcc" - -# Your build outputs: U-Boot build, signing keys, signed FITs, and the boot volume -export UBOOT_OUT=$WORK/uboot-build -export KEYS=$WORK/keys -export FIT=$WORK/fit -export BOOT_IMG=$WORK/disk.img@@1048576 -EOF -source $HOME/zephyr-secure-boot/env-qemu.sh -mkdir -p $KEYS $FIT ``` {{< /tab >}} {{< /tabpane-normal >}} @@ -98,74 +98,74 @@ Only the `# Target values` block and the paths under it depend on the target; fo ## Get the U-Boot source and the cross compiler {{< tabpane-normal >}} - {{< tab header="AM62L EVM" >}} -The U-Boot source, the firmware that runs before U-Boot and the cross compiler all come from the TI Processor SDK Linux for AM62Lx; you use nothing from Linux itself. The installer is 4.5 GB and unpacks to 11 GB. Download it from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): + {{< tab header="QEMU" >}} +There is no vendor SDK. Download the U-Boot release from the U-Boot project and unpack it into your working directory; the archive is about 32 MB: ```bash -curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin +curl -L -o $WORK/u-boot-2025.07.tar.bz2 https://ftp.denx.de/pub/u-boot/u-boot-2025.07.tar.bz2 +tar -xf $WORK/u-boot-2025.07.tar.bz2 -C $WORK +ls -d $UBOOT_SRC ``` -Make it executable and run it without the graphical wizard. `--mode unattended` accepts every default, and `--prefix` installs into `$SDK` without root: +The expected output is: -```bash -chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin -$WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $SDK +```output +/home/user/zephyr-secure-boot/u-boot-2025.07 ``` -Check that the three paths exist and the compiler runs: +The source stays unpatched: the key and the boot command are configuration. Check that the compiler you installed above runs: ```bash -ls -d $UBOOT_SRC $PREBUILT $SYSROOT ${CROSS}gcc --version ``` The output is similar to: ```output -/home/user/zephyr-secure-boot/tisdk/board-support/prebuilt-images/am62lxx-evm -/home/user/zephyr-secure-boot/tisdk/board-support/ti-u-boot-2026.01+git -/home/user/zephyr-secure-boot/tisdk/linux-devkit/sysroots/aarch64-oe-linux -aarch64-oe-linux-gcc (GCC) 15.3.0 +aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 ... ``` -The boot ROM only accepts a card laid out the way it expects, so you start from TI's own SD card image and replace the files inside. Download it; it is about 1.3 GB and stays compressed, because the boot page reads the part it needs straight out of `xz`: +`qemu-system-aarch64 --version` prints the emulator's version; this Learning Path uses only long-standing QEMU options, so any recent version works. -```bash -curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz -``` +There is no card image to download: you build a 64 MiB disk image from nothing when you [boot the target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/). {{< /tab >}} - {{< tab header="QEMU" >}} -There is no vendor SDK. Download the U-Boot release from the U-Boot project and unpack it into your working directory; the archive is about 32 MB: + {{< tab header="AM62L EVM" >}} +The U-Boot source, the firmware that runs before U-Boot and the cross compiler all come from the TI Processor SDK Linux for AM62Lx; you use nothing from Linux itself. The installer is 4.5 GB and unpacks to 11 GB. Download it from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): ```bash -curl -L -o $WORK/u-boot-2025.07.tar.bz2 https://ftp.denx.de/pub/u-boot/u-boot-2025.07.tar.bz2 -tar -xf $WORK/u-boot-2025.07.tar.bz2 -C $WORK -ls -d $UBOOT_SRC +curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin ``` -The expected output is: +Make it executable and run it without the graphical wizard. `--mode unattended` accepts every default, and `--prefix` installs into `$SDK` without root: -```output -/home/user/zephyr-secure-boot/u-boot-2025.07 +```bash +chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin +$WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin --mode unattended --prefix $SDK ``` -The source stays unpatched: the key and the boot command are configuration. Check that the compiler you installed above runs: +Check that the three paths exist and the compiler runs: ```bash +ls -d $UBOOT_SRC $PREBUILT $SYSROOT ${CROSS}gcc --version ``` The output is similar to: ```output -aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 +/home/user/zephyr-secure-boot/tisdk/board-support/prebuilt-images/am62lxx-evm +/home/user/zephyr-secure-boot/tisdk/board-support/ti-u-boot-2026.01+git +/home/user/zephyr-secure-boot/tisdk/linux-devkit/sysroots/aarch64-oe-linux +aarch64-oe-linux-gcc (GCC) 15.3.0 ... ``` -`qemu-system-aarch64 --version` prints the emulator's version; this Learning Path uses only long-standing QEMU options, so any recent version works. +The boot ROM only accepts a card laid out the way it expects, so you start from TI's own SD card image and replace the files inside. Download it; it is about 1.3 GB and stays compressed, because the boot page reads the part it needs straight out of `xz`: -There is no card image to download: you build a 64 MiB disk image from nothing when you [boot the target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/). +```bash +curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz +``` {{< /tab >}} {{< /tabpane-normal >}} diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 0a4ad333f6..fdfc7227f7 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -1,6 +1,6 @@ --- title: Build a Zephyr image that U-Boot can start -description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for a Cortex-A board, the TI AM62L EVM in this example, then check the arm64 image header that U-Boot's go command relies on. +description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for a Cortex-A target, QEMU or the TI AM62L EVM, then check the arm64 image header that U-Boot's go command relies on. weight: 4 ### FIXED, DO NOT MODIFY @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/) in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for Cortex-A: an AArch64 toolchain, and a Zephyr 4.4 workspace. The steps are the same for both targets; only the board you pick differs. +You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/) in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for Cortex-A: an AArch64 toolchain, and a Zephyr 4.4 workspace. The steps are the same for both targets; only the board you pick differs. The screenshots on this page were captured with the AM62L EVM selected, so if you are following the QEMU option, read the board field as `qemu_cortex_a53` and take every other field as shown. Open VS Code on your working directory: @@ -43,7 +43,7 @@ Select **Import**. The download takes a few minutes. When it finishes, the **Too ## Add a West workspace -The workspace needs a Zephyr release that supports your board. Board support for the AM62L EVM entered Zephyr in version 4.4, so this Learning Path uses 4.4.2; `qemu_cortex_a53` has been in Zephyr for years, and the same workspace builds it. Select **Add West Workspace** and fill in the form: +The workspace needs a Zephyr release that supports your board. `qemu_cortex_a53` has been in Zephyr for years, and board support for the AM62L EVM entered Zephyr in version 4.4, so this Learning Path uses 4.4.2 and one workspace builds both. Select **Add West Workspace** and fill in the form: - **Source location**: **From template** - **Minimal**, not **Full**, under the **Path** field @@ -63,14 +63,14 @@ Select **Add Application** and fill in the wizard: - **Select West Workspace**: `zephyrproject` - **Select Toolchain**: `zephyr-sdk-1.0.1` - **SDK Variant**: **GNU GCC** -- **Select Board**: type `am62l` and select **TI AM62L Evaluation Module (EVM)**, or type `qemu` and select **QEMU Emulation for ARM Cortex-A53** +- **Select Board**: type `qemu` and select **QEMU Emulation for ARM Cortex-A53**, or type `am62l` and select **TI AM62L Evaluation Module (EVM)** - **New or existing application?**: **Create new application** - **Select template**: `hello_world`, under `deps/zephyr/samples/hello_world` - **Project Name**: `hello` - **Application type**: **West workspace application** - **Project Location**: `zephyrproject/applications/hello`, filled in by the wizard -The identifier under the board name, `am62l_evm/am62l3/a53` or `qemu_cortex_a53`, is the `BOARD` value in your environment file; on another board, select the entry that matches your `BOARD`. +The identifier under the board name, `qemu_cortex_a53` or `am62l_evm/am62l3/a53`, is the `BOARD` value in your environment file; on another board, select the entry that matches your `BOARD`. ![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button. A call-out beside the board field says to select QEMU Emulation for ARM Cortex-A53 instead if you follow the QEMU option.#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM; the call-out gives the QEMU board") @@ -123,7 +123,7 @@ Save both files. `CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The header's first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot only needs that branch at offset 0: without the header, `go` jumps into whatever the linker placed there. -The configurations for `am62l_evm/am62l3/a53` and `qemu_cortex_a53` already set both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. +The configurations for `qemu_cortex_a53` and `am62l_evm/am62l3/a53` already set both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. ## Build the application @@ -138,11 +138,11 @@ Memory region Used Size Region Size %age Used ![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") -The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. It is about 58 KB for the AM62L EVM and about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM instead of 2016 MB. +The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. It is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM, and about 58 KB for the AM62L EVM, which reports 2016 MB. ## Check the arm64 image header -Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment for your target with `source $HOME/zephyr-secure-boot/env-am62l.sh` or `source $HOME/zephyr-secure-boot/env-qemu.sh`, and print the header's magic number at offset `0x38`: +Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment for your target with `source $HOME/zephyr-secure-boot/env-qemu.sh` or `source $HOME/zephyr-secure-boot/env-am62l.sh`, and print the header's magic number at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index 2d96bb794f..ef6f6da1e6 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -9,7 +9,7 @@ layout: learningpathall ## Build U-Boot's host tools first -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. `mkimage` builds and signs a FIT image. `fit_check_sign` verifies a signed FIT on the host. Both come from the same U-Boot tree as your target's U-Boot, so signer and verifier match. @@ -19,7 +19,7 @@ The `tools` target needs the target's `.config` first, so run the defconfig targ make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -`UBOOT_CC` is the compiler command from your environment file. On the AM62L it carries `--sysroot`, the SDK's library path, without which the U-Boot link fails; in QEMU it is the plain cross compiler. Keep `CC="$UBOOT_CC"` on every `make` line, including the ones on the next page. +`UBOOT_CC` is the compiler command from your environment file. In QEMU it is the plain cross compiler; on the AM62L it carries `--sysroot`, the SDK's library path, without which the U-Boot link fails. Keep `CC="$UBOOT_CC"` on every `make` line, including the ones on the next page. Then build the host tools: @@ -39,7 +39,7 @@ The output is similar to: mkimage version 2026.01-g5fb294342321 ``` -The version string names the U-Boot tree you built from; in QEMU it reads `mkimage version 2025.07`. +The version string names the U-Boot tree you built from. The listing above was captured on the AM62L EVM, whose TI tree is 2026.01; in QEMU it reads `mkimage version 2025.07`. {{% notice Note %}} If the `tools` build stops at `pylibfdt`, `swig` or `gnutls/gnutls.h`, a package is missing: run the `apt install` command from [Set up the host tools for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/) again, then the `tools` step. @@ -155,7 +155,7 @@ Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-a.itb', node '/co **Lines to look for:** `Sign algo: sha256,rsa2048:key-a` and the last line, `Signature written to ... node '/configurations/conf-1/signature-1'`, say that `mkimage` found `key-a` in `$KEYS` and wrote its signature into `conf-1`. `Hash value` is the SHA-256 of `zephyr.bin`, which U-Boot recomputes on the target. -In QEMU the listing shows the QEMU values instead: `Data Size: 37040 Bytes` and `Load Address: 0x40000000`. +The listing above was captured on the AM62L EVM. In QEMU it shows the QEMU values instead: `Data Size: 37040 Bytes` and `Load Address: 0x40000000`. Don't use the `mkimage -K` option here: the public key goes into U-Boot's own device tree at build time, on the next page. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index 048a07b375..f2cea2d14f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -9,7 +9,7 @@ layout: learningpathall ## Check that U-Boot can verify signatures -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. The target's defconfig must turn on the verifier, and both of these do. Check the symbols that matter in the `$UBOOT_OUT/.config` from the previous page: @@ -96,30 +96,32 @@ The expected output is: ## Write a boot command that fails closed -Zephyr's board documentation usually gives a one-line U-Boot command to start Zephyr. For the AM62L EVM it is: +Zephyr's board documentation usually gives a one-line U-Boot command to start Zephyr, with no verification anywhere in it. Filled in with the QEMU values from your environment file, it is: ```console -=> fatload mmc 1:1 0x82000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x82000000 +=> fatload virtio 0:1 0x40000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x40000000 ``` -Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, with the AM62L values from the environment file filled in, the chain is: +On the AM62L EVM the same line reads `fatload mmc 1:1 0x82000000 zephyr.bin` and ends `go 0x82000000`. + +Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, still with the QEMU values filled in, the chain is: ```text -fatload mmc 1:1 0x90000000 ${fit} && -bootm start 0x90000000 && +fatload virtio 0:1 0x48000000 ${fit} && +bootm start 0x48000000 && bootm loados && dcache flush && icache flush && dcache off && icache off && -go 0x82000000; +go 0x40000000; echo "*** REFUSED: Zephyr was NOT started ***" ``` Each piece has one job: -- `fatload mmc 1:1 0x90000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. On the AM62L EVM, `mmc 1:1` is partition 1 of the SD card (`mmc 0` is the eMMC); in QEMU the same chain reads `virtio 0:1`, the FAT partition of the disk image, at `0x48000000` and `0x40000000`. `FIT_ADDR` is clear of `ZEPHYR_ADDR`, so `loados` can't copy Zephyr over the FIT it is reading. -- `bootm start 0x90000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. +- `fatload virtio 0:1 0x48000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. In QEMU, `virtio 0:1` is the FAT partition of the disk image; on the AM62L EVM the same chain reads `mmc 1:1`, partition 1 of the SD card (`mmc 0` is the eMMC), at `0x90000000` and `0x82000000`. `FIT_ADDR` is clear of `ZEPHYR_ADDR`, so `loados` can't copy Zephyr over the FIT it is reading. +- `bootm start 0x48000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. - `bootm loados` copies the verified payload to its `load` address, `ZEPHYR_ADDR`. - The four cache commands flush and turn off the caches, and on arm64 `dcache off` also turns the MMU off, the state Zephyr expects at entry. -- `go 0x82000000` jumps to `ZEPHYR_ADDR` and verifies nothing. Stopping after `bootm loados` keeps U-Boot a verifier, not an OS loader; a plain `bootm` would go on into OS-specific boot code. +- `go 0x40000000` jumps to `ZEPHYR_ADDR` and verifies nothing. Stopping after `bootm loados` keeps U-Boot a verifier, not an OS loader; a plain `bootm` would go on into OS-specific boot code. `&&` is what makes it fail closed: `a && b` runs `b` only if `a` succeeded, while `a; b` would fall through to `go` after a failed check. `go` never returns, so the `echo` prints only when a step failed. @@ -161,15 +163,6 @@ The `\"` around the `echo` text stay: that's how a Kconfig string holds a litera Then add the lines that get the key into the control device tree and turn on what your target's defconfig leaves off: {{< tabpane-normal >}} - {{< tab header="AM62L EVM" >}} -TI's tree builds its control device tree from source at every `make`, so one line is enough. `CONFIG_DEVICE_TREE_INCLUDES` is the list of extra `.dtsi` files the build compiles into that tree: - -```bash -cat >> $UBOOT_OUT/.config <}} {{< tab header="QEMU" >}} QEMU hands U-Boot a device tree at run time, so `qemu_arm64_defconfig` builds none of its own and `CONFIG_DEVICE_TREE_INCLUDES` would have nothing to add to. Instead you build the control device tree yourself in the next step and pass it to the build. These lines turn that on, and close two gaps the AM62L defconfig doesn't have: @@ -187,6 +180,15 @@ EOF `CONFIG_OF_BOARD` and `CONFIG_OF_OMIT_DTB` off make U-Boot carry a control device tree of its own, the one your key goes into. `CONFIG_LEGACY_IMAGE_FORMAT` off closes the older image format, which carries no signature. `CONFIG_CMD_CACHE` adds the `dcache` and `icache` commands the boot command uses, and `CONFIG_ENV_IS_NOWHERE` keeps the environment out of flash, so nothing saved at the prompt can replace your boot command. {{< /tab >}} + {{< tab header="AM62L EVM" >}} +TI's tree builds its control device tree from source at every `make`, so one line is enough. `CONFIG_DEVICE_TREE_INCLUDES` is the list of extra `.dtsi` files the build compiles into that tree: + +```bash +cat >> $UBOOT_OUT/.config <}} {{< /tabpane-normal >}} Let Kconfig resolve the fragment: @@ -210,22 +212,6 @@ The warnings are expected: your lines replace values the defconfig already set. ### Build U-Boot {{< tabpane-normal >}} - {{< tab header="AM62L EVM" >}} -TI's U-Boot tree packs the early stages itself, with binman, U-Boot's image packaging tool. Point `BL1`, `BL31` and `TEE` at the prebuilt TF-A and OP-TEE, and `BINMAN_INDIRS` at the directory that holds TI's system firmware, all from the SDK: - -```bash -make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ - BL1=$PREBUILT/bl1.bin BL31=$PREBUILT/bl31.bin TEE=$PREBUILT/bl32.bin BINMAN_INDIRS=$PREBUILT -``` - -The build takes a few minutes. Check the three boot files: - -```bash -ls -l $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img -``` - -The sizes are about 0.2 MB, 1.5 MB and 1.4 MB, and the control device tree lands beside them as `u-boot.dtb`. - {{< /tab >}} {{< tab header="QEMU" >}} First get the device tree QEMU builds for the machine you boot later, so U-Boot's drivers, console and memory sizing match it. QEMU writes the file and exits: @@ -256,6 +242,22 @@ ls -l $UBOOT_OUT/u-boot.bin $UBOOT_OUT/u-boot.dtb `u-boot.bin` is about 1.4 MB and ends with the bytes of `u-boot.dtb`, the control device tree with your key inside. {{< /tab >}} + {{< tab header="AM62L EVM" >}} +TI's U-Boot tree packs the early stages itself, with binman, U-Boot's image packaging tool. Point `BL1`, `BL31` and `TEE` at the prebuilt TF-A and OP-TEE, and `BINMAN_INDIRS` at the directory that holds TI's system firmware, all from the SDK: + +```bash +make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ + BL1=$PREBUILT/bl1.bin BL31=$PREBUILT/bl31.bin TEE=$PREBUILT/bl32.bin BINMAN_INDIRS=$PREBUILT +``` + +The build takes a few minutes. Check the three boot files: + +```bash +ls -l $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img +``` + +The sizes are about 0.2 MB, 1.5 MB and 1.4 MB, and the control device tree lands beside them as `u-boot.dtb`. + {{< /tab >}} {{< /tabpane-normal >}} ## Check the key is inside U-Boot diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index 57f7d91680..794d644fe9 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -9,13 +9,43 @@ layout: learningpathall ## What your target boots from -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. Some boot ROMs look for the first-stage file by name on a FAT partition, as the AM62L's does; others read it from a fixed offset on the card. That is why you start from the vendor's own card image on a board. QEMU has no boot ROM: it takes `u-boot.bin` on the command line, so its disk carries nothing but the FIT. On both, U-Boot's `fatload` then reads `zephyr-a.itb` from the partition in `BOOT_DEV`. ## Build the boot media {{< tabpane-normal >}} + {{< tab header="QEMU" >}} +There is no boot ROM to satisfy and no vendor image to copy, so you build the disk from nothing. Create a 64 MiB file, give it one MBR partition of type `0x0e` (FAT16 with LBA addressing) starting at sector 2048, and format that partition. None of it needs root: + +```bash +truncate -s 64M $WORK/disk.img +printf 'label: dos\nstart=2048, size=129024, type=e\n' | sfdisk $WORK/disk.img +mkfs.vfat --offset 2048 -F 16 -n ZEPHYRFIT $WORK/disk.img +``` + +Copy the FIT in. `BOOT_IMG` from your environment file is the image plus the `@@1048576` suffix, which tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: + +```bash +mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: +mdir -i $BOOT_IMG :: +``` + +The output is similar to: + +```output + Volume in drive : is ZEPHYRFIT + Volume Serial Number is B4EA-EA2A +Directory for ::/ + +zephyr-a itb 38742 2026-09-17 22:11 + 1 file 38 742 bytes + 65 871 872 bytes free +``` + +One file: the FIT you signed. `type=e` is what makes U-Boot's DOS partition driver present this volume as `virtio 0:1`, the `BOOT_DEV` in `env-qemu.sh`. + {{< /tab >}} {{< tab header="AM62L EVM" >}} The boot ROM reads `tiboot3.bin` from the card's first FAT partition and is picky about its format: TI's FAT16 partition boots, while a FAT32 one with 512-byte clusters leaves the console empty. Keep TI's partition byte for byte and replace only the files; it starts at sector 2048 and is 262144 sectors long, which is where the numbers in the next command come from. @@ -65,36 +95,6 @@ zephyr-a itb 60198 2026-09-15 16:49 Four files: the three boot stages you built and the FIT you signed. {{< /tab >}} - {{< tab header="QEMU" >}} -There is no boot ROM to satisfy and no vendor image to copy, so you build the disk from nothing. Create a 64 MiB file, give it one MBR partition of type `0x0e` (FAT16 with LBA addressing) starting at sector 2048, and format that partition. None of it needs root: - -```bash -truncate -s 64M $WORK/disk.img -printf 'label: dos\nstart=2048, size=129024, type=e\n' | sfdisk $WORK/disk.img -mkfs.vfat --offset 2048 -F 16 -n ZEPHYRFIT $WORK/disk.img -``` - -Copy the FIT in. `BOOT_IMG` from your environment file is the image plus the `@@1048576` suffix, which tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: - -```bash -mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: -mdir -i $BOOT_IMG :: -``` - -The output is similar to: - -```output - Volume in drive : is ZEPHYRFIT - Volume Serial Number is B4EA-EA2A -Directory for ::/ - -zephyr-a itb 38742 2026-09-17 22:11 - 1 file 38 742 bytes - 65 871 872 bytes free -``` - -One file: the FIT you signed. `type=e` is what makes U-Boot's DOS partition driver present this volume as `virtio 0:1`, the `BOOT_DEV` in `env-qemu.sh`. - {{< /tab >}} {{< /tabpane-normal >}} ## Start the target @@ -104,6 +104,18 @@ The AM62L EVM steps write to a whole disk with `dd`. Replace `/dev/sdX` with you {{% /notice %}} {{< tabpane-normal >}} + {{< tab header="QEMU" >}} +Start the machine. `-bios` hands QEMU the U-Boot you built, `-nographic` puts the serial console in your terminal, and the `-drive` and `-device` pair attaches `disk.img` as the virtio block device U-Boot sees as `virtio 0:1`: + +```bash +qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic -no-reboot \ + -bios $UBOOT_OUT/u-boot.bin \ + -drive if=none,file=$WORK/disk.img,format=raw,id=hd0 \ + -device virtio-blk-device,drive=hd0 +``` + +The machine must match the one you dumped the device tree from when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/): same `-machine`, same `-cpu`, same `-m`. U-Boot starts printing at once. To leave QEMU, press **Ctrl+A**, then **X**. + {{< /tab >}} {{< tab header="AM62L EVM" >}} Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Write the image to the whole card: @@ -129,21 +141,11 @@ If `picocom` reports a permission error, add your user to the `dialout` group wi Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. {{< /tab >}} - {{< tab header="QEMU" >}} -Start the machine. `-bios` hands QEMU the U-Boot you built, `-nographic` puts the serial console in your terminal, and the `-drive` and `-device` pair attaches `disk.img` as the virtio block device U-Boot sees as `virtio 0:1`: - -```bash -qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic -no-reboot \ - -bios $UBOOT_OUT/u-boot.bin \ - -drive if=none,file=$WORK/disk.img,format=raw,id=hd0 \ - -device virtio-blk-device,drive=hd0 -``` - -The machine must match the one you dumped the device tree from when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/): same `-machine`, same `-cpu`, same `-m`. U-Boot starts printing at once. To leave QEMU, press **Ctrl+A**, then **X**. - {{< /tab >}} {{< /tabpane-normal >}} -On the AM62L EVM the log up to the countdown is similar to the one below. Your dates, version strings and countdown differ. +In QEMU there is no TF-A and no SPL, so the log starts at U-Boot's own banner and is about ten lines long. Three of them are worth knowing: `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are QEMU telling you that nothing ran before U-Boot, which is exactly the case, and `Loading Environment from nowhere... OK` is the environment you compiled in. + +On the AM62L EVM there is much more to see, because the stages below U-Boot actually run. The log up to the countdown is similar to the one below; your dates, version strings and countdown differ. ```output NOTICE: Booting Trusted Firmware @@ -186,11 +188,9 @@ Hit any key to stop autoboot: 3 This log comes from a board running TI's prebuilt first two stages, so its `U-Boot SPL` line shows TI's build date instead of yours. -In QEMU there is no TF-A and no SPL, so the log starts at U-Boot's own banner and is about ten lines long. Three of them are worth knowing: `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are QEMU telling you that nothing ran before U-Boot, which is exactly the case, and `Loading Environment from nowhere... OK` is the environment you compiled in. - ## Watch the trusted image boot -After the three-second countdown, autoboot runs `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Your times and hash differ, and on another target so do `FIT_ADDR` and `ZEPHYR_ADDR`. The output is similar to: +After the three-second countdown, autoboot runs `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Your times and hash differ, and on another target so do `FIT_ADDR` and `ZEPHYR_ADDR`. The block below was captured on the AM62L EVM; the QEMU values follow it. The output is similar to: ```output 60198 bytes read in 1 ms (57.4 MiB/s) @@ -236,6 +236,14 @@ In QEMU the same block reads `FIT Image at 48000000`, `Data Size: 37040 Bytes`, ## If nothing prints {{< tabpane-normal >}} + {{< tab header="QEMU" >}} +QEMU always prints something, so read what it says: + +1. Nothing at all, or a hang after the banner: the control device tree does not match the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu` and `-m` you start QEMU with. +2. `Failed to load 'zephyr-a.itb'`: U-Boot found the volume but not the file. List it on the host with `mdir -i $BOOT_IMG ::`. +3. `** Bad device specification virtio 0 **`: the partition type is not `0x0e`. Check with `sfdisk -l $WORK/disk.img` and build the image again. +4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` did not make it into `.config`; add it and build U-Boot again. + {{< /tab >}} {{< tab header="AM62L EVM" >}} If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list: @@ -247,14 +255,6 @@ If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this On another board the same list applies, with your vendor's first-stage file, card image and console port. {{< /tab >}} - {{< tab header="QEMU" >}} -QEMU always prints something, so read what it says: - -1. Nothing at all, or a hang after the banner: the control device tree does not match the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu` and `-m` you start QEMU with. -2. `Failed to load 'zephyr-a.itb'`: U-Boot found the volume but not the file. List it on the host with `mdir -i $BOOT_IMG ::`. -3. `** Bad device specification virtio 0 **`: the partition type is not `0x0e`. Check with `sfdisk -l $WORK/disk.img` and build the image again. -4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` did not make it into `.config`; add it and build U-Boot again. - {{< /tab >}} {{< /tabpane-normal >}} If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A_NS` is missing from the [Zephyr build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index de62670b9a..2b83f027bd 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -13,7 +13,7 @@ This page makes two images U-Boot must refuse, one signed with the wrong key and This page is optional, and the `b` and `t` commands in your U-Boot are already waiting for its two files. -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-am62l.sh`, or `source $HOME/zephyr-secure-boot/env-qemu.sh` for QEMU. +Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. ## Build a second Zephyr image @@ -192,9 +192,12 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -Six files on the card: the boot files and the three FITs. In QEMU the disk image holds the three FITs and nothing else. +In QEMU the disk image holds the three FITs and nothing else. The listing above is the AM62L EVM's card: six files, the boot files and the three FITs. {{< tabpane-normal >}} + {{< tab header="QEMU" >}} +Nothing to write: `disk.img` is the disk. Start QEMU again with the same command as on the previous page; it reads the image fresh at every start. + {{< /tab >}} {{< tab header="AM62L EVM" >}} Write the image to the card again with the same `dd` command as on the previous page, taking the same care with `/dev/sdX`: @@ -204,9 +207,6 @@ sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress Move the card to the board, open the console with `picocom`, and power the board on. {{< /tab >}} - {{< tab header="QEMU" >}} -Nothing to write: `disk.img` is the disk. Start QEMU again with the same command as on the previous page; it reads the image fresh at every start. - {{< /tab >}} {{< /tabpane-normal >}} ## Run the wrong-key test diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 6fc91ddff5..b7f9740f30 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -11,7 +11,7 @@ layout: learningpathall U-Boot verifies the last link of the chain, and only that one. It read `zephyr-a.itb` from the boot media, checked `conf-1` against the `key-a` node built into its own device tree, checked the hash of the payload, and only then jumped to `ZEPHYR_ADDR`. The optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) show the two ways it stops instead: a FIT signed with `key-b` fails at `Failed to verify required signature 'key-key-a'`, and a FIT with one byte changed after signing fails at `Bad hash value for 'hash-1'`. Zephyr never starts in either case. -Below that link, nothing is checked against your key. Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon. Until that key is fused, the SoC is in its development state: the ROM and the vendor's firmware still check the boot files, but any key passes. TI calls the two states HS-FS (High Security, Field Securable) and HS-SE (High Security, Security Enforced), and U-Boot's banner on the EVM read `SoC: AM62LX SR1.1 HS-FS`. In QEMU there is less still: no ROM, no security firmware and no eFuses, and you hand `u-boot.bin` to the machine on the command line. +Below that link, nothing is checked against your key. In QEMU there is nothing below it at all: no ROM, no security firmware and no eFuses, and you hand `u-boot.bin` to the machine on the command line. On the board those stages exist, which is the whole reason to repeat the work there. Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon. Until that key is fused, the SoC is in its development state: the ROM and the vendor's firmware still check the boot files, but any key passes. TI calls the two states HS-FS (High Security, Field Securable) and HS-SE (High Security, Security Enforced), and U-Boot's banner on the EVM read `SoC: AM62LX SR1.1 HS-FS`. So the key that matters, the public half of `key-a`, travels inside `u-boot.img` on an unprotected FAT partition, where anyone who can write the boot media can swap it for their own. Your chain of trust starts on the card, not in the silicon. Moving it there is what the rest of this page is about. @@ -19,11 +19,11 @@ So the key that matters, the public half of `key-a`, travels inside `u-boot.img` ### Fuse your key and move to the production state -On TI devices the procedure is the keywriter, which burns your key into the eFuses and moves the chip to HS-SE; you then re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with that key. From then on the ROM and the security firmware refuse any boot file that isn't signed with your key, U-Boot included, so the `key-a` public half inside it is itself authenticated. The procedure is vendor-specific and out of scope here. +On TI devices the tool is the OTP Keywriter, called Keywriter Lite on the AM62L; it burns the hash of your public key into the eFuses and moves the chip to HS-SE. You then re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with that key. From then on the ROM and the security firmware refuse any boot file that isn't signed with your key, U-Boot included, so the `key-a` public half inside it is itself authenticated. The procedure is vendor-specific and out of scope here. ### Keep the environment built in -`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. Both builds end up with `CONFIG_ENV_IS_NOWHERE=y`, the AM62L from its defconfig and QEMU from the target block you added, so `saveenv` has nowhere to write and both variables always come from the binary you built. Check your board's `.config` for the same line, and keep it that way: a writable environment is a writable boot command. +`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. Both builds end up with `CONFIG_ENV_IS_NOWHERE=y`, QEMU from the target block you added and the AM62L from its defconfig, so `saveenv` has nowhere to write and both variables always come from the binary you built. Check your board's `.config` for the same line, and keep it that way: a writable environment is a writable boot command. {{% notice Warning %}} Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the environment in `uboot.env` on the boot media: a saved environment overrides `bootcmd` and `preboot`, so anyone with the card can skip the check. @@ -49,7 +49,7 @@ Every target-specific value sits in the `# Target values` block of your environm - `UBOOT_SRC`, `CROSS` and `UBOOT_CC` point at the U-Boot source and the compiler that builds it, with `SDK`, `PREBUILT` and `SYSROOT` added when they come from a vendor SDK, as on the AM62L. - `BOOT_IMG` is the boot volume `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. -Two things sit outside the environment file. The `make` line that builds U-Boot takes whatever the target's tree expects: `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, `EXT_DTB` in QEMU, and the tree names its own outputs, often `u-boot.img` or `u-boot.itb` plus an SPL file. The boot page follows the target's own media, switches and console. +Two things sit outside the environment file. The `make` line that builds U-Boot takes whatever the target's tree expects: `EXT_DTB` in QEMU, and `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, and the tree names its own outputs, often `u-boot.img` or `u-boot.itb` plus an SPL file. The boot page follows the target's own media, switches and console. The last difference is how the key reaches the control device tree. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds that tree from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`), as the AM62L does. A board that takes its device tree from a prior stage (`CONFIG_OF_BOARD=y`) has no tree of its own to add a node to; the QEMU option shows the way around it, merging `signature.dtsi` into a dump of that tree and building with `EXT_DTB=`. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index bffcaf0087..80523cf8ff 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -1,7 +1,7 @@ --- title: Boot Zephyr from a signed FIT image with U-Boot on Arm Cortex-A -description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on Arm Cortex-A only after U-Boot verifies it, on a TI AM62L EVM or in QEMU with no hardware. +description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on Arm Cortex-A only after U-Boot verifies it, in QEMU with no hardware and then on a TI AM62L EVM. minutes_to_complete: 120 @@ -14,8 +14,8 @@ learning_objectives: - Explain what a board in its development state, and what an emulator, each leave unverified, and what a production device needs on top prerequisites: - - One of two targets, either a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card and an SD card reader for your host, a micro-USB cable for the console and a USB-C Power Delivery (PD) power supply, or QEMU, which needs no hardware at all - - A Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space for the AM62L EVM or 5 GB for QEMU; the EVM also needs an x86_64 host, because the TI SDK ships its installer and cross compiler as x86_64 binaries only + - One of two targets, either QEMU, which needs no hardware at all, or a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card and an SD card reader for your host, a micro-USB cable for the console and a USB-C Power Delivery (PD) power supply + - A Linux host running Ubuntu 22.04 or 24.04, with about 5 GB of free disk space for QEMU or 20 GB for the AM62L EVM; the EVM also needs an x86_64 host, because the TI SDK ships its installer and cross compiler as x86_64 binaries only - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line From 783b93798c36b2023919c0ff6e382e9b1726e901 Mon Sep 17 00:00:00 2001 From: Patrick Wang Date: Wed, 23 Sep 2026 10:10:08 +0800 Subject: [PATCH 13/66] add OMM on Mali introduction. --- .../1-why-masked-geometry-needs-omm.md | 86 +++++++++++ .../2-understand-microtriangles-and-states.md | 103 +++++++++++++ .../3-follow-omm-from-baking-to-traversal.md | 107 +++++++++++++ .../4-understand-mali-hardware-omm.md | 96 ++++++++++++ .../5-check-support-and-tradeoffs.md | 140 ++++++++++++++++++ .../6-review-the-omm-mental-model.md | 117 +++++++++++++++ .../omm-mali-intro/_index.md | 57 +++++++ .../omm-mali-intro/_next-steps.md | 8 + .../omm-introduction/01-masked-geometry.svg | 9 ++ .../02-microtriangle-states.svg | 9 ++ .../omm-introduction/03-omm-lifecycle.svg | 11 ++ .../04-mali-hardware-flow.svg | 13 ++ .../omm-introduction/05-support-stack.svg | 14 ++ .../06-responsibility-map.svg | 10 ++ 14 files changed, 780 insertions(+) create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_next-steps.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md new file mode 100644 index 0000000000..916dddb9c5 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md @@ -0,0 +1,86 @@ +--- +title: Why masked geometry needs OMM +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +Opacity Micromaps (OMM) solve a specific ray tracing problem. A ray hits a triangle, but the renderer still needs to check the alpha mask. + +## Separate geometry from opacity + +Foliage, wire mesh and grilles often use simple geometry. A leaf Quad contains two triangles that cover a rectangle. + +An alpha texture creates the visible leaf shape. A cutoff value divides the texture into visible and transparent regions. + +You can think of the asset as two data layers: + +- Geometry tells traversal where the triangles are. +- Opacity tells traversal whether a hit position is visible. + +![Relationship among geometry, the alpha mask, and a candidate hit](images/omm-introduction/01-masked-geometry.svg) + +The figure shows the complete Quad first. It then shows the leaf shape from the alpha mask. The final panel shows a ray hitting the transparent part of the Quad. + +The triangle hit remains valid. Traversal needs opacity data to accept the hit or continue through it. + +## Compare rasterization with ray traversal + +Rasterization creates fragments before a pixel shader checks the alpha texture. The shader discards a fragment when it fails the cutoff. + +Ray traversal starts with geometry in an acceleration structure. It finds a ray-triangle intersection before it knows the alpha result. + +For opaque geometry, the intersection provides a clear answer. For masked geometry, the intersection becomes a candidate hit. The hit position can still fall outside the visible shape. + +An engine can run an any-hit shader or material code to check the mask. This path supports detailed material logic. It also repeats similar work for every candidate hit. + +## Follow a ray through foliage + +A tree can contain thousands of leaf Quads. Shadow rays and reflection rays can pass through many overlapping leaves. + +One ray can follow this sequence: + +1. The ray hits the first leaf Quad. +2. The alpha mask marks the hit position as transparent. +3. Traversal continues to the next Quad. +4. The renderer checks opacity again. +5. The process ends at an opaque region or when the ray leaves the scene. + +One opacity check is small. Many primitives, overlapping leaves, and many rays increase the total work. + +## Add OMM to the traversal path + +OMM stores opacity states for small regions inside each original triangle. These regions are called microtriangles. + +After the ray hits a triangle, traversal uses the hit position to select one microtriangle. It then reads one of these results: + +- `opaque`: accept the region as opaque; +- `transparent`: ignore the region and continue traversal; +- `unknown`: send the candidate to the shader path for more work. + +```text +Original triangle + + +Microtriangle opacity states + = +Earlier opacity decisions during traversal +``` + +OMM keeps the original mesh and material. It adds a compact data layer that traversal can read. + +## Identify suitable content + +Start with alpha-tested content that uses stable masks. The following table shows common patterns. + +| Content | OMM data pattern | Main setting to check | +| --- | --- | --- | +| Foliage | Large opaque and transparent regions with a narrow edge | UVs, cutoff, subdivision, and deformation | +| Chain-link fence | Small, repeated holes | Wire width and microtriangle density | +| Grille | Stable binary cutouts | Triangle size and texture frequency | +| Animated mask | Opacity changes at runtime | Update plan and shader path | +| Alpha-blended surface | Continuous transparency | Use an alpha-blending rendering path | + +When you review an asset, ask how many opacity results the baker can calculate before runtime. OMM works best when traversal can reuse many resolved results. + +The next module explains how subdivision and OMM states store those results. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md new file mode 100644 index 0000000000..9b15ee5bd4 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md @@ -0,0 +1,103 @@ +--- +title: Understand microtriangles and opacity states +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +An opacity micromap divides an original triangle into smaller regions called microtriangles. OMM stores one opacity state for each region. + +## Treat microtriangles as data + +The microtriangle grid belongs to the OMM data. It does not add polygons to the source mesh. + +The BLAS still contains the original triangles. OMM gives traversal a finer map inside each triangle. + +![A leaf Quad, its microtriangle grid, and three opacity states](images/omm-introduction/02-microtriangle-states.svg) + +The figure keeps the Quad and its two original triangles. It places a microtriangle grid over them. + +The enlarged area shows three states. Green regions are opaque, white regions are transparent, and yellow regions are unknown. + +## Choose a subdivision level + +The subdivision level controls the number of microtriangles. Each new level divides every microtriangle into four smaller regions. + +For level `N`, use this formula: + +```text +microtriangle count = 4^N = 2^(2N) +``` + +| Subdivision level | Microtriangles per original triangle | Typical detail | +| ---: | ---: | --- | +| 0 | 1 | One state for the complete triangle | +| 1 | 4 | A very coarse cutout | +| 2 | 16 | Large changes in the silhouette | +| 3 | 64 | Curved alpha edges | +| 4 | 256 | Fine detail with higher data cost | + +Each level increases the data by four times. Compare the triangle size with the alpha texture detail before you select a level. + +A large triangle with a detailed mask needs finer data. A mesh with many small triangles can often use a lower level. + +## Use 2-state and 4-state formats + +`VK_KHR_opacity_micromap` defines two formats. + +| Format | State | Traversal action | +| --- | --- | --- | +| 2-state | Fully transparent | Ignore the hit and continue traversal | +| 2-state | Fully opaque | Handle the region as opaque | +| 4-state | Fully transparent | Use the same transparent action | +| 4-state | Fully opaque | Use the same opaque action | +| 4-state | Unknown-transparent | Keep the shader path with a transparent default | +| 4-state | Unknown-opaque | Keep the shader path with an opaque default | + +The `4-state` format adds two unknown values. Both keep the shader path available. Their default opacity behavior is different. + +In the rest of this Learning Path, `unknown` refers to either unknown value unless the distinction matters. + +These formats support two common game-content strategies. A `4-state` OMM can use low or moderate subdivision and reserve fine alpha edges for shader evaluation through unknown states. A `2-state` OMM can use finer subdivision to classify every microtriangle as opaque or transparent and avoid opacity any-hit shading, or equivalent ray query candidate evaluation, for that OMM geometry. + +Treat these strategies as starting points, not fixed presets. Mask detail, triangle density, quality targets, and OMM resource cost determine the right choice. *Check support conditions and tradeoffs* compares the two strategies. + +## Understand the alpha boundary + +The baker compares each microtriangle with the alpha cutoff. + +- A region inside the visible shape becomes opaque. +- A region outside the visible shape becomes transparent. +- A region that crosses the edge often becomes unknown. + +For a leaf, you normally see opaque data across the interior. Transparent data fills the Quad outside the leaf. Unknown data follows the edge, notches, and thin stem. + +If unknown data covers most of the Quad, check these items: + +- subdivision level; +- alpha filtering; +- texture detail and UV scale; +- material logic that the baker reads. + +## Link data to each original triangle + +OMM records data for each original triangle. A record contains a data offset, subdivision level, and format. + +The engine also keeps a triangle mapping. This mapping links each source triangle to its OMM record. + +You can use a special state when one complete triangle has one result. For example, a triangle can be fully opaque or fully transparent. This saves space because it needs no microtriangle payload. + +## Balance accuracy and cost + +Use opacity states that preserve the rendered result. A wrong transparent state can remove a valid hit. A wrong opaque state can add false occlusion. + +Unknown keeps the result safe when the baker cannot resolve a region. More unknown data also sends more candidates to the shader path. + +Balance three settings for each asset: + +1. Subdivision controls edge accuracy. +2. The format controls the available states. +3. Unknown coverage controls how much work remains for the shader path. + +The next module follows this data from the baker to runtime traversal. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md new file mode 100644 index 0000000000..505246676f --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md @@ -0,0 +1,107 @@ +--- +title: Follow OMM from baking to traversal +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +OMM uses one data path from content authoring to runtime traversal. The baker creates states. The engine links them to triangles and builds runtime geometry. + +![OMM lifecycle from content inputs to runtime traversal](images/omm-introduction/03-omm-lifecycle.svg) + +The figure shows five stages. Each stage passes data to the next stage. A completed bake is only the middle of the path. + +## 1. Prepare the source data + +The baker needs these inputs: + +- source mesh and triangle order; +- UV coordinates; +- alpha texture or material opacity data; +- alpha cutoff and texture sampling settings; +- subdivision level and OMM format. + +Keep these inputs on the same asset version. A changed mesh, UV layout, or alpha texture can make older OMM data invalid. + +For animated or deformed content, define when you reuse or rebuild the data. Also define which LODs use OMM. + +## 2. Bake the opacity states + +The baker reads the alpha data in each source triangle. It creates the microtriangle grid and assigns one state to each region. + +The output contains more than a debug image. It includes: + +- packed opacity states; +- one subdivision level and format for each OMM triangle; +- a link from source triangles to OMM records; +- sizes and counts that the engine uses for the GPU build. + +Keep the triangle order stable after the bake. If a mesh tool reorders triangles, regenerate the triangle links. + +## 3. Build the micromap resource + +At load time, the engine copies the baked data to GPU buffers. It queries the required sizes and allocates result and scratch storage. + +The engine then builds the micromap. In the Vulkan KHR path, Vulkan stores the micromap in a `VkAccelerationStructureKHR` object. + +The engine also adds the required synchronization. It keeps the final micromap alive while the BLAS and traversal use it. + +## 4. Link OMM to source triangles + +The engine links each original triangle to one OMM record. This link tells traversal which data belongs to a triangle hit. + +A mesh section can use several link types: + +- a link to complete microtriangle data; +- a fully opaque special state; +- a fully transparent special state; +- an unknown special state; +- the standard shader path for selected geometry. + +Treat these as separate milestones: + +1. The asset contains baked OMM data. +2. The GPU contains a built micromap. +3. Runtime geometry links triangles to that micromap. + +## 5. Build the BLAS + +The engine adds the triangle links to the BLAS geometry description. Scene instances can then reference OMM-enabled geometry through the TLAS. + +The runtime path also checks: + +- device features and limits; +- ray pipeline or ray query settings; +- instance controls; +- resource lifetime and rebuild rules. + +When an editor reports a successful bake, verify the BLAS as well. Use a debug or capture tool to confirm the triangle links. + +## 6. Read OMM during traversal + +At runtime, the ray follows this order: + +1. Traversal searches the TLAS and BLAS. +2. The ray intersects an original triangle. +3. The hit position selects one microtriangle. +4. Hardware reads the linked OMM state. +5. Opaque accepts the region. +6. Transparent continues traversal. +7. Unknown keeps the shader path. + +The ray reaches geometry before it reads OMM. The colored cells in the figure only show the data linked to that geometry. + +## Find the stage that causes a problem + +Use the symptom to select your first check. + +| Symptom | Check first | +| --- | --- | +| Missing leaf edges or false shadows | Alpha source, cutoff, UVs, and baked states | +| The asset contains OMM but the BLAS does not | Triangle links and BLAS build input | +| The micromap builds but traversal does not use it | Device, driver, pipeline, and runtime settings | +| Most regions are unknown | Subdivision, format, and alpha sampling | +| An LOD change creates artifacts | Per-LOD data, links, and rebuild rules | + +This staged view separates content errors from runtime integration errors. The next module shows how Arm Mali G2 reads the final states. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md new file mode 100644 index 0000000000..8f3b504274 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md @@ -0,0 +1,96 @@ +--- +title: Understand hardware OMM on Arm Mali G2 +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +Arm Mali G2 supports OMM in the ray tracing path. Traversal can read microtriangle states that the engine links to triangle geometry. + +![Arm Mali G2 using OMM states during traversal](images/omm-introduction/04-mali-hardware-flow.svg) + +The figure shows the runtime order. The ray traverses the scene, hits a triangle, reads OMM, and follows one of three paths. + +## Prepare data for Mali hardware + +Software prepares the data before traversal starts. The runtime path includes: + +- original triangle geometry; +- a built opacity micromap; +- links from triangles to OMM records; +- subdivision levels and formats; +- enabled pipeline, shader, and instance settings. + +Mali hardware reads one compact state for the hit region. It does not need the complete material graph for a resolved opaque or transparent state. + +## Follow the hardware decision + +The acceleration structure first removes geometry that the ray cannot reach. Traversal then finds a possible triangle hit. + +The hit position selects one microtriangle in the linked OMM data. + +| OMM state | Traversal action | Result | +| --- | --- | --- | +| Fully opaque | Accept the region as opaque | Continue with opaque-hit handling | +| Fully transparent | Ignore the region | Search behind the triangle | +| Unknown-transparent | Keep the shader path | Start with a transparent default | +| Unknown-opaque | Keep the shader path | Start with an opaque default | + +The `2-state` format uses the first two states. The `4-state` format also uses both unknown states. + +On a Mali device that exposes OMM and the required format and subdivision limits, either content strategy can use hardware traversal. Select the strategy per asset instead of treating one format as the Mali default. + +## Keep more opacity work in traversal + +Without OMM, masked candidate hits often run shader code that samples the alpha texture. This work can include material setup, texture access, and control flow. + +OMM gives hardware a compact answer for each resolved region. More resolved hits mean fewer candidates reach the shader path. + +When you estimate the value of OMM, check these workload properties: + +- How often do rays hit masked geometry? +- Do the main masked assets use OMM? +- What percentage of hit regions are opaque or transparent? +- Does unknown data stay close to alpha edges? +- How much memory and build work does the OMM use? +- How much of the frame still comes from other GPU work? + +These properties explain why results vary by scene and camera view. + +## Connect Vulkan to Mali hardware + +`VK_KHR_opacity_micromap` defines the interface between the engine and driver. It covers: + +- feature and property queries; +- OMM formats and build inputs; +- links between OMM and triangle geometry; +- controls for traversal. + +On a Mali system, the driver connects these Vulkan operations to the hardware OMM path. + +An engine or RHI performs five main tasks: + +1. Query OMM features and limits. +2. Create and build the micromap. +3. Link OMM records during the BLAS build. +4. Enable OMM for ray pipelines or ray queries. +5. Manage resources, synchronization, and shader fallback. + +This interface lets you use the same Vulkan behavior while the Mali driver handles device execution. + +## Use OMM with ray pipelines and ray queries + +Ray pipelines and ray queries both traverse acceleration structures. Both can read OMM data linked to triangle geometry. + +They use different enablement controls. Ray pipelines use pipeline settings. A ray query shader uses the `OpacityMicromapKHR` SPIR-V execution mode. In GLSL, `layout(constant_id = N) gl_EnableOpacityMicromapExt;` exposes this mode through a specialization constant. + +> **Ray query correctness requirement** +> +> Every shader that executes a ray query against an acceleration structure that can contain OMM data must declare `OpacityMicromapKHR`, and its value must resolve to `true`. Traversing such an acceleration structure without enabling this execution mode is undefined behavior. The implementation does not automatically fall back to shader-side opacity evaluation. + +Gate the ray query path with both device support and shader configuration. A shader with the execution mode omitted or specialized to `false` must not traverse an acceleration structure that contains OMM data. See [Inside the Traversal: How the GPU Uses Your Micromap](https://docs.vulkan.org/tutorial/latest/Building_a_Simple_Engine/Courses/Opacity_Micromaps/04_hardware_traversal_with_omm.html) for the Vulkan requirement. + +The responsibility handoff is simple. The baker creates states, the engine links them, the driver enables the path, and Mali hardware reads them. + +The next module shows every layer that supports this handoff. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md new file mode 100644 index 0000000000..fec9f6cacd --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md @@ -0,0 +1,140 @@ +--- +title: Check support conditions and tradeoffs +weight: 6 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +OMM needs support from content, tools, the API, the driver, the engine, and hardware. Each layer passes valid data to the next layer. + +![Complete OMM support chain from content to validation](images/omm-introduction/05-support-stack.svg) + +Use the figure to find the source of a problem. Start with content for image errors. Start with runtime geometry for missing OMM links. + +## Check the content + +OMM data matches one mesh, UV layout, alpha source, and cutoff value. Record these inputs for every asset. + +Check the following items: + +- Does the asset take part in ray tracing? +- Does its opacity pattern stay stable? +- Does each mesh LOD use the correct UV layout? +- Does the texture contain enough detail for the selected subdivision? +- How does animation or deformation change the asset? +- Do the baker and material use the same cutoff and filtering? + +Use different settings for different asset types. A fence, a leaf, and a hair card do not need the same subdivision level. + +## Query Vulkan support + +`VK_KHR_opacity_micromap` defines the Vulkan OMM path. Query the `micromap` feature before you create OMM resources. + +Also query these limits: + +- maximum `2-state` subdivision level; +- maximum `4-state` subdivision level; +- lossy `4-state` subdivision limit; +- maximum number of OMM triangles. + +Store these values in the device capability data. Your engine can use them for asset loading, quality settings, and pipeline creation. + +Extension support, driver support, and engine enablement are separate checks. Confirm all three. + +## Define the unsupported fallback + +Treat OMM support as a runtime capability branch. Do not assume that every device or rendering path can use it. + +If the extension is absent, the `micromap` feature is `VK_FALSE`, or the required driver or engine path is unavailable: + +1. Do not create or build OMM resources. +2. Do not attach OMM data when building the BLAS. +3. Build the BLAS through the original alpha-tested geometry path. +4. Keep shader-side opacity evaluation active. A ray pipeline uses its any-hit path; a ray query uses its existing candidate-handling path. +5. Use the same alpha source, filtering, cutoff, and material logic so the rendered result remains equivalent. +6. Expect performance to return to the pre-OMM baseline instead of changing the image or failing the render path. + +This device-level fallback differs from an `Unknown` microtriangle. Unsupported hardware uses no OMM data. An `Unknown` state occurs only on the supported OMM path and sends that individual candidate to shader-side evaluation. See [Seeing the Difference and Knowing When to Use It](https://docs.vulkan.org/tutorial/latest/Building_a_Simple_Engine/Courses/Opacity_Micromaps/06_results_guidance_and_tradeoffs.html) for the Vulkan fallback guidance. + +## Connect the driver and engine + +The Mali driver exposes Vulkan OMM features. The engine or RHI creates the resources and links them to geometry. + +The engine handles these core tasks: + +- query OMM sizes; +- allocate result and scratch buffers; +- build the micromap; +- link source triangles to OMM records; +- build the BLAS; +- enable ray pipeline or ray query controls; +- keep resources alive for traversal. + +A baked asset needs this runtime path before hardware can read its states. + +## Choose a format and subdivision strategy + +Format and subdivision work together. Choose them from the content and the amount of shader-side opacity evaluation that the frame can afford. + +Two common game-content strategies are useful starting points: + +| Strategy | OMM setup | Runtime behavior | Good fit | Main tradeoff | +| --- | --- | --- | --- | --- | +| Shader-assisted edge detail | `4-state` with low or moderate subdivision | Opaque and transparent regions stay in hardware. Unknown edges use any-hit shading or ray query candidate evaluation. | Complex masks that need fine material evaluation at their edges | Some shader-side opacity cost remains | +| Hardware-resolved binary detail | `2-state` with higher subdivision, approaching alpha-mask texel detail at the target LOD | Every microtriangle is opaque or transparent. OMM candidates do not enter opacity any-hit shading or equivalent ray query evaluation. | Stable binary masks where avoiding shader-side opacity work is the priority | More microtriangles, build work, and resource use | + +The `4-state` strategy can limit OMM data by accepting controlled unknown coverage. The `2-state` strategy spends more OMM detail to remove unknown states. It can fully avoid shader-side opacity evaluation for that OMM geometry, but only if the binary bake still meets the image-quality target. + +Do not map subdivision directly to screen pixels. Compare triangle size with alpha-mask texel detail at the intended LOD and camera range. Each additional subdivision level multiplies the microtriangle count by four. Although `2-state` stores one bit per microtriangle, a sufficiently high level can still cost more than a lower-level `4-state` OMM. + +Do not confuse compact `2-state` encoding with Vulkan lossy micromap builds. Lossy build support applies to `4-state`, is bounded by `maxOpacityLossy4StateSubdivisionLevel`, and is a separate quality and resource lever. Query the device limits before selecting it. See the [Vulkan micromap data format](https://docs.vulkan.org/spec/latest/chapters/VK_KHR_opacity_micromap/micromaps.html) and [VK_KHR_opacity_micromap proposal](https://docs.vulkan.org/features/latest/features/proposals/VK_KHR_opacity_micromap.html). + +## Review unknown coverage + +Unknown keeps the shader path available for a difficult region. It protects image correctness around alpha edges. + +For a typical cutout, unknown data forms a narrow edge. Large unknown areas leave more work for the shader path. + +If unknown covers most of the OMM, check: + +- subdivision level; +- texture detail and UV scale; +- alpha filtering; +- cutoff value; +- material logic available to the baker. + +## Account for resource cost + +OMM adds data and build work. Track each cost separately. + +| Cost | Source | Control | +| --- | --- | --- | +| Asset storage | Baked triangle data | Format, subdivision, build mode, and selected asset coverage | +| GPU memory | Built OMM resources | Streaming, LOD rules, and resource sharing | +| Build time | OMM and BLAS builds | Cached data and batched builds | +| Scratch memory | Temporary build storage | Pools and buffer reuse | +| Update work | Dynamic geometry or opacity | Rebuild rules and shader fallback | + +Static foliage can reuse OMM data for a long time. Dynamic content needs a clear update plan. + +## Validate the image and runtime path + +Check the rendered result first: + +- leaf edges, stems, and cutout holes; +- shadows, reflections, and visibility results; +- mips, LODs, camera distance, and animation; +- OMM and forced unsupported fallback rendering against the same reference image. + +Then check the runtime data: + +- device features and limits, including a forced OMM-off test; +- successful OMM build and BLAS triangle links on the supported path; +- no OMM resources or links, with shader-side opacity evaluation active on the fallback path; +- selected strategy, format, subdivision values, and unknown ratio; +- active pipeline, shader, and instance controls; +- `OpacityMicromapKHR` resolves to `true` for every ray query shader that can access OMM data; +- OMM state in a debug or capture tool. + +This support chain turns OMM into a feature you can inspect and maintain. The final module maps each stage to the team that owns it. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md new file mode 100644 index 0000000000..4a8b5e459c --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md @@ -0,0 +1,117 @@ +--- +title: Connect OMM to the Mali hardware path +weight: 7 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +OMM crosses four areas: content, the engine, the API and driver, and Mali hardware. Each area owns a clear part of the data path. + +![Responsibility map across the OMM pipeline](images/omm-introduction/06-responsibility-map.svg) + +Use the figure during design reviews and debugging. It helps you find the owner of each input and output. + +## Prepare content and OMM data + +The content team selects masked assets and defines their OMM settings. + +For each asset, record: + +- mesh and UV version; +- alpha texture and cutoff; +- LOD settings; +- subdivision level; +- `2-state` or `4-state` format; +- animation and rebuild rules. + +Link every bake to a source asset version. When the mesh, UVs, or mask changes, regenerate the OMM data. + +## Build runtime geometry + +The engine converts baked data into GPU resources. It keeps the triangle links and includes OMM in the BLAS build. + +The engine also: + +- selects settings that fit the device limits; +- enables OMM for selected LODs and ray paths; +- manages OMM, scratch, and BLAS resources; +- rebuilds data after streaming or scene changes; +- exposes debug controls and capture labels; +- reports build and support errors. + +These controls make OMM visible to developers. You can tell whether the problem starts in content or runtime integration. + +## Connect Vulkan and the driver + +Vulkan defines the OMM interface between the engine and driver. + +The engine supplies features, resource descriptions, build inputs, synchronization, and triangle links. The driver validates the inputs and creates the device data. + +The driver also reports supported formats and subdivision limits. Your engine uses these values to select compatible asset data. + +If one package supports several devices, prepare suitable quality settings for each capability level. + +## Read states on Mali hardware + +Arm Mali G2 reads the linked OMM during acceleration-structure traversal. + +After a ray hits a triangle, hardware selects the matching microtriangle state. It accepts opaque, continues through transparent, or keeps the shader path for unknown. + +Hardware receives compact states and triangle links. It relies on the earlier stages to prepare correct data. + +## Follow one ginkgo leaf from asset to ray hit + +The following example connects every stage: + +1. An artist creates a leaf Quad with two triangles. +2. An alpha mask defines the fan-shaped leaf and narrow stem. +3. The asset settings select a cutoff, `4-state` format, and subdivision level. +4. The baker reads the triangles, UVs, and alpha texture. +5. It marks the leaf interior as opaque and the outer area as transparent. +6. It marks edge regions as unknown. +7. The engine builds the OMM resource. +8. It links both source triangles to their OMM records. +9. The BLAS build includes those links. +10. A scene instance references the BLAS through the TLAS. +11. A ray hits one triangle and selects a microtriangle. +12. Mali hardware reads the state and selects the next action. + +This sequence shows the boundary between software and hardware. Software prepares the opacity data. Hardware reads it during traversal. + +This example uses the shader-assisted strategy: `4-state` keeps the OMM at a moderate subdivision level and sends only unknown edge regions to shader-side opacity evaluation. + +### Compare the 2-state alternative + +The same leaf can use a hardware-resolved binary strategy: + +- keep the same alpha source, cutoff, UVs, and target LOD; +- select a higher subdivision level that approaches the required alpha-mask texel detail; +- bake every microtriangle as opaque or transparent with `2-state`; +- compare the silhouette and shadow against the `4-state` reference; +- measure OMM resource size, build time, and shader-side opacity work. + +The `2-state` path has no unknown regions, so Mali hardware resolves every OMM candidate for that geometry without opacity any-hit shading or equivalent ray query evaluation. Adopt it only when the binary result preserves the required image quality and its additional OMM detail fits the resource budget. + +## Map problems to owners + +| Observation | Start with | Inspect | +| --- | --- | --- | +| The leaf loses edge detail | Content and baker | Cutoff, UVs, subdivision, and states | +| The OMM build fails | Engine, RHI, and driver | Features, sizes, buffers, and synchronization | +| The BLAS has no OMM links | Engine and RHI | Triangle mapping and BLAS input | +| One device does not enable OMM | Engine and driver | Extension, features, limits, and pipeline settings | +| Unknown covers too much area | Content and baker | Texture detail, format, subdivision, and filtering | +| OMM and reference images differ | All owners | Asset version, links, states, and runtime controls | + +## Keep the feature maintainable + +Store useful OMM data in asset reports. Include triangle coverage, subdivision levels, state ratios, resource size, and the source version. + +Use these reports to find unusual assets. They also help you estimate memory and build work. + +Start with stable foliage or cutout structures. Build a visual baseline and resource settings. Then expand to more complex content. + +OMM acts as a contract. Software prepares per-triangle opacity states, and Arm Mali G2 consumes them during traversal. + +Keep the asset version, triangle links, and state meanings consistent. This makes OMM easier to validate, debug, and extend. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md new file mode 100644 index 0000000000..85b2a73f50 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md @@ -0,0 +1,57 @@ +--- +title: Understand Opacity Micromaps and hardware OMM on Arm Mali G2 + +description: Learn how OMM stores opacity data, follow that data from baking to ray traversal, and understand hardware OMM on Arm Mali G2. + +minutes_to_complete: 30 + +who_is_this_for: Use this Learning Path if you develop game graphics and want to understand Opacity Micromaps and hardware OMM on Arm Mali G2. + +learning_objectives: + - Explain why alpha-tested geometry can require extra opacity work during ray traversal. + - Describe microtriangles, subdivision levels, and the OMM opacity states. + - Trace OMM data from authoring and baking through triangle links and acceleration-structure traversal. + - Explain how Arm Mali G2 hardware OMM handles opacity decisions during ray traversal. + - Identify the API, driver, engine, and content conditions required to use OMM. + - Recognize OMM tradeoffs and distinguish it from general transparency acceleration. + +prerequisites: + - Basic familiarity with triangle geometry and alpha-tested materials + - Basic familiarity with ray tracing intersections and acceleration structures + +author: Patrick Wang + +### Tags +skilllevels: Introductory +subjects: Gaming +armips: + - Mali +tools_software_languages: + - Vulkan +operatingsystems: + - Any + +further_reading: + - resource: + title: VK_KHR_opacity_micromap + link: https://registry.khronos.org/vulkan/specs/latest/man/html/VK_KHR_opacity_micromap.html + type: documentation + - resource: + title: Vulkan opacity micromap chapter + link: https://docs.vulkan.org/spec/latest/chapters/VK_KHR_opacity_micromap/micromaps.html + type: documentation + - resource: + title: VK_KHR_opacity_micromap proposal + link: https://docs.vulkan.org/features/latest/features/proposals/VK_KHR_opacity_micromap.html + type: documentation + - resource: + title: NVIDIA Opacity MicroMap SDK + link: https://github.com/NVIDIA-RTX/OMM + type: website + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 +layout: "learningpathall" +learning_path_main_page: "yes" +--- diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_next-steps.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_next-steps.md new file mode 100644 index 0000000000..e20dfa6d43 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 +title: "Next Steps" +layout: "learningpathall" +--- diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg new file mode 100644 index 0000000000..fdc2ce9bbe --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg @@ -0,0 +1,9 @@ + +Masked geometry creates an opacity question + +Why masked geometry needs an opacity decision +1. GeometryTraversal sees the complete QuadTwo original triangles +2. Alpha maskThe mask defines the silhouetteLeaf plus transparent area +3. Candidate hitThe position needs an answerOpacity evaluation +Geometry provides the intersection; opacity information decides visibility. + diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg new file mode 100644 index 0000000000..5cc5c39ede --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg @@ -0,0 +1,9 @@ + +Opacity states at microtriangle granularity + +OMM stores opacity at microtriangle granularity +Original Quad with OMM overlay +Boundary cells enlarged +OpaqueTransparentUnknown +The grid covers each original triangle; alpha boundaries commonly produce unknown states. + diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg new file mode 100644 index 0000000000..d4b6e2f869 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg @@ -0,0 +1,11 @@ + +OMM lifecycle from authoring to traversal + +OMM is an end-to-end data path +1Content inputsMeshUVsAlpha informationTriangle mapping +2Bake statesSample opacitySelect subdivisionClassify regionsCreate records +3Micromap dataPer triangleFormat + levelState storage +4Attach + buildMap trianglesAssociate OMMBuild BLAS +5TraversalTriangle hitState lookupOpacity action +Baking creates micromap dataTriangle association and BLAS build make it available to traversal + diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg new file mode 100644 index 0000000000..82f09427ec --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg @@ -0,0 +1,13 @@ + +Arm Mali G2 hardware OMM flow + +Arm Mali G2 hardware OMM in the traversal path +Scene traversalSearch accelerationstructure +Triangle hitLocate intersected region +Hardware OMM lookupAttached triangle dataMicrotriangle state + +OpaqueAccept +TransparentContinue +UnknownFallback +Content, API, driver, and engine prepare the OMM pathMali hardware consumes attached states during traversal + diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg new file mode 100644 index 0000000000..b0ae2566af --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg @@ -0,0 +1,14 @@ + +Complete OMM support chain + +OMM depends on a complete support chain +1. ContentStable alpha-tested pattern +2. BakerMesh + UV + alpha → states +3. Vulkan featureCapability and properties +4. Mali driverTarget API path exposed +5. Engine / RHIResource and build integration +6. Runtime geometryTriangle association + BLAS +7. ValidationVisual result + active OMM state +Data moves through every layerEach stage prepares valid OMMinformation for the next.Validation closes the loopRendered silhouette and runtimegeometry must describe the same data. +Complete pathOMM ready for traversal + diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg new file mode 100644 index 0000000000..7db53c4c46 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg @@ -0,0 +1,10 @@ + +Responsibilities across the OMM pipeline + +Responsibilities across the OMM pipeline +Content + authoringChoose stable masksProvide mesh and UVsBake opacity statesBalance subdivisionOutput: per-triangle data +Engine / RHICreate OMM resourcesMap source trianglesBuild runtime geometryEnable the pipelineOutput: OMM-enabled BLAS +API + driverExpose feature supportBuild and synchronizeProvide runtime controlsManage device behaviorOutput: execution path +Mali hardwareTraverse scene geometryLocate OMM stateAccept opaque regionsContinue or fallbackOutput: opacity decision +OMM succeeds when every responsibility connects to the next stage.Use this map for design reviews, debugging, and ownership discussions. + From 9ae6cb97f04fbda1940fb463cf0a2baf7fa6c33a Mon Sep 17 00:00:00 2001 From: Patrick Wang Date: Wed, 23 Sep 2026 11:14:39 +0800 Subject: [PATCH 14/66] update tags --- .../omm-mali-intro/5-check-support-and-tradeoffs.md | 2 +- .../mobile-graphics-and-gaming/omm-mali-intro/_index.md | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md index fec9f6cacd..b77effb3b9 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md @@ -25,7 +25,7 @@ Check the following items: - How does animation or deformation change the asset? - Do the baker and material use the same cutoff and filtering? -Use different settings for different asset types. A fence, a leaf, and a hair card do not need the same subdivision level. +Use different settings for different asset types. A fence and a leaf do not need the same subdivision level. ## Query Vulkan support diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md index 85b2a73f50..2831a2cccc 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md @@ -23,13 +23,14 @@ author: Patrick Wang ### Tags skilllevels: Introductory -subjects: Gaming +subjects: Graphics armips: - Mali tools_software_languages: - Vulkan operatingsystems: - - Any + - Windows + - Android further_reading: - resource: From 889b3d2434b5045f32c5f55004f15b0050d27711 Mon Sep 17 00:00:00 2001 From: Roy Jamil Date: Wed, 23 Sep 2026 15:34:21 +0100 Subject: [PATCH 15/66] Add Odin Shen as co-author --- .../zephyr-signed-fit-uboot-cortex-a/_index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 80523cf8ff..1a344d8d2c 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -19,7 +19,9 @@ prerequisites: - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) - Basic knowledge of U-Boot and the Linux command line -author: Roy Jamil +author: + - Roy Jamil + - Odin Shen # New Learning Paths are opted in for the next manual generated summary/FAQ run. # The generator resets this to false after a successful write. From 9f399f920a3c16d2f2867b4481aceace333b38ab Mon Sep 17 00:00:00 2001 From: BelachewRachel Date: Thu, 24 Sep 2026 00:39:26 +0300 Subject: [PATCH 16/66] Provide instructions for AAR building directly in this LP --- .../4-compare-runtime-adapters.md | 76 ++++++++++++++++++- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md index 2cc75a52f1..9e03153ec3 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md +++ b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md @@ -54,13 +54,77 @@ This checks compatibility with the adapter and doesn't evaluate the model's lang ### Prepare the ONNX Runtime GenAI path -The ONNX Runtime GenAI examples use `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. First, complete the [ONNX Runtime GenAI Android Learning Path](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/build-android-chat-app-using-onnxruntime/) to build `onnxruntime-genai-release.aar`. +The ONNX Runtime GenAI examples use `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. Build the AAR from the official ONNX Runtime GenAI source before you apply an ONNX Runtime GenAI adapter. + +Set `ANDROID_HOME` to your Android SDK location. Set `ANDROID_NDK_HOME` to the installed Android NDK directory, or replace it in the commands below. Android Studio installs the SDK and NDK from **Tools > SDK Manager > SDK Tools**. + +{{< tabpane code=true >}} + {{< tab header="macOS or Linux" language="bash" >}} +export WORK_DIR="$HOME/text-to-text-android" +mkdir -p "$WORK_DIR" +cd "$WORK_DIR" + +git clone --recursive https://github.com/microsoft/onnxruntime-genai.git +cd onnxruntime-genai + +python3 -m pip install -r requirements-dev.txt +if ! command -v cmake >/dev/null 2>&1; then + if ! ls -d "$ANDROID_HOME"/cmake/*/bin >/dev/null 2>&1; then + "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" \ + --sdk_root="$ANDROID_HOME" \ + "cmake;3.22.1" + fi + export PATH="$(ls -d "$ANDROID_HOME"/cmake/*/bin | tail -n 1):$PATH" +fi +cmake --version + +python3 build.py --skip_wheel --build_java --android \ + --android_home "$ANDROID_HOME" \ + --android_ndk_path "$ANDROID_NDK_HOME" \ + --android_abi arm64-v8a \ + --config Release + +export ONNX_GENAI_AAR="$PWD/build/Android/Release/src/java/build/android/outputs/aar/onnxruntime-genai-release.aar" +test -f "$ONNX_GENAI_AAR" +cd "$WORK_DIR" + {{< /tab >}} + {{< tab header="Windows PowerShell" language="powershell" >}} +$WORK_DIR = Join-Path $HOME "text-to-text-android" +New-Item -ItemType Directory -Force -Path $WORK_DIR +Set-Location $WORK_DIR + +git clone --recursive https://github.com/microsoft/onnxruntime-genai.git +Set-Location onnxruntime-genai + +python -m pip install -r requirements-dev.txt +if (-not (Get-Command cmake -ErrorAction SilentlyContinue)) { + if (-not (Test-Path "$env:ANDROID_HOME\cmake")) { + & "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat" ` + --sdk_root="$env:ANDROID_HOME" ` + "cmake;3.22.1" + } + $CMAKE_DIR = Get-ChildItem "$env:ANDROID_HOME\cmake" -Directory | Sort-Object Name | Select-Object -Last 1 + $env:PATH = "$($CMAKE_DIR.FullName)\bin;$env:PATH" +} +cmake --version + +python build.py --skip_wheel --build_java --android ` + --android_home "$env:ANDROID_HOME" ` + --android_ndk_path "$env:ANDROID_NDK_HOME" ` + --android_abi arm64-v8a ` + --config Release + +$ONNX_GENAI_AAR = Join-Path $PWD "build\Android\Release\src\java\build\android\outputs\aar\onnxruntime-genai-release.aar" +Test-Path $ONNX_GENAI_AAR +Set-Location $WORK_DIR + {{< /tab >}} +{{< /tabpane >}} Create a separate project and select one ONNX Runtime GenAI example: {{< tabpane code=true >}} {{< tab header="macOS or Linux" language="bash" >}} -cd .. +cd "$WORK_DIR" git clone https://github.com/arm-education/ai-portal-android-app-text-to-text.git \ ai-portal-android-app-text-to-text-onnx cd ai-portal-android-app-text-to-text-onnx @@ -73,12 +137,14 @@ export MODEL_ID="tinyllama-1-1b-chat-onnx-genai-int4-kquantlast-emb-int8-vivo-x3 # export MODEL_ID="llama-3-2-1b-instruct-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" cp -R "adapter-examples/$ONNX_EXAMPLE/app/." app/ +mkdir -p app/libs +cp "$ONNX_GENAI_AAR" app/libs/onnxruntime-genai-release.aar export MODEL_DIR="../model-onnx" ../.hf-venv/bin/hf download "Arm/$MODEL_ID" --local-dir "$MODEL_DIR" {{< /tab >}} {{< tab header="Windows PowerShell" language="powershell" >}} -Set-Location .. +Set-Location $WORK_DIR git clone https://github.com/arm-education/ai-portal-android-app-text-to-text.git ` ai-portal-android-app-text-to-text-onnx Set-Location ai-portal-android-app-text-to-text-onnx @@ -92,13 +158,15 @@ $MODEL_ID = "tinyllama-1-1b-chat-onnx-genai-int4-kquantlast-emb-int8-vivo-x300" Copy-Item -Path "adapter-examples\$ONNX_EXAMPLE\app\*" ` -Destination "app" -Recurse -Force +New-Item -ItemType Directory -Force -Path "app\libs" +Copy-Item -Path $ONNX_GENAI_AAR -Destination "app\libs\onnxruntime-genai-release.aar" -Force $MODEL_DIR = "..\model-onnx" ..\.hf-venv\Scripts\hf.exe download "Arm/$MODEL_ID" --local-dir $MODEL_DIR {{< /tab >}} {{< /tabpane >}} -Copy the generated AAR to `app/libs/onnxruntime-genai-release.aar` before continuing. Keep every file in the downloaded ONNX model directory together, including external model data, `genai_config.json`, tokenizer files, and the chat template. +The commands above copy the generated AAR to `app/libs/onnxruntime-genai-release.aar`. Keep every file in the downloaded ONNX model directory together, including external model data, `genai_config.json`, tokenizer files, and the chat template. ## Build and run the selected alternative From 8ef34a68d31ef78e4f4e83a8183659f901a0b3a8 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 24 Sep 2026 09:24:47 +0000 Subject: [PATCH 17/66] squash commit, initial LP for basic rpi5 profile without camera or quadruped --- .../ros2-device-connect/_index.md | 72 +++++ .../ros2-device-connect/_next-steps.md | 8 + .../ros2-device-connect/background.md | 65 +++++ .../ros2-device-connect/how-it-works.md | 265 ++++++++++++++++++ .../profiles-and-hardware.md | 134 +++++++++ .../ros2-device-connect/setup.md | 122 ++++++++ 6 files changed, 666 insertions(+) create mode 100644 content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_next-steps.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md create mode 100644 content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md new file mode 100644 index 0000000000..26c417e012 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md @@ -0,0 +1,72 @@ +--- +title: Get started with ROS 2 and Device Connect on Arm +description: Learn how to expose a ROS 2 system running in Docker on an Arm-based Linux device as a discoverable Device Connect device, and inspect its ROS 2 graph through remote procedure calls. + +minutes_to_complete: 30 + +who_is_this_for: This is an introductory topic for robotics and edge developers who want to make a ROS 2 system discoverable and callable by other devices and AI agents using Device Connect, without changing the ROS 2 application itself. + +learning_objectives: + - Explain how a Device Connect adapter bridges a containerized ROS 2 system to a Device Connect network + - Set up ROS 2 in Docker and the Device Connect Python packages on an Arm-based Linux machine + - Run the adapter in device-to-device (D2D) mode and call read-only ROS 2 inspection RPCs from a Python client + - Describe how deployment profiles map the same adapter onto real hardware such as a Raspberry Pi 5 with a camera + +prerequisites: + - An Arm-based Linux machine, such as a Raspberry Pi 5, an Arm cloud instance, or an Arm-based laptop, running Ubuntu 22.04 or later + - Basic familiarity with Python, the Linux command line, and ROS 2 concepts such as nodes and topics + +author: Kieran Hejmadi + +# New Learning Paths are opted in for the next manual generated summary/FAQ run. +# The generator resets this to false after a successful write. +generate_summary_faq: true + +# Optional one-shot controls: set either field to true to regenerate just that +# generated section the next time the summary/FAQ tool runs. The tool resets +# them to false after a successful write. +rerun_summary: false +rerun_faqs: false + +### Tags +skilllevels: Introductory +subjects: Libraries +armips: + - Cortex-A + - Neoverse +tools_software_languages: + - ROS 2 + - Docker + - Python + - Zenoh +operatingsystems: + - Linux + +further_reading: + - resource: + title: ros2-device-connect example repository + link: https://github.com/odincodeshen/ros2-device-connect + type: website + - resource: + title: Device Connect repository + link: https://github.com/arm/device-connect + type: website + - resource: + title: ROS 2 documentation + link: https://docs.ros.org/en/humble/ + type: documentation + - resource: + title: Device-to-Device communication with Device Connect + link: /learning-paths/embedded-and-microcontrollers/device-connect-d2d/ + type: website + - resource: + title: Build a ROS 2 and Zenoh simulation environment on an Arm server + link: /learning-paths/cross-platform/ros2-zenoh-arm/ + type: website + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_next-steps.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_next-steps.md new file mode 100644 index 0000000000..727b395ddd --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_next-steps.md @@ -0,0 +1,8 @@ +--- +# ================================================================================ +# FIXED, DO NOT MODIFY THIS FILE +# ================================================================================ +weight: 21 # The weight controls the order of the pages. _index.md always has weight 1. +title: "Next Steps" # Always the same, html page title. +layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing. +--- diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md new file mode 100644 index 0000000000..340c4a0c0f --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md @@ -0,0 +1,65 @@ +--- +title: Understand ROS 2, Device Connect, and the example adapter +description: Learn what ROS 2 and Device Connect each provide, and how the ros2-device-connect adapter exposes a ROS 2 container as a Device Connect device. +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Why connect ROS 2 to Device Connect? + +A robot or smart camera built on ROS 2 already has a rich internal graph of nodes, topics, and services. That graph is designed for components *inside* the robot to talk to each other. It isn't designed for other devices on your network, or for AI agents, to discover the robot and ask it structured questions such as "which topics are you publishing?" or "capture a photo". + +Device Connect fills that gap. In this Learning Path, you'll run a small adapter next to an unchanged ROS 2 system on an Arm-based Linux machine. The adapter registers the ROS 2 system as a Device Connect device and exposes a safe set of remote procedure calls (RPCs) that any peer or agent can discover and invoke. + +## ROS 2 in brief + +ROS 2 (Robot Operating System 2) is an open-source middleware and toolset for building robotics applications. Applications are split into *nodes* that exchange data over *topics* (publish/subscribe), *services* (request/response), and *actions* (long-running goals). ROS 2 publishes official `arm64` packages and container images, so it runs natively on Arm platforms from a Raspberry Pi to a Neoverse cloud server. + +This Learning Path uses ROS 2 inside a Docker container and doesn't go deeper into ROS 2 itself. For more background, see: + +- [ROS 2 install guide](/install-guides/ros2/) to install ROS 2 natively on Arm Linux and run the talker and listener demo +- [Build a ROS 2 and Zenoh simulation environment on an Arm server](/learning-paths/cross-platform/ros2-zenoh-arm/) for a full containerized ROS 2 robotics workload on Arm, including the `rmw_zenoh` middleware + +## Device Connect in brief + +[Device Connect](https://github.com/arm/device-connect) is an open-source framework that standardizes how edge devices advertise themselves and exchange structured messages, so that peer devices and AI agents can discover and control them through the same driver model. The pieces you'll use are: + +- `DeviceDriver`: a Python base class you subclass to describe a device +- `@rpc` and `@emit`: decorators that expose a method as a callable function or declare an event the device publishes +- `DeviceRuntime`: the runtime that brings a driver online on the messaging network +- `device-connect-agent-tools`: a client library to discover devices and invoke their RPCs from a script or an AI agent + +Device Connect supports two deployment styles. In *device-to-device (D2D)* mode, devices find each other directly on the local network using [Zenoh](https://zenoh.io/), with no server. In *server* (or *fabric*) mode, devices connect through a shared broker so they can be reached across networks. This Learning Path uses D2D mode. + +To learn the SDK primitives in more depth, see these Learning Paths: + +- [Device-to-Device communication with Device Connect](/learning-paths/embedded-and-microcontrollers/device-connect-d2d/) for the developer model and a sensor-to-monitor example +- [Deploy multi-network device meshes using Device Connect server and NATS](/learning-paths/embedded-and-microcontrollers/device-connect-server/) for server mode +- [Connect AI agents to edge devices using Device Connect and Strands](/learning-paths/embedded-and-microcontrollers/device-connect-strands/) for driving devices from an AI agent + +## The ros2-device-connect example + +The [ros2-device-connect](https://github.com/odincodeshen/ros2-device-connect) repository contains the adapter you'll run. It doesn't modify or link against ROS 2. Instead, it reaches the ROS 2 graph by running ROS 2 command-line tools inside the ROS 2 container with `docker exec`: + +```output +Python client ──Zenoh (D2D)──▶ Device Connect adapter ──docker exec──▶ ROS 2 container +(agent tools) (DeviceDriver on host) (ros2 topic list, ...) +``` + +The repository is organized in three layers: + +| Layer | Files | Role | +|---|---|---| +| Shared core | `ros2_common.py` | The `docker exec` bridge plus `Ros2InspectionMixin`, which provides six read-only inspection RPCs for nodes, topics, services, packages, interfaces, and topic info | +| Hardware drivers | `puppypi_device.py`, `camera_device.py` | `DeviceDriver` subclasses that combine the shared core with hardware-specific RPCs, such as capturing a camera frame | +| Profiles and launchers | `profiles/*.env`, `start_d2d.sh`, `start_fabric.sh` | Per-deployment settings that select the driver, the ROS 2 container, and the ROS 2 setup scripts | + +The adapter is deliberately narrow. It exposes read-only inspection plus a small, reviewed set of hardware-specific RPCs. It never offers arbitrary topic publishing or service passthrough, so a remote caller can't drive the ROS 2 system in ways the driver author didn't intend. + +## What you've learned and what's next + +You've learned that ROS 2 organizes a robot's internal software as a graph of nodes and topics, and that Device Connect makes a device discoverable and callable by peers and agents. The ros2-device-connect adapter joins the two by wrapping ROS 2 command-line tools in Device Connect RPCs. + +Next, you'll install Docker, ROS 2, and the Device Connect packages on your Arm-based Linux machine. diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md new file mode 100644 index 0000000000..b99252540b --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md @@ -0,0 +1,265 @@ +--- +title: Connect ROS 2 to Device Connect and call inspection RPCs +description: Learn the layered programming pattern behind the ros2-device-connect adapter, start it in D2D mode against a ROS 2 container, and call its ROS 2 inspection RPCs from a Python client. +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## The programming pattern: four layers around one ROS 2 command + +The adapter doesn't add a new way to talk to ROS 2. It wraps the same `ros2` command you ran from your terminal in the setup section, one layer at a time. Each layer adds one thing to the layer beneath it: + +| Layer | What it is | What it adds | Example | +|---|---|---|---| +| 1. ROS 2 command | A `ros2` CLI call run in the container from the host | The ROS 2 query itself | `docker exec ros2_test ... ros2 topic list` | +| 2. Python wrapper | `run_ros()` | The same command, called from Python and returning structured output | `run_ros("ros2 topic list")` | +| 3. RPC | An `@rpc` method on `Ros2InspectionMixin` | A named function that peers and agents can discover and call over the network | `get_ros_topics()` | +| 4. Device | A driver class run by `DeviceRuntime` | A device that bundles those RPCs and joins the network | `PuppyPiRos2Driver` | + +Layer 1 is all you need when you have a shell on the machine. Layers 2 to 4 let a caller *without* shell access run the same query, safely and by name. + +The code excerpts in this section are simplified to show the pattern. The full versions are in `ros2_common.py` and `puppypi_device.py` in the repository. + +## Layer 1: run a ROS 2 command in the container + +You've already used this layer. From the host, `docker exec` runs a `ros2` command inside the container after sourcing the ROS 2 environment: + +```bash +docker exec ros2_test bash -lc 'source /opt/ros/humble/setup.bash && ros2 topic list' +``` + +```output +/chatter +/parameter_events +/rosout +``` + +Every RPC in this Learning Path ends up running a command like this one. + +## Layer 2: wrap the command in Python + +`run_ros()` in `ros2_common.py` builds that same `docker exec` command: + +```python +def run_ros(command: str, timeout: float = 10.0) -> dict[str, Any]: + script = f"source {ROS_SETUP} && source {WORKSPACE_SETUP} && {command}" + return run(["docker", "exec", "-u", EXEC_USER, CONTAINER, "bash", "-lc", script], timeout=timeout) +``` + +The container name, user, and setup scripts come from environment variables, so the same function works with any ROS 2 container. It returns a dictionary with `ok`, `stdout`, and `stderr` instead of printed text, and a timeout stops a stalled ROS 2 command from hanging the adapter. + +## Layer 3: expose the command as an RPC + +`Ros2InspectionMixin` turns `run_ros()` calls into Device Connect RPCs. The `@rpc()` decorator is what makes a method discoverable and callable over the network: + +```python +class Ros2InspectionMixin: + @rpc() + async def get_ros_topics(self, limit: int = 200, contains: str = "") -> dict[str, Any]: + """List active ROS2 topics.""" + return lines(run_ros("ros2 topic list"), limit=limit, contains=contains) + + @rpc() + async def get_topic_info(self, topic: str) -> dict[str, Any]: + """Return read-only metadata for a specific ROS2 topic.""" + if not TOPIC_NAME_RE.fullmatch(topic): + return {"ok": False, "error": "topic must match ^/[A-Za-z0-9_/]+$"} + return run_ros(f"ros2 topic info {topic}") +``` + +This is also where you apply safety rules, because it's the boundary where remote input arrives. `get_ros_topics` caps and filters its output with the `lines()` helper. `get_topic_info` validates the topic name before it reaches a shell command. + +The mixin provides six inspection RPCs in total, for nodes, topics, services, packages, interfaces, and topic info. They all follow the same pattern. + +## Layer 4: build the device + +The final layer is a driver class that inherits from both `Ros2InspectionMixin` and `DeviceDriver`. The mixin supplies the shared ROS 2 RPCs. `DeviceDriver` makes the class a Device Connect device, and you add any hardware-specific RPCs alongside the shared ones. The `rpi5` profile runs this driver from `puppypi_device.py`: + +```python +class PuppyPiRos2Driver(Ros2InspectionMixin, DeviceDriver): + device_type = os.getenv("DEVICE_TYPE", "quadruped") + + @rpc() + async def echo(self, text: str) -> dict[str, str]: + """Echo text for connectivity testing.""" + return {"echo": text} + + # get_status(), run_action(), set_velocity(), stop() ... + + +async def main() -> None: + runtime = DeviceRuntime(driver=PuppyPiRos2Driver(), device_id=os.getenv("DEVICE_ID")) + await runtime.run() +``` + +`DeviceRuntime` connects the driver to the messaging network and announces every `@rpc` method, both inherited and its own, to peers. To support new hardware, you write a new class at this layer. Layers 1 to 3 stay the same. + +## Start the adapter + +The `start_d2d.sh` launcher loads a profile, activates the `.venv` environment, sets D2D defaults (the Zenoh backend, TCP port 7447, and a device ID of `-d2d`), and runs the driver script that the profile names. + +Open a terminal on your Arm-based Linux machine and start the adapter with the `rpi5` profile, pointing it at the `ros2_test` container: + +```bash +cd ~/device_connect +DEVICE_PROFILE=rpi5 PROJECT_ROOT=$HOME/device_connect \ + ROS_CONTAINER=ros2_test WORKSPACE_SETUP=/opt/ros/humble/setup.bash \ + ./ros2-device-connect/start_d2d.sh +``` + +The inline variables override the values in `profiles/rpi5.env`. You need the `WORKSPACE_SETUP` override because the `rpi5` profile defaults to a robot workspace that doesn't exist in a plain `ros:humble` container. + +The adapter stays in the foreground. Its log shows that it has joined the Zenoh network in D2D mode as `rpi5-d2d`: + +```output +WARNING - Running in INSECURE mode (DEVICE_CONNECT_ALLOW_INSECURE=true). Do NOT use this in production! +INFO - Using ZENOH messaging backend +INFO - Driver connected: raspberry_pi +INFO - Subscribed to commands on device-connect.default.rpi5-d2d.cmd +INFO - D2D mode: skipping registry registration, using presence announcements +``` + +## Call the RPCs from a client + +Open a second terminal on the same machine. In `~/device_connect`, create a file named `client.py`: + +```python +import json + +from device_connect_agent_tools import connect, discover +from device_connect_agent_tools.tools import invoke + +DEVICE = "rpi5-d2d" + +CALLS = [ + ("echo", {"text": "hello from arm"}), + ("get_status", {}), + ("get_ros_topics", {}), + ("get_ros_packages", {"contains": "std_msgs"}), + ("get_topic_info", {"topic": "/chatter"}), + ("get_topic_info", {"topic": "bad;rm"}), +] + +connect() + +found = discover("device(*)") +print("discovered:", [d["device_id"] for d in found["results"]]) + +for function, params in CALLS: + result = invoke(f"device({DEVICE}).function({function})", params=params) + print(f"--- {function}", json.dumps(result, indent=2)) +``` + +The client uses two calls from the agent tools. `discover("device(*)")` lists every device on the network, and `invoke()` calls one function on a named device using a `device().function()` selector. The client doesn't know about ROS 2 or Docker. It only sees the device and its RPCs. + +Set the client's connection settings and run it: + +```bash +cd ~/device_connect +export MESSAGING_BACKEND=zenoh +export ZENOH_CONNECT=tcp/127.0.0.1:7447 +export DEVICE_CONNECT_DISCOVERY_MODE=d2d +export DEVICE_CONNECT_ALLOW_INSECURE=true +export TENANT=default +.venv/bin/python client.py +``` + +`ZENOH_CONNECT` points the client at the adapter's Zenoh endpoint. To reach the adapter from another machine on your LAN, replace `127.0.0.1` with the adapter host's IP address. + +The output is similar to the following, shortened here for readability: + +```output +discovered: ['rpi5-d2d'] +--- echo { + "success": true, + "device_id": "rpi5-d2d", + "function": "echo", + "result": { + "echo": "hello from arm" + } +} +--- get_status { + ... + "result": { + "device": "puppypi", + "container": "ros2_test", + "container_status": "running", + "ros_ok": false, + "ros_output": [ + "ROS_DISTRO=humble" + ], + ... + } +} +--- get_ros_topics { + ... + "result": { + "ok": true, + "count": 3, + "items": [ + "/chatter", + "/parameter_events", + "/rosout" + ], + "truncated": false, + ... + } +} +--- get_ros_packages { + ... + "result": { + "ok": true, + "count": 1, + "items": [ + "std_msgs" + ], + ... + } +} +--- get_topic_info { + ... + "result": { + "ok": true, + "topic": "/chatter", + "stdout": "Type: std_msgs/msg/String\nPublisher count: 1\nSubscription count: 0\n", + "stderr": "" + } +} +--- get_topic_info { + ... + "result": { + "ok": false, + "error": "topic must match ^/[A-Za-z0-9_/]+$" + } +} +``` + +Here's what each result shows: + +- `echo` confirms the full round trip from the client over Zenoh to the adapter. +- `get_ros_topics` returns the same three topics you saw at layer 1. It's the same `ros2 topic list` command, reached through all four layers. `get_topic_info` adds the message type of `/chatter`. +- `get_ros_packages` shows the `contains` filter reducing the package list to `std_msgs`. +- The second `get_topic_info` call is rejected at layer 3, so no command runs in the container. +- `get_status` reports that the container is running ROS 2 Humble. `ros_ok` is `false` because this driver's health check looks for PuppyPi robot packages, which aren't in a plain `ros:humble` container. This is expected. + +## Clean up + +Stop the adapter with `Ctrl+C` in its terminal. If you started it in the background, stop it with: + +```bash +pkill -f puppypi_device.py +``` + +The `ros2_test` container keeps running. When you no longer need it, remove it: + +```bash +docker rm -f ros2_test +``` + +## What you've accomplished and what's next + +You've learned the adapter's four-layer pattern: a ROS 2 command run in the container, a Python wrapper around it, an `@rpc` method that exposes it, and a driver class that inherits from `Ros2InspectionMixin` and `DeviceDriver` to bundle those RPCs into a device. You started the adapter in D2D mode and called its RPCs from a Python client that knows nothing about ROS 2. + +Next, you'll see how other profiles reuse layers 1 to 3 with different layer 4 drivers for real hardware, such as a Raspberry Pi 5 with a camera. diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md new file mode 100644 index 0000000000..e8d6e9c453 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md @@ -0,0 +1,134 @@ +--- +title: Use deployment profiles and try the adapter on real hardware +description: Learn how ros2-device-connect profiles select drivers for different hardware, and how to run the adapter on a Raspberry Pi 5 with a camera or on a ROS 2 robot. +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## How profiles select the hardware configuration + +In the previous section, you overrode the `rpi5` profile to point at a generic ROS 2 container. Each profile in `profiles/` is a shell file that describes one deployment. It sets which driver runs, which container the driver talks to, and which ROS 2 setup scripts it sources. + +| Profile | Driver | Default container | ROS 2 distribution | RPCs added to the shared inspection RPCs | +|---|---|---|---|---| +| `rpi5` | `puppypi_device.py` | `test` | Humble | The PuppyPi RPCs, which have no effect without a robot, so this profile works as a general test target | +| `rpi_camera` | `camera_device.py` | `pi_ros` | Jazzy | `get_raw_image(quality)` | +| `puppypi` | `puppypi_device.py` | `puppypi_ros2` | Humble | `run_action(action)`, `set_velocity(x, y, yaw_rate)`, `stop()` | + +For example, `profiles/rpi_camera.env` contains: + +```bash +export DEVICE_PROFILE="rpi_camera" +export PROJECT_ROOT="${PROJECT_ROOT:-${HOME}/device_connect}" +export VENV_DIR="${VENV_DIR:-.venv}" +export DEVICE_TYPE="${DEVICE_TYPE:-sentinel_camera}" +export DRIVER_SCRIPT="${DRIVER_SCRIPT:-camera_device.py}" +export ROS_CONTAINER="${ROS_CONTAINER:-pi_ros}" +export ROS_EXEC_USER="${ROS_EXEC_USER:-root}" +export ROS_SETUP="${ROS_SETUP:-/opt/ros/jazzy/setup.bash}" +export WORKSPACE_SETUP="${WORKSPACE_SETUP:-${ROS_SETUP}}" +``` + +Every value uses the `${VAR:-default}` form, so you can override any setting inline, as you did with `ROS_CONTAINER` and `WORKSPACE_SETUP`. For a new deployment, you can also point the launcher at your own profile file: + +```bash +PROFILE_FILE=/path/to/my-robot.env ./ros2-device-connect/start_d2d.sh +``` + +## Try a Raspberry Pi 5 with a camera + +The `rpi_camera` configuration turns a Raspberry Pi 5 with a camera into a device that any peer or agent can ask for a photo. The camera must appear as a V4L2 video device, such as `/dev/video0`. A USB webcam works without extra setup. + +{{% notice Note %}} +Raspberry Pi Camera Modules connected by ribbon cable use the libcamera stack, and they don't always expose a frame-ready `/dev/video0` that `v4l2_camera` can read. If `v4l2_camera` can't read frames from your Pi Camera Module, start with a USB webcam, or set `VIDEO_DEVICE` to the video node your camera stack provides. +{{% /notice %}} + +On the Raspberry Pi 5, set up the same `~/device_connect` workspace as in the setup section, then bring up the camera stack: + +```bash +cd ~/device_connect +./ros2-device-connect/start_camera_ros2.sh +``` + +The `start_camera_ros2.sh` script is idempotent and does the following: + +- creates a `ros:jazzy` container named `pi_ros` with the camera passed through using `--device=/dev/video0` +- installs `ros-jazzy-v4l2-camera`, `ros-jazzy-cv-bridge`, and `python3-opencv` inside the container +- copies `capture_frame.py` into the container and starts `v4l2_camera_node` in the background +- verifies that the `/image_raw` topic is being published + +Start the adapter with the camera profile: + +```bash +cd ~/device_connect +DEVICE_PROFILE=rpi_camera ./ros2-device-connect/start_d2d.sh +``` + +The device is announced as `rpi_camera-d2d`. It exposes the same inspection RPCs as before, plus `get_raw_image`: + +```python +@rpc(labels={"category": "camera", "direction": "read", "safety": "informational"}) +async def get_raw_image(self, quality: int = DEFAULT_JPEG_QUALITY) -> dict[str, Any]: + ... + result = run_ros( + f"python3 {CAPTURE_SCRIPT_PATH} --topic {CAMERA_TOPIC} " + f"--timeout {CAPTURE_TIMEOUT_S} --quality {quality_int}", + timeout=CAPTURE_EXEC_TIMEOUT_S, + ) +``` + +The RPC runs `capture_frame.py` inside the container. The script subscribes to `/image_raw`, takes one frame, and returns it as a base64-encoded JPEG. It subscribes with ROS 2's `qos_profile_sensor_data` because `v4l2_camera` publishes with best-effort QoS. A subscriber that uses the default reliable QoS would never match the publisher, and the capture would silently time out. + +From a client, call the RPC and save the image. Use the same client environment variables as in the previous section, replacing `127.0.0.1` with the Raspberry Pi's IP address if you run the client on another machine: + +```python +import base64 +from device_connect_agent_tools import connect +from device_connect_agent_tools.tools import invoke + +connect() +reply = invoke("device(rpi_camera-d2d).function(get_raw_image)", params={"quality": 80}) +with open("capture.jpg", "wb") as f: + f.write(base64.b64decode(reply["result"]["jpeg_base64"])) +``` + +The repository's `view_image.py` script does the same thing against a device in fabric mode. + +## Try a ROS 2 robot + +The `puppypi` profile targets a [Hiwonder PuppyPi quadruped](https://www.hiwonder.com/products/puppypi) running ROS 2 Humble. It shows how you can add motion control safely: + +- `run_action` accepts only a fixed allowlist of pre-recorded moves, such as `sit`, `stand`, and `wave`, and rejects any other value. +- `set_velocity` rejects out-of-range values instead of clamping them. +- `stop` publishes a zero-velocity command. + +Robot bring-up includes starting `puppy_control` and enabling servo torque. For those steps and the full safety model, see the [ros2-device-connect README](https://github.com/odincodeshen/ros2-device-connect#startup-checklist). + +//TODO - Odin to provide a video of his quadruped? + +## Build a profile for your own ROS 2 system + +To connect a different ROS 2 system, follow the same pattern: + +1. Create a driver class that combines `Ros2InspectionMixin` with `DeviceDriver`, and add only the hardware-specific RPCs you've reviewed. +2. Validate every caller-supplied value before it reaches `run_ros()`, as `get_topic_info` and `get_raw_image` do. +3. Add a `profiles/.env` file that sets `DRIVER_SCRIPT`, `ROS_CONTAINER`, `ROS_EXEC_USER`, `ROS_SETUP`, and `WORKSPACE_SETUP`. + +When the device needs to be reachable beyond your local network, run `start_fabric.sh` instead of `start_d2d.sh` with a device credentials file. This connects the device through a Device Connect server rather than Zenoh D2D discovery. For more information, see [Deploy multi-network device meshes using Device Connect server and NATS](/learning-paths/embedded-and-microcontrollers/device-connect-server/). + +{{% notice Warning %}} +D2D mode runs with `DEVICE_CONNECT_ALLOW_INSECURE=true` and no transport authentication. Anyone on the same network segment can discover the device and call its RPCs. Use D2D mode only on a trusted network, and add authentication before you expose motion-control RPCs such as `set_velocity` on a less trusted network. +{{% /notice %}} + +## What you've learned + +In this Learning Path, you: + +- learned how the ros2-device-connect adapter makes an unchanged ROS 2 system discoverable and callable through Device Connect, by wrapping ROS 2 CLI calls in `@rpc` methods run with `docker exec` +- set up a ROS 2 Humble container and the Device Connect Python packages on an Arm-based Linux machine +- ran the adapter in D2D mode and called read-only inspection RPCs from a Python client, including one call rejected by input validation +- saw how profiles reuse the same shared core for a Raspberry Pi 5 camera and a ROS 2 robot, and how to add a profile for your own hardware + +To go further, try driving the adapter from an AI agent with [Connect AI agents to edge devices using Device Connect and Strands](/learning-paths/embedded-and-microcontrollers/device-connect-strands/), or build a larger ROS 2 workload on Arm with [Build a ROS 2 and Zenoh simulation environment on an Arm server](/learning-paths/cross-platform/ros2-zenoh-arm/). diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md new file mode 100644 index 0000000000..4cb501d645 --- /dev/null +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md @@ -0,0 +1,122 @@ +--- +title: Set up ROS 2 and Device Connect on Arm Linux +description: Install Docker, start a ROS 2 Humble container with a demo publisher, and install the Device Connect Python packages and the ros2-device-connect adapter. +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Before you begin + +Run every command in this section on your Arm-based Linux machine. The instructions assume Ubuntu 22.04 or later on an `aarch64` host, such as a Raspberry Pi 5 or an Arm cloud instance. Confirm the architecture: + +```bash +uname -m +``` + +```output +aarch64 +``` + +By the end of this section, you'll have: + +- a ROS 2 Humble container publishing a demo topic +- a Python virtual environment with the Device Connect packages +- the ros2-device-connect adapter cloned and ready to run + +## Install Docker + +The adapter talks to ROS 2 through Docker, so you need Docker Engine. Follow the [Docker Engine install guide](/install-guides/docker/docker-engine/), including the step that adds your user to the `docker` group. The adapter runs `docker exec` as your user, so Docker must work without `sudo`. + +## Start a ROS 2 container + +You don't need to install ROS 2 on the host. The official `ros:humble` image is multi-architecture, so Docker pulls the `arm64` variant automatically. If you'd prefer a native install, see the [ROS 2 install guide](/install-guides/ros2/). + +Start a long-running container named `ros2_test`: + +```bash +docker run -d --name ros2_test ros:humble tail -f /dev/null +``` + +The `tail -f /dev/null` command keeps the container alive so you can run ROS 2 commands inside it with `docker exec`. Start a demo publisher that sends a `std_msgs/msg/String` message on the `/chatter` topic once per second: + +```bash +docker exec -d ros2_test bash -lc 'source /opt/ros/humble/setup.bash && ros2 topic pub -r 1 /chatter std_msgs/msg/String "{data: hello}"' +``` + +Check that the topic is being published: + +```bash +docker exec ros2_test bash -lc 'source /opt/ros/humble/setup.bash && ros2 node list && ros2 topic list' +``` + +The output lists the ROS 2 topics: + +```output +/chatter +/parameter_events +/rosout +``` + +The node list is empty because `ros2 topic pub` runs as a hidden node. This container now stands in for a real robot's ROS 2 stack. + +## Create the workspace + +The adapter's launch scripts expect a single project directory that holds the adapter repository and a Python virtual environment named `.venv`. Create that directory and clone both the adapter and the Device Connect source: + +```bash +mkdir -p ~/device_connect +cd ~/device_connect +git clone https://github.com/odincodeshen/ros2-device-connect.git +git clone https://github.com/arm/device-connect.git +``` + +## Install uv and the Device Connect packages + +This Learning Path uses [uv](https://docs.astral.sh/uv/) to create the Python environment. Install it: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +uv --version +``` + +Create a Python virtual environment in the project directory, and install the Device Connect edge SDK and agent tools from the cloned source. The Device Connect packages require Python 3.11 or later and are tested on Python 3.11, 3.12, and 3.13. This example uses 3.12, but you can pass any supported version to `--python`. If that version isn't installed on your machine, uv downloads it for you. + +This host Python environment is separate from the Python version inside the ROS 2 container, so your choice here doesn't need to match your ROS 2 distribution. + +```bash +cd ~/device_connect +uv venv --python 3.12 .venv +VIRTUAL_ENV=.venv uv pip install \ + -e device-connect/packages/device-connect-edge \ + -e device-connect/packages/device-connect-agent-tools +``` + +The `device-connect-edge` package is the device runtime that the adapter runs on. The `device-connect-agent-tools` package is the client you'll use to discover the adapter and call its RPCs. + +Verify that both packages import: + +```bash +.venv/bin/python -c "import device_connect_edge, device_connect_agent_tools; print('Device Connect OK')" +``` + +```output +Device Connect OK +``` + +Your workspace now looks like this: + +```output +~/device_connect/ +├── .venv/ # Python environment with Device Connect +├── device-connect/ # Device Connect SDK source +└── ros2-device-connect/ # ROS 2 adapter +``` + +## What you've accomplished and what's next + +You've installed Docker, started a ROS 2 Humble container publishing on `/chatter`, and created a Python environment with the Device Connect packages next to the ros2-device-connect adapter. + +Next, you'll look at how the adapter code works, start it in D2D mode, and query the ROS 2 container through Device Connect. From 0deee90308e8f7fb855fde4f567078cfe471ca25 Mon Sep 17 00:00:00 2001 From: BelachewRachel Date: Thu, 24 Sep 2026 15:19:59 +0300 Subject: [PATCH 18/66] Pin ONNX GenAI AAR build dependencies --- .../4-compare-runtime-adapters.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md index 9e03153ec3..2a7f7d24fe 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md +++ b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md @@ -56,15 +56,22 @@ This checks compatibility with the adapter and doesn't evaluate the model's lang The ONNX Runtime GenAI examples use `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. Build the AAR from the official ONNX Runtime GenAI source before you apply an ONNX Runtime GenAI adapter. -Set `ANDROID_HOME` to your Android SDK location. Set `ANDROID_NDK_HOME` to the installed Android NDK directory, or replace it in the commands below. Android Studio installs the SDK and NDK from **Tools > SDK Manager > SDK Tools**. +Set `ANDROID_HOME` to your Android SDK location. The commands below install a pinned Android NDK under `ANDROID_HOME` and use it for the ONNX Runtime GenAI AAR build. Android Studio installs the SDK tools from **Tools > SDK Manager > SDK Tools**. {{< tabpane code=true >}} {{< tab header="macOS or Linux" language="bash" >}} export WORK_DIR="$HOME/text-to-text-android" +export ONNX_GENAI_VERSION="v0.16.0" +export ANDROID_NDK_VERSION="27.3.13750724" +export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION" mkdir -p "$WORK_DIR" cd "$WORK_DIR" -git clone --recursive https://github.com/microsoft/onnxruntime-genai.git +"$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" \ + --sdk_root="$ANDROID_HOME" \ + "ndk;$ANDROID_NDK_VERSION" + +git clone --recursive --branch "$ONNX_GENAI_VERSION" https://github.com/microsoft/onnxruntime-genai.git cd onnxruntime-genai python3 -m pip install -r requirements-dev.txt @@ -90,10 +97,17 @@ cd "$WORK_DIR" {{< /tab >}} {{< tab header="Windows PowerShell" language="powershell" >}} $WORK_DIR = Join-Path $HOME "text-to-text-android" +$ONNX_GENAI_VERSION = "v0.16.0" +$ANDROID_NDK_VERSION = "27.3.13750724" +$env:ANDROID_NDK_HOME = Join-Path $env:ANDROID_HOME "ndk\$ANDROID_NDK_VERSION" New-Item -ItemType Directory -Force -Path $WORK_DIR Set-Location $WORK_DIR -git clone --recursive https://github.com/microsoft/onnxruntime-genai.git +& "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat" ` + --sdk_root="$env:ANDROID_HOME" ` + "ndk;$ANDROID_NDK_VERSION" + +git clone --recursive --branch $ONNX_GENAI_VERSION https://github.com/microsoft/onnxruntime-genai.git Set-Location onnxruntime-genai python -m pip install -r requirements-dev.txt From 62c68e384ef7331dc42c891849c1618ae8b1b986 Mon Sep 17 00:00:00 2001 From: BelachewRachel Date: Thu, 24 Sep 2026 19:43:05 +0300 Subject: [PATCH 19/66] Use a pre-compiled AAR --- .../4-compare-runtime-adapters.md | 77 ++++--------------- 1 file changed, 13 insertions(+), 64 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md index 2a7f7d24fe..da6866e310 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md +++ b/content/learning-paths/mobile-graphics-and-gaming/run-text-to-text-models-on-android/4-compare-runtime-adapters.md @@ -54,83 +54,32 @@ This checks compatibility with the adapter and doesn't evaluate the model's lang ### Prepare the ONNX Runtime GenAI path -The ONNX Runtime GenAI examples use `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. Build the AAR from the official ONNX Runtime GenAI source before you apply an ONNX Runtime GenAI adapter. - -Set `ANDROID_HOME` to your Android SDK location. The commands below install a pinned Android NDK under `ANDROID_HOME` and use it for the ONNX Runtime GenAI AAR build. Android Studio installs the SDK tools from **Tools > SDK Manager > SDK Tools**. +The ONNX Runtime GenAI examples use `com.microsoft.onnxruntime:onnxruntime-android:1.27.0` and the official ONNX Runtime GenAI Android AAR. Download the official pre-compiled ONNX Runtime GenAI Android AAR before you apply an ONNX Runtime GenAI adapter. {{< tabpane code=true >}} {{< tab header="macOS or Linux" language="bash" >}} export WORK_DIR="$HOME/text-to-text-android" -export ONNX_GENAI_VERSION="v0.16.0" -export ANDROID_NDK_VERSION="27.3.13750724" -export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION" mkdir -p "$WORK_DIR" -cd "$WORK_DIR" -"$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" \ - --sdk_root="$ANDROID_HOME" \ - "ndk;$ANDROID_NDK_VERSION" - -git clone --recursive --branch "$ONNX_GENAI_VERSION" https://github.com/microsoft/onnxruntime-genai.git -cd onnxruntime-genai - -python3 -m pip install -r requirements-dev.txt -if ! command -v cmake >/dev/null 2>&1; then - if ! ls -d "$ANDROID_HOME"/cmake/*/bin >/dev/null 2>&1; then - "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" \ - --sdk_root="$ANDROID_HOME" \ - "cmake;3.22.1" - fi - export PATH="$(ls -d "$ANDROID_HOME"/cmake/*/bin | tail -n 1):$PATH" -fi -cmake --version - -python3 build.py --skip_wheel --build_java --android \ - --android_home "$ANDROID_HOME" \ - --android_ndk_path "$ANDROID_NDK_HOME" \ - --android_abi arm64-v8a \ - --config Release - -export ONNX_GENAI_AAR="$PWD/build/Android/Release/src/java/build/android/outputs/aar/onnxruntime-genai-release.aar" +export ONNX_GENAI_AAR="$WORK_DIR/onnxruntime-genai-release.aar" + +curl --fail --location \ + "https://github.com/microsoft/onnxruntime-genai/releases/download/v0.16.0/onnxruntime-genai-android-0.16.0.aar" \ + --output "$ONNX_GENAI_AAR" + test -f "$ONNX_GENAI_AAR" -cd "$WORK_DIR" {{< /tab >}} {{< tab header="Windows PowerShell" language="powershell" >}} $WORK_DIR = Join-Path $HOME "text-to-text-android" -$ONNX_GENAI_VERSION = "v0.16.0" -$ANDROID_NDK_VERSION = "27.3.13750724" -$env:ANDROID_NDK_HOME = Join-Path $env:ANDROID_HOME "ndk\$ANDROID_NDK_VERSION" New-Item -ItemType Directory -Force -Path $WORK_DIR -Set-Location $WORK_DIR -& "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat" ` - --sdk_root="$env:ANDROID_HOME" ` - "ndk;$ANDROID_NDK_VERSION" - -git clone --recursive --branch $ONNX_GENAI_VERSION https://github.com/microsoft/onnxruntime-genai.git -Set-Location onnxruntime-genai - -python -m pip install -r requirements-dev.txt -if (-not (Get-Command cmake -ErrorAction SilentlyContinue)) { - if (-not (Test-Path "$env:ANDROID_HOME\cmake")) { - & "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat" ` - --sdk_root="$env:ANDROID_HOME" ` - "cmake;3.22.1" - } - $CMAKE_DIR = Get-ChildItem "$env:ANDROID_HOME\cmake" -Directory | Sort-Object Name | Select-Object -Last 1 - $env:PATH = "$($CMAKE_DIR.FullName)\bin;$env:PATH" -} -cmake --version - -python build.py --skip_wheel --build_java --android ` - --android_home "$env:ANDROID_HOME" ` - --android_ndk_path "$env:ANDROID_NDK_HOME" ` - --android_abi arm64-v8a ` - --config Release - -$ONNX_GENAI_AAR = Join-Path $PWD "build\Android\Release\src\java\build\android\outputs\aar\onnxruntime-genai-release.aar" +$ONNX_GENAI_AAR = Join-Path $WORK_DIR "onnxruntime-genai-release.aar" + +Invoke-WebRequest ` + -Uri "https://github.com/microsoft/onnxruntime-genai/releases/download/v0.16.0/onnxruntime-genai-android-0.16.0.aar" ` + -OutFile $ONNX_GENAI_AAR + Test-Path $ONNX_GENAI_AAR -Set-Location $WORK_DIR {{< /tab >}} {{< /tabpane >}} From 8a4ff9e347444647aaca7ec5b946bfd3dde0ef19 Mon Sep 17 00:00:00 2001 From: Kieran Hejmadi Date: Fri, 25 Sep 2026 14:06:34 +0000 Subject: [PATCH 20/66] incorporate Odin's changes --- .../ros2-device-connect/_index.md | 4 +++- .../ros2-device-connect/background.md | 4 ++++ .../ros2-device-connect/how-it-works.md | 17 +++++++++++++++++ .../profiles-and-hardware.md | 12 +++++++++--- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md index 26c417e012..655433c7c8 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md @@ -16,7 +16,9 @@ prerequisites: - An Arm-based Linux machine, such as a Raspberry Pi 5, an Arm cloud instance, or an Arm-based laptop, running Ubuntu 22.04 or later - Basic familiarity with Python, the Linux command line, and ROS 2 concepts such as nodes and topics -author: Kieran Hejmadi +author: + - Kieran Hejmadi + - Odin Shen # New Learning Paths are opted in for the next manual generated summary/FAQ run. # The generator resets this to false after a successful write. diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md index 340c4a0c0f..1df7faf287 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md @@ -13,6 +13,8 @@ A robot or smart camera built on ROS 2 already has a rich internal graph of node Device Connect fills that gap. In this Learning Path, you'll run a small adapter next to an unchanged ROS 2 system on an Arm-based Linux machine. The adapter registers the ROS 2 system as a Device Connect device and exposes a safe set of remote procedure calls (RPCs) that any peer or agent can discover and invoke. +For robotics, this pattern matters because a robot is not a single API. It is a live graph of sensors, controllers, diagnostics, services, and safety-critical actions. ROS 2 remains the robot's internal software graph. Device Connect adds an external capability layer, where the device owner chooses which ROS 2 operations become discoverable, typed, and remotely callable functions. + ## ROS 2 in brief ROS 2 (Robot Operating System 2) is an open-source middleware and toolset for building robotics applications. Applications are split into *nodes* that exchange data over *topics* (publish/subscribe), *services* (request/response), and *actions* (long-running goals). ROS 2 publishes official `arm64` packages and container images, so it runs natively on Arm platforms from a Raspberry Pi to a Neoverse cloud server. @@ -58,6 +60,8 @@ The repository is organized in three layers: The adapter is deliberately narrow. It exposes read-only inspection plus a small, reviewed set of hardware-specific RPCs. It never offers arbitrary topic publishing or service passthrough, so a remote caller can't drive the ROS 2 system in ways the driver author didn't intend. +This means the same adapter pattern can cover different robotics surfaces. A camera profile can expose perception data, a robot profile can expose diagnostics and bounded motion commands, and both can be called through the same Device Connect discovery and RPC model. + ## What you've learned and what's next You've learned that ROS 2 organizes a robot's internal software as a graph of nodes and topics, and that Device Connect makes a device discoverable and callable by peers and agents. The ros2-device-connect adapter joins the two by wrapping ROS 2 command-line tools in Device Connect RPCs. diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md index b99252540b..755dfed89b 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md @@ -73,6 +73,23 @@ This is also where you apply safety rules, because it's the boundary where remot The mixin provides six inspection RPCs in total, for nodes, topics, services, packages, interfaces, and topic info. They all follow the same pattern. +The table below shows how the Device Connect RPC names map back to the ROS 2 operations they run or wrap: + +| Device Connect RPC | ROS 2 operation inside the container | Purpose | +|---|---|---| +| `get_ros_nodes()` | `ros2 node list` | List active ROS 2 nodes | +| `get_ros_topics()` | `ros2 topic list` | List active ROS 2 topics | +| `get_ros_services()` | `ros2 service list` | List active ROS 2 services | +| `get_ros_packages()` | `ros2 pkg list` | List installed ROS 2 packages | +| `get_ros_interfaces()` | `ros2 interface list` | List available ROS 2 message and service interfaces | +| `get_topic_info(topic)` | `ros2 topic info ` | Inspect one topic after validating the topic name | +| `get_raw_image()` | Subscribe to `/image_raw`, then JPEG/base64 encode one frame | Expose a camera stream as a callable perception RPC | +| `run_action(action)` | Call `/puppy_control/runActionGroup` with an allowlisted action file | Run a pre-approved PuppyPi motion | +| `set_velocity(x, y, yaw_rate)` | Publish once to `/puppy_control/velocity` | Send a bounded PuppyPi velocity command | +| `stop()` | Publish a zero-velocity command | Stop PuppyPi motion | + +Device Connect does not replace ROS 2. It wraps selected ROS 2 operations as discoverable, typed, remotely callable capabilities. + ## Layer 4: build the device The final layer is a driver class that inherits from both `Ros2InspectionMixin` and `DeviceDriver`. The mixin supplies the shared ROS 2 RPCs. `DeviceDriver` makes the class a Device Connect device, and you add any hardware-specific RPCs alongside the shared ones. The `rpi5` profile runs this driver from `puppypi_device.py`: diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md index e8d6e9c453..a8e956f2ee 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md +++ b/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md @@ -39,7 +39,9 @@ PROFILE_FILE=/path/to/my-robot.env ./ros2-device-connect/start_d2d.sh ## Try a Raspberry Pi 5 with a camera -The `rpi_camera` configuration turns a Raspberry Pi 5 with a camera into a device that any peer or agent can ask for a photo. The camera must appear as a V4L2 video device, such as `/dev/video0`. A USB webcam works without extra setup. +The `rpi_camera` configuration is the lowest-risk real hardware example in this Learning Path. It exposes a sensor capability, not a motion capability: a ROS 2 image topic becomes a Device Connect RPC that any peer or agent can call for a photo. The caller does not need to know the ROS 2 topic name, QoS settings, camera container, or image encoding details. + +The camera must appear as a V4L2 video device, such as `/dev/video0`. A USB webcam works without extra setup. {{% notice Note %}} Raspberry Pi Camera Modules connected by ribbon cable use the libcamera stack, and they don't always expose a frame-ready `/dev/video0` that `v4l2_camera` can read. If `v4l2_camera` can't read frames from your Pi Camera Module, start with a USB webcam, or set `VIDEO_DEVICE` to the video node your camera stack provides. @@ -81,6 +83,8 @@ async def get_raw_image(self, quality: int = DEFAULT_JPEG_QUALITY) -> dict[str, The RPC runs `capture_frame.py` inside the container. The script subscribes to `/image_raw`, takes one frame, and returns it as a base64-encoded JPEG. It subscribes with ROS 2's `qos_profile_sensor_data` because `v4l2_camera` publishes with best-effort QoS. A subscriber that uses the default reliable QoS would never match the publisher, and the capture would silently time out. +This is the perception side of the robotics pattern: a ROS 2 sensor stream is converted into a typed Device Connect capability. The PuppyPi profile below uses the same pattern for the action side of robotics. + From a client, call the RPC and save the image. Use the same client environment variables as in the previous section, replacing `127.0.0.1` with the Raspberry Pi's IP address if you run the client on another machine: ```python @@ -98,7 +102,9 @@ The repository's `view_image.py` script does the same thing against a device in ## Try a ROS 2 robot -The `puppypi` profile targets a [Hiwonder PuppyPi quadruped](https://www.hiwonder.com/products/puppypi) running ROS 2 Humble. It shows how you can add motion control safely: +The `puppypi` profile targets a [Hiwonder PuppyPi quadruped](https://www.hiwonder.com/products/puppypi), a small four-legged robot built around Raspberry Pi-class hardware and a ROS 2 control stack. In this Learning Path, PuppyPi serves as the real robot example: the same Device Connect adapter pattern used for camera perception is extended to selected locomotion capabilities. + +It shows how you can add motion control safely: - `run_action` accepts only a fixed allowlist of pre-recorded moves, such as `sit`, `stand`, and `wave`, and rejects any other value. - `set_velocity` rejects out-of-range values instead of clamping them. @@ -106,7 +112,7 @@ The `puppypi` profile targets a [Hiwonder PuppyPi quadruped](https://www.hiwonde Robot bring-up includes starting `puppy_control` and enabling servo torque. For those steps and the full safety model, see the [ros2-device-connect README](https://github.com/odincodeshen/ros2-device-connect#startup-checklist). -//TODO - Odin to provide a video of his quadruped? +The important design point is that the adapter does not expose arbitrary ROS 2 control. It turns a reviewed subset of the robot's ROS 2 graph into Device Connect capabilities: read-only diagnostics, allowlisted actions, bounded velocity, and an explicit stop command. ## Build a profile for your own ROS 2 system From d74f2137866f161e8b307e3f1bd27481100fa976 Mon Sep 17 00:00:00 2001 From: Kieran Hejmadi Date: Mon, 28 Sep 2026 12:59:46 +0000 Subject: [PATCH 21/66] Squash commit - Move ros2-device-connect learning path to cross-platform add video link minor readbility improvements --- .../ros2-device-connect/_index.md | 6 ++++++ .../ros2-device-connect/_next-steps.md | 0 .../ros2-device-connect/background.md | 4 ++-- .../ros2-device-connect/how-it-works.md | 0 .../ros2-device-connect/profiles-and-hardware.md | 2 ++ .../ros2-device-connect/setup.md | 4 ++-- 6 files changed, 12 insertions(+), 4 deletions(-) rename content/learning-paths/{embedded-and-microcontrollers => cross-platform}/ros2-device-connect/_index.md (96%) rename content/learning-paths/{embedded-and-microcontrollers => cross-platform}/ros2-device-connect/_next-steps.md (100%) rename content/learning-paths/{embedded-and-microcontrollers => cross-platform}/ros2-device-connect/background.md (97%) rename content/learning-paths/{embedded-and-microcontrollers => cross-platform}/ros2-device-connect/how-it-works.md (100%) rename content/learning-paths/{embedded-and-microcontrollers => cross-platform}/ros2-device-connect/profiles-and-hardware.md (98%) rename content/learning-paths/{embedded-and-microcontrollers => cross-platform}/ros2-device-connect/setup.md (95%) diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md b/content/learning-paths/cross-platform/ros2-device-connect/_index.md similarity index 96% rename from content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md rename to content/learning-paths/cross-platform/ros2-device-connect/_index.md index 655433c7c8..4bb1ceb9b4 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_index.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/_index.md @@ -44,6 +44,12 @@ tools_software_languages: operatingsystems: - Linux +### Cross-platform metadata only +shared_path: true +shared_between: + - automotive + - embedded-and-microcontrollers + further_reading: - resource: title: ros2-device-connect example repository diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_next-steps.md b/content/learning-paths/cross-platform/ros2-device-connect/_next-steps.md similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/_next-steps.md rename to content/learning-paths/cross-platform/ros2-device-connect/_next-steps.md diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md b/content/learning-paths/cross-platform/ros2-device-connect/background.md similarity index 97% rename from content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md rename to content/learning-paths/cross-platform/ros2-device-connect/background.md index 1df7faf287..5fd219529b 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/background.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/background.md @@ -11,13 +11,13 @@ layout: learningpathall A robot or smart camera built on ROS 2 already has a rich internal graph of nodes, topics, and services. That graph is designed for components *inside* the robot to talk to each other. It isn't designed for other devices on your network, or for AI agents, to discover the robot and ask it structured questions such as "which topics are you publishing?" or "capture a photo". -Device Connect fills that gap. In this Learning Path, you'll run a small adapter next to an unchanged ROS 2 system on an Arm-based Linux machine. The adapter registers the ROS 2 system as a Device Connect device and exposes a safe set of remote procedure calls (RPCs) that any peer or agent can discover and invoke. +Device Connect fills that gap. In this Learning Path, you'll run a small adapter next to an unchanged ROS 2 system on an Arm-based Linux machine. The adapter registers the ROS 2 system as a Device Connect device and exposes a safe set of remote procedure calls (RPCs) that a peer or agent can discover and invoke. For robotics, this pattern matters because a robot is not a single API. It is a live graph of sensors, controllers, diagnostics, services, and safety-critical actions. ROS 2 remains the robot's internal software graph. Device Connect adds an external capability layer, where the device owner chooses which ROS 2 operations become discoverable, typed, and remotely callable functions. ## ROS 2 in brief -ROS 2 (Robot Operating System 2) is an open-source middleware and toolset for building robotics applications. Applications are split into *nodes* that exchange data over *topics* (publish/subscribe), *services* (request/response), and *actions* (long-running goals). ROS 2 publishes official `arm64` packages and container images, so it runs natively on Arm platforms from a Raspberry Pi to a Neoverse cloud server. +ROS 2 (Robot Operating System 2) is an open source middleware and toolset for building robotics applications. Applications are split into *nodes* that exchange data over *topics* (publish/subscribe), *services* (request/response), and *actions* (long-running goals). ROS 2 publishes official `arm64` packages and container images, so it runs natively on Arm platforms from a Raspberry Pi to a Neoverse cloud server. This Learning Path uses ROS 2 inside a Docker container and doesn't go deeper into ROS 2 itself. For more background, see: diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md b/content/learning-paths/cross-platform/ros2-device-connect/how-it-works.md similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/how-it-works.md rename to content/learning-paths/cross-platform/ros2-device-connect/how-it-works.md diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md b/content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md similarity index 98% rename from content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md rename to content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md index a8e956f2ee..b046dfef4e 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/profiles-and-hardware.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md @@ -114,6 +114,8 @@ Robot bring-up includes starting `puppy_control` and enabling servo torque. For The important design point is that the adapter does not expose arbitrary ROS 2 control. It turns a reviewed subset of the robot's ROS 2 graph into Device Connect capabilities: read-only diagnostics, allowlisted actions, bounded velocity, and an explicit stop command. +To see this profile running on a real PuppyPi, watch the [ROS 2 and Device Connect PuppyPi demo](https://www.youtube.com/watch?v=R4DJ2_jKvZQ). + ## Build a profile for your own ROS 2 system To connect a different ROS 2 system, follow the same pattern: diff --git a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md b/content/learning-paths/cross-platform/ros2-device-connect/setup.md similarity index 95% rename from content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md rename to content/learning-paths/cross-platform/ros2-device-connect/setup.md index 4cb501d645..08d7d8d143 100644 --- a/content/learning-paths/embedded-and-microcontrollers/ros2-device-connect/setup.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/setup.md @@ -63,12 +63,12 @@ The node list is empty because `ros2 topic pub` runs as a hidden node. This cont ## Create the workspace -The adapter's launch scripts expect a single project directory that holds the adapter repository and a Python virtual environment named `.venv`. Create that directory and clone both the adapter and the Device Connect source: +The adapter's launch scripts expect a single project directory that holds the adapter repository and a Python virtual environment named `.venv`. Create that directory and clone both the adapter and the Device Connect source. The adapter is cloned at the `ros2_dc_lp` tag, which is the version this Learning Path was tested with: ```bash mkdir -p ~/device_connect cd ~/device_connect -git clone https://github.com/odincodeshen/ros2-device-connect.git +git clone --branch ros2_dc_lp https://github.com/odincodeshen/ros2-device-connect.git git clone https://github.com/arm/device-connect.git ``` From 2269230fdfed79f0598ae24685319d84179a3159 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Thu, 1 Oct 2026 14:57:54 -0500 Subject: [PATCH 22/66] initial add of another batch of 20 --- .../multiarch_nginx_on_aks/_index.md | 51 +++++++++++++++++- .../multiarch_ollama_on_gke/_index.md | 48 ++++++++++++++++- .../mysql-azure/_index.md | 47 ++++++++++++++++- .../mysql-lns-azure/_index.md | 52 ++++++++++++++++++- .../mysql/_index.md | 49 ++++++++++++++++- .../mysql_benchmark/_index.md | 48 ++++++++++++++++- .../neoverse-rdv3-swstack/_index.md | 50 +++++++++++++++++- .../net-aspire/_index.md | 52 +++++++++++++++++-- .../nginx-on-azure/_index.md | 49 ++++++++++++++++- .../nginx/_index.md | 50 +++++++++++++++++- .../nlp-hugging-face/_index.md | 45 +++++++++++++++- .../node-js-gcp/_index.md | 46 +++++++++++++++- .../oci-terraform/_index.md | 45 +++++++++++++++- .../onnx-on-azure/_index.md | 49 ++++++++++++++++- .../onnx/_index.md | 51 +++++++++++++++++- .../openbmc-rdv3/_index.md | 49 ++++++++++++++++- .../opencv-on-axion/_index.md | 45 +++++++++++++++- .../openebs-cobalt/_index.md | 46 +++++++++++++++- .../openjdk-pacbti-gcp/_index.md | 46 +++++++++++++++- .../openrng-with-performix/_index.md | 49 ++++++++++++++++- 20 files changed, 931 insertions(+), 36 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md index 07fccf7fdb..f75270b1a4 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md @@ -16,10 +16,58 @@ prerequisites: - An [Azure account](https://azure.microsoft.com/en-us/free/) - A local machine with [`jq`](https://jqlang.org/download/), [`curl`](https://curl.se/download.html), [`wrk`](https://github.com/wg/wrk), [Azure CLI](/install-guides/azure-cli/), and [`kubectl`](/install-guides/kubectl/) installed +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:35:41Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 9c684631877441d8756182571940b0aa63797c5adab26c46663b95492bceffbb + summary_generated_at: '2026-10-01T19:35:41Z' + summary_source_hash: 9c684631877441d8756182571940b0aa63797c5adab26c46663b95492bceffbb + faq_generated_at: '2026-10-01T19:35:41Z' + faq_source_hash: 9c684631877441d8756182571940b0aa63797c5adab26c46663b95492bceffbb + summary: >- + Build a hybrid Azure Kubernetes Service (AKS) cluster with x86 and Arm nodes, then deploy + nginx workloads to both architectures. You create the node pools, connect with `kubectl`, + and use a utility script to inspect and test each deployment. You then add a multi-architecture + service, compare its routing with the architecture-specific services, and monitor both workloads + while you run load tests. + faqs: + - question: How do I know the AKS cluster is set up for both architectures before deploying + nginx? + answer: >- + Confirm that the cluster has two node pools, one x86 and one Arm, and that `kubectl` can reach + the cluster. Check that nodes report the expected CPU architecture so scheduling can target + each pool. + - question: Which nginx image should I use to run on both Arm and x86 nodes? + answer: >- + The deployments use a multi-architecture nginx image from Docker Hub. The container runtime + pulls the correct image variant based on the node’s CPU architecture. + - question: What result should I expect when the nginx services become available? + answer: >- + Each deployment exposes a LoadBalancer service with an external endpoint. Hitting the endpoint + returns the default nginx response using the shared configuration from the ConfigMap. + - question: How do I confirm that each nginx pod is running on the correct architecture? + answer: >- + Use `kubectl` to check each pod’s node assignment and labels. The Arm service selects pods + with `app: nginx-multiarch` and `arch: arm`; verify that Arm pods run on the Arm node pool + and x86 pods run on the x86 pool. + - question: What should I check if the Arm deployment does not start or the service shows no + endpoints? + answer: >- + Verify the Arm node pool exists and is Ready, and ensure the deployment and service selectors + match, including `app: nginx-multiarch` and `arch: arm`. Also confirm the namespace and shared + ConfigMap were created before applying the deployment. +# END generated_summary_faq + author: - Geremy Cohen -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -70,4 +118,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md index 183b72685c..f9360b7e96 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md @@ -15,10 +15,55 @@ prerequisites: - A local machine with [Google Cloud CLI](/install-guides/gcloud/) and [kubectl](/install-guides/kubectl/) installed. - The [GKE Cloud Plugin](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#gcloud) installed. +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:36:03Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 524da8c0a000a03613c8fca09d0a78b8bb3fbe57a53fdaaaca79d4d7431bb44c + summary_generated_at: '2026-10-01T19:36:03Z' + summary_source_hash: 524da8c0a000a03613c8fca09d0a78b8bb3fbe57a53fdaaaca79d4d7431bb44c + faq_generated_at: '2026-10-01T19:36:03Z' + faq_source_hash: 524da8c0a000a03613c8fca09d0a78b8bb3fbe57a53fdaaaca79d4d7431bb44c + summary: >- + Build a hybrid Google Kubernetes Engine (GKE) cluster that runs Ollama on amd64 and Arm nodes. + You deploy Ollama to the initial amd64 pool, add an Arm node pool, and create a matching arm64 + deployment. You then use a multi-architecture service and helper script to route requests, + identify the pod and node that handled each call, load a model, and compare inference behavior + across both architectures. + faqs: + - question: Which namespace should I use for all Kubernetes objects in this path? + answer: >- + Use the `ollama` namespace created by applying `namespace.yaml`. All subsequent Deployments + and Services are scoped to this namespace. + - question: How do I verify the initial amd64 deployment is ready before adding Arm nodes? + answer: >- + Confirm that the Ollama Deployment and Service for amd64 exist in the `ollama` namespace and + report ready. Do not proceed until the pods are running and the service is available. + - question: What values should I set when creating the Arm node pool? + answer: >- + Name the pool `arm64-pool`, set **Size** to **1**, and enable **Specify node locations** with + **us-central1-a** selected. Follow the remaining on-screen options to add the Arm node pool. + - question: How do I send a request without selecting an architecture and see which one handled + it? + answer: >- + Run `./model_util.sh multiarch hello` to target the multi-architecture service. The response + shows which pod served the request, including its deployment, node, and timestamp. + - question: What should I check if requests always go to the same architecture? + answer: >- + Verify that both the amd64 and arm64 Deployments are running and their Services are available + in the `ollama` namespace. If one deployment isn't ready, traffic routes to the available + architecture. +# END generated_summary_faq + author: - Geremy Cohen -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -81,4 +126,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md index f4e88b58b1..cfbe1680b7 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md @@ -14,9 +14,53 @@ prerequisites: - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) - Familiarity with relational databases and the basics of [MySQL](https://dev.mysql.com/doc/refman/8.0/en/introduction.html) +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:36:26Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 2a34346f8cd7954362d479429942c9b66c863f4470d3e7cdf49efbc6093c54cd + summary_generated_at: '2026-10-01T19:36:26Z' + summary_source_hash: 2a34346f8cd7954362d479429942c9b66c863f4470d3e7cdf49efbc6093c54cd + faq_generated_at: '2026-10-01T19:36:26Z' + faq_source_hash: 2a34346f8cd7954362d479429942c9b66c863f4470d3e7cdf49efbc6093c54cd + summary: >- + Deploy MySQL on an Arm64 Azure Cobalt 100 virtual machine and establish a performance baseline. + You provision an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, then install, secure, + and validate MySQL. After creating sample data, you use `mysqlslap` to run read and write + benchmarks, interpret the reported timings, and capture results that you can use in later + comparisons. + faqs: + - question: Which Azure VM size and image should I select for this path? + answer: >- + Use a general-purpose Dpsv6 series instance based on Azure Cobalt 100, and choose Ubuntu + Pro 24.04 LTS as the base image. You create this VM in the Azure portal. + - question: Can I provision the VM with the Azure CLI or infrastructure as code instead of + the portal? + answer: >- + Several methods are possible, but you use the Azure portal in the documented workflow. + Follow the portal steps to match the configuration shown. + - question: How do I confirm MySQL is running before moving on? + answer: >- + Start MySQL and enable it to start on boot using the provided `systemctl` commands. Then perform + the functional validation to confirm queries run and users can authenticate. + - question: Should I deploy MySQL with Docker or use native packages? + answer: >- + You install and secure MySQL directly on the Ubuntu VM. A Docker-based deployment isn't + covered. + - question: What should I do before running mysqlslap, and what output should I expect? + answer: >- + Connect to MySQL and create the sample database and table before benchmarking. `mysqlslap` + simulates multiple clients and reports timing statistics that you can use as your baseline. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -61,4 +105,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md index fc56c24282..2cc042d74d 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md @@ -15,9 +15,59 @@ learning_objectives: prerequisites: - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) - Basic familiarity with SSH and MySQL command-line tools + +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:36:51Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: d6d2cda672e5ed693210356f269aa015cb9b3b80fc92c9c33c200e6d83717b15 + summary_generated_at: '2026-10-01T19:36:51Z' + summary_source_hash: d6d2cda672e5ed693210356f269aa015cb9b3b80fc92c9c33c200e6d83717b15 + faq_generated_at: '2026-10-01T19:36:51Z' + faq_source_hash: d6d2cda672e5ed693210356f269aa015cb9b3b80fc92c9c33c200e6d83717b15 + summary: >- + Migrate a MySQL database from a simulated on-premises x64 server to an Arm-based Azure Cobalt + 100 virtual machine. You prepare the source VM, install the required tools, and load a sample + database. You then configure and run the migration scripts to provision the target and restore + the database. Finally, you connect to the Arm VM, run a `sysbench` workload, and review the + results. + faqs: + - question: Which architecture should I choose for the on-premises simulator VM? + answer: >- + Choose x64 for the simulator VM. It acts as the on-premises MySQL source that you migrate + from. + - question: Where do I run the migration scripts, and what SSH key do they generate? + answer: >- + Run the scripts from the downloaded asset repository, for example in `$HOME/lift-n-shift-assets`. + The `scripts/create_ssh_key.sh` script generates an SSH key pair in `$HOME/.ssh` and prints the public + key. + - question: What should I enter when the key generation script prompts for a passphrase, and + what output should I keep? + answer: >- + Press **Enter** to leave the passphrase empty, as instructed. Save the printed `ssh-rsa` public + key string for use with the Azure VM. + - question: How do I connect to the Arm-based Azure VM before running the benchmark, and which + user and key should I use? + answer: >- + From the on-premises simulator, SSH to the Arm VM using the key created earlier in `$HOME/.ssh` + and the `azureadmin` user at the VM’s public IP. Use the filename you identified for the Azure + cloud key. + - question: Where should I create and run the benchmarking script, and what result should I + expect? + answer: >- + Create and run the script, for example `run.sh`, on the Arm-based Azure Cobalt 100 VM after + connecting with SSH. Expect `sysbench` to produce a summary of performance metrics that you + can review to validate the migrated database. +# END generated_summary_faq + author: Doug Anson -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false diff --git a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md index 825c4840b7..369f35e0aa 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md @@ -13,9 +13,55 @@ prerequisites: - An Arm based instance from a cloud service provider, or an on-premise Arm server. - If you do not have an Arm node, the next section discusses some options. +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:37:38Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 743cde2f666e32bdd9dd2c412037696d36fbe12c5d89d854b04102d9a74a05ec + summary_generated_at: '2026-10-01T19:37:38Z' + summary_source_hash: 743cde2f666e32bdd9dd2c412037696d36fbe12c5d89d854b04102d9a74a05ec + faq_generated_at: '2026-10-01T19:37:38Z' + faq_source_hash: 743cde2f666e32bdd9dd2c412037696d36fbe12c5d89d854b04102d9a74a05ec + summary: >- + Deploy MySQL on an Arm-based Linux system and verify that the database is ready to use. You + review deployment options for bare-metal systems, cloud virtual machines, and managed SQL + services before choosing an environment. You then follow the MySQL documentation to install + and configure the server, connect with the MySQL client, and run basic SQL commands. A separate + Learning Path covers performance tuning. + faqs: + - question: I already know how to deploy MySQL. Should I skip to the tuning content? + answer: >- + Yes. If you already know how to deploy a MySQL database, continue to the MySQL tuning Learning + Path to improve the performance of an Arm-based MySQL server. + - question: I already have an Arm server. Which deployment option should I use? + answer: >- + Use your existing Arm system and continue with the installation and check steps. You can + skip the deployment options subsection; bare metal or an existing Arm-based VM both work. + - question: What result should I expect after I install and check MySQL? + answer: >- + You should have a running MySQL server on an Arm-based Linux system. A successful connection + with the MySQL client and the ability to issue basic SQL statements indicate that the setup + is working. + - question: Can I use a managed SQL service instead of installing MySQL myself? + answer: >- + Yes, managed SQL services on Arm are listed as deployment options. However, the hands-on + hands-on verification assumes that you control an Arm instance where you install MySQL and + interact with the command-line client. + - question: I don’t have an Arm node. Where should I start? + answer: >- + Use one of the cloud options described in the deployment section, or see the Get started + with Arm-based cloud instances Learning Path. Provision an Arm environment before you install + MySQL. +# END generated_summary_faq + author: Jason Andrews -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -55,4 +101,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md index c2537c883c..25dc382cfd 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md @@ -13,9 +13,54 @@ prerequisites: - Basic knowledge of [MySQL databases](https://www.mysql.com/) - Two Arm servers running Ubuntu 22.04, one for the MySQL server and the other for the Sysbench client +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:38:09Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 5fc0ba5fb5befc9ae9ba54e8d7734e5673c2e7a5b5c1eee6e6cdb181cad2de48 + summary_generated_at: '2026-10-01T19:38:09Z' + summary_source_hash: 5fc0ba5fb5befc9ae9ba54e8d7734e5673c2e7a5b5c1eee6e6cdb181cad2de48 + faq_generated_at: '2026-10-01T19:38:09Z' + faq_source_hash: 5fc0ba5fb5befc9ae9ba54e8d7734e5673c2e7a5b5c1eee6e6cdb181cad2de48 + summary: >- + Build MySQL from source on an Arm Ubuntu 22.04 server and benchmark it from a second Arm Linux + system. You configure the server, build `sysbench` with the required MySQL client libraries, + and run baseline workloads. You then rebuild MySQL with GCC profile-guided optimization (PGO), + first collecting profile data and then applying it. Finally, you repeat the workloads and + compare the results with your baseline. + faqs: + - question: Can I use a different Linux distribution than Ubuntu 22.04 for this setup? + answer: >- + The instructions use Ubuntu 22.04 and note that other Linux distributions and Ubuntu versions + might also work. If you use a different OS, expect to adapt package installation commands to + match your environment. + - question: Why do I need to build and install MySQL on the Sysbench client? + answer: >- + `sysbench` needs MySQL client libraries to build and run its MySQL tests. You only build + and install MySQL on the client to provide these libraries; you do not configure or run + the MySQL server on the client. + - question: How much disk space do I need on the server and client? + answer: >- + Allocate at least 200 GB of disk space on the MySQL server system. Allocate at least 30 + GB on the Sysbench client system. + - question: Which compiler should I use for PGO, and what builds does the process create? + answer: >- + The PGO section uses GCC. You create two additional MySQL installations: one built with + profile generation to collect data and another rebuilt with profile use to apply that data. + - question: How do I confirm that PGO changed performance? + answer: >- + Run the same `sysbench` workload on the baseline and profile-use builds, then compare their + results. Keep the workload and environment consistent so the comparison is meaningful. +# END generated_summary_faq + author: Bolt Liu -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -59,4 +104,3 @@ weight: 1 layout: learningpathall learning_path_main_page: 'yes' --- - diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md index 5f2433687c..886989930c 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md @@ -19,11 +19,58 @@ prerequisites: - Understanding of firmware boot stages and SoC-level architecture - Docker installed, or a GitHub Codespaces-compatible development environment +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:38:48Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: edcf755937689018d68a687def84b27f119fcfa2542949294f965c21e0d0d642 + summary_generated_at: '2026-10-01T19:38:48Z' + summary_source_hash: edcf755937689018d68a687def84b27f119fcfa2542949294f965c21e0d0d642 + faq_generated_at: '2026-10-01T19:38:48Z' + faq_source_hash: edcf755937689018d68a687def84b27f119fcfa2542949294f965c21e0d0d642 + summary: >- + Build the Arm Neoverse RD-V3 firmware stack and test it on an Arm Fixed Virtual Platform (FVP) + before hardware is available. You prepare a repeatable environment, sync pinned sources, compile + the boot chain, and select the FVP version that matches your release. You then map UART consoles, + follow the boot to a Buildroot Linux shell, validate firmware changes, and run the dual-chip + RD-V3-R1 simulation. + faqs: + - question: How do I choose the correct FVP model for my RD-V3 build? + answer: >- + Match the FVP model version to the RD-V3 release tag you're using. The instructions include an + example mapping and point to the release tags list for the full set of supported versions. + - question: What result should I expect when the single-die simulation boots successfully? + answer: >- + The system boots from BL1 through the firmware stack to a Buildroot Linux shell on the FVP. + You should see logs across the mapped UART consoles for each stage and a Linux prompt on + the application processor path. + - question: What should I check if the boot hangs before reaching Linux? + answer: >- + Review the UART outputs to find the last active stage and identify where control stopped. + Confirm the FVP version matches your selected RD-V3 release tag and re-sync sources to the + pinned manifest before rebuilding. + - question: How do I validate a change to SCP, MCP, or LCP firmware? + answer: >- + Rebuild the affected platform control firmware, then rerun the FVP simulation. Inspect the + corresponding UART logs for your expected messages or behavior and confirm the system still + reaches the Linux shell. + - question: How do I know the dual-chip RD-V3-R1 simulation is running correctly? + answer: >- + Look for a dual-AP boot flow and MCP activity coordinating across dies. Both dies should + produce console output, and the expected cross-die management + behavior should be visible in the logs. +# END generated_summary_faq + author: - Odin Shen - Ann Cheng -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -64,4 +111,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md index 666de5fe99..2c1b828471 100644 --- a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md @@ -13,11 +13,58 @@ learning_objectives: prerequisites: - A Windows on Arm machine, for example the Lenovo Thinkpad X13s running Windows 11 to build the .NET Aspire project. - An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from AWS or GCP. - - Any code editor. [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) is an example of a suitable editor. + - Any code editor. [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) is an example of a suitable editor. + +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:39:10Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 09c62748f1623172f6adbc48bb3411abd4bad6c0e477c8c0aa66b19f8369db69 + summary_generated_at: '2026-10-01T19:39:10Z' + summary_source_hash: 09c62748f1623172f6adbc48bb3411abd4bad6c0e477c8c0aa66b19f8369db69 + faq_generated_at: '2026-10-01T19:39:10Z' + faq_source_hash: 09c62748f1623172f6adbc48bb3411abd4bad6c0e477c8c0aa66b19f8369db69 + summary: >- + Create and run a .NET Aspire application on a Windows on Arm development machine, then deploy + it to an Arm-based virtual machine. You install the Aspire workload, trust the local HTTPS + certificate, and inspect the application through its startup output and dashboard. You then + add a compute-intensive service, rebuild the application, and deploy it to an AWS Graviton-based + EC2 instance. The workflow also supports Arm-based Google Cloud VMs. + faqs: + - question: How do I verify the .NET SDK and install the Aspire workload before creating the + project? + answer: >- + Run `dotnet --version` in PowerShell and confirm it reports 8.0 or later. Then run `dotnet + workload install aspire`; the installer downloads the Aspire components and completes without + errors. + - question: Why do I need to trust the HTTPS development certificate, and how do I do it? + answer: >- + The application uses HTTPS locally and the dashboard relies on a trusted certificate. Run + `dotnet dev-certs https --trust` before you start the application. + - question: Which project do I run to start the distributed application, and what output should + I expect? + answer: >- + From the project directory, run `dotnet run --project NetAspire.Arm.AppHost`. You should see + messages such as `Building...`, an Aspire version line, and `Distributed application starting`. + - question: Where do I add the intensive computations, and how can I confirm the change worked? + answer: >- + Add `ComputationService.cs` to the `NetAspire.Arm.ApiService` project using the provided code, + then rebuild and run the solution. Check the console or dashboard logs for the API service + to observe the new computation executing. + - question: When deploying to AWS, which option selects an Arm-based EC2 instance? + answer: >- + In the EC2 service, choose a Graviton-based instance. Follow the instructions to launch and + target that VM for deployment. +# END generated_summary_faq author: Dawid Borycki -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -60,4 +107,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md index 62cafc4cb1..d69a33f1b3 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md @@ -14,9 +14,55 @@ learning_objectives: prerequisites: - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:39:38Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: f556dee0540494860c18e38f186e7a602db0635cded4fd4c6cbb649e115ef294 + summary_generated_at: '2026-10-01T19:39:38Z' + summary_source_hash: f556dee0540494860c18e38f186e7a602db0635cded4fd4c6cbb649e115ef294 + faq_generated_at: '2026-10-01T19:39:38Z' + faq_source_hash: f556dee0540494860c18e38f186e7a602db0635cded4fd4c6cbb649e115ef294 + summary: >- + Deploy NGINX on an Arm-based Microsoft Azure Cobalt 100 virtual machine and capture a baseline + benchmark. You create an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, install NGINX, + and verify its default page. You then configure a static site and confirm that NGINX serves + your content. Finally, you install ApacheBench and record initial throughput and timing results. + faqs: + - question: Which Azure VM size and image should I choose, and do I need to match the D4ps_v6 + example? + answer: >- + Use an Arm-based Cobalt 100 VM in the Dpsv6 series with the Ubuntu Pro 24.04 LTS Arm64 image. + The example uses a `D4ps_v6` instance, but you can follow the same instructions + with other Dpsv6 sizes. + - question: How do I know NGINX installed correctly before I change any configuration? + answer: >- + After installation, NGINX serves its default welcome page. Confirm that the welcome page + loads before proceeding to configure your own site. + - question: Where should I put my static site files, and what should I expect when it works? + answer: >- + Create the `/var/www/my-static-site` directory and add an HTML file. After updating the NGINX + configuration to point to this directory and reloading NGINX, requests to the server should + return your custom page instead of the default welcome page. + - question: Should I run ApacheBench on the VM or from another machine? + answer: >- + You install and run ApacheBench (`ab`) on the same Ubuntu Pro 24.04 LTS Arm64 VM that + runs NGINX. Follow that approach unless you have a specific reason to benchmark from an + external client. + - question: Which package installs `ab` on Ubuntu Pro 24.04 LTS, and how do I verify it? + answer: >- + Install the `apache2-utils` package. Run `ab -V` to confirm that ApacheBench is available and + prints a version string. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -56,4 +102,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md index 206f6eee82..53f8ab0b7b 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md @@ -15,9 +15,56 @@ prerequisites: - To create a reverse proxy or API gateway you will need at least three Arm based instances from a cloud service provider or at least three on-premises Arm servers. - Network settings (firewalls and security groups) which allow communication on port 22 (SSH) and port 443 (HTTPS). +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:40:11Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 877a608fc16135d4bcfc1ce710fb257fcea3ec3af75052841a3182bd024f8384 + summary_generated_at: '2026-10-01T19:40:11Z' + summary_source_hash: 877a608fc16135d4bcfc1ce710fb257fcea3ec3af75052841a3182bd024f8384 + faq_generated_at: '2026-10-01T19:40:11Z' + faq_source_hash: 877a608fc16135d4bcfc1ce710fb257fcea3ec3af75052841a3182bd024f8384 + summary: >- + Deploy nginx on Arm-based Linux servers and progress from a package installation to a working + web-service configuration. You inspect the packaged build options and use them to compile + nginx from source when you need a custom build. You then configure an HTTPS static file server, + create its key and certificate, and verify file delivery. Finally, you configure a third node + as a reverse proxy and API gateway for two upstream servers. + faqs: + - question: How do I know which nginx features are enabled in the packaged install? + answer: >- + Review the packaged build configuration to see which modules and paths are compiled in. + Use this information to decide which options to enable if you later build from source. + - question: Do I need to build nginx from source? + answer: >- + No. You start with a package install and only build from source if you need a different + configuration. Looking at the prebuilt configuration first helps you choose the right source + build options. + - question: What do I need in place before setting up the reverse proxy and API gateway? + answer: >- + Set up two file servers using the previous section, and prepare a third node for the reverse + proxy/API gateway. Ensure network settings allow communication on ports 22 (SSH) and 443 + (HTTPS). + - question: How do I verify the static HTTPS file server is working? + answer: >- + After configuring nginx, creating a key and certificate, and starting the service, access + a test file over HTTPS from a client. Successful retrieval confirms the setup; if it fails, + review your configuration and the nginx documentation on serving static content. + - question: What result should I expect after configuring the reverse proxy/API gateway? + answer: >- + The reverse proxy/API gateway forwards requests to the two upstream file servers and load + balances across them. During testing, you should observe responses originating from both + backends; see the nginx reverse proxy documentation for configuration details. +# END generated_summary_faq + author: Julio Suarez -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -61,4 +108,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md b/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md index 72616389e4..a0858a8505 100644 --- a/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md @@ -12,9 +12,51 @@ learning_objectives: prerequisites: - An [Arm based instance](/learning-paths/servers-and-cloud-computing/csp/) from a cloud service provider or an on-premise Arm server. +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:40:33Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 5d0c0a2a23fba1796458c60ac49fa5d4b43e0d827463e049afb0e1b79eb9292f + summary_generated_at: '2026-10-01T19:40:33Z' + summary_source_hash: 5d0c0a2a23fba1796458c60ac49fa5d4b43e0d827463e049afb0e1b79eb9292f + faq_generated_at: '2026-10-01T19:40:33Z' + faq_source_hash: 5d0c0a2a23fba1796458c60ac49fa5d4b43e0d827463e049afb0e1b79eb9292f + summary: >- + Run and profile a Hugging Face natural language processing (NLP) model with PyTorch on an Arm + AArch64 CPU. You prepare an Ubuntu 22.04 LTS Arm server and install PyTorch, Transformers, + and SciPy. You then run a RoBERTa sentiment-analysis model and inspect its ranked labels and + confidence scores. Finally, you add the PyTorch Profiler and review the CPU execution time + for individual operators. + faqs: + - question: Do I need a specific Linux version for these steps? + answer: >- + Yes. The instructions target Ubuntu 22.04 LTS on an Arm server. + - question: How do I know I’m running on an Arm AArch64 machine before I install PyTorch? + answer: >- + Confirm the instance type is Arm-based in your cloud console, or use an on-premises Arm + server. The instructions assume an Arm AArch64 CPU. + - question: Which Hugging Face model should I pick for the tutorial? + answer: >- + Use the `cardiffnlp/twitter-roberta-base-sentiment-latest` model specified in the example. + The script downloads its configuration, tokenizer, and PyTorch weights from Hugging Face. + - question: What result should I expect when I run the model? + answer: >- + A successful run prints three ranked sentiment labels with confidence scores. The scores + should sum to 1, and the first line is the model's strongest prediction. + - question: How do I know the PyTorch profiler captured my run? + answer: >- + You should see a table of CPU operators and their execution times after the classification + output. The `model_inference` row summarizes the profiled inference region. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -59,4 +101,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md b/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md index 811d016346..18ef61c2f2 100644 --- a/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md @@ -15,9 +15,52 @@ prerequisites: - A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled - Familiarity with networking concepts and [Node.js event-driven architecture](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick) +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:41:01Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: c21d775ef47f9befc1046df0d89f746550a180b29974c45261e0478f59df503e + summary_generated_at: '2026-10-01T19:41:01Z' + summary_source_hash: c21d775ef47f9befc1046df0d89f746550a180b29974c45261e0478f59df503e + faq_generated_at: '2026-10-01T19:41:01Z' + faq_source_hash: c21d775ef47f9befc1046df0d89f746550a180b29974c45261e0478f59df503e + summary: >- + Deploy and benchmark a Node.js workload on an Arm-based Google Cloud C4A virtual machine. + You provision a SUSE Linux Enterprise Server instance on Google Axion, then install Node.js + with Node Version Manager (NVM). You validate the runtime in the read-eval-print loop (REPL) + and with a minimal HTTP server. Finally, you use Autocannon to measure request throughput + and latency and capture a baseline for the VM. + faqs: + - question: Which VM options should I select when creating the instance? + answer: >- + Use a C4A machine type; the example uses `c4a-standard-4` with four vCPUs and 16 GB. Select a SUSE Linux + Enterprise Server image for Arm64 to match the Learning Path objectives. + - question: NVM isn’t found after installation—what should I do? + answer: >- + Load NVM into your current shell using the commands shown in the installation step. If needed, + open a new terminal session so your profile changes take effect. + - question: How do I confirm Node.js is working before I benchmark? + answer: >- + Run the REPL test to print a message and start the sample HTTP server. Proceed when the + server responds to an HTTP request on the configured port. + - question: What URL should I pass to Autocannon? + answer: >- + Use the address and port where your sample Node.js server is listening, such as `localhost` + with the configured port. Run Autocannon against that endpoint to collect results. + - question: How do I know I’m running on an Arm-based Axion VM? + answer: >- + Check that the instance type is C4A in the Google Cloud console. C4A instances use Google + Axion processors with Arm Neoverse-V2 cores. The workload targets AArch64. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -61,4 +104,3 @@ weight: 1 layout: "learningpathall" learning_path_main_page: "yes" --- - diff --git a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md index d307b2ca5e..baa3b57ff6 100644 --- a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md @@ -12,9 +12,51 @@ prerequisites: - An OCI account - A computer with Terraform installed +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:41:27Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: f927b34764047b05b4bd225ef1080f9cc345d6bd91ec8220fd23d710a478013d + summary_generated_at: '2026-10-01T19:41:27Z' + summary_source_hash: f927b34764047b05b4bd225ef1080f9cc345d6bd91ec8220fd23d710a478013d + faq_generated_at: '2026-10-01T19:41:27Z' + faq_source_hash: f927b34764047b05b4bd225ef1080f9cc345d6bd91ec8220fd23d710a478013d + summary: >- + Use Terraform to automate the creation of an Arm virtual machine on Oracle Cloud Infrastructure + (OCI) Ampere Compute. You prepare a Linux control environment, define the OCI resources as + code, and run the Terraform workflow to provision the instance. You can use the resulting + configuration as a repeatable foundation for additional Arm infrastructure on OCI. + faqs: + - question: Which computer can I use to run Terraform? + answer: >- + You can use any computer with the required tools installed, including a desktop, laptop, + or a virtual machine. The command format assumes you are working on a Linux machine. + - question: What do I need in OCI before I start? + answer: >- + Yes, you need an Oracle Cloud Infrastructure (OCI) account. If you are new to OCI, review + the Getting Started with Oracle OCI Learning Path before you begin. + - question: Where do I find installation instructions for Terraform? + answer: >- + See the Terraform install guide and follow its instructions on + the computer you plan to use. + - question: Can I use a virtual machine as my control environment for running Terraform? + answer: >- + Yes. A virtual machine with the required tools installed works the same as a desktop or + laptop for running the commands. + - question: What result should I expect after I complete the workflow? + answer: >- + Terraform automates the creation of an Arm virtual machine instance on OCI Ampere Compute. + You finish with an OCI Arm instance provisioned from your Terraform configuration. +# END generated_summary_faq + author: Frédéric -lefred- Descamps -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -49,4 +91,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md index 87c35b38dd..77b52ae13f 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md @@ -14,9 +14,56 @@ prerequisites: - Basic understanding of Python and machine learning concepts - Familiarity with [ONNX Runtime](https://onnxruntime.ai/docs/) and Azure cloud services +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:41:46Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 3dfb5d613a9e88a35777de0adc65fbcacd46a906031c4d933c744abf9689e6a0 + summary_generated_at: '2026-10-01T19:41:46Z' + summary_source_hash: 3dfb5d613a9e88a35777de0adc65fbcacd46a906031c4d933c744abf9689e6a0 + faq_generated_at: '2026-10-01T19:41:46Z' + faq_source_hash: 3dfb5d613a9e88a35777de0adc65fbcacd46a906031c4d933c744abf9689e6a0 + summary: >- + Run and benchmark SqueezeNet 1.0 INT8 inference with ONNX Runtime on an Arm-based Azure Cobalt + 100 virtual machine. You provision an Ubuntu Pro 24.04 LTS Dpsv6 VM and prepare a Python + environment. You then run a baseline script to validate inference and record latency. Finally, + you use `onnxruntime_perf_test` to collect more detailed performance statistics on the Arm64 + system. + faqs: + - question: Which Azure VM size and OS image should I select for this workflow? + answer: >- + Choose a Cobalt 100-based Dpsv6 VM from the D-series and use Ubuntu Pro 24.04 LTS. You + use the Azure portal to create this configuration. + - question: What do I need in place before running the baseline latency test? + answer: >- + Activate your Python virtual environment, have the `baseline.py` script ready, and ensure + the SqueezeNet INT8 model file is available as `squeezenet-int8.onnx`. Place the model in + the same working directory as the script or provide its full path. + - question: How do I know the baseline test worked correctly? + answer: >- + The script completes without errors and reports a timing result for a single inference through + the SqueezeNet INT8 model. Successful execution confirms that ONNX Runtime is functioning + on the VM. + - question: When should I use `onnxruntime_perf_test`, and what output should I expect? + answer: >- + Use `onnxruntime_perf_test` after validating the Python baseline to capture more detailed + performance statistics. Expect a summary of inference metrics that you can use to evaluate + ONNX Runtime efficiency on the Azure Arm64 instance. + - question: What should I check if the script cannot find `squeezenet-int8.onnx`? + answer: >- + Verify the file name matches `squeezenet-int8.onnx` and confirm the working directory contains + the model. Alternatively, update the script to reference the model with an absolute or correct + relative path. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false diff --git a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md index aa75028f3b..918420f591 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md @@ -15,9 +15,57 @@ prerequisites: - Familiarity with ONNX Runtime and Azure cloud services. - Knowledge of Large Language Model (LLM) fundamentals. +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:42:07Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 8c80b9778bfd1b0393e43e5eff673f0f83ec1e49c221ad33fe378fa6e5eba082 + summary_generated_at: '2026-10-01T19:42:07Z' + summary_source_hash: 8c80b9778bfd1b0393e43e5eff673f0f83ec1e49c221ad33fe378fa6e5eba082 + faq_generated_at: '2026-10-01T19:42:07Z' + faq_source_hash: 8c80b9778bfd1b0393e43e5eff673f0f83ec1e49c221ad33fe378fa6e5eba082 + summary: >- + Build ONNX Runtime on an Arm-based Azure Cobalt 100 server and use it to run a Phi-4-mini + chatbot. You prepare Ubuntu 24.04 LTS, quantize and convert the model, and start the Python + chatbot with `onnxruntime_genai`. You then send text prompts and inspect the terminal metrics, + including tokens per second and time to first token, to validate inference and assess basic + performance on the Arm CPU. + faqs: + - question: What do I pass to the `--model_path` argument in the chatbot script? + answer: >- + Use the path to the quantized and converted Phi-4-mini model assets that onnxruntime_genai + expects. Make sure the quantization and conversion step completed successfully before starting + the server. + - question: Which execution provider should I choose when running the chatbot? + answer: >- + If you're unsure, keep the default execution provider, `follow_config`, + so the script uses providers defined in the model config. Override only if you need to explicitly + set a different provider, as the script clears providers when you do. + - question: How do I know the chatbot server started correctly? + answer: >- + You should see the model load without errors and a prompt to enter text. After you send a + prompt, the terminal prints generation metrics such as tokens per second and time to first + token. + - question: Do I need the exact Azure VM size used in the example? + answer: >- + No. The instructions were tested on a 32-core Azure `Dpls_v6` Cobalt 100 VM, but you can + use another Arm-based Cobalt 100 instance. Use a comparable instance if you want results + similar to the example output. + - question: What should I check if throughput is lower than the example output? + answer: >- + Confirm that the model was quantized and converted as described, and verify your execution + provider selection. Also check that you are running on an Arm-based Azure Cobalt 100 VM + similar to the tested environment. +# END generated_summary_faq + author: Nobel Chowdary Mandepudi -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -54,4 +102,3 @@ weight: 1 # _index.md always has a weight of 1 to order co layout: "learningpathall" # All files under learning paths use this wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md b/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md index 12564e8751..0dfd85c614 100644 --- a/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md @@ -18,11 +18,57 @@ prerequisites: - Working knowledge of Docker, Git, and common Linux terminal tools - Basic understanding of the server firmware stack (such as UEFI, BMC, and TF-A) +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:42:25Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 285ebf154e6d58463132fc7914c672250ff2d66d0657710ec7eebd557386cbd4 + summary_generated_at: '2026-10-01T19:42:25Z' + summary_source_hash: 285ebf154e6d58463132fc7914c672250ff2d66d0657710ec7eebd557386cbd4 + faq_generated_at: '2026-10-01T19:42:25Z' + faq_source_hash: 285ebf154e6d58463132fc7914c672250ff2d66d0657710ec7eebd557386cbd4 + summary: >- + Simulate an Arm server boot flow on the Neoverse RD-V3 r1 Fixed Virtual Platform (FVP). You + build OpenBMC and host UEFI images in a Docker environment, launch the FVP, and follow the + firmware logs through multiple UART consoles. You then bridge virtual UARTs to validate Serial + over LAN communication. Finally, you add a C++ Intelligent Platform Management Interface + (IPMI) handler to OpenBMC, rebuild the image, and verify its response. + faqs: + - question: What result should I expect when the RD-V3 FVP starts? + answer: >- + Multiple UART consoles open in separate terminal windows for different subsystems, such + as Neoverse V3, Cortex-M55, Cortex-M7, and the Cortex-A BMC. You should see boot logs for + both the BMC and host UEFI across these consoles. + - question: The FVP UART consoles do not appear over SSH. What should I check? + answer: >- + The consoles are graphical terminals and require a desktop session. If you are connected + over SSH only, the windows won't render; launch the simulation from a desktop session. + - question: Which ports should I bridge to enable Serial over LAN (SoL)? + answer: >- + Use the provided bridge: `socat -x tcp:localhost:5005 tcp:localhost:5067`. Verify that these + port mappings match the endpoints exposed by your running simulation. + - question: After creating the UART bridge, what should I see when opening the host console + from the BMC web UI? + answer: >- + The host console should be accessible through SoL and display the host’s console output. + You should see ongoing boot messages or a prompt from the host side. + - question: How do I validate that my custom IPMI command works? + answer: >- + Issue the command using `ipmitool` and check for the expected simple string response. If the + response is not returned, ensure the C++ handler is integrated and rebuild the OpenBMC image + before re-running the simulation. +# END generated_summary_faq + author: - Odin Shen - Ken Zhang -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -69,4 +115,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - diff --git a/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md b/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md index a67ee968e1..f444cd9e59 100644 --- a/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md @@ -18,9 +18,52 @@ prerequisites: - Basic familiarity with Python and Linux command line - Understanding of basic image/video processing concepts +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:42:48Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 6382d70b3cd7040b984083cffee014bd2377ba150508b818e393263542a56333 + summary_generated_at: '2026-10-01T19:42:48Z' + summary_source_hash: 6382d70b3cd7040b984083cffee014bd2377ba150508b818e393263542a56333 + faq_generated_at: '2026-10-01T19:42:48Z' + faq_source_hash: 6382d70b3cd7040b984083cffee014bd2377ba150508b818e393263542a56333 + summary: >- + Build browser-based computer-vision pipelines with OpenCV on a Google Cloud C4A Axion virtual + machine. You provision a SUSE Linux VM, open port 8000, and prepare a Python 3.11 virtual + environment. You then create image and video pipelines that process frames and serve updated + output through an HTTP server. Finally, you add a machine learning model, stream its visual + predictions, and validate the output from the VM's external IP address. + faqs: + - question: Which C4A machine type should I create for the VM? + answer: >- + Use the `c4a-standard-4` machine type with four vCPUs and 16 GB of memory. This instance runs + the OpenCV application used throughout the workflow. + - question: Which port do I open for the browser view, and how do I check that it works? + answer: >- + Open TCP port 8000 with a VPC firewall rule. After you start the project's HTTP server, + visit `http://EXTERNAL_IP:8000`; a page that loads confirms the rule and service are configured. + - question: What Python version do I need during setup? + answer: >- + Install Python 3.11. You also install development tools with zypper to support building + OpenCV’s pip package. + - question: Where are the project files and virtual environment created? + answer: >- + Use the `~/opencv-project` directory and a virtual environment named `cv-env`. Run subsequent + scripts from that directory with the environment activated. + - question: What should be ready before I integrate the machine learning model? + answer: >- + Have a running Google Axion Arm-based VM with SUSE Linux, Python 3.11, the `~/opencv-project` + directory with the `cv-env` environment and OpenCV, and port 8000 open in the firewall. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md index beac330100..927ffa5b0e 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md @@ -19,9 +19,53 @@ prerequisites: - Familiarity with SSH and remote server access - Basic understanding of Kubernetes concepts and containerized applications +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:43:29Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 33e9470ccc06f4835028050615832b7200164ec6ba1fdbc26689e6f4fd43bfa4 + summary_generated_at: '2026-10-01T19:43:29Z' + summary_source_hash: 33e9470ccc06f4835028050615832b7200164ec6ba1fdbc26689e6f4fd43bfa4 + faq_generated_at: '2026-10-01T19:43:29Z' + faq_source_hash: 33e9470ccc06f4835028050615832b7200164ec6ba1fdbc26689e6f4fd43bfa4 + summary: >- + Add Kubernetes-native persistent storage to a workload on an Arm64 Azure Cobalt 100 virtual + machine. You create a single-node K3s cluster, install OpenEBS LocalPV with Helm, and configure + its storage class. You then create a PersistentVolumeClaim, mount it in an NGINX application, + and verify that test data survives pod recreation. Finally, you expose the application through + a NodePort and update the Azure network security group for inbound access. + faqs: + - question: Which Azure VM size should I pick for this setup? + answer: >- + Use a general-purpose virtual machine in the Dpsv6 series powered by Azure Cobalt 100. For + detailed creation instructions, see the Dpsv6 guidance or the Deploy a Cobalt 100 virtual + machine on Azure Learning Path. + - question: How do I expose the sample application so I can reach it from my browser? + answer: >- + Expose the NGINX deployment as a NodePort service and run `kubectl get svc` to see the assigned + port. Then add an inbound rule for that NodePort in the VM’s Network Security Group. + - question: What storage configuration should I use for the PersistentVolumeClaim? + answer: >- + Use `storageClassName: openebs-hostpath` and `accessModes: ReadWriteOnce` as shown in the PVC + manifest. This configuration targets OpenEBS LocalPV for dynamic provisioning. + - question: How do I know persistent storage is working before I move on? + answer: >- + Write data to the mounted volume in the NGINX pod, delete the pod, and let it recreate. + If the data is still present after the pod comes back, the volume is persisting as expected. + - question: Do I need a multi-node cluster? + answer: >- + No. You use a lightweight single-node Kubernetes cluster with K3s on the Azure Cobalt + 100 VM. Multi-node scenarios are not covered here. +# END generated_summary_faq + author: Pareena Verma -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false diff --git a/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md b/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md index c45eafa423..f2c83bb04e 100644 --- a/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md @@ -16,9 +16,53 @@ prerequisites: - A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled - Optionally, [install the gcloud CLI](/install-guides/gcloud/) to connect to the VM from a local terminal instead of using the browser-based SSH +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:43:54Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 1e27a00bafb12e1648af702e7eadeefc15ceefb119b7e6eb3e4824787d547271 + summary_generated_at: '2026-10-01T19:43:54Z' + summary_source_hash: 1e27a00bafb12e1648af702e7eadeefc15ceefb119b7e6eb3e4824787d547271 + faq_generated_at: '2026-10-01T19:43:54Z' + faq_source_hash: 1e27a00bafb12e1648af702e7eadeefc15ceefb119b7e6eb3e4824787d547271 + summary: >- + Validate Pointer Authentication (PAC) and Branch Target Identification (BTI) support in Java + on a Google Axion C4A virtual machine. You provision a SUSE Linux Enterprise Server VM, install + OpenJDK, and run a script that checks platform capabilities and Java virtual machine (JVM) + just-in-time (JIT) compiler support. You then install Oracle JDK 21, repeat the tests, and + compare how each runtime reports branch-protection support. + faqs: + - question: How do I verify which JVM is active after installation? + answer: >- + Run `java --version`. The output should identify the distribution and version, for example + OpenJDK 17 on `aarch64`. + - question: How do I know the C4A VM exposes PAC and BTI? + answer: >- + Run the provided test script and review its hardware checks. It should report that PAC and + BTI are available before you evaluate JVM compiler behavior. + - question: What result should I expect from the SUSE OpenJDK 17 tests? + answer: >- + The tests confirm the platform exposes PAC and BTI, but the SUSE-packaged OpenJDK 17 JIT + does not emit PAC/BTI instructions. This distinguishes hardware capability from the compiler’s + code generation. + - question: How do I ensure the tests run against Oracle JDK 21? + answer: >- + Invoke the Java binary from the extracted JDK's `bin` directory as shown, for example + `./jdk-21.0.11/bin/java`. The exact minor version in `--version` output might differ. + - question: Which C4A machine type should I use for this validation? + answer: >- + Use the `c4a-standard-4` machine type specified in the instructions. Other sizes aren't covered + here. +# END generated_summary_faq + author: Doug Anson -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false diff --git a/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md b/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md index d2de8ee51f..efa4fadc71 100644 --- a/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md @@ -17,9 +17,55 @@ prerequisites: - An Arm Linux (aarch64) server, such as an AWS Graviton3 instance - Basic understanding of C++ and CMake +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-01T19:44:16Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 004969d91992cbe6672e86cb8cc4734742e4461085198eaf09f3e2ff2afaf24d + summary_generated_at: '2026-10-01T19:44:16Z' + summary_source_hash: 004969d91992cbe6672e86cb8cc4734742e4461085198eaf09f3e2ff2afaf24d + faq_generated_at: '2026-10-01T19:44:16Z' + faq_source_hash: 004969d91992cbe6672e86cb8cc4734742e4461085198eaf09f3e2ff2afaf24d + summary: >- + Accelerate random-number generation in a C++ workload on Arm Linux with OpenRNG. You build + and run the baseline application, then use Arm Performix Code Hotspots to identify expensive + functions. You replace scalar distribution generation with the OpenRNG vector API from Arm + Performance Libraries and profile the updated build. Finally, you run a microbenchmark across + eight input sizes and compare the baseline and accelerated timings. + faqs: + - question: I’m using Ubuntu or Debian. Which package manager should I use during setup? + answer: >- + Replace `dnf` with `apt` on Ubuntu or Debian. The rest of the setup flow remains the same on + Arm Linux. + - question: What result should I expect when I run the baseline example? + answer: >- + The program generates two random distributions, filters points within a window, and computes + the shortest distance from the origin. Use this run to establish baseline behavior and timing + before profiling and acceleration. + - question: What should I look for in the Arm Performix Code Hotspots report? + answer: >- + Focus on functions consuming the largest share of CPU cycles. In this example, routines + such as `generateDistribution` or `min_length` might appear near the top and inform which code to + optimize first. + - question: Which OpenRNG API should I use to speed up distribution generation? + answer: >- + Use the Vector Statistical Library (VSL) API with a stream object to generate values in + bulk. This vector approach reduces per-call overhead for random number generation. + - question: What output indicates the microbenchmark sweep ran correctly? + answer: >- + The sweep times the isolated distribution generator across eight sizes from 2^8 to 2^15 + and reports elapsed time in microseconds. Run both baseline and accelerated builds, then compare + timings across sizes to evaluate scaling and improvements. +# END generated_summary_faq + author: Kieran Hejmadi -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false @@ -56,4 +102,3 @@ weight: 1 # _index.md always has weight of 1 to order corr layout: "learningpathall" # All files under learning paths have this same wrapper learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. --- - From d664a0e16d3eaf15ae79c7b0d0da41ad14cdb139 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Thu, 1 Oct 2026 17:18:32 -0500 Subject: [PATCH 23/66] first portion of edits to generated content --- .../multiarch_ollama_on_gke/_index.md | 30 ++++++------ .../mysql-azure/_index.md | 35 +++++++------ .../mysql-lns-azure/_index.md | 26 +++++----- .../mysql/_index.md | 39 +++++++-------- .../mysql_benchmark/_index.md | 24 ++++----- .../mysql_tune/_index.md | 4 +- .../neoverse-rdv3-swstack/2_rdv3_bootseq.md | 2 +- .../neoverse-rdv3-swstack/5_rdv3_modify.md | 2 +- .../neoverse-rdv3-swstack/_index.md | 28 +++++------ .../net-aspire/_index.md | 27 +++++----- .../nginx-on-azure/_index.md | 31 ++++++------ .../nginx/_index.md | 49 +++++++++---------- .../nginx_tune/_index.md | 6 +-- 13 files changed, 149 insertions(+), 154 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md index f9360b7e96..55d05c3394 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md @@ -3,7 +3,7 @@ title: Add Arm nodes to your GKE cluster using a multi-architecture Ollama conta minutes_to_complete: 30 -who_is_this_for: This Learning Path is for developers who want to compare the performance of amd64 and arm64 deployments by running inferences on a hybrid GKE cluster using an Ollama multi-architecture container image. +who_is_this_for: This Learning Path is for developers who want to compare the performance of amd64 and arm64 deployments by running inferences on a hybrid Google Kubernetes Engine (GKE) cluster using an Ollama multi-architecture container image. learning_objectives: - Create a hybrid GKE cluster with amd64 and arm64 nodes. @@ -11,9 +11,9 @@ learning_objectives: - Validate deployments by pinging, pulling models, and running inferences to compare architecture performance. prerequisites: - - A [Google Cloud account](https://console.cloud.google.com/). - - A local machine with [Google Cloud CLI](/install-guides/gcloud/) and [kubectl](/install-guides/kubectl/) installed. - - The [GKE Cloud Plugin](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#gcloud) installed. + - A [Google Cloud account](https://console.cloud.google.com/) + - A local machine with [Google Cloud CLI](/install-guides/gcloud/) and [kubectl](/install-guides/kubectl/) installed + - The [GKE Cloud Plugin](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#gcloud) installed # START generated_summary_faq generated_summary_faq: @@ -30,32 +30,32 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:36:03Z' faq_source_hash: 524da8c0a000a03613c8fca09d0a78b8bb3fbe57a53fdaaaca79d4d7431bb44c summary: >- - Build a hybrid Google Kubernetes Engine (GKE) cluster that runs Ollama on amd64 and Arm nodes. - You deploy Ollama to the initial amd64 pool, add an Arm node pool, and create a matching arm64 - deployment. You then use a multi-architecture service and helper script to route requests, + You'll build a hybrid GKE cluster that runs Ollama on amd64 and Arm nodes. + First, you'll deploy Ollama to the initial amd64 pool, add an Arm node pool, and create a matching arm64 + deployment. Then, you'll use a multi-architecture service and a script to route requests. You'll identify the pod and node that handled each call, load a model, and compare inference behavior across both architectures. faqs: - - question: Which namespace should I use for all Kubernetes objects in this path? + - question: Which namespace should I use for all Kubernetes objects? answer: >- - Use the `ollama` namespace created by applying `namespace.yaml`. All subsequent Deployments - and Services are scoped to this namespace. - - question: How do I verify the initial amd64 deployment is ready before adding Arm nodes? + Use the `ollama` namespace created by applying `namespace.yaml`. All subsequent deployments + and services are scoped to this namespace. + - question: How do I verify that the initial amd64 deployment is ready before adding Arm nodes? answer: >- - Confirm that the Ollama Deployment and Service for amd64 exist in the `ollama` namespace and - report ready. Do not proceed until the pods are running and the service is available. + Confirm that the Ollama deployment and service for amd64 exist in the `ollama` namespace and + report ready. Don't proceed until the pods are running and the service is available. - question: What values should I set when creating the Arm node pool? answer: >- Name the pool `arm64-pool`, set **Size** to **1**, and enable **Specify node locations** with **us-central1-a** selected. Follow the remaining on-screen options to add the Arm node pool. - - question: How do I send a request without selecting an architecture and see which one handled + - question: How do I send a request without selecting an architecture and see which architecture handled it? answer: >- Run `./model_util.sh multiarch hello` to target the multi-architecture service. The response shows which pod served the request, including its deployment, node, and timestamp. - question: What should I check if requests always go to the same architecture? answer: >- - Verify that both the amd64 and arm64 Deployments are running and their Services are available + Verify that both the amd64 and arm64 deployments are running and their services are available in the `ollama` namespace. If one deployment isn't ready, traffic routes to the available architecture. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md index cfbe1680b7..f109f9a95f 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md @@ -6,9 +6,9 @@ minutes_to_complete: 30 who_is_this_for: This is an introductory topic for developers migrating MySQL applications from x86_64 to Arm. learning_objectives: - - Provision an Azure Arm64 virtual machine using Azure console, with Ubuntu Pro 24.04 LTS as the base image - - Deploy MySQL on the Ubuntu virtual machine - - Perform MySQL baseline testing and benchmarking on Arm64 virtual machines + - Provision an Azure Arm64 virtual machine (VM) using the console, with Ubuntu Pro 24.04 LTS as the base image. + - Deploy MySQL on the Ubuntu VM. + - Perform MySQL baseline testing and benchmarking on Arm64 VMs. prerequisites: - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) @@ -29,29 +29,28 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:36:26Z' faq_source_hash: 2a34346f8cd7954362d479429942c9b66c863f4470d3e7cdf49efbc6093c54cd summary: >- - Deploy MySQL on an Arm64 Azure Cobalt 100 virtual machine and establish a performance baseline. - You provision an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, then install, secure, - and validate MySQL. After creating sample data, you use `mysqlslap` to run read and write - benchmarks, interpret the reported timings, and capture results that you can use in later + You'll deploy MySQL on an Arm64 Azure virtual machine powered by Cobalt 100, and establish a performance baseline. + First, you'll provision an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, then install, secure, + and validate MySQL. After creating sample data, you'll use `mysqlslap` to run read and write + benchmarks. You'll interpret the reported timings, and capture results that you can use in later comparisons. faqs: - - question: Which Azure VM size and image should I select for this path? + - question: Which Azure VM size and image should I select? answer: >- Use a general-purpose Dpsv6 series instance based on Azure Cobalt 100, and choose Ubuntu - Pro 24.04 LTS as the base image. You create this VM in the Azure portal. - - question: Can I provision the VM with the Azure CLI or infrastructure as code instead of - the portal? + Pro 24.04 LTS as the base image. + - question: What do I need to connect to the VM after deployment? answer: >- - Several methods are possible, but you use the Azure portal in the documented workflow. - Follow the portal steps to match the configuration shown. - - question: How do I confirm MySQL is running before moving on? + Use the private SSH key that you downloaded when you created the VM, along with the administrator + username and the VM's public IP address. + - question: How do I confirm that MySQL is running before moving on? answer: >- - Start MySQL and enable it to start on boot using the provided `systemctl` commands. Then perform + Start MySQL and enable it to start on boot using the provided `systemctl` commands. Then, perform the functional validation to confirm queries run and users can authenticate. - - question: Should I deploy MySQL with Docker or use native packages? + - question: What does mysql_secure_installation help me configure? answer: >- - You install and secure MySQL directly on the Ubuntu VM. A Docker-based deployment isn't - covered. + The interactive script helps you set a strong root password and remove anonymous users. It also helps disable + remote root access, remove test databases, and reload the privilege tables. - question: What should I do before running mysqlslap, and what output should I expect? answer: >- Connect to MySQL and create the sample database and table before benchmarking. `mysqlslap` diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md index 2cc042d74d..73ce06896e 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md @@ -1,16 +1,16 @@ --- -title: Migrate MySQL from on-premises x64 to Azure Cobalt 100 Arm VMs +title: Migrate MySQL from on-premises x64 to Arm-based Azure virtual machines description: Learn how to migrate a MySQL database from an on-premises x64 environment to an Arm-based Azure Cobalt 100 VM and validate performance with sysbench. minutes_to_complete: 30 -who_is_this_for: This Learning Path is for developers who want to migrate MySQL from an on-premises x64 environment to an Arm-based Azure Cobalt 100 virtual machine. +who_is_this_for: This Learning Path is for developers who want to migrate MySQL from an on-premises x64 environment to an Arm-based virtual machine (VM) powered by Azure Cobalt 100. learning_objectives: - - Provision an Arm-based Azure Cobalt 100 virtual machine using Terraform and Azure CLI - - Export and restore a MySQL database from an on-premises x64 simulator into the Arm VM - - Run sysbench on the migrated database and interpret key performance metrics + - Provision an Arm-based Azure VM powered by Cobalt 100 using Terraform and Azure CLI. + - Export and restore a MySQL database from an on-premises x64 simulator into the Arm VM. + - Run sysbench on the migrated database and interpret key performance metrics. prerequisites: - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) @@ -31,10 +31,10 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:36:51Z' faq_source_hash: d6d2cda672e5ed693210356f269aa015cb9b3b80fc92c9c33c200e6d83717b15 summary: >- - Migrate a MySQL database from a simulated on-premises x64 server to an Arm-based Azure Cobalt - 100 virtual machine. You prepare the source VM, install the required tools, and load a sample - database. You then configure and run the migration scripts to provision the target and restore - the database. Finally, you connect to the Arm VM, run a `sysbench` workload, and review the + You'll migrate a MySQL database from a simulated on-premises x64 server to an Arm-based Azure VM powered by Cobalt + 100. First, you'll prepare the source VM, install the required tools, and load a sample + database. You'll then configure and run the migration scripts to provision the target and restore + the database. Finally, you'll connect to the Arm VM, run a `sysbench` workload, and review the results. faqs: - question: Which architecture should I choose for the on-premises simulator VM? @@ -49,18 +49,18 @@ generated_summary_faq: - question: What should I enter when the key generation script prompts for a passphrase, and what output should I keep? answer: >- - Press **Enter** to leave the passphrase empty, as instructed. Save the printed `ssh-rsa` public + Press **Enter** to leave the passphrase empty. Save the printed `ssh-rsa` public key string for use with the Azure VM. - question: How do I connect to the Arm-based Azure VM before running the benchmark, and which user and key should I use? answer: >- - From the on-premises simulator, SSH to the Arm VM using the key created earlier in `$HOME/.ssh` - and the `azureadmin` user at the VM’s public IP. Use the filename you identified for the Azure + From the on-premises simulator, SSH to the Arm VM using the key created in `$HOME/.ssh` + and the `azureadmin` user at the VM’s public IP. Use the filename that you identified for the Azure cloud key. - question: Where should I create and run the benchmarking script, and what result should I expect? answer: >- - Create and run the script, for example `run.sh`, on the Arm-based Azure Cobalt 100 VM after + Create and run the script, for example `run.sh`, on the Arm-based Azure VM after connecting with SSH. Expect `sysbench` to produce a summary of performance metrics that you can review to validate the migrated database. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md index 369f35e0aa..58917ae955 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md @@ -1,17 +1,16 @@ --- -title: Learn how to deploy MySQL +title: Deploy MySQL on Arm minutes_to_complete: 30 who_is_this_for: This is an introductory topic for software developers who want to deploy MySQL on Arm. learning_objectives: - - Learn about the various ways MySQL can be deployed. - - Learn how to interact with a MySQL database using a MySQL client CLI tool. + - Identify the various ways MySQL can be deployed. + - Interact with a MySQL database using a MySQL client CLI tool. prerequisites: - - An Arm based instance from a cloud service provider, or an on-premise Arm server. - - If you do not have an Arm node, the next section discusses some options. + - An Arm based instance from a cloud service provider, or an on-premise Arm server # START generated_summary_faq generated_summary_faq: @@ -28,20 +27,18 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:37:38Z' faq_source_hash: 743cde2f666e32bdd9dd2c412037696d36fbe12c5d89d854b04102d9a74a05ec summary: >- - Deploy MySQL on an Arm-based Linux system and verify that the database is ready to use. You + You'll deploy MySQL on an Arm-based Linux system and verify that the database is ready to use. First, you'll review deployment options for bare-metal systems, cloud virtual machines, and managed SQL - services before choosing an environment. You then follow the MySQL documentation to install - and configure the server, connect with the MySQL client, and run basic SQL commands. A separate - Learning Path covers performance tuning. + services before choosing an environment. Then, you'll identify MySQL documentation to install + and configure the server. You'll connect with the MySQL clients and run SQL commands. faqs: - - question: I already know how to deploy MySQL. Should I skip to the tuning content? + - question: What Learning Path should I explore next? answer: >- - Yes. If you already know how to deploy a MySQL database, continue to the MySQL tuning Learning - Path to improve the performance of an Arm-based MySQL server. - - question: I already have an Arm server. Which deployment option should I use? + Explore the Learning Path [Tune MySQL performance on Arm-based platforms](/learning-paths/servers-and-cloud-computing/mysql_tune/) to improve the performance of an Arm-based MySQL server. + - question: What SQL operations can I try after connecting to MySQL? answer: >- - Use your existing Arm system and continue with the installation and check steps. You can - skip the deployment options subsection; bare metal or an existing Arm-based VM both work. + You can create and select a database, create and inspect a table, insert sample records, and + query the table to display its contents. - question: What result should I expect after I install and check MySQL? answer: >- You should have a running MySQL server on an Arm-based Linux system. A successful connection @@ -49,14 +46,14 @@ generated_summary_faq: is working. - question: Can I use a managed SQL service instead of installing MySQL myself? answer: >- - Yes, managed SQL services on Arm are listed as deployment options. However, the hands-on - hands-on verification assumes that you control an Arm instance where you install MySQL and + Yes. However, the + hands-on verification steps assume that you control an Arm instance where you install MySQL and interact with the command-line client. - - question: I don’t have an Arm node. Where should I start? + - question: Where should I start if I don't have an Arm node? answer: >- - Use one of the cloud options described in the deployment section, or see the Get started - with Arm-based cloud instances Learning Path. Provision an Arm environment before you install - MySQL. + Provision an Arm environment before you install + MySQL. For more information, see the [Get started + with Arm-based cloud instances](/learning-paths/servers-and-cloud-computing/intro/) Learning Path. # END generated_summary_faq author: Jason Andrews diff --git a/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md index 25dc382cfd..5ca9fe861b 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql_benchmark/_index.md @@ -6,8 +6,8 @@ minutes_to_complete: 30 who_is_this_for: This is an introductory topic for performance engineers who want to benchmark MySQL using Sysbench and optimize performance on Arm Linux systems. learning_objectives: - - Run Sysbench to benchmark a MySQL database server - - Enable profile-guided optimization (PGO) for MySQL and examine the performance improvements + - Run Sysbench to benchmark a MySQL database server. + - Enable profile-guided optimization (PGO) for MySQL and examine the performance improvements. prerequisites: - Basic knowledge of [MySQL databases](https://www.mysql.com/) @@ -28,29 +28,29 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:38:09Z' faq_source_hash: 5fc0ba5fb5befc9ae9ba54e8d7734e5673c2e7a5b5c1eee6e6cdb181cad2de48 summary: >- - Build MySQL from source on an Arm Ubuntu 22.04 server and benchmark it from a second Arm Linux - system. You configure the server, build `sysbench` with the required MySQL client libraries, - and run baseline workloads. You then rebuild MySQL with GCC profile-guided optimization (PGO), - first collecting profile data and then applying it. Finally, you repeat the workloads and + You'll build MySQL from source on an Arm Ubuntu 22.04 server and benchmark it from a second Arm Linux + system. First, you'll configure the server, build `sysbench` with the required MySQL client libraries, + and run baseline workloads. You'll then rebuild MySQL with GCC PGO, + first collecting profile data and then applying it. Finally, you'll repeat the workloads and compare the results with your baseline. faqs: - - question: Can I use a different Linux distribution than Ubuntu 22.04 for this setup? + - question: Can I use a different Linux distribution than Ubuntu 22.04? answer: >- - The instructions use Ubuntu 22.04 and note that other Linux distributions and Ubuntu versions - might also work. If you use a different OS, expect to adapt package installation commands to + Other Linux distributions and Ubuntu versions + might also work. If you use a different distribution, expect to adapt package installation commands to match your environment. - question: Why do I need to build and install MySQL on the Sysbench client? answer: >- `sysbench` needs MySQL client libraries to build and run its MySQL tests. You only build - and install MySQL on the client to provide these libraries; you do not configure or run + and install MySQL on the client to provide these libraries. You don't configure or run the MySQL server on the client. - question: How much disk space do I need on the server and client? answer: >- Allocate at least 200 GB of disk space on the MySQL server system. Allocate at least 30 GB on the Sysbench client system. - - question: Which compiler should I use for PGO, and what builds does the process create? + - question: Which compiler should I use for PGO, and what builds will I create? answer: >- - The PGO section uses GCC. You create two additional MySQL installations: one built with + Use GCC for PGO. You'll create two additional MySQL installations: one built with profile generation to collect data and another rebuilt with profile use to apply that data. - question: How do I confirm that PGO changed performance? answer: >- diff --git a/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md index 2ebd0b809d..858e891b11 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md @@ -12,7 +12,7 @@ learning_objectives: - Evaluate storage, kernel, compiler, and library choices that can affect MySQL performance. prerequisites: - - On-prem or cloud [installation of MySQL](https://dev.mysql.com/doc/refman/en/) + - On-premise or cloud [installation of MySQL](https://dev.mysql.com/doc/refman/en/) - A repeatable MySQL workload or benchmark that you can run before and after tuning # START generated_summary_faq @@ -42,7 +42,7 @@ generated_summary_faq: Run the same repeatable workload before and after the change and compare throughput, latency, and profiles. Change one parameter at a time or use a designed experiment so results are attributable to specific settings. - - question: Should I set MySQL parameters in an option file or on the `mysqld` command line? + - question: Should I set MySQL parameters in an option file or on the mysqld command line? answer: >- Use an option file for persistent tuning so changes are reviewable, version controlled, and applied on restart. The examples in the Learning Path target the `[mysqld]` group. Command-line flags are suitable diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/2_rdv3_bootseq.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/2_rdv3_bootseq.md index 63f307520f..d66b7efa59 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/2_rdv3_bootseq.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/2_rdv3_bootseq.md @@ -26,7 +26,7 @@ After BL2, the Runtime Security Engine (RSE, Cortex-M55) authenticates critical ## Stage 2: Early hardware initialization (SCP/MCP) -Once RSE completes verification, the System Control Processor (SCP, Cortex-M7) and the Management Control Processor (MCP, where present) are released from reset. +Once RSE completes verification, the System Control Processor (SCP, Cortex-M7) and the Manageability Control Processor (MCP, where present) are released from reset. They perform essential bring-up: * Initializing clocks, reset lines, and power domains diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/5_rdv3_modify.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/5_rdv3_modify.md index a42fcc66f6..3668485cb2 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/5_rdv3_modify.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/5_rdv3_modify.md @@ -8,7 +8,7 @@ layout: learningpathall ## The RD-V3-R1 dual-chip platform -The RD-V3-R1 platform is a dual-chip simulation environment built to model multi-die Arm server SoCs. It expands on the single-die RD-V3 design by introducing a second application processor and a Management Control Processor (MCP). +The RD-V3-R1 platform is a dual-chip simulation environment built to model multi-die Arm server SoCs. It expands on the single-die RD-V3 design by introducing a second application processor and a Manageability Control Processor (MCP). Key use cases of RD-V3-R1 are: diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md index 886989930c..44bed27013 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md @@ -1,17 +1,17 @@ --- -title: Develop and Validate Firmware Pre-Silicon on Arm Neoverse CSS V3 +title: Develop and validate firmware pre-silicon on Arm Neoverse CSS V3 minutes_to_complete: 90 who_is_this_for: This advanced topic is for firmware developers, system architects, and silicon validation engineers working on Arm Neoverse CSS platforms who require a pre-silicon workflow for the CSS-V3 reference design using Fixed Virtual Platforms (FVPs). learning_objectives: - - Explain the CSS-V3 architecture and the RD-V3 firmware boot sequence (TF-A, RSE, SCP/MCP/LCP, UEFI/GRUB, Linux) - - Set up a containerized build environment and sync sources with a pinned manifest using repo - - Build and boot the RD-V3 firmware stack on FVP and map UART consoles to components - - Interpret boot logs to verify bring-up and diagnose boot-stage issues - - Modify platform control firmware (for example, SCP/MCP) and validate changes via pre-silicon simulation - - Launch a dual-chip RD-V3-R1 simulation and verify AP/MCP coordination + - Understand the CSS-V3 architecture and the RD-V3 firmware boot sequence. + - Set up a containerized build environment and sync sources with a pinned manifest using repo. + - Build and boot the RD-V3 firmware stack on FVP and map UART consoles to components. + - Interpret boot logs to verify bring-up and diagnose boot-stage issues. + - Modify platform control firmware such as System Control Processor (SCP) and Manageability Control Processor (MCP), and validate changes through pre-silicon simulation. + - Launch a dual-chip RD-V3-R1 simulation and verify application processor (AP) and MCP coordination. prerequisites: - Access to an Arm Neoverse-based Linux machine (cloud or local) with at least 80 GB of free storage @@ -34,16 +34,16 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:38:48Z' faq_source_hash: edcf755937689018d68a687def84b27f119fcfa2542949294f965c21e0d0d642 summary: >- - Build the Arm Neoverse RD-V3 firmware stack and test it on an Arm Fixed Virtual Platform (FVP) - before hardware is available. You prepare a repeatable environment, sync pinned sources, compile - the boot chain, and select the FVP version that matches your release. You then map UART consoles, + You'll build the Arm Neoverse RD-V3 firmware stack and test it on an Arm FVP + before hardware is available. First, you'll prepare a repeatable environment, sync pinned sources, compile + the boot chain, and select the FVP version that matches your release. You'll then map UART consoles, follow the boot to a Buildroot Linux shell, validate firmware changes, and run the dual-chip RD-V3-R1 simulation. faqs: - question: How do I choose the correct FVP model for my RD-V3 build? answer: >- - Match the FVP model version to the RD-V3 release tag you're using. The instructions include an - example mapping and point to the release tags list for the full set of supported versions. + Match the FVP model version to the RD-V3 release tag that you're using. Use the + example mapping as reference and refer to the release tags list for the full set of supported versions. - question: What result should I expect when the single-die simulation boots successfully? answer: >- The system boots from BL1 through the firmware stack to a Buildroot Linux shell on the FVP. @@ -52,12 +52,12 @@ generated_summary_faq: - question: What should I check if the boot hangs before reaching Linux? answer: >- Review the UART outputs to find the last active stage and identify where control stopped. - Confirm the FVP version matches your selected RD-V3 release tag and re-sync sources to the + Confirm that the FVP version matches your selected RD-V3 release tag and re-sync sources to the pinned manifest before rebuilding. - question: How do I validate a change to SCP, MCP, or LCP firmware? answer: >- Rebuild the affected platform control firmware, then rerun the FVP simulation. Inspect the - corresponding UART logs for your expected messages or behavior and confirm the system still + corresponding UART logs for your expected messages or behavior and confirm that the system still reaches the Linux shell. - question: How do I know the dual-chip RD-V3-R1 simulation is running correctly? answer: >- diff --git a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md index 2c1b828471..4b57351fdd 100644 --- a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md @@ -6,14 +6,14 @@ minutes_to_complete: 60 who_is_this_for: This is an introductory topic for software developers interested in learning how to deploy .NET Aspire applications on Arm-based virtual machines (VMs) on Amazon Web Services (AWS) and Google Cloud Platform (GCP). learning_objectives: - - Demonstrate knowledge and understanding of .NET Aspire developer tools. + - Understand .NET Aspire developer tools. - Create a .NET Aspire application. - Modify code on a Windows on Arm development machine. - Deploy a .NET Aspire application to Arm-powered virtual machines in the Cloud. prerequisites: - - A Windows on Arm machine, for example the Lenovo Thinkpad X13s running Windows 11 to build the .NET Aspire project. - - An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from AWS or GCP. - - Any code editor. [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) is an example of a suitable editor. + - A Windows on Arm machine such as the Lenovo Thinkpad X13s running Windows 11, to build the .NET Aspire project + - An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from AWS or GCP + - A code edito, such as [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) # START generated_summary_faq generated_summary_faq: @@ -30,17 +30,17 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:39:10Z' faq_source_hash: 09c62748f1623172f6adbc48bb3411abd4bad6c0e477c8c0aa66b19f8369db69 summary: >- - Create and run a .NET Aspire application on a Windows on Arm development machine, then deploy - it to an Arm-based virtual machine. You install the Aspire workload, trust the local HTTPS - certificate, and inspect the application through its startup output and dashboard. You then + You'll create and run a .NET Aspire application on a Windows on Arm development machine, then deploy + it to an Arm-based VM. First, you'll install the Aspire workload, trust the local HTTPS + certificate, and inspect the application through its startup output and dashboard. You'll then add a compute-intensive service, rebuild the application, and deploy it to an AWS Graviton-based - EC2 instance. The workflow also supports Arm-based Google Cloud VMs. + EC2 instance. You can also complete these steps on an Arm-based Google Cloud VMs. faqs: - question: How do I verify the .NET SDK and install the Aspire workload before creating the project? answer: >- - Run `dotnet --version` in PowerShell and confirm it reports 8.0 or later. Then run `dotnet - workload install aspire`; the installer downloads the Aspire components and completes without + Run `dotnet --version` in PowerShell and confirm that it reports version 8.0 or later. Then, run `dotnet + workload install aspire`. The installer downloads the Aspire components and completes without errors. - question: Why do I need to trust the HTTPS development certificate, and how do I do it? answer: >- @@ -56,10 +56,11 @@ generated_summary_faq: Add `ComputationService.cs` to the `NetAspire.Arm.ApiService` project using the provided code, then rebuild and run the solution. Check the console or dashboard logs for the API service to observe the new computation executing. - - question: When deploying to AWS, which option selects an Arm-based EC2 instance? + - question: Which ports do I need to expose to access the deployed application? answer: >- - In the EC2 service, choose a Graviton-based instance. Follow the instructions to launch and - target that VM for deployment. + Allow TCP traffic on ports `7133`, `7511`, and `17222`, matching the ports used when you run + the application locally. Configure these ports in the EC2 security group on AWS or in a + firewall rule associated with the `dotnet-app` network tag on Google Cloud. # END generated_summary_faq author: Dawid Borycki diff --git a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md index d69a33f1b3..400a611ee8 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md @@ -6,13 +6,13 @@ minutes_to_complete: 30 who_is_this_for: This is an introductory topic for system administrators and developers who want to learn how to deploy and benchmark NGINX on Microsoft Azure Cobalt 100 Arm-based instances. learning_objectives: - - Create an Arm64 virtual machine on Azure Cobalt 100 (Dpsv6) using the Azure console with Ubuntu Pro 24.04 LTS as the base image - - Install and configure the NGINX web server on the Azure Arm64 virtual machine - - Configure and test a static website with NGINX on the virtual machine - - Run baseline NGINX performance tests with ApacheBench (ab) on Ubuntu Pro 24.04 LTS Arm64 + - Create an Arm64 virtual machine (VM) on Azure Cobalt 100 (Dpsv6) using the Azure console with Ubuntu Pro 24.04 LTS as the base image. + - Install and configure the NGINX web server on the Azure Arm64 VM. + - Configure and test a static website with NGINX on the VM. + - Run baseline NGINX performance tests with ApacheBench (ab). prerequisites: - - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) + - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100-based instances (Dpsv6) # START generated_summary_faq generated_summary_faq: @@ -29,18 +29,17 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:39:38Z' faq_source_hash: f556dee0540494860c18e38f186e7a602db0635cded4fd4c6cbb649e115ef294 summary: >- - Deploy NGINX on an Arm-based Microsoft Azure Cobalt 100 virtual machine and capture a baseline - benchmark. You create an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, install NGINX, - and verify its default page. You then configure a static site and confirm that NGINX serves - your content. Finally, you install ApacheBench and record initial throughput and timing results. + You'll deploy NGINX on an Arm-based Microsoft Azure VM powered by Cobalt 100, and capture a baseline + benchmark. First, you'll create an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, install NGINX, + and verify its default page. You'll then configure a static site and confirm that NGINX serves + your content. Finally, you'll install ApacheBench and record initial throughput and timing results. faqs: - - question: Which Azure VM size and image should I choose, and do I need to match the D4ps_v6 - example? + - question: Which Azure VM size and image should I choose? answer: >- - Use an Arm-based Cobalt 100 VM in the Dpsv6 series with the Ubuntu Pro 24.04 LTS Arm64 image. + Use an Arm-based VM in the Dpsv6 series with the Ubuntu Pro 24.04 LTS Arm64 image. The example uses a `D4ps_v6` instance, but you can follow the same instructions with other Dpsv6 sizes. - - question: How do I know NGINX installed correctly before I change any configuration? + - question: How do I know that NGINX installed correctly before I change any configuration? answer: >- After installation, NGINX serves its default welcome page. Confirm that the welcome page loads before proceeding to configure your own site. @@ -51,10 +50,10 @@ generated_summary_faq: return your custom page instead of the default welcome page. - question: Should I run ApacheBench on the VM or from another machine? answer: >- - You install and run ApacheBench (`ab`) on the same Ubuntu Pro 24.04 LTS Arm64 VM that - runs NGINX. Follow that approach unless you have a specific reason to benchmark from an + Install and run ApacheBench (`ab`) on the same VM that + runs NGINX, unless you have a specific reason to benchmark from an external client. - - question: Which package installs `ab` on Ubuntu Pro 24.04 LTS, and how do I verify it? + - question: Which package installs ApacheBench on Ubuntu Pro 24.04 LTS, and how do I verify it? answer: >- Install the `apache2-utils` package. Run `ab -V` to confirm that ApacheBench is available and prints a version string. diff --git a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md index 53f8ab0b7b..ea7711f25d 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md @@ -1,19 +1,19 @@ --- -title: Learn how to deploy Nginx +title: Deploy NGINX on Arm minutes_to_complete: 60 -who_is_this_for: This is an introductory topic for engineers who want to use Nginx on Arm. +who_is_this_for: This is an introductory topic for engineers who want to use NGINX on Arm. learning_objectives: - - Install and run Nginx on Arm servers - - Set up Nginx as a web server, reverse proxy, or an API Gateway - - Verify Nginx is working correctly + - Install and run NGINX on Arm servers. + - Set up NGINX as a web server, reverse proxy, or an API Gateway. + - Verify NGINX is working correctly. prerequisites: - - To create a file server you will need at least one [Arm based instance](/learning-paths/servers-and-cloud-computing/csp/) from a cloud service provider or one on-premises Arm server. - - To create a reverse proxy or API gateway you will need at least three Arm based instances from a cloud service provider or at least three on-premises Arm servers. - - Network settings (firewalls and security groups) which allow communication on port 22 (SSH) and port 443 (HTTPS). + - At least one [Arm based instance](/learning-paths/servers-and-cloud-computing/csp/) from a cloud service provider, or one on-premises Arm server, to create a file server + - At least three Arm based instances from a cloud service provider, or at least three on-premises Arm servers, to create a reverse proxy or API gateway + - Network settings (firewalls and security groups) which allow communication on port 22 (SSH) and port 443 (HTTPS) # START generated_summary_faq generated_summary_faq: @@ -30,36 +30,35 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:40:11Z' faq_source_hash: 877a608fc16135d4bcfc1ce710fb257fcea3ec3af75052841a3182bd024f8384 summary: >- - Deploy nginx on Arm-based Linux servers and progress from a package installation to a working - web-service configuration. You inspect the packaged build options and use them to compile - nginx from source when you need a custom build. You then configure an HTTPS static file server, - create its key and certificate, and verify file delivery. Finally, you configure a third node + You'll deploy NGINX on Arm-based Linux servers and progress from a package installation to a working + web-service configuration. First, you'll install NGINX from a package and inspect the packaged build options that you can use to compile + NGINX from source when you need a custom build. You'll then configure an HTTPS static file server, + create its key and certificate, and verify file delivery. Finally, you'll configure a third node as a reverse proxy and API gateway for two upstream servers. faqs: - - question: How do I know which nginx features are enabled in the packaged install? + - question: How do I know which NGINX features are enabled in the packaged install? answer: >- Review the packaged build configuration to see which modules and paths are compiled in. Use this information to decide which options to enable if you later build from source. - - question: Do I need to build nginx from source? + - question: Do I need to build NGINX from source? answer: >- - No. You start with a package install and only build from source if you need a different + No. Start with a package install and only build from source if you need a different configuration. Looking at the prebuilt configuration first helps you choose the right source build options. - - question: What do I need in place before setting up the reverse proxy and API gateway? + - question: What do I need before setting up the reverse proxy and API gateway? answer: >- - Set up two file servers using the previous section, and prepare a third node for the reverse - proxy/API gateway. Ensure network settings allow communication on ports 22 (SSH) and 443 + Set up two file servers and prepare a third node for the reverse + proxy and API gateway. Ensure network settings allow communication on ports 22 (SSH) and 443 (HTTPS). - - question: How do I verify the static HTTPS file server is working? + - question: How do I verify that the static HTTPS file server is working? answer: >- - After configuring nginx, creating a key and certificate, and starting the service, access - a test file over HTTPS from a client. Successful retrieval confirms the setup; if it fails, - review your configuration and the nginx documentation on serving static content. - - question: What result should I expect after configuring the reverse proxy/API gateway? + After configuring NGINX, creating a key and certificate, and starting the service, access + a test file over HTTPS from a client. Successful retrieval confirms that the server is working. + - question: What result should I expect after configuring the reverse proxy and API gateway? answer: >- - The reverse proxy/API gateway forwards requests to the two upstream file servers and load + The reverse proxy and API gateway forwards requests to the two upstream file servers and load balances across them. During testing, you should observe responses originating from both - backends; see the nginx reverse proxy documentation for configuration details. + backends. # END generated_summary_faq author: Julio Suarez diff --git a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md index 4194b1b189..1012851c0a 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md @@ -13,9 +13,9 @@ learning_objectives: - Measure NGINX performance before and after tuning. prerequisites: - - An NGINX file server, reverse proxy, or API gateway running on a cloud instance, bare-metal server, or Arm AGI CPU platform. - - A repeatable HTTP workload or load test that you can run before and after tuning. - - If you don't already have an NGINX setup, see [Learn how to deploy NGINX](/learning-paths/servers-and-cloud-computing/nginx/). + - An NGINX file server, reverse proxy, or API gateway running on a cloud instance, bare-metal server, or Arm AGI CPU platform + - A repeatable HTTP workload or load test that you can run before and after tuning + - An [NGINX setup](learning-paths/servers-and-cloud-computing/nginx/) # START generated_summary_faq generated_summary_faq: From 7aa8a8b2e9fc388107edf39c66d436243080e6f3 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Fri, 2 Oct 2026 12:23:27 -0500 Subject: [PATCH 24/66] second phase of first pass --- .../nlp-hugging-face/_index.md | 32 ++++++++-------- .../node-js-gcp/_index.md | 38 +++++++++---------- .../oci-terraform/_index.md | 36 +++++++++--------- .../onnx-on-azure/_index.md | 31 ++++++++------- .../onnx/_index.md | 30 +++++++-------- .../openbmc-rdv3/_index.md | 27 +++++++------ .../opencv-on-axion/_index.md | 34 ++++++++--------- .../openebs-cobalt/_index.md | 28 +++++++------- .../openjdk-pacbti-gcp/_index.md | 27 +++++++------ .../openrng-with-performix/_index.md | 21 +++++----- 10 files changed, 150 insertions(+), 154 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md b/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md index a0858a8505..6a58aed4a6 100644 --- a/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md @@ -3,7 +3,7 @@ title: Run a Natural Language Processing (NLP) model from Hugging Face on Arm se minutes_to_complete: 20 -who_is_this_for: This is an introductory topic for software developers who want to learn how to run a Natural Language Processing (NLP) model from Hugging Face using PyTorch on Arm based servers. +who_is_this_for: This is an introductory topic for software developers who want to learn how to run a natural language processing (NLP) model from Hugging Face using PyTorch on Arm based servers. learning_objectives: - Deploy a PyTorch NLP model from Hugging Face on an Arm AArch64 CPU @@ -27,28 +27,30 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:40:33Z' faq_source_hash: 5d0c0a2a23fba1796458c60ac49fa5d4b43e0d827463e049afb0e1b79eb9292f summary: >- - Run and profile a Hugging Face natural language processing (NLP) model with PyTorch on an Arm - AArch64 CPU. You prepare an Ubuntu 22.04 LTS Arm server and install PyTorch, Transformers, - and SciPy. You then run a RoBERTa sentiment-analysis model and inspect its ranked labels and - confidence scores. Finally, you add the PyTorch Profiler and review the CPU execution time + You'll run and profile a Hugging Face NLP model with PyTorch on an Arm + AArch64 CPU. First, you'll prepare an Ubuntu 22.04 LTS Arm server and install PyTorch, Transformers, + and SciPy. You'll then run a RoBERTa sentiment-analysis model and inspect its ranked labels and + confidence scores. Finally, you'll add the PyTorch Profiler and review the CPU execution time for individual operators. faqs: - - question: Do I need a specific Linux version for these steps? + - question: How can I analyze my own text with the example? answer: >- - Yes. The instructions target Ubuntu 22.04 LTS on an Arm server. - - question: How do I know I’m running on an Arm AArch64 machine before I install PyTorch? + Replace the string assigned to `text` in `sentiment-analysis.py`, save the file, and run + `python sentiment-analysis.py` again. The script preprocesses your text before passing it + to the tokenizer and model. + - question: How does the example handle usernames and links? answer: >- - Confirm the instance type is Arm-based in your cloud console, or use an on-premises Arm - server. The instructions assume an Arm AArch64 CPU. - - question: Which Hugging Face model should I pick for the tutorial? + When you run the script, its `preprocess` function replaces words that start with `@` and + contain more than one character with `@user`. It replaces words that start with `http` + with `http` before tokenization. + - question: Which Hugging Face model should I use? answer: >- - Use the `cardiffnlp/twitter-roberta-base-sentiment-latest` model specified in the example. - The script downloads its configuration, tokenizer, and PyTorch weights from Hugging Face. + Use the `cardiffnlp/twitter-roberta-base-sentiment-latest` model. - question: What result should I expect when I run the model? answer: >- A successful run prints three ranked sentiment labels with confidence scores. The scores - should sum to 1, and the first line is the model's strongest prediction. - - question: How do I know the PyTorch profiler captured my run? + should sum to 1. The first line is the model's strongest prediction. + - question: How do I know that the PyTorch profiler captured my run? answer: >- You should see a table of CPU operators and their execution times after the classification output. The `model_inference` row summarizes the profiled inference region. diff --git a/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md b/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md index 18ef61c2f2..702e3e9ae7 100644 --- a/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md @@ -1,15 +1,15 @@ --- -title: Deploy Node.js on Google Cloud C4A Arm-based Axion VMs +title: Deploy Node.js on Google Cloud C4A Arm-based Axion virtual machines minutes_to_complete: 30 -who_is_this_for: This is an introductory topic for software developers migrating Node.js workloads from x86_64 to Arm-based servers, specifically on Google Cloud C4A virtual machines built on Axion processors. +who_is_this_for: This is an introductory topic for software developers migrating Node.js workloads from x86_64 to Arm-based servers, specifically on Google Cloud C4A virtual machines (VMs) built on Axion processors. learning_objectives: - - Provision an Arm-based SUSE Linux Enterprise Server virtual machine on Google Cloud C4A instances with Axion processors - - Install and configure Node.js on a SUSE Arm64 (C4A) instance - - Validate Node.js functionality with baseline HTTP server tests - - Benchmark Node.js performance using Autocannon on Arm64 (AArch64) architecture + - Provision an Arm-based SUSE Linux Enterprise Server VM on Google Cloud C4A instances with Axion processors. + - Install and configure Node.js on a SUSE Arm64 (C4A) instance. + - Validate Node.js functionality with baseline HTTP server tests. + - Benchmark Node.js performance using Autocannon on Arm64 (AArch64) architecture. prerequisites: - A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled @@ -30,21 +30,21 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:41:01Z' faq_source_hash: c21d775ef47f9befc1046df0d89f746550a180b29974c45261e0478f59df503e summary: >- - Deploy and benchmark a Node.js workload on an Arm-based Google Cloud C4A virtual machine. - You provision a SUSE Linux Enterprise Server instance on Google Axion, then install Node.js - with Node Version Manager (NVM). You validate the runtime in the read-eval-print loop (REPL) - and with a minimal HTTP server. Finally, you use Autocannon to measure request throughput + You'll deploy and benchmark a Node.js workload on an Arm-based Google Cloud C4A VM. + First, you'll provision a SUSE Linux Enterprise Server instance on Google Axion, then install Node.js + with Node Version Manager (NVM). You'll then validate the runtime in the read-eval-print loop (REPL) + and with a minimal HTTP server. Finally, you'll use Autocannon to measure request throughput and latency and capture a baseline for the VM. faqs: - question: Which VM options should I select when creating the instance? answer: >- - Use a C4A machine type; the example uses `c4a-standard-4` with four vCPUs and 16 GB. Select a SUSE Linux - Enterprise Server image for Arm64 to match the Learning Path objectives. - - question: NVM isn’t found after installation—what should I do? + Use a C4A machine type, such as `c4a-standard-4` with four vCPUs and 16 GB. Select a SUSE Linux + Enterprise Server image for Arm64. + - question: How do I select Node.js v24 for new terminal sessions? answer: >- - Load NVM into your current shell using the commands shown in the installation step. If needed, - open a new terminal session so your profile changes take effect. - - question: How do I confirm Node.js is working before I benchmark? + After installing Node.js with `nvm install v24`, add `nvm use v24` to your `~/.bashrc` file. + Place it after the commands that load NVM so that new Bash sessions select Node.js v24. + - question: How do I confirm that Node.js is working before I benchmark? answer: >- Run the REPL test to print a message and start the sample HTTP server. Proceed when the server responds to an HTTP request on the configured port. @@ -52,10 +52,10 @@ generated_summary_faq: answer: >- Use the address and port where your sample Node.js server is listening, such as `localhost` with the configured port. Run Autocannon against that endpoint to collect results. - - question: How do I know I’m running on an Arm-based Axion VM? + - question: How can I change the load and duration of the Autocannon benchmark? answer: >- - Check that the instance type is C4A in the Google Cloud console. C4A instances use Google - Axion processors with Arm Neoverse-V2 cores. The workload targets AArch64. + Adjust `-c` to set the number of concurrent connections and `-d` to set the test duration + in seconds. The example uses `-c 100 -d 10` to run 100 concurrent connections for ten seconds. # END generated_summary_faq author: Pareena Verma diff --git a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md index baa3b57ff6..8dfc533ecd 100644 --- a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md @@ -1,15 +1,15 @@ --- -title: Deploy Arm Instances on Oracle Cloud Infrastructure (OCI) using Terraform +title: Deploy Arm Instances on Oracle Cloud Infrastructure using Terraform minutes_to_complete: 60 who_is_this_for: This is an introductory topic for software developers who are new to deploying Arm instances on Oracle Cloud Infrastructure (OCI) using Terraform. learning_objectives: - - Automate Arm virtual machine creation on OCI using Terraform + - Automate Arm virtual machine (VM) creation on OCI using Terraform prerequisites: - - An OCI account + - An [OCI account](/learning-paths/servers-and-cloud-computing/csp/oci/) - A computer with Terraform installed # START generated_summary_faq @@ -27,31 +27,33 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:41:27Z' faq_source_hash: f927b34764047b05b4bd225ef1080f9cc345d6bd91ec8220fd23d710a478013d summary: >- - Use Terraform to automate the creation of an Arm virtual machine on Oracle Cloud Infrastructure - (OCI) Ampere Compute. You prepare a Linux control environment, define the OCI resources as - code, and run the Terraform workflow to provision the instance. You can use the resulting + You'll use Terraform to automate the creation of an Arm VM on + OCI Ampere Compute. First, you'll prepare a Linux control environment, then define the OCI resources as + code and run the Terraform workflow to provision the instance. You can use the resulting configuration as a repeatable foundation for additional Arm infrastructure on OCI. faqs: - question: Which computer can I use to run Terraform? answer: >- You can use any computer with the required tools installed, including a desktop, laptop, - or a virtual machine. The command format assumes you are working on a Linux machine. - - question: What do I need in OCI before I start? + or a virtual machine. The command format assumes that you're working on a Linux machine. + - question: What are the OCI API keys and SSH keys used for? answer: >- - Yes, you need an Oracle Cloud Infrastructure (OCI) account. If you are new to OCI, review - the Getting Started with Oracle OCI Learning Path before you begin. - - question: Where do I find installation instructions for Terraform? + The OCI API key pair is used to authenticate Terraform's requests to OCI. The + SSH key pair is used to connect to the provisioned instance. Set `private_key_path` for the API + private key and `ssh_authorized_keys_path` and `ssh_private_key_path` for your SSH keys. + - question: How can I test OCI authentication before creating the VM? answer: >- - See the Terraform install guide and follow its instructions on - the computer you plan to use. - - question: Can I use a virtual machine as my control environment for running Terraform? + Create `availability-domains.tf` with the provided data source and output definition, then + run `terraform plan`. If authentication succeeds, you'll see the availability domains in your + tenancy. Keep this file in the same directory as `provider.tf`. + - question: Can I use a VM as my control environment for running Terraform? answer: >- - Yes. A virtual machine with the required tools installed works the same as a desktop or + Yes. A VM with the required tools installed works the same as a desktop or laptop for running the commands. - question: What result should I expect after I complete the workflow? answer: >- - Terraform automates the creation of an Arm virtual machine instance on OCI Ampere Compute. - You finish with an OCI Arm instance provisioned from your Terraform configuration. + Terraform automates the creation of an Arm-based VM instance on OCI Ampere Compute. + You'll finish with an OCI Arm instance provisioned from your Terraform configuration. # END generated_summary_faq author: Frédéric -lefred- Descamps diff --git a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md index 77b52ae13f..d4c587d2b8 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md @@ -6,11 +6,11 @@ minutes_to_complete: 60 who_is_this_for: This Learning Path is for developers deploying ONNX-based applications on Arm-based machines. learning_objectives: - - Provision an Azure Arm64 virtual machine using Azure console, with Ubuntu Pro 24.04 LTS as the base image - - Perform ONNX baseline testing and benchmarking on Arm64 virtual machines + - Provision an Azure Arm64 virtual machine (VM) using Azure console, with Ubuntu Pro 24.04 LTS as the base image. + - Perform ONNX baseline testing and benchmarking on Arm64 VMs. prerequisites: - - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100 based instances (Dpsv6) + - A [Microsoft Azure](https://azure.microsoft.com/) account with access to Cobalt 100-based instances (Dpsv6) - Basic understanding of Python and machine learning concepts - Familiarity with [ONNX Runtime](https://onnxruntime.ai/docs/) and Azure cloud services @@ -29,19 +29,18 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:41:46Z' faq_source_hash: 3dfb5d613a9e88a35777de0adc65fbcacd46a906031c4d933c744abf9689e6a0 summary: >- - Run and benchmark SqueezeNet 1.0 INT8 inference with ONNX Runtime on an Arm-based Azure Cobalt - 100 virtual machine. You provision an Ubuntu Pro 24.04 LTS Dpsv6 VM and prepare a Python - environment. You then run a baseline script to validate inference and record latency. Finally, - you use `onnxruntime_perf_test` to collect more detailed performance statistics on the Arm64 + You'll run and benchmark SqueezeNet 1.0 INT8 inference with ONNX Runtime on an Arm-based Azure VM powered by Cobalt + 100. First, you'll provision an Ubuntu Pro 24.04 LTS Dpsv6 VM and prepare a Python + environment. You'll then run a baseline script to validate inference and record latency. Finally, + you'll use `onnxruntime_perf_test` to collect more detailed performance statistics on the Arm64 system. faqs: - - question: Which Azure VM size and OS image should I select for this workflow? + - question: Which Azure VM size and OS image should I use? answer: >- - Choose a Cobalt 100-based Dpsv6 VM from the D-series and use Ubuntu Pro 24.04 LTS. You - use the Azure portal to create this configuration. + Choose a Cobalt 100-based Dpsv6 VM from the D-series and use Ubuntu Pro 24.04 LTS. - question: What do I need in place before running the baseline latency test? answer: >- - Activate your Python virtual environment, have the `baseline.py` script ready, and ensure + Activate your Python virtual environment, have the `baseline.py` script ready, and ensure that the SqueezeNet INT8 model file is available as `squeezenet-int8.onnx`. Place the model in the same working directory as the script or provide its full path. - question: How do I know the baseline test worked correctly? @@ -49,16 +48,16 @@ generated_summary_faq: The script completes without errors and reports a timing result for a single inference through the SqueezeNet INT8 model. Successful execution confirms that ONNX Runtime is functioning on the VM. - - question: When should I use `onnxruntime_perf_test`, and what output should I expect? + - question: When should I use onnxruntime_perf_test, and what output should I expect? answer: >- Use `onnxruntime_perf_test` after validating the Python baseline to capture more detailed performance statistics. Expect a summary of inference metrics that you can use to evaluate ONNX Runtime efficiency on the Azure Arm64 instance. - - question: What should I check if the script cannot find `squeezenet-int8.onnx`? + - question: Does the baseline script use a real image as input? answer: >- - Verify the file name matches `squeezenet-int8.onnx` and confirm the working directory contains - the model. Alternatively, update the script to reference the model with an absolute or correct - relative path. + No. You generate random `float32` data with shape `(1, 3, 224, 224)`, representing one input + with three color channels and dimensions of 224 by 224 pixels. You use this synthetic input + to measure inference latency. # END generated_summary_faq author: Pareena Verma diff --git a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md index 918420f591..ab4145d1d1 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md @@ -7,13 +7,13 @@ who_is_this_for: This is an advanced topic for developers, ML engineers, and clo learning_objectives: - Quantize and run the Phi-4-mini model with ONNX Runtime on Azure. - - Analyze performance on Arm Neoverse N2 based Azure Cobalt 100 VMs. + - Analyze performance on Arm Neoverse N2-based Azure VMs powered by Cobalt 100. prerequisites: - - An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from an appropriate cloud service provider. This Learning Path has been tested on an Azure Cobalt 100 virtual machine. - - Basic understanding of Python and machine learning concepts. - - Familiarity with ONNX Runtime and Azure cloud services. - - Knowledge of Large Language Model (LLM) fundamentals. + - A Microsoft Azure [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) + - Basic understanding of Python and machine learning concepts + - Familiarity with ONNX Runtime and Azure cloud services + - Knowledge of large language model (LLM) fundamentals # START generated_summary_faq generated_summary_faq: @@ -30,9 +30,9 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:42:07Z' faq_source_hash: 8c80b9778bfd1b0393e43e5eff673f0f83ec1e49c221ad33fe378fa6e5eba082 summary: >- - Build ONNX Runtime on an Arm-based Azure Cobalt 100 server and use it to run a Phi-4-mini - chatbot. You prepare Ubuntu 24.04 LTS, quantize and convert the model, and start the Python - chatbot with `onnxruntime_genai`. You then send text prompts and inspect the terminal metrics, + You'll build ONNX Runtime on an Arm-based Azure server powered by Cobalt 100 and use it to run a Phi-4-mini + chatbot. First, you'll prepare Ubuntu 24.04 LTS, quantize and convert the model, and start the Python + chatbot with `onnxruntime_genai`. You'll then send text prompts and inspect the terminal metrics, including tokens per second and time to first token, to validate inference and assess basic performance on the Arm CPU. faqs: @@ -44,23 +44,23 @@ generated_summary_faq: - question: Which execution provider should I choose when running the chatbot? answer: >- If you're unsure, keep the default execution provider, `follow_config`, - so the script uses providers defined in the model config. Override only if you need to explicitly + so that the script uses providers defined in the model config. Override only if you need to explicitly set a different provider, as the script clears providers when you do. - - question: How do I know the chatbot server started correctly? + - question: How do I know that the chatbot server started correctly? answer: >- You should see the model load without errors and a prompt to enter text. After you send a prompt, the terminal prints generation metrics such as tokens per second and time to first token. - - question: Do I need the exact Azure VM size used in the example? + - question: Do I need to use the exact Azure VM size used in the example? answer: >- No. The instructions were tested on a 32-core Azure `Dpls_v6` Cobalt 100 VM, but you can use another Arm-based Cobalt 100 instance. Use a comparable instance if you want results similar to the example output. - - question: What should I check if throughput is lower than the example output? + - question: How can I limit the number of tokens in a chatbot response? answer: >- - Confirm that the model was quantized and converted as described, and verify your execution - provider selection. Also check that you are running on an Arm-based Azure Cobalt 100 VM - similar to the tested environment. + Set `--max_length` (or `-l`) when you run `phi4.py`. This limit includes both the prompt + and generated tokens, so it isn't a limit on the response alone. If you omit the option, + the script uses a maximum length of 2048 tokens. # END generated_summary_faq author: Nobel Chowdary Mandepudi diff --git a/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md b/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md index 0dfd85c614..747e60439c 100644 --- a/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md @@ -6,11 +6,11 @@ minutes_to_complete: 120 who_is_this_for: This advanced topic is for firmware developers, platform software engineers, and system integrators working on Arm Neoverse-based platforms. It is especially useful for developers exploring pre-silicon development, testing, and integration of Baseboard Management Controllers (BMC) with UEFI firmware. If you are building or validating server-class reference platforms such as RD-V3, before hardware is available, this Learning Path shows you how to simulate and debug the full boot path using Fixed Virtual Platforms (FVPs). learning_objectives: - - Understand the role of OpenBMC and UEFI in the Arm server boot flow - - Simulate the firmware using the RD-V3 FVP - - Build and launch OpenBMC and UEFI images on the RD-V3 FVP - - Validate host–BMC communication using UART and Serial over LAN (SoL) - - Implement and validate a custom IPMI command in OpenBMC + - Understand the role of OpenBMC and UEFI in the Arm server boot flow. + - Simulate the firmware using the RD-V3 FVP. + - Build and launch OpenBMC and UEFI images on the RD-V3 FVP. + - Validate host–BMC communication using UART and Serial over LAN (SoL). + - Implement and validate a custom IPMI command in OpenBMC. prerequisites: - An Arm Neoverse-based Linux machine (cloud or local) running Ubuntu 22.04 LTS @@ -33,10 +33,9 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:42:25Z' faq_source_hash: 285ebf154e6d58463132fc7914c672250ff2d66d0657710ec7eebd557386cbd4 summary: >- - Simulate an Arm server boot flow on the Neoverse RD-V3 r1 Fixed Virtual Platform (FVP). You - build OpenBMC and host UEFI images in a Docker environment, launch the FVP, and follow the - firmware logs through multiple UART consoles. You then bridge virtual UARTs to validate Serial - over LAN communication. Finally, you add a C++ Intelligent Platform Management Interface + You'll simulate an Arm server boot flow on the Neoverse RD-V3 r1 FVP. First, you'll + build OpenBMC and host UEFI images in a Docker environment. Then, you'll launch the FVP and follow the + firmware logs through multiple UART consoles. You'll bridge virtual UARTs to validate SoL communication. Finally, you'll add a C++ Intelligent Platform Management Interface (IPMI) handler to OpenBMC, rebuild the image, and verify its response. faqs: - question: What result should I expect when the RD-V3 FVP starts? @@ -44,11 +43,11 @@ generated_summary_faq: Multiple UART consoles open in separate terminal windows for different subsystems, such as Neoverse V3, Cortex-M55, Cortex-M7, and the Cortex-A BMC. You should see boot logs for both the BMC and host UEFI across these consoles. - - question: The FVP UART consoles do not appear over SSH. What should I check? + - question: Will the FVP UART consoles appear over SSH? answer: >- - The consoles are graphical terminals and require a desktop session. If you are connected - over SSH only, the windows won't render; launch the simulation from a desktop session. - - question: Which ports should I bridge to enable Serial over LAN (SoL)? + The consoles are graphical terminals and require a desktop session. If you're connected + over SSH only, the windows won't render. To render the windows, launch the simulation from a desktop session. + - question: Which ports should I bridge to enable SoL? answer: >- Use the provided bridge: `socat -x tcp:localhost:5005 tcp:localhost:5067`. Verify that these port mappings match the endpoints exposed by your running simulation. @@ -60,7 +59,7 @@ generated_summary_faq: - question: How do I validate that my custom IPMI command works? answer: >- Issue the command using `ipmitool` and check for the expected simple string response. If the - response is not returned, ensure the C++ handler is integrated and rebuild the OpenBMC image + response isn't returned, ensure that the C++ handler is integrated and rebuild the OpenBMC image before re-running the simulation. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md b/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md index f444cd9e59..7d45e80823 100644 --- a/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md @@ -7,16 +7,16 @@ minutes_to_complete: 45 who_is_this_for: This is an introductory topic for DevOps engineers, software developers, and AI practitioners who want to build and run computer vision pipelines on SUSE Linux Enterprise Server (SLES) Arm64 using OpenCV, process images and videos, visualize outputs in real time, and integrate ML models. learning_objectives: - - Install and configure OpenCV on Google Cloud C4A Axion Arm64 instances - - Build image processing pipelines using OpenCV - - Develop video processing pipelines with real-time frame updates - - Visualize OpenCV outputs in the browser using an HTTP server - - Integrate OpenCV pipelines with machine learning models + - Install and configure OpenCV on Google Cloud C4A Axion Arm64 virtual machines (VMs). + - Build image processing pipelines using OpenCV. + - Develop video processing pipelines with real-time frame updates. + - Visualize OpenCV outputs in the browser using an HTTP server. + - Integrate OpenCV pipelines with machine learning models. prerequisites: - A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled - Basic familiarity with Python and Linux command line - - Understanding of basic image/video processing concepts + - Understanding of basic image and video processing concepts # START generated_summary_faq generated_summary_faq: @@ -33,23 +33,21 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:42:48Z' faq_source_hash: 6382d70b3cd7040b984083cffee014bd2377ba150508b818e393263542a56333 summary: >- - Build browser-based computer-vision pipelines with OpenCV on a Google Cloud C4A Axion virtual - machine. You provision a SUSE Linux VM, open port 8000, and prepare a Python 3.11 virtual - environment. You then create image and video pipelines that process frames and serve updated - output through an HTTP server. Finally, you add a machine learning model, stream its visual + You'll build browser-based computer-vision pipelines with OpenCV on a Google Cloud C4A Axion VM. First, you'll provision a SUSE Linux VM, open port `8000`, and prepare a Python 3.11 virtual + environment. Then, you'll create image and video pipelines that process frames and serve updated + output through an HTTP server. Finally, you'll add a machine learning model, stream its visual predictions, and validate the output from the VM's external IP address. faqs: - - question: Which C4A machine type should I create for the VM? + - question: Which C4A machine type should I use? answer: >- - Use the `c4a-standard-4` machine type with four vCPUs and 16 GB of memory. This instance runs - the OpenCV application used throughout the workflow. + Use the `c4a-standard-4` machine type with four vCPUs and 16 GB of memory. - question: Which port do I open for the browser view, and how do I check that it works? answer: >- - Open TCP port 8000 with a VPC firewall rule. After you start the project's HTTP server, - visit `http://EXTERNAL_IP:8000`; a page that loads confirms the rule and service are configured. + Open TCP port `8000` with a VPC firewall rule. After you start the project's HTTP server, + visit `http://EXTERNAL_IP:8000`. A page that loads confirms the rule and service are configured. - question: What Python version do I need during setup? answer: >- - Install Python 3.11. You also install development tools with zypper to support building + Install Python 3.11. Additionally, install development tools with zypper to support building OpenCV’s pip package. - question: Where are the project files and virtual environment created? answer: >- @@ -57,8 +55,8 @@ generated_summary_faq: scripts from that directory with the environment activated. - question: What should be ready before I integrate the machine learning model? answer: >- - Have a running Google Axion Arm-based VM with SUSE Linux, Python 3.11, the `~/opencv-project` - directory with the `cv-env` environment and OpenCV, and port 8000 open in the firewall. + Have a running Google Axion Arm-based VM with SUSE Linux and Python 3.11. Also ensure that the VM has a + directory `~/opencv-project` with the `cv-env` environment and OpenCV. Confirm that port `8000` is open in the firewall. # END generated_summary_faq author: Pareena Verma diff --git a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md index 927ffa5b0e..da397928e9 100644 --- a/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openebs-cobalt/_index.md @@ -8,10 +8,10 @@ minutes_to_complete: 60 who_is_this_for: This is an introductory topic for DevOps engineers, platform engineers, cloud-native developers, and Kubernetes administrators who want to deploy lightweight Kubernetes-native persistent storage on Arm-based cloud infrastructure. learning_objectives: - - Install and configure K3s Kubernetes on Arm64 virtual machines powered by Azure Cobalt 100 - - Deploy OpenEBS LocalPV using Helm - - Configure Kubernetes storage classes and PersistentVolumeClaims (PVCs) - - Deploy and validate stateful Kubernetes workloads with persistent storage + - Install and configure K3s Kubernetes on Arm64 virtual machines (VMs) powered by Azure Cobalt 100. + - Deploy OpenEBS LocalPV using Helm. + - Configure Kubernetes storage classes and PersistentVolumeClaims (PVCs). + - Deploy and validate stateful Kubernetes workloads with persistent storage. prerequisites: - A [Microsoft Azure account](https://azure.microsoft.com/) with access to Cobalt 100-based instances (Dpsv6) @@ -34,24 +34,23 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:43:29Z' faq_source_hash: 33e9470ccc06f4835028050615832b7200164ec6ba1fdbc26689e6f4fd43bfa4 summary: >- - Add Kubernetes-native persistent storage to a workload on an Arm64 Azure Cobalt 100 virtual - machine. You create a single-node K3s cluster, install OpenEBS LocalPV with Helm, and configure - its storage class. You then create a PersistentVolumeClaim, mount it in an NGINX application, - and verify that test data survives pod recreation. Finally, you expose the application through + You'll add Kubernetes-native persistent storage to a workload on an Arm64 Azure VM powered by Cobalt 100. First, you'll create a single-node K3s cluster, install OpenEBS LocalPV with Helm, and configure + its storage class. You'll then create a PersistentVolumeClaim, mount it in an NGINX application, + and verify that test data survives pod recreation. Finally, you'll expose the application through a NodePort and update the Azure network security group for inbound access. faqs: - - question: Which Azure VM size should I pick for this setup? + - question: How can I install a specific version of the OpenEBS Helm chart? answer: >- - Use a general-purpose virtual machine in the Dpsv6 series powered by Azure Cobalt 100. For - detailed creation instructions, see the Dpsv6 guidance or the Deploy a Cobalt 100 virtual - machine on Azure Learning Path. + Run `helm search repo openebs/openebs --versions` to list available chart versions, then add + `--version ` to the provided `helm install` command. Without this option, you install + the latest available chart. - question: How do I expose the sample application so I can reach it from my browser? answer: >- Expose the NGINX deployment as a NodePort service and run `kubectl get svc` to see the assigned port. Then add an inbound rule for that NodePort in the VM’s Network Security Group. - question: What storage configuration should I use for the PersistentVolumeClaim? answer: >- - Use `storageClassName: openebs-hostpath` and `accessModes: ReadWriteOnce` as shown in the PVC + Use `storageClassName: openebs-hostpath` and `accessModes: ReadWriteOnce` as shown in the PersistentVolumeClaim manifest. This configuration targets OpenEBS LocalPV for dynamic provisioning. - question: How do I know persistent storage is working before I move on? answer: >- @@ -59,8 +58,7 @@ generated_summary_faq: If the data is still present after the pod comes back, the volume is persisting as expected. - question: Do I need a multi-node cluster? answer: >- - No. You use a lightweight single-node Kubernetes cluster with K3s on the Azure Cobalt - 100 VM. Multi-node scenarios are not covered here. + No. Use a lightweight single-node Kubernetes cluster with K3s on the VM. # END generated_summary_faq author: Pareena Verma diff --git a/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md b/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md index f2c83bb04e..d2cd6f54e5 100644 --- a/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md @@ -1,16 +1,16 @@ --- -title: Validate PAC/BTI security features in OpenJDK on Google Cloud C4A +title: Validate Pointer Authentication and Branch Target Identification in OpenJDK on Google Cloud C4A description: Test Pointer Authentication (PAC) and Branch Target Identification (BTI) support in OpenJDK on Google Cloud C4A. Learn to validate hardware security capabilities and verify JVM compiler support for Arm security features. minutes_to_complete: 30 -who_is_this_for: This is for Java developers running OpenJDK on Arm Neoverse platforms who want to verify PAC/BTI security features are properly enabled. Pointer Authentication (PAC) cryptographically signs return addresses to detect tampering, while Branch Target Identification (BTI) restricts where indirect branches can land. You'll learn to test both hardware capabilities and JVM compiler support for these Armv9 security features. +who_is_this_for: This is for Java developers running OpenJDK on Arm Neoverse platforms who want to verify Pointer Authentication (PAC) and Branch Target Identification (BTI) security features are properly enabled. PAC cryptographically signs return addresses to detect tampering, while BTI restricts where indirect branches can land. learning_objectives: - - Provision a Google Cloud C4A Arm-based virtual machine with SUSE Linux Enterprise Server. + - Provision a Google Cloud C4A Arm-based virtual machine (VM) with SUSE Linux Enterprise Server. - Install OpenJDK on the Arm-based VM. - - Verify PAC/BTI readiness in the installed JVM runtime. + - Verify PAC and BTI readiness in the installed Java VM (JVM) runtime. prerequisites: - A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled @@ -31,33 +31,32 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:43:54Z' faq_source_hash: 1e27a00bafb12e1648af702e7eadeefc15ceefb119b7e6eb3e4824787d547271 summary: >- - Validate Pointer Authentication (PAC) and Branch Target Identification (BTI) support in Java - on a Google Axion C4A virtual machine. You provision a SUSE Linux Enterprise Server VM, install - OpenJDK, and run a script that checks platform capabilities and Java virtual machine (JVM) - just-in-time (JIT) compiler support. You then install Oracle JDK 21, repeat the tests, and + You'll validate PAC and BTI support in Java + on a Google Axion C4A VM. First, you'll provision a SUSE Linux Enterprise Server VM and install + OpenJDK. You'll run a script that checks platform capabilities and JVM + just-in-time (JIT) compiler support. Then, you'll install Oracle JDK 21, repeat the tests, and compare how each runtime reports branch-protection support. faqs: - question: How do I verify which JVM is active after installation? answer: >- Run `java --version`. The output should identify the distribution and version, for example OpenJDK 17 on `aarch64`. - - question: How do I know the C4A VM exposes PAC and BTI? + - question: How do I know that the C4A VM exposes PAC and BTI? answer: >- Run the provided test script and review its hardware checks. It should report that PAC and BTI are available before you evaluate JVM compiler behavior. - question: What result should I expect from the SUSE OpenJDK 17 tests? answer: >- The tests confirm the platform exposes PAC and BTI, but the SUSE-packaged OpenJDK 17 JIT - does not emit PAC/BTI instructions. This distinguishes hardware capability from the compiler’s + doesn't emit PAC and BTI instructions. This distinguishes hardware capability from the compiler’s code generation. - - question: How do I ensure the tests run against Oracle JDK 21? + - question: How do I ensure that the tests run against Oracle JDK 21? answer: >- - Invoke the Java binary from the extracted JDK's `bin` directory as shown, for example + Invoke the Java binary from the extracted JDK's `bin` directory, for example `./jdk-21.0.11/bin/java`. The exact minor version in `--version` output might differ. - question: Which C4A machine type should I use for this validation? answer: >- - Use the `c4a-standard-4` machine type specified in the instructions. Other sizes aren't covered - here. + Use the `c4a-standard-4` machine type. # END generated_summary_faq author: Doug Anson diff --git a/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md b/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md index efa4fadc71..2747b9c24a 100644 --- a/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md @@ -8,13 +8,13 @@ minutes_to_complete: 45 who_is_this_for: This is an introductory topic for C++ developers who want to profile a data-processing workload on Arm Linux, identify performance bottlenecks with Arm Performix, and accelerate random number generation using OpenRNG and Arm Performance Libraries. learning_objectives: - - Build and run a baseline C++ data-processing workload on Arm Linux - - Use Arm Performix Code Hotspots to identify the highest-impact optimization target - - Accelerate random number generation by integrating OpenRNG and Arm Performance Libraries - - Measure performance improvements using a microbenchmark across multiple data sizes + - Build and run a baseline C++ data-processing workload on Arm Linux. + - Use Arm Performix Code Hotspots to identify the highest-impact optimization target. + - Accelerate random number generation by integrating OpenRNG and Arm Performance Libraries. + - Measure performance improvements using a microbenchmark across multiple data sizes. prerequisites: - - An Arm Linux (aarch64) server, such as an AWS Graviton3 instance + - An Arm Linux (aarch64) server, such as an AWS Graviton3-based instance - Basic understanding of C++ and CMake # START generated_summary_faq @@ -32,16 +32,15 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:44:16Z' faq_source_hash: 004969d91992cbe6672e86cb8cc4734742e4461085198eaf09f3e2ff2afaf24d summary: >- - Accelerate random-number generation in a C++ workload on Arm Linux with OpenRNG. You build + You'll accelerate random-number generation in a C++ workload on Arm Linux with OpenRNG. First, you'll build and run the baseline application, then use Arm Performix Code Hotspots to identify expensive - functions. You replace scalar distribution generation with the OpenRNG vector API from Arm - Performance Libraries and profile the updated build. Finally, you run a microbenchmark across + functions. You'll then replace scalar distribution generation with the OpenRNG vector API from Arm + Performance Libraries and profile the updated build. Finally, you'll run a microbenchmark across eight input sizes and compare the baseline and accelerated timings. faqs: - - question: I’m using Ubuntu or Debian. Which package manager should I use during setup? + - question: Which package manager should I use during setup if I'm using Ubuntu or Debian? answer: >- - Replace `dnf` with `apt` on Ubuntu or Debian. The rest of the setup flow remains the same on - Arm Linux. + Replace `dnf` with `apt` on Ubuntu or Debian. - question: What result should I expect when I run the baseline example? answer: >- The program generates two random distributions, filters points within a window, and computes From 36924a729a05eccde961e8088fe7fc29812818eb Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Fri, 2 Oct 2026 13:35:31 -0500 Subject: [PATCH 25/66] replacing faqs --- .../mysql-lns-azure/_index.md | 11 ++++++----- .../servers-and-cloud-computing/mysql/_index.md | 6 ++++-- .../neoverse-rdv3-swstack/_index.md | 8 ++++---- .../oci-terraform/_index.md | 7 ++++--- .../opencv-on-axion/_index.md | 7 ++++--- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md index 73ce06896e..17a38e1fb9 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md @@ -45,12 +45,13 @@ generated_summary_faq: answer: >- Run the scripts from the downloaded asset repository, for example in `$HOME/lift-n-shift-assets`. The `scripts/create_ssh_key.sh` script generates an SSH key pair in `$HOME/.ssh` and prints the public - key. - - question: What should I enter when the key generation script prompts for a passphrase, and - what output should I keep? + key. Press **Enter** to leave the passphrase empty, and save the printed `ssh-rsa` + public key string for use with the Azure VM. + - question: Where can I find the password requested when restoring the database on the cloud VM? answer: >- - Press **Enter** to leave the passphrase empty. Save the printed `ssh-rsa` public - key string for use with the Azure VM. + Open a second SSH session to the Arm-based Azure VM. Run `sudo su -`, then + `cat /root/mysql_root_password.txt` to retrieve the password. Enter it at the restore + prompt in your original session on the on-premises simulator. - question: How do I connect to the Arm-based Azure VM before running the benchmark, and which user and key should I use? answer: >- diff --git a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md index 58917ae955..695c05096b 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md @@ -32,9 +32,11 @@ generated_summary_faq: services before choosing an environment. Then, you'll identify MySQL documentation to install and configure the server. You'll connect with the MySQL clients and run SQL commands. faqs: - - question: What Learning Path should I explore next? + - question: Which version of the MySQL Reference Manual should I use? answer: >- - Explore the Learning Path [Tune MySQL performance on Arm-based platforms](/learning-paths/servers-and-cloud-computing/mysql_tune/) to improve the performance of an Arm-based MySQL server. + Use the MySQL Reference Manual for the version of MySQL you're working with. + Check the version selected in the documentation before following its installation, + configuration, or client instructions. - question: What SQL operations can I try after connecting to MySQL? answer: >- You can create and select a database, create and inspect a table, insert sample records, and diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md index 44bed27013..edf6674c9a 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md @@ -49,11 +49,11 @@ generated_summary_faq: The system boots from BL1 through the firmware stack to a Buildroot Linux shell on the FVP. You should see logs across the mapped UART consoles for each stage and a Linux prompt on the application processor path. - - question: What should I check if the boot hangs before reaching Linux? + - question: Where can I find the UART logs from the RD-V3 simulation? answer: >- - Review the UART outputs to find the last active stage and identify where control stopped. - Confirm that the FVP version matches your selected RD-V3 release tag and re-sync sources to the - pinned manifest before rebuilding. + Look in `~/rdv3/model-scripts/rdinfra/platforms/rdv3/rdv3`, where each UART is redirected + to its own log file. Use the UART-to-terminal mapping to identify the subsystem you + want to inspect, such as Linux, TF-A and UEFI, SCP, RSE, MCP, or LCP. - question: How do I validate a change to SCP, MCP, or LCP firmware? answer: >- Rebuild the affected platform control firmware, then rerun the FVP simulation. Inspect the diff --git a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md index 8dfc533ecd..f84914570e 100644 --- a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md @@ -46,10 +46,11 @@ generated_summary_faq: Create `availability-domains.tf` with the provided data source and output definition, then run `terraform plan`. If authentication succeeds, you'll see the availability domains in your tenancy. Keep this file in the same directory as `provider.tf`. - - question: Can I use a VM as my control environment for running Terraform? + - question: How can I display the provisioned instance's public IP address? answer: >- - Yes. A VM with the required tools installed works the same as a desktop or - laptop for running the commands. + Create `outputs.tf` with the provided `public_ip` output definition, which reads + `oci_core_instance.Ampere.public_ip`. After provisioning the instance, run `terraform refresh` + to display its public IP address. - question: What result should I expect after I complete the workflow? answer: >- Terraform automates the creation of an Arm-based VM instance on OCI Ampere Compute. diff --git a/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md b/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md index 7d45e80823..c76f20853a 100644 --- a/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/opencv-on-axion/_index.md @@ -53,10 +53,11 @@ generated_summary_faq: answer: >- Use the `~/opencv-project` directory and a virtual environment named `cv-env`. Run subsequent scripts from that directory with the environment activated. - - question: What should be ready before I integrate the machine learning model? + - question: How do I save the trained model and load it in the OpenCV pipeline? answer: >- - Have a running Google Axion Arm-based VM with SUSE Linux and Python 3.11. Also ensure that the VM has a - directory `~/opencv-project` with the `cv-env` environment and OpenCV. Confirm that port `8000` is open in the firewall. + Use `joblib.dump` in the training script to save the classifier as `iris_model.joblib` + and the label names as `iris_labels.joblib`. In the OpenCV pipeline, use `joblib.load` + to load both files so you can generate predictions without retraining the model. # END generated_summary_faq author: Pareena Verma From c2d82c1ddb8b2f892a36f542b68a3a94bada57f6 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Fri, 2 Oct 2026 14:01:31 -0500 Subject: [PATCH 26/66] edits --- .../multiarch_nginx_on_aks/_index.md | 5 ++-- .../multiarch_ollama_on_gke/_index.md | 13 ++++++---- .../mysql-lns-azure/_index.md | 4 +-- .../mysql/_index.md | 8 +++--- .../neoverse-rdv3-swstack/_index.md | 25 ++++++++++--------- .../net-aspire/_index.md | 22 ++++++++-------- .../nginx-on-azure/_index.md | 20 +++++++-------- .../nginx/_index.md | 23 +++++++++-------- .../nlp-hugging-face/_index.md | 2 +- .../node-js-gcp/_index.md | 4 +-- .../onnx-on-azure/_index.md | 3 ++- .../onnx/_index.md | 20 +++++++-------- .../openbmc-rdv3/_index.md | 6 ++--- .../openjdk-pacbti-gcp/_index.md | 4 +-- .../openrng-with-performix/_index.md | 14 ++++++----- 15 files changed, 92 insertions(+), 81 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md index f75270b1a4..b3cd3031a0 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md @@ -49,8 +49,9 @@ generated_summary_faq: pulls the correct image variant based on the node’s CPU architecture. - question: What result should I expect when the nginx services become available? answer: >- - Each deployment exposes a LoadBalancer service with an external endpoint. Hitting the endpoint - returns the default nginx response using the shared configuration from the ConfigMap. + When you request a service's external endpoint, you receive JSON with `message`, `timestamp`, + `server`, and `request_uri` fields. You see `nginx response` as the message and the serving pod's + name in `server`. - question: How do I confirm that each nginx pod is running on the correct architecture? answer: >- Use `kubectl` to check each pod’s node assignment and labels. The Arm service selects pods diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md index 55d05c3394..a1e16b5bd1 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_ollama_on_gke/_index.md @@ -47,17 +47,20 @@ generated_summary_faq: - question: What values should I set when creating the Arm node pool? answer: >- Name the pool `arm64-pool`, set **Size** to **1**, and enable **Specify node locations** with - **us-central1-a** selected. Follow the remaining on-screen options to add the Arm node pool. + **us-central1-a** selected. On the **Nodes** tab, select the **C4A** series and `c4a-standard-4` + machine type, then select **Create**. - question: How do I send a request without selecting an architecture and see which architecture handled it? answer: >- Run `./model_util.sh multiarch hello` to target the multi-architecture service. The response - shows which pod served the request, including its deployment, node, and timestamp. + includes `Ollama is running`. Under **Pod log output**, you see a pod and container identifier + with a timestamp. Use the `amd64` or `arm64` in the pod name to identify its architecture. - question: What should I check if requests always go to the same architecture? answer: >- - Verify that both the amd64 and arm64 deployments are running and their services are available - in the `ollama` namespace. If one deployment isn't ready, traffic routes to the available - architecture. + Check that both the amd64 and arm64 deployments have running, ready pods in the `ollama` + namespace. Confirm that both pods have the `app: ollama-multiarch` label and that + `ollama-multiarch-svc` selects that label. Repeat `./model_util.sh multiarch hello` to observe + the pod identifiers in the logs. # END generated_summary_faq author: diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md index 17a38e1fb9..d933cca7b7 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md @@ -43,8 +43,8 @@ generated_summary_faq: from. - question: Where do I run the migration scripts, and what SSH key do they generate? answer: >- - Run the scripts from the downloaded asset repository, for example in `$HOME/lift-n-shift-assets`. - The `scripts/create_ssh_key.sh` script generates an SSH key pair in `$HOME/.ssh` and prints the public + Open an SSH shell on your on-premises simulator and run the scripts from `$HOME/lift-n-shift-assets`. + Run `scripts/create_ssh_key.sh` to generate an SSH key pair in `$HOME/.ssh` and print the public key. Press **Enter** to leave the passphrase empty, and save the printed `ssh-rsa` public key string for use with the Azure VM. - question: Where can I find the password requested when restoring the database on the cloud VM? diff --git a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md index 695c05096b..1394c4cfe7 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md @@ -48,14 +48,14 @@ generated_summary_faq: is working. - question: Can I use a managed SQL service instead of installing MySQL myself? answer: >- - Yes. However, the - hands-on verification steps assume that you control an Arm instance where you install MySQL and - interact with the command-line client. + Yes. You can use AWS RDS and select an Arm-based instance; the service handles MySQL installation + for you. If you use a bare-metal server or cloud VM, review the MySQL installation options and + choose how to install it yourself. - question: Where should I start if I don't have an Arm node? answer: >- Provision an Arm environment before you install MySQL. For more information, see the [Get started - with Arm-based cloud instances](/learning-paths/servers-and-cloud-computing/intro/) Learning Path. + with Arm-based cloud instances](/learning-paths/servers-and-cloud-computing/csp/) Learning Path. # END generated_summary_faq author: Jason Andrews diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md index edf6674c9a..d8b38250a0 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md @@ -42,28 +42,29 @@ generated_summary_faq: faqs: - question: How do I choose the correct FVP model for my RD-V3 build? answer: >- - Match the FVP model version to the RD-V3 release tag that you're using. Use the - example mapping as reference and refer to the release tags list for the full set of supported versions. + Match your FVP version to your RD-V3 release tag. For `RD-INFRA-2025.07.03`, + use FVP version `11.29.35`. Check the release tags list for other version mappings. - question: What result should I expect when the single-die simulation boots successfully? answer: >- - The system boots from BL1 through the firmware stack to a Buildroot Linux shell on the FVP. - You should see logs across the mapped UART consoles for each stage and a Linux prompt on - the application processor path. + In `terminal_ns_uart0`, select **RD-V3 Buildroot** from the GRUB menu and press **Enter**. + You should see `Welcome to Buildroot`, then a `buildroot login:` prompt. Log in as + `root` to reach the Linux shell. - question: Where can I find the UART logs from the RD-V3 simulation? answer: >- Look in `~/rdv3/model-scripts/rdinfra/platforms/rdv3/rdv3`, where each UART is redirected to its own log file. Use the UART-to-terminal mapping to identify the subsystem you want to inspect, such as Linux, TF-A and UEFI, SCP, RSE, MCP, or LCP. - - question: How do I validate a change to SCP, MCP, or LCP firmware? + - question: How do I validate the demonstrated MCP firmware change on RD-V3-R1? answer: >- - Rebuild the affected platform control firmware, then rerun the FVP simulation. Inspect the - corresponding UART logs for your expected messages or behavior and confirm that the system still - reaches the Linux shell. + Add `FWK_LOG_CRIT("[FWK] Customer code here");` in `fwk_module_start()` in + `~/rdv3r1/host/scp/framework/src/fwk_module.c`. Rebuild and repackage with the + demonstrated `rdv3r1` build commands, then relaunch the FVP. Check your MCP UART + output for `[FWK] Customer code here` to confirm your change executes. - question: How do I know the dual-chip RD-V3-R1 simulation is running correctly? answer: >- - Look for a dual-AP boot flow and MCP activity coordinating across dies. Both dies should - produce console output, and the expected cross-die management - behavior should be visible in the logs. + After launching `./boot-buildroot.sh -p rdv3r1`, check the UART consoles to verify + that both application processors, AP0 and AP1, boot in coordination. You can inspect + the additional MCP console and logs in `~/rdv3r1/model-scripts/rdinfra/platforms/rdv3r1/rdv3r1`. # END generated_summary_faq author: diff --git a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md index 4b57351fdd..e08c9db54d 100644 --- a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md @@ -39,13 +39,12 @@ generated_summary_faq: - question: How do I verify the .NET SDK and install the Aspire workload before creating the project? answer: >- - Run `dotnet --version` in PowerShell and confirm that it reports version 8.0 or later. Then, run `dotnet - workload install aspire`. The installer downloads the Aspire components and completes without - errors. + Run `dotnet --version` in PowerShell and confirm that you have .NET SDK 8.0 or later. + Then run `dotnet workload install aspire` and check for `Successfully installed workload(s) aspire.` - question: Why do I need to trust the HTTPS development certificate, and how do I do it? answer: >- - The application uses HTTPS locally and the dashboard relies on a trusted certificate. Run - `dotnet dev-certs https --trust` before you start the application. + You use HTTPS when running the application locally. Run `dotnet dev-certs https --trust` + before starting your application to trust its HTTPS development certificate. - question: Which project do I run to start the distributed application, and what output should I expect? answer: >- @@ -53,14 +52,15 @@ generated_summary_faq: messages such as `Building...`, an Aspire version line, and `Distributed application starting`. - question: Where do I add the intensive computations, and how can I confirm the change worked? answer: >- - Add `ComputationService.cs` to the `NetAspire.Arm.ApiService` project using the provided code, - then rebuild and run the solution. Check the console or dashboard logs for the API service - to observe the new computation executing. + Add the supplied `ComputationService.cs` code to `NetAspire.Arm.ApiService`. In `Program.cs`, + update the `/weatherforecast` handler to call `ComputationService.PerformIntensiveCalculations(matrixSize: 800)`. + Run `dotnet run --project NetAspire.Arm.AppHost`, select **Weather** in your web frontend, + then open **Traces** in the dashboard to inspect the longer request duration. - question: Which ports do I need to expose to access the deployed application? answer: >- - Allow TCP traffic on ports `7133`, `7511`, and `17222`, matching the ports used when you run - the application locally. Configure these ports in the EC2 security group on AWS or in a - firewall rule associated with the `dotnet-app` network tag on Google Cloud. + Allow TCP traffic on the actual ports your application uses; the example uses `7133`, + `7511`, and `17222`. Match your application's port values in the AWS EC2 security group + or a Google Cloud firewall rule associated with your VM's `dotnet-app` network tag. # END generated_summary_faq author: Dawid Borycki diff --git a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md index 400a611ee8..7f791512a2 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md @@ -37,22 +37,22 @@ generated_summary_faq: - question: Which Azure VM size and image should I choose? answer: >- Use an Arm-based VM in the Dpsv6 series with the Ubuntu Pro 24.04 LTS Arm64 image. - The example uses a `D4ps_v6` instance, but you can follow the same instructions - with other Dpsv6 sizes. + Select **D4ps_v6** in the Azure portal to match the demonstrated configuration. - question: How do I know that NGINX installed correctly before I change any configuration? answer: >- - After installation, NGINX serves its default welcome page. Confirm that the welcome page - loads before proceeding to configure your own site. + Run `sudo systemctl status nginx` and check for `Active: active (running)`. + Use `curl -I http://localhost/` to check for `HTTP/1.1 200 OK`, then open + your VM's public IP address in a browser to confirm you see the default welcome page. - question: Where should I put my static site files, and what should I expect when it works? answer: >- - Create the `/var/www/my-static-site` directory and add an HTML file. After updating the NGINX - configuration to point to this directory and reloading NGINX, requests to the server should - return your custom page instead of the default welcome page. + Create `/var/www/my-static-site/index.html` and configure `/etc/nginx/conf.d/static-site.conf` + to use that directory and `index.html`. Disable the packaged default site with + `sudo unlink /etc/nginx/sites-enabled/default`. Run `sudo nginx -t` before + `sudo nginx -s reload`, then open your VM's public IP address to check your custom page. - question: Should I run ApacheBench on the VM or from another machine? answer: >- - Install and run ApacheBench (`ab`) on the same VM that - runs NGINX, unless you have a specific reason to benchmark from an - external client. + Run ApacheBench on your NGINX VM to match the demonstrated baseline test. + Use `ab -n 1000 -c 50 http://localhost/` to send 1,000 requests with 50 concurrent connections. - question: Which package installs ApacheBench on Ubuntu Pro 24.04 LTS, and how do I verify it? answer: >- Install the `apache2-utils` package. Run `ab -V` to confirm that ApacheBench is available and diff --git a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md index ea7711f25d..190c0dc2d0 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md @@ -38,13 +38,12 @@ generated_summary_faq: faqs: - question: How do I know which NGINX features are enabled in the packaged install? answer: >- - Review the packaged build configuration to see which modules and paths are compiled in. - Use this information to decide which options to enable if you later build from source. + Run `nginx -V` to inspect your packaged build. You can see the NGINX and OpenSSL + versions, compiler flags, module options, and configured paths in the output. - question: Do I need to build NGINX from source? answer: >- - No. Start with a package install and only build from source if you need a different - configuration. Looking at the prebuilt configuration first helps you choose the right source - build options. + You can install NGINX with a package manager. If you choose a source build, + use the packaged build options as a starting point and enable the features you need. - question: What do I need before setting up the reverse proxy and API gateway? answer: >- Set up two file servers and prepare a third node for the reverse @@ -52,13 +51,17 @@ generated_summary_faq: (HTTPS). - question: How do I verify that the static HTTPS file server is working? answer: >- - After configuring NGINX, creating a key and certificate, and starting the service, access - a test file over HTTPS from a client. Successful retrieval confirms that the server is working. + Run `wget --no-check-certificate https://localhost/file.txt` on your server, then + `wget --no-check-certificate https:///file.txt` from another node. + You can also check the index page with `curl -k https:///index.html`. + Use these certificate-check bypasses only for the self-signed certificate demo; + for production, use a certificate issued by a certificate authority. - question: What result should I expect after configuring the reverse proxy and API gateway? answer: >- - The reverse proxy and API gateway forwards requests to the two upstream file servers and load - balances across them. During testing, you should observe responses originating from both - backends. + You should retrieve `file.txt` through the reverse proxy and `apigw_file.txt` through + `/api_old/apigw_file.txt`. Your API gateway rewrites `/api_old/` to `/api_new/` + before forwarding the request upstream. Verify retrieval with the demonstrated `wget` + commands on the proxy node and another node. # END generated_summary_faq author: Julio Suarez diff --git a/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md b/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md index 6a58aed4a6..2ed9338ae2 100644 --- a/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nlp-hugging-face/_index.md @@ -52,7 +52,7 @@ generated_summary_faq: should sum to 1. The first line is the model's strongest prediction. - question: How do I know that the PyTorch profiler captured my run? answer: >- - You should see a table of CPU operators and their execution times after the classification + You should see a table of CPU operators and their execution times before the classification output. The `model_inference` row summarizes the profiled inference region. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md b/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md index 702e3e9ae7..ff4dd91c45 100644 --- a/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/node-js-gcp/_index.md @@ -50,8 +50,8 @@ generated_summary_faq: server responds to an HTTP request on the configured port. - question: What URL should I pass to Autocannon? answer: >- - Use the address and port where your sample Node.js server is listening, such as `localhost` - with the configured port. Run Autocannon against that endpoint to collect results. + Use `http://localhost:80` when you run Autocannon on the same VM as the sample + Node.js server. - question: How can I change the load and duration of the Autocannon benchmark? answer: >- Adjust `-c` to set the number of concurrent connections and `-d` to set the test duration diff --git a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md index d4c587d2b8..b7c0fb2aa1 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md @@ -37,7 +37,8 @@ generated_summary_faq: faqs: - question: Which Azure VM size and OS image should I use? answer: >- - Choose a Cobalt 100-based Dpsv6 VM from the D-series and use Ubuntu Pro 24.04 LTS. + Select `D4ps_v6` from the Dpsv6 series powered by Azure Cobalt 100. + Use the Ubuntu Pro 24.04 LTS image and select **Arm64** as the VM architecture. - question: What do I need in place before running the baseline latency test? answer: >- Activate your Python virtual environment, have the `baseline.py` script ready, and ensure that diff --git a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md index ab4145d1d1..f6f67dad2d 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md @@ -38,9 +38,9 @@ generated_summary_faq: faqs: - question: What do I pass to the `--model_path` argument in the chatbot script? answer: >- - Use the path to the quantized and converted Phi-4-mini model assets that onnxruntime_genai - expects. Make sure the quantization and conversion step completed successfully before starting - the server. + Use the directory containing `genai_config.json` and `model.onnx` for the downloaded + INT4-quantized Phi-4-mini model. With the provided download command, pass + `cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4` as the model path. - question: Which execution provider should I choose when running the chatbot? answer: >- If you're unsure, keep the default execution provider, `follow_config`, @@ -48,14 +48,14 @@ generated_summary_faq: set a different provider, as the script clears providers when you do. - question: How do I know that the chatbot server started correctly? answer: >- - You should see the model load without errors and a prompt to enter text. After you send a - prompt, the terminal prints generation metrics such as tokens per second and time to first - token. - - question: Do I need to use the exact Azure VM size used in the example? + You should see the model load without errors and a prompt to enter text. If you start + the script with `--timings` or `-g`, as in the example command, you'll also see tokens + per second and time to first token after sending a prompt. + - question: What Azure VM configuration is documented for this setup? answer: >- - No. The instructions were tested on a 32-core Azure `Dpls_v6` Cobalt 100 VM, but you can - use another Arm-based Cobalt 100 instance. Use a comparable instance if you want results - similar to the example output. + Use the tested configuration as your reference: an Azure `Dpls_v6` Cobalt 100 VM + with 32 cores, 64 GB of RAM, and 32 GB of disk space. You don't have documented + performance results for other VM sizes in this Learning Path. - question: How can I limit the number of tokens in a chatbot response? answer: >- Set `--max_length` (or `-l`) when you run `phi4.py`. This limit includes both the prompt diff --git a/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md b/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md index 747e60439c..4aca1e088d 100644 --- a/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openbmc-rdv3/_index.md @@ -58,9 +58,9 @@ generated_summary_faq: You should see ongoing boot messages or a prompt from the host side. - question: How do I validate that my custom IPMI command works? answer: >- - Issue the command using `ipmitool` and check for the expected simple string response. If the - response isn't returned, ensure that the C++ handler is integrated and rebuild the OpenBMC image - before re-running the simulation. + Run `ipmitool raw 0x30 0x20` in the OpenBMC console. You'll see hexadecimal bytes. Exclude the first byte, which represents the payload length, + and decode the remaining bytes using the provided command. The decoded string should be + `Hello from OpenBMC IPMI!`. # END generated_summary_faq author: diff --git a/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md b/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md index d2cd6f54e5..76c404ec68 100644 --- a/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openjdk-pacbti-gcp/_index.md @@ -52,8 +52,8 @@ generated_summary_faq: code generation. - question: How do I ensure that the tests run against Oracle JDK 21? answer: >- - Invoke the Java binary from the extracted JDK's `bin` directory, for example - `./jdk-21.0.11/bin/java`. The exact minor version in `--version` output might differ. + Run `JAVA=./jdk-21.0.11/bin/java ./test-pacbti.sh` to select the Oracle JDK for the + test script. Replace `jdk-21.0.11` with your extracted directory name if it differs. - question: Which C4A machine type should I use for this validation? answer: >- Use the `c4a-standard-4` machine type. diff --git a/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md b/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md index 2747b9c24a..13af845ec8 100644 --- a/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/openrng-with-performix/_index.md @@ -40,17 +40,19 @@ generated_summary_faq: faqs: - question: Which package manager should I use during setup if I'm using Ubuntu or Debian? answer: >- - Replace `dnf` with `apt` on Ubuntu or Debian. + Replace `dnf` with `apt` on Ubuntu or Debian. - question: What result should I expect when I run the baseline example? answer: >- - The program generates two random distributions, filters points within a window, and computes - the shortest distance from the origin. Use this run to establish baseline behavior and timing + You'll see the number of generated points, the count within a rectangular window, and + the shortest distance from the origin across the full distribution. You generate the points + by adding Gaussian and uniform distributions. Use this run to establish baseline behavior before profiling and acceleration. - question: What should I look for in the Arm Performix Code Hotspots report? answer: >- - Focus on functions consuming the largest share of CPU cycles. In this example, routines - such as `generateDistribution` or `min_length` might appear near the top and inform which code to - optimize first. + Focus on `generateDistribution`, the primary hotspot in the example flame graph. You'll see + more time spent in Gaussian sampling with `std::normal_distribution` than in uniform sampling. + Prioritize random-number generation rather than `min_length`, which contributes negligible runtime + in the example. - question: Which OpenRNG API should I use to speed up distribution generation? answer: >- Use the Vector Statistical Library (VSL) API with a stream object to generate values in From d29a8b60fdf31ce50d343a049899f6af542c129a Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Fri, 2 Oct 2026 14:51:07 -0500 Subject: [PATCH 27/66] nginx on aks --- .../multiarch_nginx_on_aks/_index.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md index b3cd3031a0..805602f71c 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md @@ -31,37 +31,36 @@ generated_summary_faq: faq_generated_at: '2026-10-01T19:35:41Z' faq_source_hash: 9c684631877441d8756182571940b0aa63797c5adab26c46663b95492bceffbb summary: >- - Build a hybrid Azure Kubernetes Service (AKS) cluster with x86 and Arm nodes, then deploy - nginx workloads to both architectures. You create the node pools, connect with `kubectl`, - and use a utility script to inspect and test each deployment. You then add a multi-architecture - service, compare its routing with the architecture-specific services, and monitor both workloads - while you run load tests. + You'll build a hybrid AKS cluster with x86 and Arm nodes, then deploy + NGINX workloads to both architectures. First, you'll create the node pools, connect with `kubectl`, + and use a utility script to inspect and test each deployment. Then, you'll add a multi-architecture + service and compare its routing with the architecture-specific services. While you run load tests, you'll monitor both workloads. faqs: - - question: How do I know the AKS cluster is set up for both architectures before deploying - nginx? + - question: How do I know that the AKS cluster is set up for both architectures before deploying + NGINX? answer: >- Confirm that the cluster has two node pools, one x86 and one Arm, and that `kubectl` can reach the cluster. Check that nodes report the expected CPU architecture so scheduling can target each pool. - - question: Which nginx image should I use to run on both Arm and x86 nodes? + - question: Which NGINX image should I use to run on both Arm and x86 nodes? answer: >- The deployments use a multi-architecture nginx image from Docker Hub. The container runtime pulls the correct image variant based on the node’s CPU architecture. - - question: What result should I expect when the nginx services become available? + - question: What result should I expect when the NGINX services become available? answer: >- When you request a service's external endpoint, you receive JSON with `message`, `timestamp`, `server`, and `request_uri` fields. You see `nginx response` as the message and the serving pod's name in `server`. - - question: How do I confirm that each nginx pod is running on the correct architecture? + - question: How do I confirm that each NGINX pod is running on the correct architecture? answer: >- Use `kubectl` to check each pod’s node assignment and labels. The Arm service selects pods - with `app: nginx-multiarch` and `arch: arm`; verify that Arm pods run on the Arm node pool + with `app: nginx-multiarch` and `arch: arm`. Verify that Arm pods run on the Arm node pool and x86 pods run on the x86 pool. - - question: What should I check if the Arm deployment does not start or the service shows no + - question: What should I check if the Arm deployment doesn't start or the service shows no endpoints? answer: >- - Verify the Arm node pool exists and is Ready, and ensure the deployment and service selectors - match, including `app: nginx-multiarch` and `arch: arm`. Also confirm the namespace and shared + Verify the Arm node pool exists and is ready. Ensure that the deployment and service selectors + match, including `app: nginx-multiarch` and `arch: arm`. Also confirm that the namespace and shared ConfigMap were created before applying the deployment. # END generated_summary_faq From f9c5801d8d8cd62b795745b33579493d8a322af9 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Fri, 2 Oct 2026 15:17:05 -0500 Subject: [PATCH 28/66] nginx on aks --- .../multiarch_nginx_on_aks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md index 805602f71c..8344010298 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md @@ -44,7 +44,7 @@ generated_summary_faq: each pool. - question: Which NGINX image should I use to run on both Arm and x86 nodes? answer: >- - The deployments use a multi-architecture nginx image from Docker Hub. The container runtime + The deployments use a multi-architecture NGINX image from Docker Hub. The container runtime pulls the correct image variant based on the node’s CPU architecture. - question: What result should I expect when the NGINX services become available? answer: >- From 52ac66a84cc78e1461aa426bfc75ab0fa7fb2bcd Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Fri, 2 Oct 2026 17:17:14 -0500 Subject: [PATCH 29/66] edits --- .../multiarch_nginx_on_aks/_index.md | 2 +- .../servers-and-cloud-computing/mysql-azure/_index.md | 6 +++--- .../mysql-lns-azure/_index.md | 10 ++++------ .../servers-and-cloud-computing/mysql/_index.md | 6 +++--- .../neoverse-rdv3-swstack/_index.md | 7 +++---- .../servers-and-cloud-computing/net-aspire/_index.md | 4 ++-- .../nginx-on-azure/_index.md | 5 ++--- .../servers-and-cloud-computing/nginx/_index.md | 10 ++++------ .../oci-terraform/_index.md | 1 - .../onnx-on-azure/_index.md | 4 ++-- .../servers-and-cloud-computing/onnx/_index.md | 7 +++---- 11 files changed, 27 insertions(+), 35 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md index 8344010298..718ae726f9 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md @@ -44,7 +44,7 @@ generated_summary_faq: each pool. - question: Which NGINX image should I use to run on both Arm and x86 nodes? answer: >- - The deployments use a multi-architecture NGINX image from Docker Hub. The container runtime + Use a multi-architecture NGINX image from Docker Hub. The container runtime pulls the correct image variant based on the node’s CPU architecture. - question: What result should I expect when the NGINX services become available? answer: >- diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md index f109f9a95f..5e3808cddf 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-azure/_index.md @@ -32,18 +32,18 @@ generated_summary_faq: You'll deploy MySQL on an Arm64 Azure virtual machine powered by Cobalt 100, and establish a performance baseline. First, you'll provision an Ubuntu Pro 24.04 LTS Dpsv6 VM in the Azure portal, then install, secure, and validate MySQL. After creating sample data, you'll use `mysqlslap` to run read and write - benchmarks. You'll interpret the reported timings, and capture results that you can use in later + benchmarks. You'll interpret the reported timings and capture results that you can use in later comparisons. faqs: - question: Which Azure VM size and image should I select? answer: >- Use a general-purpose Dpsv6 series instance based on Azure Cobalt 100, and choose Ubuntu Pro 24.04 LTS as the base image. - - question: What do I need to connect to the VM after deployment? + - question: What do I use to connect to the VM after deployment? answer: >- Use the private SSH key that you downloaded when you created the VM, along with the administrator username and the VM's public IP address. - - question: How do I confirm that MySQL is running before moving on? + - question: How do I confirm that MySQL is running? answer: >- Start MySQL and enable it to start on boot using the provided `systemctl` commands. Then, perform the functional validation to confirm queries run and users can authenticate. diff --git a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md index d933cca7b7..07d9d51c58 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql-lns-azure/_index.md @@ -43,7 +43,7 @@ generated_summary_faq: from. - question: Where do I run the migration scripts, and what SSH key do they generate? answer: >- - Open an SSH shell on your on-premises simulator and run the scripts from `$HOME/lift-n-shift-assets`. + Open an SSH shell on your on-premises x64 simulator and run the scripts from `$HOME/lift-n-shift-assets`. Run `scripts/create_ssh_key.sh` to generate an SSH key pair in `$HOME/.ssh` and print the public key. Press **Enter** to leave the passphrase empty, and save the printed `ssh-rsa` public key string for use with the Azure VM. @@ -52,12 +52,10 @@ generated_summary_faq: Open a second SSH session to the Arm-based Azure VM. Run `sudo su -`, then `cat /root/mysql_root_password.txt` to retrieve the password. Enter it at the restore prompt in your original session on the on-premises simulator. - - question: How do I connect to the Arm-based Azure VM before running the benchmark, and which - user and key should I use? + - question: How do I connect to the Arm-based Azure VM before running the benchmark? answer: >- - From the on-premises simulator, SSH to the Arm VM using the key created in `$HOME/.ssh` - and the `azureadmin` user at the VM’s public IP. Use the filename that you identified for the Azure - cloud key. + From the on-premises simulator, SSH to the VM using the key created in `$HOME/.ssh` + and the `azureadmin` user at the VM’s public IP. - question: Where should I create and run the benchmarking script, and what result should I expect? answer: >- diff --git a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md index 1394c4cfe7..e546749a08 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql/_index.md @@ -32,9 +32,9 @@ generated_summary_faq: services before choosing an environment. Then, you'll identify MySQL documentation to install and configure the server. You'll connect with the MySQL clients and run SQL commands. faqs: - - question: Which version of the MySQL Reference Manual should I use? + - question: Which version of the MySQL reference manual should I use? answer: >- - Use the MySQL Reference Manual for the version of MySQL you're working with. + Use the MySQL reference manual for the version of MySQL you're working with. Check the version selected in the documentation before following its installation, configuration, or client instructions. - question: What SQL operations can I try after connecting to MySQL? @@ -48,7 +48,7 @@ generated_summary_faq: is working. - question: Can I use a managed SQL service instead of installing MySQL myself? answer: >- - Yes. You can use AWS RDS and select an Arm-based instance; the service handles MySQL installation + Yes. You can use Amazon Relational Database Service (RDS) and select an Arm-based instance. Amazon RDS handles MySQL installation for you. If you use a bare-metal server or cloud VM, review the MySQL installation options and choose how to install it yourself. - question: Where should I start if I don't have an Arm node? diff --git a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md index d8b38250a0..3a0dde416a 100644 --- a/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/neoverse-rdv3-swstack/_index.md @@ -54,12 +54,11 @@ generated_summary_faq: Look in `~/rdv3/model-scripts/rdinfra/platforms/rdv3/rdv3`, where each UART is redirected to its own log file. Use the UART-to-terminal mapping to identify the subsystem you want to inspect, such as Linux, TF-A and UEFI, SCP, RSE, MCP, or LCP. - - question: How do I validate the demonstrated MCP firmware change on RD-V3-R1? + - question: How do I validate the MCP firmware change on RD-V3-R1? answer: >- Add `FWK_LOG_CRIT("[FWK] Customer code here");` in `fwk_module_start()` in - `~/rdv3r1/host/scp/framework/src/fwk_module.c`. Rebuild and repackage with the - demonstrated `rdv3r1` build commands, then relaunch the FVP. Check your MCP UART - output for `[FWK] Customer code here` to confirm your change executes. + `~/rdv3r1/host/scp/framework/src/fwk_module.c`. Rebuild and repackage with `rdv3r1` build commands, then relaunch the FVP. Check your MCP UART + output for `[FWK] Customer code here` to confirm that your change executes. - question: How do I know the dual-chip RD-V3-R1 simulation is running correctly? answer: >- After launching `./boot-buildroot.sh -p rdv3r1`, check the UART consoles to verify diff --git a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md index e08c9db54d..3bded7640c 100644 --- a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md @@ -58,8 +58,8 @@ generated_summary_faq: then open **Traces** in the dashboard to inspect the longer request duration. - question: Which ports do I need to expose to access the deployed application? answer: >- - Allow TCP traffic on the actual ports your application uses; the example uses `7133`, - `7511`, and `17222`. Match your application's port values in the AWS EC2 security group + Allow TCP traffic on the ports that your application uses. The example uses `7133`, + `7511`, and `17222`. Match your application's port values in the Amazon EC2 security group or a Google Cloud firewall rule associated with your VM's `dotnet-app` network tag. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md index 7f791512a2..35cb08ff5c 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx-on-azure/_index.md @@ -37,12 +37,11 @@ generated_summary_faq: - question: Which Azure VM size and image should I choose? answer: >- Use an Arm-based VM in the Dpsv6 series with the Ubuntu Pro 24.04 LTS Arm64 image. - Select **D4ps_v6** in the Azure portal to match the demonstrated configuration. - question: How do I know that NGINX installed correctly before I change any configuration? answer: >- Run `sudo systemctl status nginx` and check for `Active: active (running)`. - Use `curl -I http://localhost/` to check for `HTTP/1.1 200 OK`, then open - your VM's public IP address in a browser to confirm you see the default welcome page. + Use `curl -I http://localhost/` to check for `HTTP/1.1 200 OK`. Then, open + your VM's public IP address in a browser to confirm that you see the default welcome page. - question: Where should I put my static site files, and what should I expect when it works? answer: >- Create `/var/www/my-static-site/index.html` and configure `/etc/nginx/conf.d/static-site.conf` diff --git a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md index 190c0dc2d0..00ac9953d8 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx/_index.md @@ -54,14 +54,12 @@ generated_summary_faq: Run `wget --no-check-certificate https://localhost/file.txt` on your server, then `wget --no-check-certificate https:///file.txt` from another node. You can also check the index page with `curl -k https:///index.html`. - Use these certificate-check bypasses only for the self-signed certificate demo; - for production, use a certificate issued by a certificate authority. - - question: What result should I expect after configuring the reverse proxy and API gateway? + - question: How do I verify the setup of the reverse proxy and API gateway? answer: >- - You should retrieve `file.txt` through the reverse proxy and `apigw_file.txt` through + Retrieve `file.txt` through the reverse proxy and `apigw_file.txt` through `/api_old/apigw_file.txt`. Your API gateway rewrites `/api_old/` to `/api_new/` - before forwarding the request upstream. Verify retrieval with the demonstrated `wget` - commands on the proxy node and another node. + before forwarding the request upstream. Verify retrieval with `wget` + commands on the proxy node and another node that isn't the proxy. # END generated_summary_faq author: Julio Suarez diff --git a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md index f84914570e..826ca76535 100644 --- a/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/oci-terraform/_index.md @@ -53,7 +53,6 @@ generated_summary_faq: to display its public IP address. - question: What result should I expect after I complete the workflow? answer: >- - Terraform automates the creation of an Arm-based VM instance on OCI Ampere Compute. You'll finish with an OCI Arm instance provisioned from your Terraform configuration. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md index b7c0fb2aa1..2c6c7e0aca 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx-on-azure/_index.md @@ -56,8 +56,8 @@ generated_summary_faq: ONNX Runtime efficiency on the Azure Arm64 instance. - question: Does the baseline script use a real image as input? answer: >- - No. You generate random `float32` data with shape `(1, 3, 224, 224)`, representing one input - with three color channels and dimensions of 224 by 224 pixels. You use this synthetic input + No. The script uses data in `float32` with shape `(1, 3, 224, 224)`. This represents one input + with three color channels and dimensions of 224 by 224 pixels. You'll use this synthetic input to measure inference latency. # END generated_summary_faq diff --git a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md index f6f67dad2d..c876ea5fad 100644 --- a/content/learning-paths/servers-and-cloud-computing/onnx/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/onnx/_index.md @@ -49,13 +49,12 @@ generated_summary_faq: - question: How do I know that the chatbot server started correctly? answer: >- You should see the model load without errors and a prompt to enter text. If you start - the script with `--timings` or `-g`, as in the example command, you'll also see tokens + the script with `--timings` or `-g`, you'll also see tokens per second and time to first token after sending a prompt. - - question: What Azure VM configuration is documented for this setup? + - question: What Azure VM configuration should I use? answer: >- Use the tested configuration as your reference: an Azure `Dpls_v6` Cobalt 100 VM - with 32 cores, 64 GB of RAM, and 32 GB of disk space. You don't have documented - performance results for other VM sizes in this Learning Path. + with 32 cores, 64 GB of RAM, and 32 GB of disk space. - question: How can I limit the number of tokens in a chatbot response? answer: >- Set `--max_length` (or `-l`) when you run `phi4.py`. This limit includes both the prompt From 8e2dcb29b032f1a487e9090e19e817eee3667e3e Mon Sep 17 00:00:00 2001 From: Jason Andrews Date: Sun, 4 Oct 2026 10:40:29 -0500 Subject: [PATCH 30/66] 5% reduction in font size and small increase in card height on install guide cards to fix 3 line titles running to the bottom edge of the cards --- assets/css/list-pages.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/css/list-pages.css b/assets/css/list-pages.css index ddc66c6478..1e3eb8b1a7 100644 --- a/assets/css/list-pages.css +++ b/assets/css/list-pages.css @@ -363,13 +363,13 @@ html[theme="dark"] .learning-path-title { .install-guide-title { margin-top: 0px; margin-bottom: 0px; - font-size: 1.25rem!important; + font-size: 1.1875rem!important; line-height: 1.3; } ads-card.tool-card { - height: 112px; + height: 128px; --ads-card-border-radius: 8px; --ads-card-border-width: 1px; } From 99d7f75a6db86366f136ad5e719eb42475a2edb4 Mon Sep 17 00:00:00 2001 From: GitHub Actions Stats Bot <> Date: Mon, 5 Oct 2026 01:27:52 +0000 Subject: [PATCH 31/66] automatic update of stats files --- content/stats/content_over_time.png | Bin 91204 -> 91444 bytes data/stats_weekly_data.yml | 192 ++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+) diff --git a/content/stats/content_over_time.png b/content/stats/content_over_time.png index ec677601f39e251ec8f1cb8bf56591af75286925..901983ee2b7e2cc4026ddb569fa038354602e585 100644 GIT binary patch literal 91444 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�NeyessXT#*NQi070})Z1rh zm84~4jFk#k!~@bbCIE*K?Wsh);@j@-RIqayqJB)h8$lPe2Rb#eS)N1MAFY4NEx;A2 zgx-ot9D8q;GJyxlSMu*CAVtZQ#A0)KiswFp7h*{vY$PU|wqyolojRcxojSD% zcBpm$_mob^X#{-5-CC#8kN&;GoSh!tzTJHjQE$bQ-P9cnN6O>K!yUc?XDm)1W#KcH ztC)}q9-dnnxJ|Plyu`sHjsDhJdgu4fO=(tnE!`zM!D}B~X1<(m8sQ+3eg_;Q2wkal zsOfq@(Rbb4Mxg*zX4+dV&X1`8Kp|;S0p4B)u453;+6tc)3FS`_F#8Fb7(o3%vncVU z=;WN$^Nhy&p91nFuq_a4x@Gq|0+J!m805KaAT@ooA$*CaU!UWNjErOkdLX2JfR|j8 z>>%=ntzr*>)96@O?t>cvXI%kqAlh2c+$`aH1DHR8%7%YRoQzojy9rGV@WT*)@xiP$ z99z`c+gn&1z-rP!r5nSd6Q&sS zuZ}{;F(Gf31roghEs4E9{m;qfG`)Y{`=e+;r;9fCPUX?5vK&v*jsU5`;sH4=a%R_5 zv5Ir+{7MI^fL2i%`>e5!p1#1ZD%*JuQ79abZ*ofzAG9LdRoqG{q}ROi`R-b3W3sPt6t^Eh%!wCLMq?j zekg4BnFPwwliqzMdJU2*A*DfnTk%lFWs$1Zc6R({;YL}u?kp|z+6V^(nxZ=l%kNqo z0Ph1L8dsRwiheZMd+I&z|H@Ekhfx#-3v(Nmhvvc-u&(Ui-4mw1^Jbr_xJ9R2$Ft4? zMgF7OAIbLN%HhP$Nk=%Y)hS$B;d?1O-F$!l&M_}JnKC7Q1R>fvM9W5Q@cf$#`ezMj4wywDEBCbb*y1%;u*A+d!C# zBypzG41vpH6YdP!VBhL-pge$VF@T7=*ye%1U$_xYTWb>HI45+et+V;@6B+@Z&(I&K<4G zF|fX~sn<0DHXgrP$~h`8-+1_r{KRhZ1h@gwhPlU1g6!+u<$xCl5p){bg+_=DGt3yu z;gX7|5)`28Fe#zmwXLb?QP&^!JNm##?R4~<)jYZ1V4!R+yqDag60ahdE1jG2aA%H+ z^L+FCKB@NC2mPgYlN8q~53Lp6H(+BXK@ccl9iqtz!41+j(;n6LN+u>I_bfM7 z%LtCg<>ZT=_wU2uO^-(WoL~;vDIw3PNYC7bL<R2BN7UQ#~ ziq6n6!QVt5eqH#`(X&onpaf04LUgc^9b+%03u$R-d9llcBa&pk+bpS*n~huErDDrr zB60k%+F56DJ|(9&dkiL(Y+O`-VKS+akQBG zT%6W6h5GRyS~%vRdh{dUx6T3YdnI2gKAC!3Kz}&0~a?JMq`^P=6{gDv;9!-=4YxiZu3Ru*Nksz;l z2EJW4dGbk(U!8;i|3-e>_ZO=6tlIt=hJ-Ra72zR4^Vt9nWF-B<6zfy6vLxtugdPth z1AFv+Utby|4o6@b!sQ0jE+S>HaCYx3&@m^wmf>Fz2&)tE4Yh{o)h8thgXQxMUeUs%}t{C#t(nKqK09I^;P?jTD02fp=>Lm|I>OSdva z+A%Frmzo<$B0OA#3zrxOfKEa{(#$M&8O=D2RDQxhhvqjC<9J5+b3XWz~PKW0nRts})G;m*%R_|i}&>8m)5(#A4LJhO5qv%Cp4B!CVC_s-Z zN%HdY7+Cp=ttm#Pu8^AAN{Vovif2^=^HC-<|idHj1IV6Y< zdg;Vnu@UeL^f=9l!qtR_07f)4-h1)GZfKi&F!f3Tt`b!f`mjuGQj5Mw$PAoXg#Q56 zEZEn@i;s;eD=Rxr)Tqv*1@man`TI1|)2@UG=hs@yBox}+B^d)o$gAd8Db#OmDlBv- zqS>X4jh;Raunc{0=Yf;YyDQb+)pDM={DKOj2<>Pr!1*UU$-nC;%K9BZd$fL@p36xs z*6Se5KcK=qwq*!r^MzR(ywa*w+Q=zWgO~Bb`%8)dhyer19R6GW7sh^B#^uuN9r$Hw zw=tdcZaVN}en2mD>$tGO-XR}vxV!v-`}AZaRE$5Y3{+V66b){IR-n?~y?1Y)^ZX59 zF@1948KufgBV$9OgxIC# z{65pzUqPGs%r`7AF;s%^*r^gOnK@Cb0XkmPqW^+fUcQiX&LY~-ENdb#>%^bwwBqr_ zkCRNzwKkoB-HhFdLAu8Wd4AMiI&*i$CO-xY-f+Ueq(>GK;(S;8M+ER6*_!42h+oF8 z-C*G4@wp&_V_{p;#6LD<@D^{csxVmhhoW+D`0Ipvh#l&Ukg)13-*8-yFSqogu!Wsv zsvQJ_=WMt}sWoe@+b@>Ib@2Aqj} zW_HM+F2vjSfp1ocKefVtUUwgg=QpF1+~utYRiw#|j%SwWp)3z*2I`$!-i_~y&7gC- zM?4DoRZj6>a7g+@uYVa|2ysEB0PQLkDUonl3wkkRs1SG;CF#BIC8}#y zWojx)1cAC{l2B^yrQ4Zzh;^d#ndFx}Q;6%EwhF-dg%+>{hRrlWpx{Y;UGWV6Pk00% zXAmudn~;QoiDCb|xo67C+sYwfx)nYcwo#vtC(cQQejBQ84x?F#lVz_LIWO%Y&cXNTEl&<0hG z-D#W_e5oKm{~qB+BrIs@xw&hXcHeVzyCM{P1Jf)N#E8!SP!JZ1lGD@DHZe0Rplbfa zbPCLf`k?qENt774S4B@RVXg|gO`)7A&SJD?hAoin!@a5m{u9d`Z^+Z^%z{E zN$@?Hrke)EJyKh31gJ}}CR{k)tW}z5Ok*ib*(1sI36!o_bHbYfp0=9v?nXTAW&EW{ zV~RKANrL5LLMGxB8y4+~t}gq}(2>qULLnK(RE(f`n{3OC&JDHiHRn$C;;oPFP|+j; z3gAD#p!gNxnvv4@vzIWdqVl>EgQY+=jY69Lzjg+bUONmvp|}zJl<*A`Zamr3y2frxJTe5@+xb_X!+;6}d<1}lmXXn5y~^Uu82Hpqd_=;GNeD$ae!`f` zCEOoE?TA!get#)^)ereHHVoTY~bC!t)y(M%!+RIdJf1tp*RBS5v) z@WcdqQqIp|bnw08uEPxS91c&#H%wT`A52A@Q*Ra9m9tq?UR3)1+`e6jFBYgVofJ&3jwcw-Kkl{qsF~sT_$=EfUw8?juGH;}2nltmrCD1sti9s|3?8sfowUvI&q%sGWH*>Wh86Cw zAH9tuwKrN81~qHl;|d!FN+10=yPI9Dg*aR>B+gY&lwNXcxqa1wctPNL9UYzTZ`G@7 z*%%p#wl2xs)^_!FxUMVH@i(PN8?cs8u4OgQhDzyYjD3D~Ik!txc64e=<%5|VIz?cC zgbeICi>3=-aX%H`zQ;{Yn5mP6JopN|5;PiYBS~F{kWurX36kfiafApXBT7?4;3vWW zjm}CM`2d{JxI{O&ydkW|ijx$CngB%@M~IGzsSwkPrYA0IX5A#3U1#5_CAhz4r*ke? zTAT^wIqL>;x@prUSGYHhX!q+Z+g9=O@~r=uR(%o%rZw-li;F6bxc5IhCf#U+;d+EQba|)Hr0z!ZJR6 z!)U_t4h~uX=g-ryv=Ad6m?pmr2{mPQsRT1e)9vo;Vn`z{i!2|6{u0HgrU!oWiQGvT98Q1YcFrJSf*F4#$3mGU9 zQaNU`AEH`V;!T8-2s0NJjRRS!H{8L8sJ-@M2E?I)=|zqhKORc&Wt-hXKs~sL2pS7P z9*);sI zTa`9?#qA4!dg#E?oSfgeXCyfSD`3Enm~)H-2`4B$cmq8h-3nKz!9bY$VBAEHZZdZk zY2z#M6k*nZd@6*y?%2M4`%zVHy^e>Qq!a}q7RjZv*v zM1r@dI&HNXt4+33=MdrQ)Unej*F)b6pMj94iruqds~`q$0l^@r4xZELfyM?b{iU&y zHAy`^EIRyybPFHjdVIoY*a3YRZhGpSW1(N>yJlhKn7S${xfLTf({pl+TQ9k;rH^{! z{nGwc&m{ke@W>3^C}cL`3mF>b!(o0g;J~1&d(k50`5p3Fl zUVWxfv?G=jN-2gWvr38>aB@J@@@i_%|GT9M>(c05+?$!~=xs&3;;nSHW?1l6S_l{l zTx2lG)zEMKY*Ljt?!UO492c*ISHil>=yUl!TD&QY$(D|uU034zXSrgNU9nH!>^X0F z;kjH2o!HX}+Qew>*};DdbF{_JuB%^9SeUnMKDZAiau%5E&?+WXh%%G4hp7vIy~ z|I0Yy@X_!U%fEeQ%iWrI%jq9Fc#BlfP%ZPzxv!fQtdmVfn)9?OPoBiE!m!q7lT*8B~@ zZn+yw3thw(DR-KAeHrv(ofxa5Y720Rh(|6}mJc^L^G@-5@mcPgera}_mXx2 z7aS?P^ve^bA}JeiYw^ztoy;-*I`kkzoXN)LWy#Ykm(9f&g`(`ddTtKb{9rH|`+lv# z%7~`Z&d0Fzu@h-!8rATzV9~2jb9f8_W@4LFIg^%;odkb2Eivuz63YzBqENH9+;w#R z{{$?**xBL%*PW$9w}Ht-!jgT{o=(}lg_{eukBu+>DA>Q#Yo zfoVw}11H|S{w({e{$y`CxidxgG?<Z zr;!W)##h28-MqxJo`%0md43z|X^+`gR{fUk-*$c@UaY+Q#cXFo5BTWI2kq0Xpnji! ziSn7rWMZb~km-HHz1Mqx$q9)rJ9iwuMS|2K5zVFY8PXl~-nyi&iSm*V{nlvPQ>GAn z!uB%I{^!+g!^wF{^G+NZ6=thG73RASRanQ^Jg*fK7i&mANSl7*->mCVbR^AjPN;fH zsdrAd6`pLdr`wFQqop*D+vFDJ7q)bJ7Ue8EthDy7je(6Q%C7cQJnu04JSiy%p`5V$E){)mKAXx{VYMt9No^HsFO$w%d=kOPpcL1ASB`hC^lK=y#_14Uw8__WWip*5&JNhwb$S2}WL{KR-grcT{PF z_M7aMf6q?w?4j(dX@D)KA~BhIt+$Pq{K+${HuGLXFQunNb2 zmQ74ENHEjk7(KUa=lrPoU<)*IQR;kfNBi>SHgZqJx8p}*AICuPruU0kt`Y00#Owo9TWDqz&~xxL)?n!wZ?`hxjr>vxt?A=32h8JLK|@?X#$p%N8Hq zK!U$iF!Jk~*IjR~^nR85!nW+hD|}=^$*0wjH*c?9Mf$;TJrC#M3vntRdwOIoe{k!) zLL&Yn5`|+631o^QDA|7JkDb8~!5kwOhi%NV?XP;FT|WQ$)w`%P1S>t)4<=I;^0yX< zLyZ~xX%#8|b8|YRxhcEM3KeeW72D(Nw2qzMax{2A|M&CkTE0KcYA!dW$fgdyDE|9G zN;A(4Y`z&dl`tksX8Hbd?qLn>+XMH`MU2f z5u~mS)yhj7>`Y^{+CUXR85eltab1M{He@J=AZ`w$C(FKMPch)VoVHGB%D%VjwW(wk z0ynk1nPtmQVoW8j%eH)}_U8*yUkJTKFa+)n<&{2M@&|){Db@LF0t_VD*>m_S|L4`6 zRf8uoQzxWE7P8j5Mmitea^8jkb*Da6kd{Dve<4Hss_-;^X#Aj?>6U`B`Vb_TpNmR% zT6`mWlnu&eH~Gmg--Chc?Gft<+Y~i5(G_tx-x_r}@HV)DT-Cm1VRA(j3Ix}@^eusn zP870@pG~)%(jg&zTk~+J99#MWlyPfKpb^30)LU<9v}ry8MMfSO*$A*q1n8Dq%h$-J zPWOGa!x6Jdt(FIvHc6-{s1i(jo>fBUM=iH}k6xpE_GM>FU}mqgdm#V&#j`w2YUM5Z zo(ij%e{*it`av!q|;964sr0O=fC9xlJ{X4cQ5f^BsaU%nKc`X0Ai zxWAk;L__5F>mDt8o&B%u+5WvPts~MG@{UhjstG=2wPHwlh*%gQ!DS0G`dw|q-T=Fk z1}za|q^p~&?(cZ))^@d4K7eD?`lt5qFOU08ukH5?eQDJx>e&J8!s06Z+^O$UqA>gt zI6Vpm%hS=BOJBm)wA4?p&fp*VT-jCh>UGrB3(tayg;Dy?!n^{E{+az=0+y(bpIyb# z7Xw~Bit_*cy8i_E6QY3ui98MMrGcS_V0AmLdx;E*prHP1m&Z86NPlZi)l$%+T;b8P zyHD&e_#S-dnf$Zg7yN2MUhz-X=3JQTDH0uT_~zc1c6Cqpt1q|R))Vv4nntVti9ioY z5m3;{!u`?>OKVAG>-QVVb<_SXheEW)1It3SNH^h&1~bs8O!zddD^64xTgCV%J)wql z$P&xfnHggqU1cZD62T!*R;b@dV#tGUP&3fO!+ZI@aWY-kd^Y!S2y}+pPTr17TEg#I z`fGFqY5nAu-}i`wdLFqwZo~OyL@VK;!hnEGQ;nQvB_DtP5-eg|AMzXVQZd(%)mkOa#?Ql*H5^}oMpPd#D|}$U|S9SygA>9u;8x6MOgCTRVai@NEc28^pThA(>7k;Jyy zKlRg)r?cnwml&~o<(IJjs@~|Wvtu4^B=KHY58%)lFdMOZ{$XjaufXNIG+SqR z+9z5w+5!#^TO4?z#U`SXU1w+E@Z|hpOWhjnY2z1CuLG$R0)%A=XCA%=&?Ii#Hu7V% zxy*=fhYIA^BrG$81s>`!I`kBq*x6O^T@vv55;9Jxj0^D{Z>unZiZ59U`Bm``!n<HdDV#yYyg4-aqH z@odcpP3ySUhUVd;dv~jePV@&-9S@-J_-lMb@dv(-X&NqWV!kg{Ged-g9!J#G%1ENW zhJMKi^kJ*vwnOLy%0oir(fqid@XitZV)N>6#zzFQrRNX$CHPtIt?`ajfACU4%0+YT!Bk3iVfNlR z((b@y=Da-{qHd&gELpr%Sgn`*d9>x*^bs}TF0G8U9-a!*EtafXLv#6pgHO9SZhY~> zHA>n+*|@5SPK|`o?OpIW65sX*4IAG*web@M+TzuCzrS-3P}~b^CBA`02dy}gN%P0Y z@K^fd8{IS_U?AGGWlJ&Ials#H{@JJCmdbv4b=K@as9ap)lRp<#?4wFq-#Y2=wMtEG zJ8P$s%y%n!diV+pm8ijy{ta)9lHE3QUx@E+3gmv>4W|VA(ELLYndJY&)>no_x%FQU z-60_$B}jLObOX_ z@r$+AUbi0TSzQI(xIhGGusqLg!RxN8R0tA@zinbVf4E}Y(!ss+#4bto<{CCq$wtVT zdY0Z*mD2Lkw<0xgz9tz#85~<%9!OUNvLpB7Euy(*ELPKQY7;TSCGSUNO^#LRq@_$q+ zB3i-&+l!NZ4tF(%k$sB>)yQg$=z>ZpjJ=NCJ51rVo3INuQMt&ae5m%0Bg;B*S?KJlT&LL_a7oYdL zs_%D)iM+NBU8=a#F3j3~|>yE)7w z%K7=|O|0f!^l+UmF;17@8}7`!IS{x9(}cj@J-IV+1b0{iI6Yhl3HO!a=da3lo&jhq zH(+<@Hi4xhFL1X|+-%r01(dMGHi0yZE&?Z}?Jk3KYccW0 z@(bmksit{-ibyDVQBppChU{fqdelW-jHoM_wgHM zVc->tPu@9qU|)yvd~o*DRfRg01A54wPR{^ZqfgVzY9w`Rte=?QvlUmx02LPW8PI=v zgF0bJpaRfmlbev1~Hq$CGo=F{zdGwHW@ z65tSkfcLoooErgAy&Z`2;jAvmR}es2Jp!aNpcYXxfFceq6a@OX8~FGTx}1vX>1kl` zv(az_j^8)8x6?yw0o{0+DKB-fj}JFt0h{fA$$$a_@9dMx?IM(C+0T_K4A0_wwPQKo zdhV(p!MoTyRgsHuaN~8Kc0y+SE9IuDCIc-_UYM&a{fJ^~8s}{nHwsFMrfv+?dX$Rk zK-!48Lq3YU#Li4vLUbm??`M)1H!xNnrnTC+qo5aHQE5EQqlzOd_eZL(ZVB7B)8wak zzl(44QclzsyV$;D`?6i>y`VyxH?zaGBduse7&zw!H@5;TJKVGY1d&c4AcgbXfJFr7 zYv2-2AT|pE!VvJ<2f#o9urp7=u^~-^ThTclkZ z)^&gb1v^JaXu7Z*C=f;hilrS$IZeN2AOI1^r_}A)*(M+zkOpiyT>A_hoE(3AeF-S7 zvGth$%IY+hR<7gKHpNHBUWlNHLD+%gcxsi@4aE(I>NP4>b*mKkG?2fFGX);!N*ZJHXw;h3a4>ZA~zO^WN`!rIY*r%csju zJo9wfRT0LWfdO82SjR-Vrc0S%K@5Y&M5L+R-_}&H?la43Szla6zb(^GT1{b${bafT zI)n!Vk!tRubL%bM>chmC-%yWwE3o55QoyYKxpr`uPgqEp-qvM}r}Hc?D2rK(6&gEXTj)rAcMVRLhUeY(a;8YzR2)x-u2I9Xr8VmC8!!Cc7le=sCq# zf}yg83yklE$!zCIx^xJwwE`Pm?k{O$TyR`CaiZ5aBXVpYUC}~IIQ{+>%rTA&atFj> zle;uU3iNE`M6)-WnnIBZlJkr22_}X&Z$LQvgDRw&Z{h7G1nAPelWf_oXr1ja;}WJn zuo9s<$C{`xgx3C3FXz~S{yBk4;|m;`Gph+1GhDt3J*O6xKWZBq8v+29NR67>7FxMKK;Ujb_y2t^8UW*pd5SJLhr_`I$lczNXqPXI z{*ASb04Tcw7612dZgfGcs*w1-`A7k+AX z6JS-Nq^L=c4vQtJV*bv}4dH6nby`r4cNIP@f^^Nt23{_m4YB#~K03{K)+RR3Zo7%B zDTb|v+q!heb_rctC#d0ULn~E;_MdjLpbI?Vk6Bvd&D8eI>IrZP_c@9AI<>rE5pxry54?v`a<~67ZzgWD${5BM>h??fkQ-J z*kvx6rWqF;l&Rr~!S3Rk9gYupL!lOVZga2m%GgQz((7tJMdbDi^kb4&mVuW?GcB{r z$>zE8U;aT+_g-sNJH5ncRMhP&;DZ24W!HF&-%LA0&^T@kAg(zMs;trht?}7c&p)r( zw!oepEu?Mg&~#p1uBXbMc^TsWGZSe9@^yg&cwYUT9^wo_9JfGK55SvMvT;Hi6B__r z#Wu7}opfGO$ZQ2tszu({Jh&Lx?~CK|U$E}7eQ3%|@3h)7;s6n%RxC zLL>R{%)ebO9SZzK;ZWiJYWmB7rQ&Ipqnmwu{H-}gPSRBU-xo?V$fVOAPi}4eY>duU zn!gbIxQK-2HOU^b$}jmRaMGcu&$F|MR7ZohdLp6LTrG!ERPN}jy&7%Q{F+_T43Tx3 zd{Xn1%%1wvR@R`ymFS><`s_svE5H-lO?2A9;anrcFFW8!GxLVpXhUE~4!>F?L+^RD zo0y)lOb~T5Yi)f|tfSoDz1C$QMD3Ke+ZbiCxmp1+bn5#8XF$v@^PX?XEk4l_i^cbr z)`DDRebp0mMIEhWfp-2ol3An2>Nlx0yHdOyf+NE^niq9nY<=k&148SN9PvavMm7(p zbpm9fAT@7@qK}6f{c6hJEf6Dv55QPE;SM{Yy}Qw+liz3M{Fz_pMuV^i&F8p4!Ft>B zp(natTJm@Qg6!jm3X^|!+N@yTRSlm$SSP1g5#%KZ1XM=RrAqlkvZki-`4B*CR zn8*nMi9V31_lL!DJm~*y96Wq->Yj7)m3=s)7ZTOnyx4R_d?D^GGK8dP0*?PO#(HZB zK(LZqH;eGqS@f2JYSY1}{R`=JdBG`bFyuGjX!pml9-iuXUCECD@D1a*1=7h^ima0R zk+7XT7ff-w_J1I%lSBY{o!E8;SqhXRKz#Up;L8O-@D??!F^o>$oNS)BStU~aJUe?l zwmtgWg>*>&M43Htm-%h3t0qr4A_e|;R@XkmYw*y~C$AQ~I22>$kS>6loBy_&hN~G_ z^~rb*Q}?@nrVG+|dBM89?V8TZKLAk@D;3#RbxnjzP2t;oe#82>4y8?6Vry>)RyDh3 z0KfM?4A`6Tv3KR3r3*;+(#Fswd|yB=dXDk|*8;4C+3*|`ZyHkVP!4)0zruK`u`kcF`yd^+pskgl+%@f(^6Epy>5QDFRp?!*~ zS+}7TZ;1Fe2+%#nh{84jY53grTm~?f5EfKbL#6inL_6%daN;Y8S9o?m0pEjgPvzyI z4(oZe%0Iv=Parr%z0-ZE21xk=c_X1Q{r;dlOL!pY!NFZ|9g`mGR}EO~}*>mYr8y&(zkcwsfh*yhx8oCZsrgo)@Y4b!vu z7Q8a@zso#!3v`v0`x8m!Hn@#CfLH{G|KolBT!-%d#r%X{)CN9iB`8cZef0V zRjK0_mkgHqqkn|@IWJ!6?M#f#B!MS5Ie3G(f0oT^+Zaydg)xOL`Nvt zfY4x$X2*@MO#R%act;9`{Lf2Rx4l@j#dL#$f@5uk8qE%neOSOj(_fCl?4#ngn>^SZ%UWHy#a}s-n zuoY`;XlBYXI6AVkS*PQB6Io+(_NyJ!n1%igRM2w$1%s2z(Ia>X*#9u~7dr}fma5I# z+;KjvbO@w<^DTz2bdf$dDv1QEy|0Eh%IDkn#y^bxGuLRRAxJMx9 zws>$l&3cmoRKXkh-@&}#SzfF+Stqzy@mgr8sZ7rj`Z#cKZy=8Evhp;IeWE(^Io9L??D8~9N<)dXhz_z@?mxkKw?g8 zSAyP))DXxf?G7@2!o%6)Yiizz&N?E9Vcc19*?G*!HJ@o{VahE(7nFl#>_PG$qpX++ zWSO2lwy4i20?Gw}Z~(00Ra-?$joT|Y@;AKy0)Z(d zm+MYpcm@zEDSBGnfZk6a9jzkub|=JUeQk}`m;Vw`4l46E3K{Cklu#S})}N%my8vwg zJR+Ikh|3?=x!y?wDG6>#2XMx^&!^8oRh(z6)Yn;fr~g(b30k9WM;aMmnr7!`Th<5a z6oBsI(?F2yb6rx~B_;|Tyw2g~0S_=Ju%ppN9|K7VL~!P zMvq?x%o=PmH)7CUwxWv+lN5KdqfTr_!bPvb+&XAlnz(O0v#DJ)9`4-=mVghnwE+ooh z=@Ghk8f6X$B=mm+37L8_t(EE1oQTbzMMXMGApJaHRHPgyHbe6TCkKXL3g0-MBuCN< zBYqXA=GHT5eV3F?%WcOEKPaarUw0~d6d4(2JUp$zcJ4p}Y`4H7fa@-R% zQA`j3Ujyrp5Tke}2oDdddz#7iRA2fzWlB(@GhyB;ijDkR1jNv3Ghbq6S4Pg)Y^S#d zgaD^C*livEATghb6RYq^p4i6hOVo_}4XD`fxuPwt$I?{0X=78~_1Jn!N&c|&M4D`f zJ$4=T1NZWL);!iK<`gP|@;6oT#JJ(C&`(T%$tDH>MP0DL=n9h17)4g)2Q1dk>`Q3|9{hY z!%ZJFTc_X5;jAL)@by}xCuptU2>W&ARHh|<(b!}lnsSVyZ^Ix)1?r~+nP#ErT0{Y% ziF}0^m46D?w62qP`{C1KZ*{INiG2~pP)MH`A?G5=O;mBkpq(sW9cMCr(m;NY+;Sv3 zJ4r>s{p8Nt&AhBMrFROFGv&3qKW_)uqaeQ)f9buTq=A_$6XRGj9_Zq0u-0yaO9(WN%Vy_re=lN*8j*azY?o$$T23ARzpMvzH#H_CJ<@ zj}*(gp-qErnVJLSc^1CTjcnGy0?@dncEySHBh8AS99 zea!~^)Gwkm2*#v7c%qZ&rM&z`q*%%Pam*Y&I7YkJN8c+NC@zWSZa zOH@y=s5UuKChf83B;yb5*_cLS$;Y&@!T-FmDX13V&auY_P5D49xMRDQ0TiHhNr}O_O+2c9#9x}u^Kh|H3$%Vi<(OTk} zT2+9EvcqT^$H`L;I3`ZprAV zn73X8nF#vkt+jT*3`0w?8$NaN*PAeiIo>OZft+4ZX&&akvBh3zU9rTZ_mCR|HEg(0 z<$!er5A>!$FtA7Z#YKV0k?S{rbBm5mG`<1?X{d^9{lFScuOr!*Owz>4HFu`9-`q{< zXCbD+UR82`lxS3peEza(MYds0$%ARJ;Mj2F<_(FzO&c8?=Lnw=i*%Y>hrl!HTzt?| zvC=v?VuU%*zT@Q*9MU$pC=v3)CD`UCS){cFLFD#Zyt4+>@BpKNaSr$M3x0iCy@^Mo zLP%TE44;-b((yePeOiKm<2AS&cp2%_0$NY`__AM9b%AtaG*x3N2v_px*L6{P6f6U4bF$T+AHyv`CU@;t@pY zjtkB!H7W&P4+wBMZD716Q&Vny&Bd5NNoZG?a^OQv%3kX_~?TY zxy(lBz_IFG+dW;06NFDpqmpo(rBL37eq-0p)UCxL4k@4knQsOmeG>i*v41ym?EO^G z;eTb98uRuRh7cpM@)WKy*}E@)0xE;m-U`CfRix1>WG)EdYtI{Ll;|2*qqRV!i1&9> zk^zSePoE7BvC$KRDz+*hRbA-&Xamc$CGTY@2N)t$oVLHEgt~=V$Cr;I^MfhxJ3dmx z(DAB!H%|U>80U$Wuj1s^??Lw#J|l9D!Txx2sfAeE4AhiO zox~jPWlE+qcoC|!|6*?pHZY=AP1S5q+B66bk7xsiKj~k^>NGcuD0*=Lj!5TK?LfF+ zLj7cW7MtSz6_(hZ>SJ{9PnnI?|Hu_`9N}rBebSpiAjkZNR~*LXrrY53mmdSl>jG&7arhXIK|^gIFb$5rFL%^ zZo{NuLA=7c-ys53Dr|H?^Zg@}NT4bR!LDT>h>IRhLU z?@%R|AACQaq_LPOof7DDNB3$3qa?LHV|k)2ezol+eT1-3gPL~rpD}S{*svsRt;B}M zF@RfYvtP0RysK&KzRw4ay>zz0QX?S{`q`=w2*L7jdiBx-qRw_$tR$`cH>bro&I96@ z&^x_}U#0=!cDjq$LpAa~-phes7)%q_?CjCbK36chqA6A(a>R5Hm>BlQ(rLJVSIBBp zKbA1rt$VLQ`HSFM@I(H9c?bOwaZ_f{iqKkCO9MuxYci&pm_aiZOO{kI5& zW*=%zcLM8YL1H&dUvPjz;>!L4Y?M+U!Zg#;WZOtWYV<^Rp(PlX`{eie&Q*H-S!79} z$hp8}4S%u(qTaS>3vlSC5J=*gd|{XMp<;M^xU$&1;@QObTFLjDC~6NT<1*RW5m+!; z$PHf+A7YQyG>S(uDBH!_5**j*aB5HPr+93iXuDBjpDepky&JnbX&HM+j)f16rGv)i z$mL~J`(Ak-Qd6a#G0~S1tmS@Ni0V9#F(9WVcfMP&_d?_b!z6lgB626r=az1tm&-Ci z$?`C769n2{zgG!i8?EzA&Y$XCc_EIbYg^QOe%Un>m-d>N!?c#es{WOh=KHhB0MWMs7^O%LiHaQ(wXc8QTb#5uSq?bIF_nO zt7c_2UMjy>+F%BWsG`gfoamIB&O%U{kB}Jn@1dAuFe~|*lltU0Rc=%eujHep1gfg& zn3Nmf_5`fVuQU{!l70N9lKsn^8Kthor8bA>jN??8|J*+?r#dI;3D(2i0gbDij2z!j zZFjB3){GUb-FRYT={8)ImnzP+To)dyi!%xo4^g2`qF9{R-P1^6JWYW$gmQoh<@+oK?t{lm2?1XJaDjH-j`K!aPrAljR8yD~a9Y3*k1zaw^QU@4Vz#3=fLgevxl&w|JD$K*w_w+OPvpzd?h==Y%r>f zt$frA)A(tYMMGtJ;;`o4PTdxEr6j^|N_&KZOQak=Y_Nt{y8k=@g;mc)$3^+pO8bBg za)zohySGD|4Jph#I5|arCWnc-8;^kXB&EV7>s>*SNzK^8yMNZdJs3V$t5u8h zi-pE=J|9+yNu_9<4%MN&Il~Axe~QYRO?9jR+(15RDY{#|#{#E9!4F#%7z#qmuNUCB zOiv~ILOTD>=uU2Ih9;!hBl*s z4Uu6r(7NpXSv@ShJ?V|T)OlAg&lKy@r~BN?1zmXg8(nydoQr9>IbxEdKEK(*`Ha*| zpnP?*As((HmKI=&SP^TnYkDOkb%{J3M^jx zK(}UZ>hws=Na0k3d@)E!!Q67JV^i7n!xQWG74y{{pM*Jnn5b~vxYRfrs<2jjbwt@e z`PiXm>%+S1LNC8;FvHF_zkKyNCvML4Jsu1@49hQ5MEa*Tm3BuDFHZ+`+zi^uA>WEr zqmm=*LgL=0E;6jZT*exNMz;+%-|IF;iB+`@HbS;3p~Ow80lyZ!at&)pyzRunMD^}F za%eb1LZqTP_e+QIbR>xtq11vz<*2A~e=lCDEz zs8rdy6y9zGGpi)@eM?2ClHG><0sR9HBJzkrep+G1WG$51(b(F+D%JY-oFfJVTf5FM zvaj|{-UAK%`}_kdkw@FQ)5~rU$Kt6s;s@tQZz_1x5Nyv-H7+ z`4;aW@DQ%ELujt*_Zh4AqhjW~Q?=S@D&EteSHdM@w(4K;@` z_bGeBE&mrNC1#rS+*4~#23vVGnMAkC)We~yjJt_sK6+AHs1SH8g~y|KYcq}l*m%RO zv>NJIJ01A=v`GwT3{`%T{-VI76U&sv8sDqH3y(~_=`@w^W4-P+yS zWEN_&_KC6AdBPWu7cUZ|3Ss)($2&AhwuEh=nfFNqj+ozl7uhh3#g)8y`*-k^6umcF z2J3WEUfZ#43_3ckd)v)-qPFd`S)%TdRO8Ly(%{1g>Qa>1E>szNhp1#T5ENgFD95XS zS@gyzPsfO?O+k{n9Jmmp3+%X#hm@Zxm#vnld9RvT<+TxR-x2hmalFFue}Tg=FNOjG z&Wc!R_2|Q1s4)URju?N~Rh)UrV#Z&OfY7@QrqSk!qG@BfVWPYbZyth$_A4T;<29xo z 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 PNF(K?m2ZEzWgPfl{8|&8 literal 91204 zcmd43by!wg`z?&U?QNh40tSe*BA~QIJks5u0@9+iAYg0*RKSNa2$gPWX%!U#0ck-A z1*Ah#`i!Y=eShEgp7YQ7=XhOi*|1p8Tyx$r?s1QMc`7MLuU$pIiiU<}Ek)+I3JuNj z!!$HY{`qS;zB461_XPh4+e>QMtJ<8gcRFQjLL-05{+yMKy_Nat9gZfpcIGx`5Af{Y z$0NkG!_40PoSiT)ul4UMcx-G;s>EfNPh2n3MB`u!EZ*F+i;(D!V_ZjxYZ*^NFGX(46;u@b!M5$S(*TyJY-+3~T zB)045Koh6uKez1`=HFJD?>6&2v>~~x{XCPc;iNw?qZoq{IC+Mf;ZG!+-qo zz5YQ<0iD1ZF_)(@V`o|))xlo~`+b*pzP)?Qx+y)yaSfKAN3;1b{uw?h7b2{_$B)uk8j$9=`POzJ+n6I)m)CoL zQ`yFE<}0_yue0;ZmnT=2t?nJIl+e`D`k)%Z$;YR1b@|%rH+L9R_gHQGlhvct;$NEN>la49vP*k! zZ_0PgQV11|{giE|D^e}n7vj{Sd}|ALM|Zbb#+sTadB2AbAMV<K#jhBl>-4}8=- zd-iN^L$cwM`JFp=rlx$hSp+jTSoY&&e7`7!i6;(x%py1F{g4v=wftf9@{xc@cYJ7d}IATrxE=G11D}T6JHQhwEth!2oeL7fSUC=8KP_)GDk@es9XRtYCacw5mb?omf_Oskq{#ctCH;*LbFyBxZAn#? za6AYf4|!^FfiGCEpwZ@&>$U}3$) z>?4)P6D5s}+AS?D7FAEKRfI`|J*o`k)*Y+YwPDxIw6e9g_b)6gbeZUnjfsg_I>(e? zeZIGry)Ir;5te6B7Z<=%V$2sS8^ohia4~z;Rvs>CX=z#xHJNzLWQB9y(us>kP6{U{ z>So1RHKy9y+Nx9p3kf(4emXvB*ZqE{daQ~hHlp-_KzzaMh-~=-fxhf|+E|19oQUtI zHSO)wm#?AwvBH`f)ug1PIJH=+pw)+yJsw}*ZJU~&K0#f+p2_O|6SMb^j;yS3{q{vt z;Or+YSjEWrxH>kRcI(!lN0snCwKz5Q?A+Y4qM~DxUYo1_S-C0no>N1TKC!IYB>mju zuh+BB%Z^lqOS75Hz}(ehRamoga!Sj}Wbe=msGK`@?uz*OH@zi(Y;{rc3>Pk3D8Yi@ z66(gr5s_gf#??4c0n>`@W%&!P`d+uT^7iIWwy47Vx!c=vhYDoRC9Y7F;MPf(Id)^6 zdVPX+XGcc_y?{k`M~PpcyL!AvolW6fRGMj}PEx>bY475KgIjs@-or5Bd+Xxa_PUF{ z&$ctgW%371D{8N;-pWG3e>5^I>NbuGJS;DzvfgUBI9k5c8o@#H@zHA?xclvG2jYy1 zy>lG;G_Dvi-|i8xtdFtpskU`=tcRH~KNN{&GFZ~_qRYImKC!nx@!>@`x6aPaNN+|F z4q;)PESuJPtUDgR!4Bh{?(kDIrjvRyBUdU07i)X{W#!*6&4_0RD6tg3J@6%^vOsRw zH~&CmnzTu&Kc&_QkD22%6x!mk;3gz2T>A0j$JAt8&!P0_Qo(dDCk)hPdZdiEb6_B` zrzSeyWxSVu|LK2-o3`Y;#>?I3i_^;fbFfn zuq$-||clTA1ZB*3M{K>X?(Q;a}7Pxt?S_NNIJ$(4m_4Uk2 z*j96_ztnf&R*&R~fsgTUSC@skNmdFH6O~0j+g7r(EGTR9D;Nr%oFl`sLE+S? zQ=U;N)4lP@#zscrIJLft5D|JI+X$Tui%9)kM+z0`AzH*~u>0k;)g<(@h@HPY1v_Tv z;ZYbWm>D#h$(tF>ZF+j@Dv9>wQ(++VNSr)|1zZvm60(H|9KAz@3mQmIT-J;tjK4S2)x>i;RcLgjp zij4WT8M=)JM9$$HucxJ@RpDF~-UW)eI)=N?P5U&HNLEx|Ur#4&Z+2y(=*D^mM@Pq% zO}lsR-oz+z@%uS)1JlaTjP#7N%}u_>7pHroJ*Q>)wr}5l+mB6Ar)eFNC_WQMYi#~d zz%p=W$sxCC`zx+@jjdYp8mk@0d)14os;a(shx>3@<46PmNm8(3vLEj-99&~#GjzP` zqW_A*TfV-3w>M>2zQGgS!CwY%Z*M7tuRFO;L-cT;H%NG!wmbFJbMH2KbNh|!P`;^o zExQI|yX>la+F?s8n{?C7PC2`{=)7sVzLsGPMe6e6WgGKaH|>$z$Fl9ldgjdZx@5!F zx1nOL)WHmCAExUOON}~C%}fj&VA+=MGR_B#di3bgjdxUw_T5$p5#EMW5%>-^u%Bfc zNvrQ|aE_i$2$#rjZ0wVTNMvtgR3b}vPnuMQioKYbZyVjbd9(4o@-wooCr>^)#drVq zdhzeit0&qPLOjA|%m-J(WO%ozo5~ICPl4H zH&-pIm054uT9Dsqs;jFTz@x8o{ZtGNDA19YmlvL<=rK3mU}tKG81?Q<+5-X0sJ@0| zT?2P__fnku750$%e4ZEBWQVzF2lW`GBiB!vAsl*E%(bn&exoiyyJm#t(&mNZ|J=AC zO&yFr`Qi%6ohBa}8V**urnrn-EL*-j&iUJyKtUTDn=*bqN&v5+I5H~7jva^LW@>|< zvd0myN?yN~%*@OTbkM~j07POxe9$6m#g4kh^<5l(v0`N=r+S=!n|oefp8e#YexiQv zL~I4amMwcIwoXn9l?6dO`qhA42%Zm@Dv|)FhUig^=ZUPAApa6K=S- zXy3-$xsM+0XwJ4{t8)F2Y5j3&Uxz5&lFI3Af3061G}bZs^+myoNxy?O2DH2edaJkc zq>p*tx>chnF&6=Q&=F@w>J5yJjwZOIt>r`j2kXIuSxdv%DXaeaOG!!T{ekA<8VeW{ zyuc(E0oHTgi(e@N~!K-ZMET8e{st8&75pE9H)3>{FYFO-qN{)RGH9hdKino~SME~xs?3E!RlOCZ9 zt$|$HyVkE?-}vz(r)7P@N-sewKVZh4Z3m=^eV8@n!bF&1_NxIsNNlINYXJfwV&C}nHwHk zfpq;?nsXe=YzL&X;ooOl3ld?$1jzgJ+mRsmQ8A}J%~|P_v(jG|{H19r4-VQSRf^BZ zZRIsk!(!9Vw@c~gyQstTv&L4gU0W9-;^e>c*mdd9$y5>K!EsdHF?-BD29z{^ab=m#)00P@%n`3tqnVoY+q^z4BST*0VZ`xU zn!=SH5}cmTIC-hW+SQ`SG3_>8a7Kp!oQB9)r9XQomUVvK^`b zIu;c4ai^QPFv!N*dh3RIlAe(A=bp>V?%$69mMfzK8~;|!%z5nkn$(Ppy5Y}7+?Ll^ zUbhc+wIWtMTC!rD88Rl!AwVNhClV>3r`f5sE?CHp$yE>43@ZiEM`5^D&h|om>+7p2 zBS1ItNK!uiqeBiVp7QJP4|8P4BMk9Suc zL!P5XN1I+b?cZpnfso2?(~?K_?n;B-yoAhIA6I7Py7{5W3G<;Jk!IbpA2{qD(k44r z{(#Tq#1l7cU|p(7+1Pl4Vc~mTp)jc=y=-H;>x&mJ_CILTQamAY@%vMS;6smv?7p&S z(M_30o49O9HLXlST-jscq4qHiIVQ~ifT;qveh&W&|D$+zx%We@God%GUcCx8je)C` zS_#IhMk_oJcgq1dTlm1HOMdXV=tds^&G*X1GAN^2U-Q15dkRd-={7yKGIU-hPP(}e z1<9x8W&rbO#5D17p|G#m8dz&%Q&TVMO^^Pg-F96S0U;s!SH4IApOgl2#{=xfkpcs; z5GaBa7_wpTM{^izoL0)|xVcXfiRsRYupskgmY49)4$0$^lIAdGi}#N%6KH%q8THs+ zQBgfkjfAI;wZ#_I5uPab1e}N4j(f=4&|NoqkhsEQ=lqa3;^@nNR`T*#Z3G50M?ocg zuI*Cf0AQ)lT;I6qx0p#I)D2B3M$%W@d3boJ5g)T`Bt|osLVMpKi;evA3Yn7GRS(Ib zw>CEX{sB{qsgX|439LCDbuKjmxHcAX_W`!|N&;%}DxjMrU|%s+M@`L!VlDxQJ5u{maI-5g59O`D{P0cS-!h860{x<51-4Q zpYHSd1juv&iNFF?r)L3++g(Bw@D|SUDZ6@ZWK}D4cXONS4C?)um5f3z91*;%xmlke zF=BBj%*j)hhDj9Kc9upGL)mi__1|e86x11ST9Ob%);8!9g9d zdJC7i4w_f-$hm-uI8MuG+#CgOw1hO)kc>P02NoHDhU!d?uwJmE>{xMXLocH9g zN@`Y?CV3KGgM^iv_H>tnDd?R^i~83se#VKLh!Z6xB^0D!mkxIZ1_q!dLlR;Gmz9O7 z%gEe>FNekC1BS#I78Z!ljj0kY3Zb#4?Zs8r*9+G!4m4$Ozh-oGb)7@$M(Rc^fd`yb z{WZQy}i4&+%BXOSW$l;1ym!4&3n_~qJgdO7CzkgogHv6rZZ_P0zrv{vNU92h_vO1eE z5Au4P(&H-tJ5gA=L~13Lng~|Le0r>Bx<9Sb*wi!{yka+=T;sJDZCKBI0ylTdCK{T< zIw$#5PD>t#57Y1lFp0UC;WxZ)-ju2S(oVkT+my1Lq}5?BPcN?%Pu<$ztaZb)xeR19 z>~$v>$Q-!0cs2fYe!UcE5SWR80VInjU?Vh8-1!8rB3vhpfyNI??UJS(F!UJEmO1bM z*e4F{)QEz)30>sU#-=KA<&MUuKR%LtO(SEcwd6M=93k}M9zT9?_(2i<4xdwk564k# zlK8R5ucYbxk00Sb&XIK2NjNg82-X%9R9p~UvCOylJ90zk(2&gl-M^RRRfDTaPS8#h zA3wkOFjEn3qcY3T_xbawfHnK~@1LHVY*o*7w8kFmvMw=Lcbk@FS^Lt3Yx}Q6oKD!m zPRHiF@y!aVSIU)$lfiB0=@?`<-kj*A1#b25@F<%cSG=|Ot&!-xiPEB?qPS&$Z{51} zg0u7Ri=s{YHGDVU-ZZ=Q&0qiiGKG#Azr2ci<@}Z6Q&u}-={RFs(|A;0?CSn^ss9I> zn-XAoNiWY?85y!FPCb4z_*Jm7FbQoA{hV|baD{8PA5v<)IC_UbF;cyQU_=Gr)43hF zTn(vcyo|T-?VC4JguVc;)$#Rfpp{VhnY1V2;eG=b*WdE=yc-e{0+uuS*|TSxbJrQT z-wyCUWn;sOvct0Y*Aj=(M=G!cE-IlO0G)*V5ZGv?5I8F4 zb&8JAk8pyp3wO8X(bI9V7lUMj8|NkeT+4IWJ$1B)rEb&h#7Q9Xl~r%~`|p!ejr-Qz zVU{om^O(;DamGS)Rt2WY?=ofvE1JsY zqrXmIWl4R##{B$zY6|84{Z}Yxz;To9I^A%%>A4og{raiBpyt8h2C#s^Dk=5+wK<}9 z)HG?dQ%+yQBNJNG9J~$T+`t`0fMk%N5~jH5yPlA}%a|e`9(rpyhUbkJ{(rr zuc4CMH5Y=F-UN;X5EHQau#chw1YzItc7q#ATP)MTOW*1H@Mn5a=W|acT0IuTs#KX! z6%qSDq&9qeV;2a7*U6XDFQ-svVa~Kj#jtXALBaZ_^VHV>J&BBqVz(PDrM%WUqOwn6 znC15Re;3rgPY??VsAc2h8_D)obXev~fERGX%BEGD_da5k4V0nI&d#z>K&w&qu`L8} zYO3WqpO+0=F*+gfHv>aFlDCexhZgcTr~uwFM=h;;vvYGKq972kbh{3eVYVcn4f7upfjc#I;BB<8;#JCml3CAfAtFfuYS3+3O*&v$!rgn8>$Hop=U28M^5^=&@CP?K7p6riD& zsH2YDOL7w{MaZ^8$%jd-HeA|gbKwL~?B>7!egtHz`=+u;@a(4;gxO*Ci|rRH3`L+--$_(z$v=UXbFys;ubnNdAGNK9dvQD zUBZ!5E8B;Ll5qn<0kYrQ^3&I7PFlwfuJk3>HKv*n&}Y@a&#hFj0d9Ur)r zt{HMkxas1lv^_&%Txq8?f;U79UTca`9+aX+*sOC4r;XO=w)&ubCtgrNAhqu4SMEG} zmF7)5sI`xdEFoJtIoPav?%Y#h`)=Qpg=k>-?mT9XC;`V)1U0S-^uKBB+r&iu?9?bN z6H^i)anTS!XYk{#ygO>iFaUz&#HTtoA)b^~Rw@D=r}iIQbBvJ9nO2QxCdL3B$LnUD z4KxCTiw7rHYRsoyAM)&c`*od6t5`1W)VH9QNI%90rm80-G1Gqlbb$gmM-8M9^>j03 zux|R`FzRtZ3=Ug+`hnaYZo>l67vBsF3?7KNW=4Exe+n{Z-S$H#8&PwdAb1rGCDNV* ze)QX01S>_8i4|2tS!=5yf)0r-+%q6V;zTcuyhUsSzd@+}DZR-bU*)F6)fFvB3l_DF+RfP@V2ME4) z{W_@?IaDHUvXI)9R4~NcV3hbjS?ZUqw|PLdxz7w7WE8SJj=Hg+9n=p#zbq$p)tOPm&EgS>SBG8nSMxe>~kAwlM#$qo4Bw~@hB2YP5kRA}gJ4;Wc z!~&?JW`5(he_#9OA2Sd>qzQAt^jG(OxOd-uxm7;vf>U9D5X&tw=~I&G1>fl6tEsZGj%NMjQb53F=5kNjSP_mcYd%7Q)Zj zK+J=$R0VxcszChZWS?Kj0Ca+e9osz>4s20xb8ePNE*c*?X=mU@M3eA$2)uu=|u-yQYyAwEm zvoEha<5VKOP;f_qbttK;Q(sHZ@0**OOG<`~tS3ZOnSS}7d4s90gx@JT4r;+o7ysU! zHf%O`;zUn~9h~q_3rTzVq=-MM_fX@$$j5l-+~Fffj^I~a zzK$+ku_7Mj<;o^BqBmJFi#jWT#0x~PzLR$IW|p+Zgqmo@c(7BYp<=nVU*E+#wOo)U zLCDy+rPP|Jxpet)=7$>=QYe`v&>|ExAYJ!l)fpz8YpT)J0%{(l$JTq{A+N#eq z$6+WiqdjV+=pyQx-~np~D;cHKum&qZPEjtsL8igflneHWrHw5U*-58t!k$vi`0g7E zK4hf;V69rYlC(L}(K2!9t)+xZ-KoY7Z)BW&9-|!2f9mB@5 z&H-%F?>l)3RbT}8)3;@1ec4IB0_P6vw;h2LsiPhG7Ru|yK)0p4Ws z;pt;xr@;h7#y-%5qzFPc1|&<+qXiUk(9P^7-FNDjq0g^8H*sh^Z9AafisT6RS3?Ti zMN5{8Ix_mMKqHO2@2-rBnOXOyus3^AdVz_auMx zV2{>R2w5!>J^Hzewr#`7&R6D3mi;YSk8T>F;y~6ArXO;Jt4NIjXiia7ytfObUl=`; zVODh%xbH-mcs}vnF!yN+PDK-ZHNRuO7TSWH_gC+r@&n#ke|n~DQWjW;Orn-!Zw_V$ zx%n8FvKvqZSoP@UyEw>)ifUiJeAx?hZJ4+l(@eS-iyL|fgjg4!|8A6F(`tY&W*t_w z3A9hNPiYV@A?{+(pafG>mts^*Y>M2aaDF--bQLe4wl<<;4H^n2f)6((>i&vUZFTnT zEo;Y{KFFSz3I-LgF_}QGVScY#B)Z}G^UKp_HPWg38{b;p8`sXR73pnrVCoRC-3jY~F;_cyAN5(k)s;A%(>Tm!{X z1VNkdur}FHLOo86Aa+1o!i{vg5#p5i2KJU+F;sLKJU3cKk4+0qe;N;s`HjNd!Yv2& zX5YGv+t#b*2ahvlCmW@B_i7~=osg2P*?TGPD3g2YDey9$(_DrHpGNHPWgQY%acJ_z zsS#o4;geU;Ng7((Do-PC!u!IY&Y?{xPl7Vq;Ox#cn zECR*Pjw8BA_nWMOpk^urj@q3()nu70Hj@7@d7$OvuqE)0qWPZ` z!~gXUe4hYV1o9f59iXdZ0aHsa;hvXaB(4SLY|-Nz2q;wsDl=L!qD&NYri-0k&orAVU0x@V}bT(YS=*`7`rrbxx1Gk z8$Kkk^(unm33xxSINQ{BVAyUHi!v|%S?C7*B#mq*r%7Y6p<6D=%oD`SK*t0$TDgC2 zAl+*GndcT2*89kFHqG%i|Fy+$Illlq1QJx=`T6tRM~R?k>%G6fL_NY18wN5S=BaW> zJ`X0`jSHI!JqkH!SPo)Olx{ zetzupB|8rutNqfjrFU9dlQG}Dw&{HJnpHcJ|3Z2%D+7B9jwdx_=dtB?7)3PDJ_!g9 z5BJ*2n}q60*L&?>fBCWm>{UJrB^{WDfXxe_KlEG7a6dw*p!bl0 z#8ozrI3|m2^t*M7P^VF7y=qN_h`DOOZxBR#pn8itdTo_CYB-Vu_$$pYsdlgFNbCl7uZ-@E-fXXCHZ|JO(>N%IiP>sF90X4*on;Uuxhr9@Y4OM0=juV8qTW$6(l$ zjP1TP?9*pU^G@#y%WK^iDl!k=i9oG8*jY5TNYpd%m~#N2JwZin#!Vpn9?L*b2Srk1Fi72okA zNI?Z9M^=ajt&LOXY|gu&O0}OJGtZy;`VbD80yRYp7#pzP?uu@$AR`Dp3X5vPtOBAu}RVga6eb zQA8Jfja7|CHXbwHH0-8C|@0Vs#%W|q6K4tj&!B1?k}G_aLenC%7XQrz{we! zW}n>T6WSc+%2y>h{0n?D!Xvji*01y3^XmACB0jbmb8D6hbDGhW^MTv-!uo_!_-i0V z*FKS4O{u=QVR!neqU8j&sYc1&Mbuy^DK3@10E`Ucrf{ap!I{cdno1=3JMA!)wxFig85KY_zkpXsE=$2 zxVSK4jFupW$NVg5MUb{TiWN~o)rW%Cwb)8Z_0v;DMDR*zd4S9+-~}RKAQ_eFk1t4x z1hJj`h!|RLmhbNENAmT?VtLTJfDY(GsstK0B98s<(JdzymYtnVWRRpR2Dyz`xs&0c zNAClWDH^C%SYL0o!Kp@|MM{=L;szcfZkME&3>8p&>Xj8VI&NPVzpcq@KrvPGt-Uzo zOgX(t#rB14qAxV8@SxW2B{r<>>k&e6I7LcGeZ`kk{0EAUG^XiKA7D&pdHq!D&x+-}of#yj^j~yc> zO5|dYhz7<6F;xu5@D8q~mMljtt z#tRhG zp`zgu)nghQ^jRpgpV?Y?ZfptKKJ^fCkWz&(5Wv5r8)$EDpBgN&Yu8akm|FP6#sSx1 z6L)MR0nBbt4VMNBkww6ogZEyIxBL=q46bjJ)kC?c1)*pcw(&kv*CwM6v*UOARp6%>jTQS-my*2Otg&-4_QiFY`%H(FNgjQ%3wWY?Joj6a!Irz;-L!% zYSR6y=&vZ@;pus+>O;QK__5*j)ClUf6BcR#%B5}87o{cDJgat;yfAhdG>>5_u?p;O z|56!pRCUzZ*?F(s*LO{s)(-(vPn);mi_V^9D^{$a037RGG0H+S3y})Z+=Uu3+EvM> z^=S4&0GGB3>KbK$KV#D%=a`mf=Z~RipZ@yLhUjf6-)4F)h*@WA`+*cm$S8Yq!+x_Xx_g zP{4z3Q6teGF@=?~jnCK@HfpkA1Rp8mWvKcY9W6~TaOmAeqG%VZF|2CMwv)y$$P5d6 z%;%9jL3-IJshZMEeSl{oiG~+-0V$sdHUNVO?uuxLi9){?>C)KECR7TmcbNTto(N&U z8I$f;$Fdp4tcxnm70FC(gP^*NpGAo{vBq9U=XvxN<#V>!`E9Nrxo?L{? z2$7^BgP@fXgmz3HCHC%>LClmh5l7bgoq)Jn_OqjLS_<9|p(|fItf> z1)UY^nQEbs+Q_{pOvLFdGJqw7+N+=nB64S#F-tcn3uf!q0)2>#t3VKKrl*fXi$|zx zS2yB`G8pr)-pIJk_S0#5NUg+6Bn zRk>nvY^)Y!ZU>5vldZ_2#FmyVT`D^I1e2J&VAE<52P;`Gel&COuGr#H4d&CyT$aeOVX{y@Sl74=o0m^Rgj)! z(|K0!*e~U4|FakM|7|=3Y&7cpn*XpjE!)S@z$>h2E-}w0Rp>InE{X&^eiTfG^?_}VNj=ynB0Ko}`7`8=fWuvZC~4vq9{w!8E~T3; z)Xnwg$7Ur-83ceAoDLdFzMf65BT~=lx%e;N+i6r59#c~tA`{XR8e^=I*OrLVu-@iUcA2)M;GN44j?~Mjy zJeV_GkuCGgKa?du?iYGg&C37!;P$vM#W^lYoPQ+sdcL5Xfr3H(+UraAUi$f=kR=>9 z9Sl}Zme1ep!l@>>hrxlnN_~jdT@hbeN*5jbj|-PtRwPtCA6VjW@N3e=;EVjJBQgQy zYV}Pi!*qWr0Ou?Bp3&WD7SWJcy0C-75s>09rOw1^xYdx8t;la!Zk>uh3ZI_?ROo8G zMS6nhP=+TJ@*KmF`pJsjOh4PKA+SN+Qk!F{y;GBOECg`&AX-ph%i`w-Y&3$ zn+(z3aOqEB*IsH?6Lp6bg1D=;T@{HapZ6jxG$xN#9 z8F~$X%yH141oG%}6z!u92>((ZqEWvf^?1e49pa5o+?o~Fm|Sk(-Lx}XC&kdT^Vn&HSVx-69Dg5>w9DQ$z$&`@k@;J}(~d}auD zq<^uUkx?CORYc<^TPvvfSYja%$3<~SA1vl*3y~&3b+jTcs3I~8M0CZyR=`_m0;{5G z8~=QRISx@k2iVKZH)JHvjlh zZLATy7upRnKvGpm%T^cYP2tTy@KQV&5;EG7m6ZjxLj*oi3(D@2yLfsM97n!=Q^wiS zZrZe)eSXquqF)=7V2$nBpXaqhAa{eqG3JDs!-mYWI@i|-lzo(IZI}uDQY?FOu?!zV z%H92U*+;y*?znuJ@3^;|FcgG>mGWUq#DlOS$%DJh>69Hqt4x-PY!eNzL|RhRFSpha zY>aPZ*mWrongq6@>g@d8uJb(h$=-fUmGOW@?OsAtpvZ0bRhwHPkyC^-(S0S=9u6k5 zt?eYNO&%n#;`?Y++XMy!pgkg+i31HZ&mn*Z3JcOVB~8jLJbE$sXrcoRZ2yQ6JfKRV zFeCYvh`}H_9#6Rs^i8yU_yl(Bs^>&5sydvj?I1Fc1=0&atYCw2Etlk96o@ZsyQ{*- zAr<;jj-#qW3gxDd#Q^@CVfWI@v8P}LKnX%?h(Ab60*S~BNjmULNuh@XfYE!vTv8kp zY6$HZ!lS~hA}BmDJR|(` zwtdSq_->+F&z|Z`upQ7}_{h4|HKhf>|f@(>)BnVE%x#g6fj=b*cV5`og41fDSs5 zqLRT$$R*-o+as6}!lWk@$cA3#zr;_&7EtB2uJB0qT(O6v;-=~)(@SsE8Kd5ju<)h99-`%#!C*QWyOMGG0jx;`qN(ZQI*Y4fmOS7X(he7|B zLgR_X6-w0U)`j`WSCWm)to!!ut8!G?+A@z(t~yMC5O79B`Zx!5Oztgp^V-5~F(pJw z<1f(}Wc7rS!pd3i)tByDgEnu7xSI~JnlEr5ifWU_FbR)&wxrg(wQR0eu3j}k7)Lip zJL(gO5h$iG9cI@o_lY%@L4Fq2chI#rd@r~!oZ1%(Ff&c z5Q~YH4=Vf6#CMGqLXF7})&6TCeX+ME9&tYko?Y_d#SxrgrrZDv1^Ls{Ytcez6T47t zqOK+?z&dnPGSKj;i%~uXELjg<;C4ev%`G9}O#jkKP?q|uAxNTbRd$+5S=1&r1yKhg zH^q!5k<}`?^@q=j6mIrdzo2gHdGn?chLf1G4N9&?Utw|@Tru>kOX%D5>YfqFx7G`; zxsJ2>$E1^(@9sP{Avn>i8s+n#)AEf@ruoukzQ!l{?yE%5n*qRDZsmlB7H>Hm8iWBb z(x)L36dXz51o;Bvb5xf9UJ!rT`mO-8U#h0(khWkg%-NL~%XyKr0i_0+iY7VnQ7h`+ zP1X|TUa`{p(RegCqRlU_3Wo-kI}{eXS|Oxg~Iwd7)1>$B1&S?%0@m3Vu29t2pm}_-z9@+O@EfdeP8}(Ib6~xbRkS8 z7HlxlJCIpXLasvRR3yD+9YN%z@C2Pm3QuUBtx6UQ$*3@DM{P2?i99(D4-{Ab76C@8 zslY841@jX~rS~HEfLlf#J_c@{=pcxWn(PIUO@TsKm@-()D69s?30!*c*NTvM>@quk ztJQ5Xgbm2jH$j<4RHk>oCBTu0ou1e_xVz^L)ScGqEMRD)y(xO@2NWk z^jegPoYptISTjccGmLiM|F-lm_|HMiP)U4yCHauTBOF@}UB}q!w*j{*%vX2=ZY#c(#@d8-qnOgffoIdqYPNh0wrenTh72 zB8eDK|8PP*2%vGGs)m_5Rwd0$8A&l{{nb{Ki9>n8nCJL@#J{+T zLE5A{Z0K>nb-y~_G0L(t>(n3`@UIjJvy%H(xq@ZVe?~@3Zh5PexC&rDgrE)pX~zvG zS|F+ddrx2_XkHbrtI$M}3q(a#tX6SFtc4(V^ojTo?@<^EnM5VyAnKRbB(MA5iHswx zub=9c`>^dtw3^Q!y<4NxIZ``!(i@w2VDi6KEw z7G13(8FNDeIrft(SLRw2S~#F!T6|yy$3E3Zd^u;*Ra7Fj{Hd;D6{t}erCKVqe40up zqnn&F#lkQmzjtYEO26Tj9JwW#>)(I3Xjk8@yOvUY@J2zEmnx^dV1L3Jbp}&& z4`n7f%Z&CR#-{m6NBsgK(a!e@Va#)}qzrH-Z?J`F1^@{&u*jxNG|l z@5z&sQr{Li+cLE&!|?XA7}m$KYPDGyuN}Ex8n1AeaqS1eHc3e}IlbFkLbM_b73Ut9 z>2R)KSP}46>nM3pa;OLO4Wcq$9tfuyS%bofm4YE!TgR^(ICpU0x_#T9g~-Z<$Osk< z&GWSV3}@DU5?6978?WmY3*Xew`9-(m+Sl)M?}i>cwYkD`T<>Xm*RSKzqM9fATJ60g zx&*$I{p?vc*k1IQg6_zds_pox+IB#%e{=5g>g8`vj2r+~zk4^wWjqe}hU*#`ae~&P zwm&T~4AO8~is5mw6XU*+DSTxLiQl;GM2xTE&iKwIH}kAFgN*Uv2fa^F(YDjPv5Qgd zfUA5|#!;`wcpz}kkTgaBd-uVk*c};*_F>G0)zsAVzFgG567lxVPFD18|CNY;S4``B zr?DqX&TD_MS@k@nH!CB|C7?GlqpRM+F{DwWgjDnG6W%p}w{%%3JdQjTy3Z0@xW6aq z_3I~4S0=ApwWIPavOW3{${^Cc^mp&sBL#kwC}i)uuTXrYMcD=knCR3`xNJaw{}UgD z3QrqXxa?GWQhUijZmOb(^lajCSq2$ulC*w2qDBNnYjPAixeHXbiXM3!KG2)#lH2w%?rx%#SI1vI>l&P- z3u-2d3mWF0%}^tB8ZBd8O9o2^?}|w#trYz^l}B#rT+;l^=@_~wp^RmveOCY}M`6 zN)Nvn?3Tc|Ugn=apPvHl+*tGHp)qtHa+sYAscIsw)(*Ul`i-Kg+Cq%O&VO#}dAwNC z^3>a-@)G>|PJ^v?SprJ6PUN2$S5a<#qM@*2_TZm43$0E&RUcOq&u_lKqJR6@UP@`t zeN{2pakYR1b-c78A^2|@`ac&_s*_}M`M*}~UsbS;i!$Ocq2Bc+q;9X%?#9Mp2R;Ly z+gfC&@W=V}wNGoRp1HNB4}1}%P~-FCTR3M!TX=>uiIoSha~Ax)*fv^+sX-I@771-m zg+%09$2}qfWeswSw;cT8t{Lr%DzE+CgS^vZ4+cKl2=F?G4i+~Du`KKSOC@V#vw!*S zhXFNpkP*i$uN7luw@zQ?dKHX`5c;w0NH!7J2pQ4+d z>mQ=eath{=((`BO9C;TR8tD>eTVDzeMnmB*7Kz`R;Cmg>Rr{FJx;g+1v@3!S#MpUO zxQI3MrKWx6JRPBb`xm=FBXjlLb!~}|?-Zj+@4DuDxv6O>sx!L=#tlACc35>;4LBe6 z`t!Oc^LITW(E?^OI|g!d6sd^9G0Ru1(;x(9@EYgy|B)Ux74P2VnU{bRBbi=>m8>%a@r+HxMJs_mDRT)S7|@cm{!U7>9!8ULIB z>lRvuNcNfN?wPhB6Tx>Qwqw<7CgRFhgVz!hU|j$7j|mJ@n=Y6~FSlV%SiJ#nS8-U< z8>e_*eB}H@iY?#s>EFwIF8j4&PK186i;i0)TaMb%)f+wEITMfl)KFL+!So*=ojTF4 zLsVo9;YqSooes;#Opz{c>ssncOD@&^$H6ZJPh9s@zbJkFlM6)!mFIFzx&*{=Eun3` z!oQi?OKR`-t>Ip&|0Ko3Tisdi8T`pYGa^KI^S};iU1`hWB`Vy1&hZ41`5h5iZeH0b z27ROWHGyYePIk%%HIR??`E5uMd?{bG%7uibYt|{$Ac!GjYmnA*++ohfrVlzIOv5UV zep^zk%=9wYsw`5KpQ`~FLZa%B92k+ zD~`D&HT>X|*E{zp{brvzKiXaJS#Hf7VfVRppb%9wehVnB;fet_R1Uf$o&bCUH` z)hYU!E-gI&E=p-z@R6{f1--gd^)&L?e>m!dlXKbQ^f`7hkaqg95Xy^W#@ws9xE;|t z{&Zj(=gTB@kR8VXQB>CXY^SF?q!c-K0=DCu`FnMjwm!#>OJwVXFKkbI+P$ywfmL1R zIbAoU{v|?9!q^?(uYa!H>?l5)w|s~$K|ctuJXz(u^}VmxG5=PPLh{jDe}A;h5fapE zLzQ#3Iw>k-D)j2*rM2*U&+NDQ?y^OOa`EM_CGJ@E>V7-_bY<1_&hO}_3KiOtCC)R= z!^ZOHf7{|=zFW6F)xx;l(!b40QB)?W&2>rVMDEM&iT}FTfc3X2?%1Y(CohhtFL&?v zGf%f$ZRby@-iPRt>d4g=@JAv?rMxZw+rgk!TXR?P+m9u>o8lGK_P3s{_g)yj3x}Mw zM79i{_!Ac@_o9!a?BQLV*LHy#vFE~r?$MF3vX(b3r6n|fcGmQ7BxLc2GiL4Az>6}m zx_0Nk9K!3Sv=7qJP<}sRTdaPztEB!ycU;@U7q;mRwND$a$2xj9VfAf>zgPcU^^p7M zGvVZ+g!sFfodX?-lsdN97#n5F;>E*%|28+@;}3bQNQ;*iu_HKCNFegfW)p`>ivcYf zrpv#bhvfy9O`mNVfk@cN7f|yd&ZzTq+bMFG*v0Q|BqPB_8?Op`B))I?N6yVqD#@oe|z(M>wi4tfq;g4aYh|KA2M{&?`0+D9kL6S z8r&8;Roo>@eel&h&b@P{V6R_!nAzyHa%zM@q)V*)W5FLuXnEU( z-v>Tinsae7H78-{iLdTXa+1R*iqtt>xp79me`*P5R>s`(a{3KUb#*cEBj-n|B6|JQ zUS-`RTe0W2Rpi+UhPK8i3VJ+=`LGw&Q6jrQ)ZR4RGvr>ke_Mrf?O0DkE z-eXrXiu1mUph0eR=FhD*o-R)z$L%gUAI{QKo@djWW*heFDI=Ete#+{+-2G1D-=cgn zI=^hWZ>*B6l3$ynWC@?NlwRU{^!JC#)DXBze6mC1X0TNVe_r*ux_1UOO(`@H`~KW5 z0p{GB5_^M0G#@{oJq`B~em30@o!&J43(Iz}E-hXf-`wPwv&BI^JKxsQeQs*A#3jwY z6fgZ7^DN4a2AMyfSVV7Voo8Vj|G21OU0-~&A$!yIL^Sm34mla+Ykn7_RD;%`&og@Z za_~lv`zJT`3LS0cfO#3gDF3OMepJEbqI{~OLlr?gkD*9<-^~%;IoKAut6_<+aAXeK zVd%bC{7U@W0wg@#%jO|9js>F(67nwEAVez#GMD90F*suK4gpj?docqu{k`3XmVsgB ziOo+0P9x(7pi)bH&&tuOTU#yYTzoQvx7q+w?D|QE!iL~*JNw=Vc1ra*WJ>9+S5_Sl2=C$L>y({77wTsSF6#bi6yE zEHk88Vn1fIV~MKf*BfI9KLkNN;r6K!cmo%qzR|5C)DZ~i2&YyzO_V3la(!4`xb^48 z?%@8Pg&+3-w4tB(f2Kyj;u;%2l+;uma1X=0jCZRO??fnU2+&f#UQct-psHI!+H(AU z9hC)hB(YnD#*)fPUga6^o@1E&Cd~_?jbt$=qrqtX zlc72A<$d668i+0)&qcTsGQqdi@Zw`}w`uZHJo1vms;nhH*Bi0T&Zk1%a}BH7+i0aL z6TBSmkI#D8*F?jIp zN+Np{)4jO2A7mQuS=EXf+PNuxUt+DDCAr6sT{~$>Tc;n#>KzywCQ2w!9h>Rs$U8yE zTeg~VosvQ8tEHWhmu*Ei^vCxw8$cxfP`$>;+}(wN)$m9~h)2mdBcqs$8tVyv=MI6P z*1}};l5{hRUcO|ZfKUh3LwPLXmb#)LqkjC`$jKk$+~0Zs+cav&YvBts5$+PBxo7Gh z#6l+k+UePcLwHMO_rt5LF|sKz^%82oM+omY^%eu}Qd zpH(|SC*uUDCp=&nu^_xQle`Rr5WMbFom(@kKMEdse3S|qKs@@I=C5vUATJ(pKravN znm4Hu7)6FqODEell86W2_N_yw5W+o$T5*s0i|`+oA^Bh24)0_ANhkB7{I#hw3x)CC z`*wAh*{WSA9%*v63199yH#*nk{pQP(=&i%8+ZY#U zmuOnL;q1DG-k3UJIy)t5$7x$-Usc}|hx}zyuGKBdb0#m>Lkokv%I$4YQG2Y9qJ!e4 z+1$g*(2hW%s{lD(19V1^6yxolXlW#a!7^!Fw|cc7s6@!2=j3dxY;Sscl9@N?ySW=b z9#GuLdiu!Gh5A8L7I?rxvuhnp5p=?q@y+TD>Ah2F(n%bjYpPX>EIXAK- zo-N+#bqmK=UAZ*Pia=Fywz@KPMdcLb2U%xBTS^wZdplxA)f#*RiY=-0Rwu0-1q7g~381xFN4S0cp!F{NrVafe^PwR^m~) zEU%;2Z4OD-%8K)lSe6wOpT`?A!^4f9I6_$(zka&bcM2C%YqYv#?02M3!c?XDA-B(LOvOK^uEVwq9h$q?Yf7QsxOxMFagX<8 zKSaqkalc|^Tb*z3svSf@`%5D^hej*?p>vNws1dE{1s4}6s~n--4}v<0kjPM!aqQct z)LB-{dk-&Pu_ik9p}bLVDevvE7_jdn@6ZLM$~^VYFRjF-S~lRw*KAuXzs!677)%r> zsR1W8p(Gq_4@#iTge(Cs(kEAdy0~;qsFd6{sS5H4DN( z(x5V-;q@c$40w9-#imISAt7_jRG?E)YBXaEIVm!s+@RU7AWHrkXE`oq!9_}?(T;Fz6!kG_r3An7>wbQ zbI#r?=9+8nwIi3(LD0^Q$E#`kuRzY^cb@)+6ynqm;LE_aQrj}!XOGhLnqZ)Un9#qf znQE{d0D&MoBnknANlPe=vWv1E)7bNeTg9OXxZ3LXafi>ncWeyP4~5djt}n(dLCtJW zL~OEbAF3Sb#LXzHlvzn1rIZueseh_un8k&exX}#$QQ0NdB0iD7JcZ>8GUTc2mLZZh zDqb6h(e+_}OB+jZX&Y!9XkGLqv|r9Da0m`BY!@}BJUf`5Pi{+*rJV`@?FAPPCXegs zCm7In;l(%;s2CBGwYNC3qCcK3H^DIqCZG3aSw}llW*hKlSz%$U}VFSa^rzYp|aZ zgM(qSX7gEcjRNV4wMu!#KZ@;zCK~@dQf*bzYSozfb-b<-+G!Rx7QHF2o-o;SLfn&R znc`BM(n>88^Qkhl#P~me%v8sLb9yw8izE$@Tp)}voK~t*WY=Mf+2r;BNGq^c=^qDe-7NXGAWHJ`Kh56qBZ;nz!L zyk~~I+D!5f7u%Jv?m@0#zgXVK55e69-oLp37c~{g$3G~L4o-qO7f+Of)92sqg=z#^ z3qm}EIWnsh&cxHjybo4?$I;ouhi@mekzG0MQ4Ck2F{AGKCX(AE`XVt5foKFl2tqWQLt>v#HQA& ztjs*pD?q0G^lGz&qG$&~j1F=p1#C}4>6qeNc-++XUMse$wE&hwA!F4Nvv~Yu@7L*L zqOhUU#4V>D#w%Ez*s}X=8Oh5>!Zp|+)<0}sHNU0YwSQk6vxeo_cU8u2D7>9|%XNML zPHAqKK5uw-;cww9G)QS#+I7$WcuBg!{s49ExBE8}Fa>EL%rmd0Kqo*ESw7>Uqu^gn zIG+$jGBdASB#e>OEE4!33E3cPURY4eTnol^Pon?oAQhm{iM2BFo1==$1Q`GjK1bT` z&lkPlQvV#S9Ua<4nfUQvHPLWkVbu;5$g+=4v0dX8JpA+-zp#xOKPAfl(4qu<&Zpn} z)~RxUgjO1sSEjEB&vR3tHzfik3i6u}S1&6Dv!z|~d$0!ork~WN_cIjmabxTt>N6b# zQ)}s*jU+fgrGg}<04x0I zG0sOjdl>G2e}Mo{1u_1HCY`_dKk-Pm_3LFu9;z?ZPf@ql*VY39Q9105)bX6OWE3Qu zSf*&NUoQN?)p~28g0XM2ixK4I4p~U$CS63Af)+gTRH3xO8p%Op1q6e0_fi6UqVC5N zA;7@1S=^kEw9&Z-&$_L`jQ9)N?go(RMOs@v8Jv0AaxiuYyJpg{7bN>PZ!oA zkuj#td{$KWI)&`gls&nYfFd=vzylT;uX119FMc(?uS&|LkgZoOxCo3}!KfGtW(#v) zV}9;0lS78!tq!}!tSYD&d&Rm*>Ar1$q(+!0^&0QRD@WTBx^xRM&0Xd`8TTA_;8Yb; zZWfToPC;%^~Y zeN$c2Sz8psGC8#&txsk2{7%xAFQT^k3hgtvf-b|s20=NolPpr*8q)013n<7u?!gSF zsySr;L5NZq*qA53+z_9}kdPXTMxU9DJB~J`?ai!?@s;Fsf*xrl29z-=vkXxzO%%ZS z=9Phpb?;T8trMW*J?WUHVha!nw$86l>=*5!-5f1rEoG%zS3%!1>L)l=gJj+dkJ?RQ zaPxsa(T@Pxon+Qe2i2_JtPctu#Lz)Xv@oKM9kRy;t^Wx9Rh*Tu6mhlwj+hiB&SISS zUA?K;ajfP<`3ef4-KH`@Atj3=KJ-XcP4MO8Da6hp!oVg4=P)~A6(%CP5DOk{4>?dpKf0Dr|i*D0;{m-rAA&*?GF+dnM`l@Xl6DR3WG> zVn>~QaUx`M*lAfRC=J3k*585lACs3^YI7b;Orib7sdn3T`RpMC>O8-LOg+vl>+04v zI-@A}`pT%tMQ8giy(#05IMCwTKR&tYWYl2W3on%+1Lt#^09&9Oreg|FCq@z++^wTh zz^6dpW8z~lYlM<*#8+Cn0i2$=aR_QeRsz<4p}OK8Ngcb<-mgJ5(4YP_X9R&-h^0GAX}*ZONyGWKf36{hCFrz_s1n}FR!Y!H z0r>uJ??Zra@k^^JOIuSzIKNni!*NAHNs#Sk*TL$5GoDKA%=KVU~I+suQ5SlRwnZYWdr2v`CRb-3s^1;fYa_Jge72tDEUCS6@)Xcd%nPqy zZZCH!gVYYj{IN52{p8F$E|PHFtOwpNs$}xm8wi1e|Bn6yPYgBb5Ef9Te;odj2L2Rt z$OBL%W-oX$V1=LNOf0*!41qt##&*vJc1zviJaRak7`eN6TUrp%K*sKI1|X__Yf_%d;NDlqLR zed|wD&m6QfU@)qtveQJ4A#t#)a+$FL?IR==xFV2GL`<1llsU|tsjj5BnY-1l%A@@! zD@o9QX}#P-24-TAnJ%J#{IjcXJ*EqD0*w=A(d4`BQpmx;;40KCoGP5Xqtvu5brGk9 zKS5FV{^4cL7t1JEZxuPE+$<(%HNVGHwed)=`4+OjqZv?^TC7w-FYag2Fw&h)n?^`{ zC)I+!oGHxoK_Bin7WKR8DK^q+(yA zcr`wSf+$6!Z(6(Rkci}NrVNX6hR;X({NGm@LhAL{!<`(z71FN~ZFgJf!b}Wu)4xzW zfryA4NPI^&zWxeLKBcl}puWEjNU*2^|zv*XqJ=)mUU|X}^4$nKO-u{w{Kv5*=qxt=8~y$AvYb)|)&&lY@E- z)EJ+0v9;r`Dedd1Wn!R(u!O|+FBP7%J1c~_Zp%Cfv&*}$c!_;Im67?2+jZdGsnr?& zUp%*@oC9ap&ju}-8k;}=QxqFJF)XfM2e>Y;Fw6uGW~~&o?qZc&P?k&RrVN8%ku%R` zy{%m7IhQxJTY-BuCj%*!!i!ebhgA!ovn%wPr)H%BFVT<|KVX1P9Zw{YCFtiLpYu2e z7e}A2FCiiSVCNtJu!au*70XZR=?rrZ;Ovy)a}{iE)&gftAJHsjg3_8q`K?Y7T*aSz zcja5o&^++&=QNQBo(*k88)rXmHf&cEu5z4?J!_n+mjUOI{skN@CS*H(g3_DFl~V<# zFj9<^r7MrwIw4#1a{p6Ddkj$%iqb7={Sg(F91Fjn+e|`C$K+ zqFHqCGr~AKL#FC5x*tpa3hZfN-u`tPiE@d3SVIRn+D2ME-#O zY4kaMOmv(!F{vGFoV_t}nY`}F0`b&xXZCO9@~R%tD1srJQFnK&VnQOuVvKD=B{cXS zpyh@R5)1#yd4rtEM%OYvs*UVZgGR}B>&N$E5{9YHXPO#d zo5Q!25!%7cxhbzwPeo6y6~mO=Sv7^p&k-NAZ!adKoUgz&Bw9m753L&;r7%3gc|wln zTL|`FKvO~xu=TBQ3@G7c#e?8~G)H>+ZUsYDkWUt1FCfGCjXaSGz~_wKydIEYY_a?n zd6T58PrpzM0=TiG*e3N5499G;A#cc?yq?{`M7Xd*nByWk9LN&*#9 zLtIbG>>gBgJWSqElTTNOBdPu=pmhb(LQ^R!>|cu8a;FK{06OC zmJb1+BRxo~4@!d)W+v`)$FcCI1&mia6xkYmrW2Qj%bPq}KP0}(+YIsd_{8oyB1AMk zx5T2jLKET6es)xYeTAxxpQ_kKKUjSEFx)U)sY&iUFx#f4pY$qvNIp z=UzKV&vL2OfMkj&3_0cJH>z>`AS3MwZJPn}N*`Ag#MvX5))a{}S%<9k7zaVgW)4J0BtQ~{PYTj9*M5v}&&@j_W~ z__r>%t-@!j-3r;+NAhm_(`%sTtws6C_GS6~)ft^-9k6Xf`lLOZ<5Sqw%6QGi{La$v z6H>OQ8%UmbDtKMFEVIYxnapYN{y>tcKOF?s9+mvHVc^!m43Mkb!v!g@!Nhp_-C|Ge z0S|@)a`$!8Jct!BptrALBvV7IF8BNbg{&}#A^^BZHJ9>7E$f?BFM%WiRGkP}KN{bh z2p+t!voY%Nxrql6%ZzCDpEXnrG19Lj4G3oj%LD~5U&3yt={5w~$VvoG2ZXv(xE5?R zNQ1(^=U#oNTy_)>P88c2*|@C)io z$U-hqoRiQrI06vbA`g$#$!E;&fl?5;GdA`vu9MU4kq74L80iY?i-n0W$p^~@*AuS< zCJ6FoOR9l+by4M?*|#82?sJnR?W$^5&1icJDf@Z*Ms|y{fu;lVyDsSpri+DIFhk-@ ziR-YdzpkPQM5(FNu{lW44wQ&m!CFh|MY&7py|d}~_ewPnIL|(Yyk4FzHeW#ytV>0R zz$#9%<8Y-UF43}%qNF8-BG?ilAjgC$fZn;A(i&%qgB(yDh>>saqZ-%0WZKz3Fb~UC z_!^;*UL4L=u9%FwPlN7nq59B(}yeLECK!HOt1?AcJtwM>2kpWOX@kf6$ur{T@e4eE+ni+-31?q@8XNFbV#xUR)@Wk;{}->w^PowdZenC0M*Nw3FiU2nyI z`S*-7cma!e7#N%qd`@1yx^TO?Npdh4Rv8ACKxRT9{@Tq_wl$V;1BHd%VDSxT}BDI@}JRC$Oy6RHQy4N zgu_P0#qsV7vthQ`s*%{xEfU(*L#3e|Mc3QUVAcaL6Av1FMx9YJG3Fem=(CW&5oTgsn)S8Y=MZELi_ultp}?<@UpSXl_iiImXDpf8`4;_rW+h zq@33)6b*(5WFzDLR(G#5a+aHg;d;*p8Gpq1@!yiK{74!UuJmJ{%?>k297*99%#ctq z&_Wqc?7c4|wR#2ntHphl9x^jGVSqHlTkfhy)7Zx6LJ&VaWLSY|Ez|RF>Je@5U7GPm z`&!dT-yhMxjXM~kJtqeFd?2_lKnA!E!Qu8VB8!5f-mWzj6In3#kus*VS@apzw0T|{ zVPXrCSLxn+0%Yzmx^yJ11dh;ZtZE`bO-oEi&tzlIQ7u&E1dzs1wG2*;Ep}62Lo!#o zoJ48Br8S-KOUOKpl7i)x=>H1E5?A24quqY3YjwrmxWlk#{CK)p_%tQfdkTKS5tBuZ z>o|CY<20f#$68uTp_M3Tb*Zp_qr6tc{V8UiD4Uyls0&Qck1zOgC7kZeSqWL?e#HdA& zHo{doqhH>-O=lJS?kmtmwXC%w?B*~d=;m^u4$3!uL*29@-=PfgUwGC<)44tG4T(uu zRukyWNgq5P4YX`il?9MhpH&Z70{N9Cg%ljt8Q_j{YmnS$lY(92L_=y{nEVa#fHP?s z{LK>X=Ne@oX-10VD!6;>+1T!~@Lt4lQN?eTvDi3<$z z*j>LjS3`7mt5qK$dYQEqJYy?UrYY$Y`&tQT#}k-?TxQd?i+dyiM%H=*#(wkz2BQ$E z8HDBL=Q>BNWrMSDpkv@jQ~3EdMj1sill@M=AIWc3IcNRVM2 zDGZ4<+pWHK{yOb#0@5E=9c$WF-F-l_%GTES#D0=DWq?5%F9*l$BpyI8)=1@vf zx!=-G!tcKmS~9c`-CN_>a*+zdn!-Chb;T*mG+>4RSbv3_+BGfJOFyLh|F{>6 zXQMBxvrmz%!6T*QbymWL27 z^<;(*+@=+KixR=2!1 z6SwTJSyO|d@?9UbI(}1TOlVn_pbk?ge}OF0Lc5hEt?KDhjce+AW*^_|j;~HjKcF73ojD(_kHW=&CMFuuUq)?Rqrx4##Up~Ltu0e zXd&@OiIUk<^@Gu0)ziTtYm8*@0uzEeo$)AQ17(`&a40+^UnEt2T12R5;}I3v&P_}! zOq5>P^t)k0)oqc&>LuILf@IZig-{A%CRUoc%Y50Z#y;Ycq{A&=^tzKb{rlgO2XD#c_kyet<#ByvHSvxseji=J@G6tSazkx5`1={ z*1t;ry9~ihFG|vMN(Nz@LRfO3d`3PA($~*$S9G#%gq{CzHthWu z^Imi6ktTM$W3 z8M5rVTH}LxVMLyR4LI(7%gXVCdoQNytRAI9GGIll-t+999Rc?!@V(D)B+n_HCaEYt zFc!rT`}+dWLOZ!;8@{w@e){I93MWhw+bU1g4h#;KCbNlS~S2veZcF_xp#(`IO2Z@qlt~i^LdZZf_JgW^q3rIi{MCHpLjXBAf&;1sm zky*F=IiukD^h5+pk`4oc*E1jPN$mDkGXk-$gK{6a2(SX`f!(s;@val$dMzr6r+n|L z_fArYww;A@m4!jL8JW9g$u?9 z`d;L;c%Yx8eQh0T21Yir-6C9Z(%AOwBa}7?ePE};4_mzyoq8i-hVeLo#1I{}wH z&?iCr=~MD}cWPUH+I~gI5$fezF{hh54LiE54!5fadgE7}cvegap$zqzGzUqJOXZ?h zzST%lKzp9d;llOeNcb66l7$Q3yz#dIn*IpL(fg}k^0`oO;IVE8PHJvKXIh*HJwZ@- zJ2%9#?l7Tqz9M-3Huc`H05pc>58AXl+P3!1U_m%u+9)=J`>kpOg1SYN>95Db-ZGL0 zk0fYjK7L;fIJo4HK^GKu1^0@BN&|*dY8l^q)3Tuqa zNBPM=51M;&RYikMohf1*PXoD&6T&_`T3y4XM zrmN~Nv^f)0?;5 zcF@~wCOHP1*b<(`?auocFm&I`euBdS1}5q723F(E36oGb2%yOwv(p(i6tO{On=Tf4 z5oLw-PfPjoxIS{bG(^KReaofidI)+Jh7s(ivAffMQk!9)7kCv?r1h7#zRdPDq22oA z4g5ei2US@Qq8N+%;crOkDQ0A4o9Ua)eQdX@U|`sh$_Q0>tjwFj27X7f$MzXT-v%SW zG=VNyn%YDmN^9OHj5v@*j+yoD1&)Ka%rDOG5RyE7iWP5-&$U7vzuif>F_`~^)T;A$ z_u>o|6L-Omtm7&3&n~|LXO5FcMt#Lka~?7kU9RRHZ8aZ!*+8SYeV0?FNlm}#t4F?$ zXh@D-IRT!pu1XT2xS=Q>6SsF4Nsza)2P#R3e-yj7%mZ{6lPq^?tul(7BMwK+W%pW% z>0C|CN8A#h77u1srbOL@`7G>hUph!ke=4m)L~~w*?;{U;lC`-ZvVq5@^{lXI*x}$C zQC+cZ)PhzsqU9b$>tyD}^?U3XH*1R`LZRih;+w?HVtWDy)@)pBsIo4K8g9#Tw|F;s zZT}p+dgr>+^=1NoZ!AI$YWMcS$ac6vmeb%~WfmFS!DQNG8sVJ~2{v=o%W8u$!=pUV zGxu^r1tndoBN)$}#6C#v+r%ija-Ejrv7ax?WP~%@CAU_eu3Gv$ zrE%ZQ)Q$)QLwco%&&Hx?_<}AaQSPO!(u9BCh|^efFI|Z=c7=jzZ%xs{0-u&KdT~2+FQN z_;?|0BgZ`EfrEUsli@A*0zTp#$AGEVXX09KSGUTG5Yo9lIVgu<>>9Wp31bmlMj$dh zpy@zqS+R+ZymT%mCPu?;w=dplE~Ww;B}V~s(mBD*Y9OTk2~PZXfpg|13tt1Iq@*Um z8UK*R?0+Cd+M+G-p@ztzb>ymw#OlnD5Z4BcKrdUf<&d<0p0MDTcldf-SivMg_1cxaUnJ^vPF6i`yq8MgnSI^7MaHox@uz@;FK3h-{gg}q$M@w;EbO-VG8i6N#AB3} zj*i)r?Jh%b-P_4wmj@eJS7+zkXGy9zU`*)F`Z%>`GnEVSde}`ceW(YFL3tpb*gg;U z=mdlAjJv;}g6Vh@@*YQbst-FXOTfSq$P3$K+P`5#!DKooNQ39_vC?eTS1oB_Dykih zY}2A(J5}gx1pGRCAdZr{PhF@QhJ+Bc4<6^)wMw%K!TE#2Yq%LnRc=l3M`-laZ|t zCjFHcD*r8d>oNdEWZcGt%hm(G7_)EV<2y&sk#*>5Mk2ngOxgGst9J40M)`(5lCb;Ww1B?l9(`92}3210| z24>iob~%CxT0dJ`nVmWY>O*qps$-9Nzy$3XFqw*Cer5*crHYEwo5096H@i_4O>KWX zI1%Md_#HQD_-#tYi=Rp0_>|wa+?D!QH0rz3PUEviRk>s>Td!ZI`tnMe7TzHqsQo(Q z{a4pIYS9-5qk@>T7~}Z?1%e-^P>Y`?6xEvUZJ&=Diet1IrfdoPIcJDqMo}%de^`Ao z%MRvXVS)Sch@4le&vtW9HbXp4nhwBxMTo3ycDLGDHJG*6uyZ6}dyustb`ZaCd=R)G zcKGk-@&nfev54mUymZGqA+sV)oeOeHe#?*V3wf1VcImU(w4JDBkh;sJdwqRHuJ7?; zezz-3>pP|=B~yp$AH5suJ%aUFDK$OoZg=6h;6o!?4S~cM!_GYgOAHJ#t_Q;11t79+ zQL(am1O%~oz?0a)1o*FCzIcM2UdhMO0|R8Z%t+00dcVIB2g9Z+yN5_4{@0Qad1Sa3299TYIYY20uHCc~BlCTyI{ z@m3>Wj*gCw1Kc9tDX`3n0w#LZfiX;AMkGE8xF2nj-Qy4&Opy2rW~YdSj_B*@b%WC+ zmX-EUC;i&yDlq7#Xba2w!z#>&60> zpG-fKUa!gt@ohXYp&wul+gCC>AmaV9_R*xo4`OR z+#29^3nQhRBwCI%=LgNA!2G9D<1D5!GING3YiRz4jtu|OxH;?DUY3@J?I|vmYak__i}gg<*n+_zVw>3rWiVomx~Hdyl;4`Jc+_4UCo}Rdrueb*s$UYB2m!=S zQufwDCPIKr-fBi7q^!OV=?=l~@v@Mby5oRsz_oZdIxpR`|7{2Lr@CcjVV9M)^U^taPARC04G?^qsw;1cyLOU zw^!7V+ed(YhAEJ6E$QV8nJ@)zg`-Q*)a(qfq{eywE};Y#f6k)Sh+Ul~UE|<=^-t*! z+jLr~bz1J$T0tLBcwDEjLu)ubehnRbbb%fedk~6Y2djeBDU50jA3Nk{sGCo{efW5b zBiB`PCcFa;Wjr#(vzWdabz&c+t{St=pVmlDap}q!GUwc*=tJuyN6EE{H%rj-zJ7fMOHOXiyqLv`WipB zXKS%)!(ugAq7p@~DEf<$H3lWj($Boj`^S-{&IUY5_WV!(gLJjaqE)deKL9?vr&@gd zot(eT!RfDR1`4d^66SRBp$)PZWw(_&aDsm?iJ!+!Y+%=jL7`}u9~{xtFRbpgw4D~6 z=ZrP5SF(qZaD3nej#_ml{H@>5=0BX%5Mo70#=xp%*B(UgNgnKw-NV{!>7F;?+fxoz zpzZI2WEfmvJ!rfBYU|WTUwIDuMU|~j+bGcm&IHXiC#VVM6NdQK>mx3xB^AT78a4;q ze$>$C%*>vH__f0x{wMJ|S;K=I6U5&JS&IrG8JE}*+MYF98YxL4)N0zMmCOOXDV8uJ zVAe6*T2x^^?&8ixJ}U}8^Z&IidHtPTNG1~Mu?)o0pNh7n*2PtOKa}yFZt|}W^$^QX zMivStT^AOjSVAPIw6SsGAM@S%TH~*`D9Gw3%Aq>Gkllr7!(fS98KWyK=i&tV-+59!_db4~#81d&4f)W{Q7BvPY z^2Rb{rrn~)s*xu@_h~EFmIF1T=RJz|I-<9F_Rd8<8~F?yj&^R#Bw|eLOP(ig3nVI^ z@!rGSvUxK{xl!x(QUhhuk?&~!-O2e=YlE!JFa*IR88YHlbjT^ub+==9d5n#0c|1#0 z*|yq?&8~c9dq{xE4&{$(N!VATU%X?Pe9-oX>*IB%ZQ8WYKB$M3MsN-%s8)fee0>#t ze*eYc^_7uZfrVr!45zqDg(2qVpzgnXh{m(zS0ZBvkMKKPLP1f6dJE5&Y{Z%)%C0m~n5QkfbEmiFPt$?D3*X})v{~5E|IRndy>gKE5 zM6FgH4KI6wlIMUX*wqr?BM2pvCLjK}UVNi!FJ>WlR!Jp-(8ygMG)>XA2^gYdj*&OPTU z0aHbHDt57Ki;_&Bs@t8--Tvt%sZwt95M>c_F>ry)3tK=_EPF;x^r&(A^2B!u=ZmFk0CnIn&)Y@Zh1+NsT2D-%l6ci0r}s6Nwg)#K<+Z(ckj zBA?}fc5P(ELm$kr$j~OskfVnQOSWG@f$QPEBR_V&a`Rni424iUJ=NO;1X$UbS&vAm!aS^?Nc6P9xvII67MkqCrWgYGdXXi!yWd7BLau6(zut54F{Y}cd&f_&UzI;MoOl+rsr#YVzearzE=2imrx zrd?R`iGZH=k+(m($g`+2&DNDudQ=dd9Wft_;|NycG^xRXFHtTz1R5K|6o@avBD0~k zFExrFwgbWahPArUio6w~R6MveBjGjaVG&eNk^%1I#=YWuQLzwi2o8gi*`$m9ydkH- zCTZf?iLo`7HHuMufAp(S2`jbX-%_7sn72)fej1^QsWArmqm#Nz>08tra%}Q`pYxt5 zF~BBu6||*5cd32=ZjA5z7x55S8^I-!F0is zFxRZQSz=5S>gQVR$CsDRZI~Wd4@4ED5Be=TYc_w)4k&rsN>pJz#M1jBqeXn1YHIDy z+S~^}$?rOC*K%UqaoOQVTTjec-M{47>u)yHF_4zqvN|<7p%i5H1+$cC*47YT|Cs67 z5n7+baXl7Sr|txE*8O3+8Y7!e2-W*y3;&80ovh_|q>gv>cs_#2ryzH+TNz?$g~CCi zZU+oYY5gFLa%S~$pa}FWJ_97L>yJ}xU}b+Q3^^sagsyo45~Jr{Au0$YQ_)S$;p*lr z_E{6@&*e9V@&*_K3DE~~en+sBY1eLc1cTocHC#v^kxXP++b~`?_q^7s-hyL>y8G)% zRiYGB|AKji^0zYmq{(FrIZEF}jV>}E2OL^2B&YrtZpd6E`}lN8YV!|^c>!R$X?6yt zfKoOatBe8Zth>y>w0|b+&1z?1L93DC-0t(Qw+(XQS~vp|C%tj0!vptCx&y$nJb^d4 zN$)X!w*4?zh4oefTfgoAqS zMyP7?qw!Z9HD(GG&+zxJX<&ER0!-3kzG@uZ35<^GGMF&+1*zc+!)3fTAFe zE|;E2nSyCMC2-9|2%!7onNlF545W)b(W zwR_q&S-&$W)24+pD+42uMnkXaXyM+0s6&T z`v0;ulwLoMCH+(DA;Fx;9W#?EH^oIq@0=$KzfRLa)dUS@AyCCPm;Waem`H-%`bPVd zVRYder549>wbiS~S<$e%-4SuZij;kCL`N#$>X~DR=HkL7LZQ(?57ED1brI6{K%YiA zsk!F(FhnfBzZ33Aby+b=$r6xjz8 zDn2N+EGjkeAfC79ivoV3tC2*gE1!s08h4M-4`EBXIx>nob?0M<%$!dGzmM8n z{TtEKH5+E>S~isfX;7c7`ln1A?|OH%<5%BWD#|W#rb~~#07>ayM8qVI0lG@mJYj{K z9U=58G_&pF$2VPp!A2b5`4*4)daLNw3peZGF4a^P^&?QO0aAAI%d$aKP0gTO)&W z(nIiEFC5PbiU}0=kdtT|Jc<5m(azYcacTlenTofZDR{0uCXZO(rH33}?j-*wiRAXq z*bbWjxNg%B8KGnV>Nn6|- zI1m4B=)%!Ir2>*2*Q(vS^@k86cotbvMWIKlO)7(u?{}3}N5^=}X z6LIc|?r%GwGBUI3?fGEhWDlMkcOBB?5!dvp>kRfz@clriIA&Qm#g=*@e6Sxy7a@2V zwZs5CnvM*a1`+fJv!PY^Ln7tIn&!sj^_TI~ zz(Vc-?xs+^8B|U^As0O_0FGa3)P#dE>h3Muu4RkA|AkNse;fYNjur$xqVfAvh<+*~ zwLyrV!x^TNpx2K`H*eg|xSdY`pd!34e~s2%Yu+1iu^yWQ!&^nDx2QiEiUoj;nbdIR zUYJdtgDT$sSmX7BV^u!1@&Re)04Dkv`YQU_f$VR3NQB?N4@y@Hct#7NxcJ{i&vl8D z;<_ew8h(Vc&JjPk>i3$xP%AJqTp=~G%ah5&Gs~&gDyXS@eZO1x#=nvyz5ODoWn_!gke{J8V4JU--a7b$802pe7rYNo`A`AO2rftcN8v#EF9;Du znO{cXpaj6L*{#f(j}M-2D7g>Ox9GBub|PtazV&I_`$vx9lk>PF`%ENsV0O5CC_Q=5 z79hlg@+NKr0{=en)Ue@r3cy%Jq|^x=7;#nDV9c!EY*O39<>9mJ;Y>||z?g$CSMI|z zT4e7NNpze%+(y0WU#Bs=t%hXNG!hVx!P=jYyg7p3b1~;os^*M8kTl}G^)%^EKLaG= z<;C-vvq4G5t5i{&j7_Dl*vX6nn}YFGt}X_yJcb!?$2Jy;LG^zElFc6q z^m-j>U3nh2&KJEV_?WH-SKmN*{9ccVH zeCk(BE$95!Iglk>;embD`$Z2L_p$9>25GK%v4wAKN$clgv8ZWu7cFLm=UKz0!ObKh zotbS~^woUSo{?k^OA*WT@gqli$Zn-Z5*S2hDA-{!<1!H`P6X4KtGqP&zul+KWRJ1&Y^uTqcQTSyYp)nty>6~G6oOXp)@{neZlL1dLm#0%xxM9QFPy}YJT}DFzy=MTRXC?gIu(3HO z6u_FG7m_xlXtJlgPLKn!9U7y?gPS^bO?BIQI`BdFx&+^f#yh(xx|KHe6k&F%WFlog*z!JyQ@skrn=8 z=mn(7C;$yp1CWA+4iCf3Mk;T6?)cauqYx6Blrh=;UFJev+3qEivF%zb;5TL0f{&@C zvMGm$=pgwKT2OGO!uS2hk0UG6RiErV-v-olG@AnK<;u?&RnOSRT z+zPZ4yn8f$!@`0Ma`gFM;g$ZWCm~uRZSU@1L#>nhjBzpw0f;`HUh4M4D zdk^BHPf8;9cBw?id%MZM8CYu%%>^Bp@j+0o#2c_#D5=?rO@O^^kV&iB$(}~32id|h ztP0fUO|0bgNFGg>L0D>y#E|oKsu%m4BoV)(P21FT?kA(FV zBsxvn|NK?vmTLheO43WSWnf8||13%2xhs)1=zcQD2Whc@d`i>Ha!4LS*4xQ6WF$vsvJS#V_IwCx8u_n5CwoY;03fMcdT+eW#KU6P8ben{yewPL5;stmB0g_D_I@2#`Td zjhbw!fYY-E-Cxq7D)Q8GvbpM86wUN?uaw2cwZ%?&a?uY09p2husZq_3VLguL+Gq5(rm~E?dW!)%Mpj% z^orNYi_zlZy4-Jm!uA4m9qy23-{XyNx(LyKwwrMcP%J-LT9e&P+<*8k(dRxlHKMr>%je4s!23W+ns0j<8II-u*_7b*JbvlAo$1f!qt^H>l0g#TW^PkATMQ zBJ(Js2K~Ofz0%UP=CC&0bT^e-@9gKHzLL1TI}g&87oW?Ay$-$88}Yy7)3q<(zkhGf z0pABSdxHhQpJcJUe*~sJ$;@06^?j%D*Ur`deIUX+&#p@;@#uspQGJV|9LoW<`*AWo zpmpD>EWe@iF}I;tRMqap^$Llw#At@Zyc@~&mhHUL>MjrZTJAUh?M_b!48TU@7J$6e z!qR#D3xK{FzgDr(i%6y7MRy-6Y7Q&c?ugc(ka$m*G~C-+I5q{r3G`MVN1rYd00xrr zLPp7f$V!PfbVi1Kg>uR{3+`ymyn>1E7%7mEGR{kL0|;AcD_d41`sG< zXVe#Of~xvM7Y)D5BN~&1;U&dG^e>?8g?y7Et~K$WxWOqIEabk8(~}+JPxgj%vUV}w zO;IOVg{UY2Ca(CRv~o*p946lGuJDg8b7p?^73Bo6DPK}?JiBAk&C=8d@Pv9)eZzQ7 z9#gHAfeq;v?*a!QjtBr*(f_{0xLRcRge-YJXl~WcGAeM_vLBA@ECAJ~u1X97>s1K` zk|`a%Q&9d%#z!{?ckfW@MGzoL>D<^a;`B!&uGZ$eqI0!Q_(+8eN?j6%w>r*T-dfbJ zDy3smWybWUtT8w5oRipRVFs)3dnY-FjTZgLmVqItYyN?RX8>Ez9Rc=`H?}lx{u%&_ z^D{gQoEgiEY6eAt#%?g?pL>cNo5kOe4U%6sX{tJ4Mi@SuKR-$&yKc;42<0D;0qPGD&WQ5xvD&*Q zY1n+pqhxfA^o=Fb=>$$&wm(O2B)$7SxgT0Bo?Nd}cU}kk7+Q($&U1&{j$Js7k@~^t z&9<~Bu8+AEundEO2OqlTuIvJBF5nG7#|s~bV#?sUy?`mW z{ex^hG&6v!0-^PdVrK?yQ#X#H4XFbK)bXD=>7z%Tt{ew;YowsQ(cst{*1pSxwTG5I za2x&XHjgXu3axb?t5mKw&Fq@8)$Mlon}DJ~6MTP*!is698WU>ToC6H|ZNonw#X}wM zpIh1~O0xl_APBP&5mdA~CwAXmhKv2tV>-MlxysJD_$+KmdreU9k~FcQsGg!$Y?>lv zPZlGbMh<-lL$jsNbm;{Dcp8K>GeOWsZ4~te64V3adt6W|0MS?smUrrj0hNEMAF6^lG!pniq{lN#yPwinLxY)MBx& z&wqW%MW5IcOreYo5jpw*ZWLPKtO8e~IPa~rfQuYkm!L@XnL-M(Gy!ekX#gP>DQSayIO?f!x$Hk4d(po2maok+( z>#r>_I|XN{ei~_5*-3tyoR)k8bPA$^q{~jXaZ0#v8Uc0vAlki5rR=XIB?ot>fx0LQ zTp^vs_E)2&*spA!qoum{e~i6#R99`gEsRB%k0>RjGy;ksNQWXJA>AP&4bmNof+CU< zA{`=)bR!@j-Cfe%-QTr-KJPhapS{l*-ye>lI9TgmcU?8-ys!~VCh|4o{%~v!z^+rk zpMje~S>)f8f@5=a)oI0W)}N`(S;d}x_2a7*)&dZ91&~vqi><$X`J~|+B}9K|-uS}M z>U=k(gFzDD3-@(VNbhNacd4|$!72ECJ zmHr5RLz!u!Z*J*CcD^UonhMsiPy3l*W;E8v#yYqRzAEz$OuO-H1_tS{JM6;bH&NK3 z{qx}wnsHzHb!ZH86`BeOEF>b&NlVv=$&WH37HWYgt*|XD*{Zq4hyB~nDegDAI1b_M zbp2iq47FWCzEHeWO@e^oJ;%tU7tpxDa98E;xrH_2{#n!*BKI#1a?6zovyn1CJ^5qm9;5J59z2v>7 zD*K|}M;*yEO2|pf!>JpA(P!VP&s|IE?lc(j%aQSkUkr8?3)Gh{)^2SEVk0wCKHAJ{ z49Y*y)Oo%Zhy6|l$TR@KLaY|44_2;O&}T>g2HbDThS{oFS?^-4iG^G~GUV%XHGahi zfQ5dp{6R!}J)P+CwKqSLP6@wvQL89Rg(w+@siP^#%m2LBcvDfuiUFC1Fbxsw3+vgQ z5!|X(O`6N&&*i#eLrNjhN78MI$xz7K)JLgcpYKZUcJHCu><@D?qBZ6i>E^e4-rk)_ zt7sDGSIc?nB-7EG@1T{gigDPQ{nwO6QehPQG7 zq%KHB40-;l=}?t;x{5>QSow!TC$(M56$^I^VewGv4RCEVC~>T@eq<;Dv*cUr#h{7` zeoB`G8t6o$|G^j7&BZ3jR7hTtbWAH+)`AL)7Km?3Mqv$*~7G1 zNrVN#W?xo9oT#MzC@I%kKeyRn)9H6q@w(e7o9q5I3HB!!FI^y!`F(&zg@%kz0x1R1 z)IelW(Dv-MFmlv1vLoHDXl@k|(m&M@C94)#Dz;1S`Ox<;qjYnOd?>a!W@@b7Zm{ch zz%DP~k~;9LCVu*@TnDrIjIZj*uRSei#T3~4oQ-x{kaT!w0@hD5NQK*hODZJ!lsO+|XcTrgl@BiD z=D%W~5j7vn2Yejy)}NmkA8tHZ4C#EwRGykkZ-m!&Kgt$~Z`&Vcj_dRP*!ZCK`3%p@ zwx7eg?-8=k^C()R8bYT-9wrQ7MfWbz23XkKL4x;81%;b!QorvB z8Wq*FBp8Vj^-aYdtPF2_Qc;y-cZmY}M17(;8dQ+)ne@?)YaP<#6onUUd?IMHH4il) z?Y6;0N|n8Ddn5Z8nHq|6d>CZ0G_(yLcmp@;hR|ys&u}F;w2!}>rk(bkQRy<>x$^>= zvfWY3^@1K_;eCdv6Y@{-ekFw$gdPoJwrg`sbvc6Z+X#9mD#pyIq@!+DeVp68Wu)P= zvSMV3>8&{Pledh|5WoBhH-8jOmQQE3vnNL=2TK8)WLRhatjIxdKBZ~lo8W0k`KzhI z$?%AWExlHCymlHe;j)}HGdK62H*@@_l1-NU0HGlOSjS86_9g;)l`>P>8g3-!Z|~(& zBo#2`1m}5HM-wiJP*u5?z?f+rzWZ^?*t$up<4AxMcE%-5++9 zgI1@3YoI?V3Z-^-6VF{J<3|D}D+%M%xDi3{R<85@OC7DFTkLn7UqhfP-M}}n*xIQg zh5(W9ddR}f@IvrK)VC*_di3^Hj61Khxn1vGt_PY*$j57W2KZlUw_h-LXF z5pVRczgrXwb6Be~cjpSiFGC6dL4>k;#u*6+mZ;sHw-F*K-?w4+^;;jxm*8mJ#JL^o zolN#48&)^$HEcaf*OedtUQxq25MEZWf^Wo>@lBp+Y-EnPP;lOk$2WgCX4Ype1b;Ly zZDaIM{xgQfQQgB1;pe76yrGpeOm5vrVbDL`V7(X*9Z+w2984OzgAImUMXO^`=@RFg z3vJ-XE@Ei#U(mUURez<^12g)RhqlBwjaE`w^2-%!K=)1oaC|nacsvmr_M$--VQ)bD zZo*xYdpnqd!x++BU#t2jrG;AIa*XV|d`hGyjhv%qHF(T`mMtDgRlk4^hIUK6 zSYFVkE*j3V&1&Jm)=K{I1nn~zQ%F@i@|ZrT)n=%Qa$X$sz)qbYur?g076Z@fqTwFH z39M`rVE(0R3A{ir*cLhfmSUB`ZziwrDu2yDHc)LAj&y@-|9X>iOgq^2WN+?yYm$8y zYHR`aH=*mVA(LVTubM>+qXey}Xf5~oy^x?FVcLI~GFlMOefskUtK+|Lq;>w(r?7_? zluF?;a3uE;f-lF+mrwcT1NY@PD(8o|hZt|`eq_N+hGoE7L2tYcz(PyMy6>rjelhM( zXfR#6R<=xXS5H`7TO1y%aGekgnEAF5Vm6pE_APAfk#bVTsd}$$HpMhEoigeADbBYO znuC)_Gd-Zk5cyfi!0{i2+t_Bka^GetEwvkbO+a6x{{+qM#o|*3&gQ~7M(?_XScdW*t5+2el%Za^ya_!{_9gpCeXTrofo)CN_Jsca*ttX9h+rm;z zl{MU)sz-x``EX5+|3@Ypf`48l+_kXCMxY??18y%UrS|MscmqhTi}7hW-gqSo&zk4` zoBKkjDNz0nKKD1dxb{9(-8Nq;4+(K`bZG4O;?K|5XwbyECq{#mVkJ=JM=z2UPB_*ARY-w$s zF%mi^bsV!FxKKR-!qsx%&NTi0O?~^eH;C)swVwJFatO{&cG(j1Qg51=iwmz&j6F!( zSdPvMfJT2^u6~__j7$n_-_cifc+g+%^x!LE-0XgW%jsl)n86=(j27{<^zDZXdIciZ zM5EK#QR@?m3g`Z>TH~iSbp(>LP>$Uk2=k$;TjM+lg3>8Ji%S@5YP3zWV58?@i*CvJ+3_I=Y?}-hFa`2&VS<;G;CX(A#=kdcfNT%w z@f!p^DDOLOy+GRRA}%FxN1zEThUZaF+(Da_M;%-gQqP}H1(rWUu9;&-Kcah(5TnnG z{#n4)14zJ(7ukTY8lEYhEEe;WJ|){VP)kV`lj6i?nZSC$rppz&;U#o23x8#FO4MoA zDEAK?W_`^U0+Hg$S&eMixTE;IXeQmsSU5NC#6wfpg|7``%|e%L9SPUc@+w1u_S8xD=e3oehqSZI8TXK*DRs2n#w1{Ei`p z?`TrloBP%0F)Z07Z~8J+@57{q96~qP(D3kvw^-LmI9~kr$Z>{uY&8mXOiFHk;7;IR3C-K@Xk+bAI3~>4EVoVh%YAntQ7O;Hs|o> zy;bfi*){<)G)8>7T!BI^dq-A%GY!6R3(sxGs>eJEKZ9A$#p zxjG~Gm>>y{dy{8_Z^U2n|61k7qtV@`8Ui1X8#XTn{A$H%#l?XFDuzP-4@qQ{k3|o@ zcD(NRQ1!9H_dU^7jROwr^)VUaWn#2P*Sg>Dl)e4krK(_iEakNI!j$f^(C%SY2LOhq zbSi>gwHrN}R(yZ9W8zZCTXk#wQJ9ym;*Q0CA?ILFcyStcdLfqq!V#M|U2}9RjHe~S zz6Wi<*Psck`|vZ0_rHGq3JHe}zPnRNfr3+@9ZNhPZHs^9$`!<7gVhMH@IVog1_`}@ z;l}~JR@}#};3ssp6ZA|>ACi-kt^65iX@8w0xITS9@zQL*0++>5 z{=23O`uqB`mmycK-sA*@rz)8vj^tg!04o=M@N+SCJb+SU;4XWSjEat~&H^EvoCO z(?4w#@v^Cr?p*n8Qw2_!-FK!?v>6uY)IRn5Ho+SE&FbT^bvS33&;r*82IEh9-=}!o z<)dUMeejnrP2Zm-m7E!>OlbY9Yt@RzT&TlxI1bKOR zC5zv_mMo=b?3LGouOyisu=R2KOQ|LOH5J)EtA$pI2={wgBb7x=lfdv*OHHp_7F8W{ z3UlIJ0wDT-B^DFKPVRfB?4`35JAulR9UiKHQ{`9V401KT=kMC2^*ZAc zI@q7PkPAua;Jck*R(P_njQ```XMDL)3#U?C^!e~vhxAk5w@QqoG78W3s%*=PY86vO z`rUvKN?e8g$@TNRwgd!rN?*{a4fP=bIhImuZ|%HA-giNcN={_FWfv zh#aiET?60lF^HT7)Nt>1c-(wBetmk%^X=G(9>{1cU-&(8)gNe=jXK0{`8OxFFZm@9 zCii($WJoffXsoZtkRuV(cB0-{;y}DegiSdfthsT9-G$$`!Is8s1C4PMJ`MRZaTJxK zVS^aRKJEV)5G1cr)zn{+MQ4krKz=#l$#R0-_rBNij6@(CzbeMoyz|!S%#d+MH zZNi{p$9H0rmhYu;Rk+YNSBmzzCb3y|<7X}35UhCzQu@59q%n(e=-eOZwBY%5>Lob7 zh^NoVdM=!*NON<)Zo+n5kXrKH!(0PAep^V-;C*S+n^~4Gw;$>Q zx>hq)egl-@c;5BXO1<5xR6`}rdwB)_) zlwU&j*fW{F8d-WXJl}^haS@}V9D|w!J50Yvx9?2+h<->u|JluaJiqjXpy17pA2I>R zM!Gq%;{?P71GOw#wDDu^J7mNwn!%A|=5v)!{L!ascXi8^J1NapeZz#%h6+f=D{VLaPT=bax0~)baTTwyhB3%mI~PZKR!nV1!1#{`}8+r zy#8JGuycM%P333|3LTlx)j9FsqZ?RYpl4-A?X!)Tt!iJmNSHP8r4x36OJ!cA58NAn z5dz6lj36!m+9UUkrf(vQd|U1|L&vT)cOBph*6Q!#CmDIi-t78=S=P5IZsTU-&m6v! zl{Zi~L!O`_?R4^4?~dSAwm5u%vnpEpNZbRJgLRgKp=UK_g6{N#~eQ8LAVLJt2;V1sW&2N(H1nx3mEOLvE7*k$m$Lv}8qFcN9qP5&>{ ziocV=&x|USvROAV(_gJ4{gmNyfvC76O3T<9G>vI^I~m?LpC^`A`pP4Vy#X zIu4ws8(W8Xd=E9}6c3bzPAg4m`{Tjyhr;nkfS-1y$uj&?yEadw?D9qCPyfnkN8uu| z+e*jeJODSI-rUB3!FgH70m7XKGtB7(KKsB;4?GGp z$IRaf7mzbQQktC{)5q{t5aC-)fILNO|M6u?NJ*(UWrd{wkholR!igzxqxyno_~&-I zA{67vibH4fj)EneO-ZEgK$~{+Kgacd%=caT*`iy~x@aK>?45PnaReL&T&NE?^}$4O zzhW9E)W2o0Az7H7IH5KiXT6kXoL|)3eyS}H25Dx*P9~KFBwF=UO{l%TB{`dYmq4ZB ziZnc^%FK3AOY2sFAPpuz5I4y1s#dj;i0TT;_AQzvb}>>}9t1tP!C#w+moL>22;MaU z;fTd^X~^Z3?CV~$*r=bW{2D3eUCDZYCV^Cx5~e%#u5BmhnH@uA%I^DL#;g}8RlydV z4L%Ia1&t%LDN$>roFiSPBYLc{ir^1T4I78yL4m%?>mmguc5F#lb|hq(JI2m;ehvA^ zL6*T21%Xh?nkAm!KH3^^cB`4r94bZknkjkFZth4=Y+w4Geo+P#o03gw$liUz@m8k% z*eKRt;Xc3Yh^68Tb-zz8P%I7QfHWXJ-QS}T4y?Qx)ILj09Rl(o8tDg8BqIv=kS8E3 zf*=|Tb1km4y5E=+AmCGp2=J}#%-kQBY4sId?f;PhdBT4QCNO+ZB;nsZRIJFIxnhH3 zd%-wp*b4z{sg&nS$Vhwwh)85$v@ST0o8G{{w?czlfT3 zWgIh`{taMJBIl3j5jL7}%up1Fa5aPbFPZCGmApmt;b;06k%b=%_Kc&Ij<<;3QVNI* z`_cqO-snL-F8!as&oPO!I*mr~#(*6M^f4N8fDj<7X#O=oA0yuuR%HLsZSRiT-pv;| ztQ0vtY?uONahJZValsx?qWnAGv%nDsIiWdNxs4hh0;z`M2aCwYOaWlj+fiXP1?Q%g z*B!cJBU9-+W`vSoI#=&3SPOD4&Wg{$uAlu&YEc%qPL5nOOWpo`@<@$%8&Bfk*lyTMgk6qtv${(1qX8VYWN|`T1S}a{0H5$9$ER1Y=P`ZG7 z$r>=&7pa-pJ|HFf-)y%{G?GlraXu^ATWC{e?i{Q<{H?Cat5fW5@-f4|;YS8+p)@ko zX6&Y60UjnoQc#Q&s-F}1df|Jpnl}Oog5=`&Pz8pD>r&|4DSr0b79@mxY^wu0W9omUPny3rQcf~<5~$t7rZS%@I=i34{dgYs&-e&`M{Lv z&jAfBy2c_|ct{uuY|%}l-?JuzL2_%Ik+W07PGz_^|M9_qO7h( zAb*zA6%F9{)}}1kZ|dUt$aAFp#3xVBe`aD(8@Vq!fdb&cVdrY<-zPmn-Ox-gks_T( zy;B1_RmaxKEZsC$sHu%YODGQz9qe*OVuCDQ(uPH_)7O3e>fHe!H8KQ6{ZAIwu<8H3 zXcXQxL-gFd#DshlC?wKL5qbT3bqlHRg=)sNg3nAx!$#8(CY63e(1qt2eGU8eyNc>F_l6vj4*$aYzuDW_zwjm2TtyJ+=tVar#Gi}f0>>e1W*v9$_~5zJ zE4LMUA1dU6_eXi_&5t350%0+K-FvY}h6ZE|=xnn%G_9qU6-j{e258L2Tq(&u=z??i zm+6@0MJhR6J6?WAcm|G#`ot*tpa^TEQ`0O3ZHwXkJ|ix1Q5>v-jd zj$(J&$h+W`BVvR*mc4x8#R`iEz8>KW99*AP56e$~QQ=@?;ZsD`++-p9&33hYZJ8!* z>d~#-=e(^hcL%qpS?q^vx`e#z*xzegAcNsX_I%p#|LiEDS@LY5qjOSie6l^;|9;MD z(oTYBs1YX$G}ZS6 z#{+Vb*BLz-;EsJMgsB;^N`Wg{@!O=W8fPn=-*+pN^tbwQ*Cc ztaExkd2PaVd|?0kZ`M}Uh++Ke2+l8mk^1DS?%m%i>9Fwc_FJS+ymXhm$AWZlRh%ky;@5 zE+NaO8xe$C7ft_$y{)&BlIwhrHd$Cho5VqNqwTEGM`Vvoq8V3bWSW1$R(a!)&+(^G z2YN!yLpib3Pyu?T(K2w$h);C0H68Qp!LT;CFV?_3- z&YcqdPmcS!R9%4&+}{XhPgSlwYCzUAYi1WweMIQj7`h%mwQbj?(rDy@2_xje?@W4z zXer8dQEvHF-;j4(b@H@5tUo+{ORVdzvvrh1F@Jsb84>G|h<%@QT4Qd19Z%_Qlil~R zgy=P$?hDKI_X@}{69`*fFm zoAPl@ibeLQEmXPEG*FPgzTy7@`zAu1tjp98nk4pMuALmnI?SxbzqDy{Z(r>xAt>%B zi%H=N?@p18uu04LmltDzLuCM5J)6>ov$vQC!5yN(4Kpo{rp=ls3OpZ9vJU-^nivC2 zTyQ~j1v^8!+fhQoXU|(I@GIqo_4E1T4zuBm6H{iniQ%~=QJy7^?_<2E7=mf;@9h2` zrE9jKktE3PfWHbLP8@`t1%|^ns)>uqpD2&U@e<%6F5UIqb^~xyl8H+XM~(%!jSXxR zEr{$uPpr&wtGj@|M1V9K7BdLgN&3m%qGL<36BKlwn9iy85SsVA?nL|c8m4=T+*9Hk zH#i{O=)%2ZaX_Q|GM~~bKukI?bsQV?!FG9ndTGWxWJHGTB|W~C>qge<(g|fYfJN(| z4z5P?e|LEi(J@t-a=$lI7a{lndDzXkvl=;h;>UhSdV9FCn0E#PdY-2uLE-*apIsu2k+@sd3`7x#0by=>4O$lBG|S zhUW+yz?m!K=xK!ps`IZ0^X?eia_y5c{>E!CN4@tFim6B>CSAlj8GI%1u5;fDza%I( zW{i9S->3_?eX6b!NBZN{#GoEq8~8b@26);lL+FdU-qRhrID$EulTReSW?%q!uzRy? z75tU44uHhL8N^39_zG7(0z$W9(|}TYgAo8(#V<}6K6%z6p8Rj0CmzdZZW1M#~O{QJTHx_JYAiq@D$s)%A#2{I5KD2 zIxwtdSUX7!09DvJf0?Oi(ZCPhYG~$mva3nTY}LUMe$ErzGZNd5kUJ2IuF5ER{SH}z z$DYwIf#b`Wkt*P8iRBL0p|&6MC6uo;`@(V361D5&gbD_r9_F8w)70g(&^i9cmr~JBn1R0fi_H#7wkZ zg(YkKd7Ovkr$fmMM~ZDB=^rF6_qX{xp4RJHhKwE>P5fQ9u#Ky?Kkyx4L%kfPNDJkz zga!Xke4_5ze-J*=2kQ^ui-s_R_)De>H$?Y=zN4Q~Y_ZZh_a6BT6Bu?k-}RQ`4=s87 zcCZfsAIZ#Z$mB0lv;KFw5Zkf?DJX$5u-zmEU^h%Bg6adUQ)&92v8ySz;3!YhF4$og zkfMD^dxV3-q;sF<E<>v6<}!?xI3H%F8>taH|Vp82LV#6RI6;v%P?M z^|{{1*IL7?3V=EMXXGMX8vp7LzVtY*ip!m^==Fywwp?Tw8T`C)*ljLi(dVP!d@GnA zax1{sUXmwaLd1XgdC#AP8?j?h(?tIS&>|wA(sL{6F;M=JZ9>YK23riec+?K@ANfhm zn-*eU43te3osK2MZ_GwK;Kg%PlzN0;j^nrul& z$V{Tg%i2(|t+>$$t!^kn1`R>yD>W3|!O_rUb)l#_v70Du5I`Q3CSPn}j(FA~9@I$0 zlw9d|>v2W-nKlAPx-zp4@Ce|+Ql=tb2vaR z);SdkloTh9Uh^CINC1{h)q-pbWmom`Jg38t5zg>usKnKv=>SpqNTu*-MtEd6jRe|+zqBUJiA^6z0v(_juD+8&Qs-<%2|b~ZZYg9DES zn8PV>`tN~w4flfxC3}EjBiayg@1pHfra{2#rEqSr^Kng(0?SJ}R|hL* z_0=Ex13n>}AWcv+wAwL;DCCetkkr9u^(UIULjJ|`h$z!3!;b%+045)A47P>b+vJ_d zFh(SbVL;|fX%_TH1P`_@A@cPg^=dvhIb&>ba(yXV1A`t zg}o4n1lWO{-GRbsml%;AOhVUEIw8MT#H|7aCx;Hr?pft!&dTZd@DB4OYi|OFs zaU&IU{-?i#iK4^!qOUHRK)bI-(Jr#rcTv)<>7N1I4|xhF>&1_VK5(M(RWy(uLPRO> zQZ2HI?q$PhggLRzj4%=!YaWak)q76`G(0rJ!vh8^2z+%hePb{dcb}`qA$J!_ z!vj?KfKr;28Hfz)srLP_M2XyCME4a5NQNldzqx1a{T*2{2@t2{V!i0D(I}AkGbD>f z+<((Y*%sg<&sb!SEZ<+YEAI@V(YoBCYXpqW%w~0Ej`1u@?sgzydTZj-gOZ8E6)6Sv zp(?UD!Ao(1mmV%lHInb+iUtCy*+v`{N`^3_q)6-}AkT>;oRL@?L-`;Lh3bzIZ5QQv3z653rbA~xqPl5qw+;Z?S?eaGm6OE zQwy$4d{JQ=(;hu`W)6|Yk|}|ta^1JbumylCpKGMK=#()HW)nczZ)XPk5cD#|bCiFT za_y5iA`QmQ<{aFV!4Rq&O&|<@2o%g_SMUM2BO5`Y$|Pw>?a6S*iB!-XyWd@jS10Kz z2wFjH(6rbO1W@2Mph0CEl*s_H{4F!KHVL@WAk{`U4Vm3L>Z`%Ak(9^|$9}46(g+#Q>E(q%Ic2;Jg5^*Z!&ex?&uXh*%s9MjUa8p z9-?M?5=loQxr>j|x-SOC``JJBklhE-F@#_RiBiOZfxPuaGozX}5r4K-^#|s0ik?*m#TPO7~K2Zh5>cxzjFj?wr`vbm&6|)e8xfcnS4g$FbGUSo}`> zJ7pw3C#>|v@-H8-j+47oTpkIJ2w*T2ZVUxsx!p}dqo2rJD08Cbf(=Pgnjd&QnHOr# z%v7hFX5bWf4NTYO$z6g#efto6jhv4OV?XuQ{nQC+mIrF-tS(RN2+d9qJx+AnT+!t@ zntk?a>`nK!ACCSgdqPjsJ(kmW3r#Fg5jteA`SuQOQKrtxWa=GbK0?s8Lf8!Bllq*(#-;zWy&XzvN?k)kBqq79aXSs{||!`BeyD4R{@t?Nf>E#9fS)&k*Xp%Dzq$QQ43g4B2%bfA7FVdD{<_T<+u=;nkp$7$;0?w!x5|HA|Ei8x#vlYbbnokw zZR$02#z8zQEdn8T4&$%N>a&J*Ko<$4Y%vms>~6ODI#^6MvR-4tzh6c{h^*#L5~6ek zVK^k(b*PK)5_>^-fKc6|yY_IAA}1twZT82j^}9;+9zU5H@aSN7`cU%aeCD+1T)KMa zsAh04ET|HnQizVHy~W4)@|MF-QUWEX#bX$X^aNai?B9f~Jr=c+>fkW6e38#rUok~6 zcRSul{wbO2g-kmcrRD)i4y)@Y(9lP-;23#jQY?*Nqp>F6BAGqW|6SgcZX~Y2?Kywi zb;zDSUkTDhcx6A&vl#_qHwUOMlm3&WqW1Vot{a&3JF#dW={~|KpKY@e`b_IGG)YKkOdQxBdt3Q(8`u}T{Fr9UwqJoX25voy zHU@WP&%@Hrs07yH4zb>5pAH!lIj zsSj~8(zH;^^3UV0TRJ*>9CEB4en8c@0Acf7tAmlvvxtwzA>*{jE#){^g*_LDC-{J! znL_TVZvX>`NP$eB^_ntrUX?Kri;m@`8eUl|@NhrZc25=!s!#~45J~nAH-*JJR@1J^ zt$m9x>;oB&u_r0h)*m`83GMjEhY5V%e*QZgCRCazeGVLIM-Mj!Igc}1v|Ys|OY_NjsPBzKkT?NAk& zi+aLaXqG~|4ho@og0#vU@0>U4ljAG0l9S3qMF+~ z<|6KUG(~^1g#w-Ja#wNfEs0$2s^sRx5=OPjAAjf|Jl?W}t>=I_tZC1OV_F=5s!oP5 zvm%=>Jpr$jyu@ZH>`sS{tcxh`{!Y1Xti3CTe%D*I2>P_LkK+1cjUuiY@7U`=uF95F z2E68xq0V@gx1xVNQ-u^G&`VO_$_MQYk9)hsP^<9|K96^VH_Ih_tbW8zU5r7vmtaT5WHaChIkK)Pmq8qEsCVr?WU*GIswt+k35jC zJ;^w){tet*d-ag?ucK`nhZ$hRAeq1U>S6&ok@?H$yKmsFKCZEb!g*YSh#OFD2HyGKhAjTjh2`Gy=Z$H>A`F zkMi=XoyZl_Od<2WRSoPU08mi8`)Z<*k}uT4RL5ZV~$<6bq8F7 zHs~)n{r;{?I?AXuKSQ=gh5IFzJk=ngh(}O~8XY};8D+$2v>cl?da(8h0i*z1!IJ+- zJiyrLG8#_Noj>dO=k05WW6*b}E|~k3T~d-~XW>35k8-b{_&~cJ!dt(r0*>%N@uQmG zQZeMBs{@p6bDj7%b)U{HywOgvwI9Bc@T7QBK2@ew3b_>j5?Yno|3{LMzpG%W@7iwJ z_W#ui3DIh`X<$FxmOFb2>0Pz3O23v=t@e_h#^9TAZo&hjz_H3m)orV2+Xf|*t>Wpk z2GDS9Ih3VSmL6KxZ+aVF-;IE*@MK8$=`g@bDSZH=xBVkaIIpkS3;O$@gy;rfiV={{275;@4l2zW01Jx~% z3qBb)%WhL|3G2yzVc%{Fm%)MD`FUr)NQX@cpJbl`C&19^rZzeeR`lPQYXLe|xSFTqhDwk0X*MW}F#glb!Kh8-Ax&g3tXoe_JJo3|DT>)m{aWld! z9O~+{R@?YdT&Y};OE~wk{+kX=g(RYmmyCV?f9HJZs~OMvbdT51&ga%1IwHk3W5s+t zaK>l_PsTjWtD%L<+5GA`lHuj;Tl?jHX)Q^|v@);aie#VUBqgYUfU$DE=3vDX^HKWE zgVXpr`GvceyO$f0>N4aMQChyrUjLO*1fdWiRe%vxKj|`rt6EP(z+_*59!-}BaNXi( zP84+o!X9u{yZ8J-q_5)yPp*L&Ga@F6q!%I9m~~YQNsk3g+aj&n7CK}g-jz$w1K0Ib z5@>P{E>SZHIG{qG?hB|>9xd==0}H`}Er=um^PZ8E3ZO>_bx3#T;0l}qJ*cbQ?ApLY zd$2yPmFHpr5fTjWm0ev@_2xLpKAn5)=~5ot!IVZSC&iSuELi%-tJ1u}eEmPCuxg|N z`_{!!#b*-}vkd4O60NI=7!V3xWSN(6t3$^zxfDZBa%Kt;Gym2ZPiDoALSVfI$Vjxu}fFIN1Pz7iKf+cik-b? zz00k`AbAW*8`E#}*aPdQY0S>5w(-iseJJtDy>%5)14#Tk06?E`c+Q-hw)cT_fS5Ps z@cL+&K=w>CrK-pB@fwH}>{{t|K*Juu;Mh)gac}kD3$cbqrAQ_GU(m`ct>P%%T<}Zd>3G zxeM+)4ORn{Z^+2P=nzYSe-ApIO%f}5)_^N40S$uU8c#!~zfw>w=OyP2EI&8qzN_~7 ze?c50U065;{$Xv!yRmmUxq_XuGM498tIu}86k;r-W8@23Gt0z@5OJ+3@t(Q{9bpi%G3*&f>Ir@N>%q%!C^+(QH_IO0N$- z!bY?QHsUAk7{pL0T|m}>_YugjDI)r`Lx)3vSBXYCxcu7*G2pUqPZ-z2PO3lb3T=P=`#_9J3td`=evZFo1Lnsdt*kA1u1a=Hfna9dF|0A1d!a z5RYi4`qSM+7^ik-AD%kemO|4Q5eGhDJA3tEnLG)ZgEzh__dTo5dYM)vo=`?(>5@sVt233{Dl{^Ey7Y|P7 zN-d6R-jeI}h=SrxeZTu%2a6#`Wq6%v`_XB|-OIbY!by}hr(A1S-%@=rxsLE9;DsuP zC#I|b;vlYbqjgZQx%3CrFSd`9JmuU5g{qWg{^MWkPK+dNFG3c)bKS9qeu0l$xWyo$ zFm9nnL;S&|0y7r#gB`QijYdJ04npj>B4Z9Botw&kx^l^BQ&eBo zAd_jgu))U&?-d11-ssM_43w#_dYKVahqshzi~m-6kj{p}3wm!%Z7PCl>!T7km(KB} zS(ZN&zG7Opq7Mmw(FxaBI_);=ZEwGF%hi}kl@pc9iX4~vFgCJhp}#w;^;;+Ze4yWi zICJ5EdBeDuBE(clEe*9}t|M7zrKTC8nO9@}%aJi$Uk~K@Jx`jb9u~Hx{a}+$SNj*t zmonh{QRj5d={d81lvcJOMXtbzx7YOY>&Ae-V^53K2Pv$XWK{Tgm^P$)&pcWM7bR_Z@MIwAu2#RL#5$RiM?7wz!moRR!XRgwR^rEK{o zDq^{)rGQ=_NEx*Qc-%&P5MNaZLriH1a=$CHRN z7*;4GKLyS8*j?8xuyOSFo5Fb%Qi3We!=GY`1}d+MCV#if7Qel~g9{yfKm$=`7}?~1 z)e9GcHr-!0KoP;bV?xKK;?)^S3D0;mMEku0{nNTm(0wa2yO&!n>3IsgJceL-TMgtl9YSO@aX%^ zwH048Xdqa_ig6A9uuUng_AyxWObDA!(9LxZ3!4Zz`N}wVzW30hfO3$7CV`7g;T=GI z`HTMCi&fvj)!Z&RTM$lyY&J9?NmNl_HBG%-BQE(nSnJ5SZ6*rpgUyq&v=rUg`#-lx z!CKN;)vmFo*jh_=e$yp%DiFc~%Z*C8gO(&xZA-rkD$S!j+v4LI`~8B`0ChUPOsso_ z++Ja6CI5MyuvoXqP$gctEH=Q{1SznqiwNXx+Nf6miaw0%g`|Fgt`1g^9FA}@_78CR zvt5_L!_tz5%Fx8kU2>2@Hj1Z7bF?clR=CSBONj|^MHxX|Je}jGh z-Dc$y>i1DHkjXZPET)j)5eBMDVI1cf7NSpYNX zJ-i22EI~fQ5D{m9Q7GR*=DYMa6i9O>j<}!~*QG!6zNgV~j^_`dJWQfWpC$!qgO=1Q z3IB)r;iHCF4kCw)YlvV1e9OIS0rnTpCxGIj8o<9LfwX;ro>~u2cY4(GUNi~jG_|x$ zLm!t!XaSR)nrhpxZuG-?y1`v1|79B)P+!DNO__I>2j+dqE#tp`|9;Er@lo~O8Xtc; z^ZE3Fktuzp2y?>zcyfl<_xBXb&nF6#%!U#{Ey41cBdc0}-`K=(i-yRZg*O*(2oohc z2E`ImSIU)F3t2|e(!NHMr2kT(+i}06Rbaop)zPO;E3zZn*6YD?dFHy^Vq=8qZcU$` zgZOf3Pi)UlO%Ik3T6E-=sL8HtH=n9xpnd3gse;C??)?)?xgd01ChfEEosqcYmWj_k zS|SG*pzST1h1y5*3tK?5G&$N?Ce&4`Tbi$vRm76ECsls zO28(JeQsc24-5$tAVg{u7zfif&2KNR+8l24tYu-QAfQCf;4~Gn(Z-S&He@lnd}wAnhXkv_*EIK!omL z_cyr|JSu4+*3ZmB`LvQhC{hIHB`Q0DImD%kZtTlxB3~;^SXgpS=W%v8&sC)BJbRsv zj?Uz8YnFHRv!ar`d_1wP+cT@m-Eex@Xhunw!`X;FXsP24y>H04Oh3=H$7H}NF9RV^ z-o_>mNFhryQja=8)w2LQ} z^UG(?_FD`cV+L_9b?y#(w+ zJ=78rc}>eiLn9JW;C5)^%ugv3#mV&Q>H2tO-w%T)tm=7>pp8*?2%R*i-cK|-1_q1( zgeq#^!dh$$EJiYp7ZTf5m}ti6b&5U%LzX|(lxEoAsC^gxq5s21!wjS5esOzmFQsDO zaw+$`MZY%AT6cD$wv8G^nbnMYSxIAk-bOvGmrwJUWx&?pMsUHrZ`82@derMDakeSR z<27jn$VfYv3Kr0Qt?w_l^R4#|{xImP_VkqOu5v$~vE#i?OsqORI5YENb)=a6)zjUL z>CQ8;<0XY>&l3Fn{C+y<>nG4QO>h35-sEgveyHLb%dOTC*zaBSW(k*c%cb)5*~Y@) z6Z?VM@|nES&#FvZvC%coc%4l^pt^5fK=N9jAl09x~rebI(a))<;QIE<9bR$8`D(X z*t0s++0UO>e~aT2=#=A_;`n@zM=VL`!wI|kH#yJ1b4`mk7yJ{P|SZwD1I;uW?F}78D=SunPVf{rWLoeE+BZjx-jx%JRneoAUNC)E{`F*b^F1cR` zc@g~BpD#p2rCyB_yscvEIJ ziZV`u?l@zNNp#7&taqMY-6fjlBa67jdW@Ooa4(!J(*HJdThR+~Pd?%x0s+}TZQJ$>v(sw}7#vi4=j+Sz;DJi@K|Q-2+}td14c@zVuk3VhgbU{G6Pe*z)S>_VcKL}a zcYEloxw!6mUcR?Fk_wF~b>XPy+@C@7lHceI@!i>t%?VQsPx?AHmMrlkdG2XU5{9@? zysrB$i~5Ua`jQE2r1pUdNeY+tzm^()V_Wd3c~(aNMrx}pVs|G{uEpx0kEJT&rGH$4 zf29964-?^@MgF2ShmVh$+3#AZ5=mag3d!14x6sh@ zq12p{T$@UFzq*<{ZY1sA5y~5?Be#2Q3Y5% zbY`6=iTyM=qEmUvHr82^$}}Jz<%q>!p+>ua);qQ7yz^^|VQ0>Vn@$q$wneMd6B(@R zx74cWoZf@@3f4t-dZE2l5ufvAn#b7a_U;nzw@=W~IouB%%hzIlNL}w}IZD>NmArm_ zo7G)}S-`mHaY5)&Ec=l5r(>s7`Cq+?I<`?WJ-9V}gI4 zZ`<$~z1{g(`boF(bzApTYKro@gh${|_^2+KYijShXj6mG5VCG)JSrzvWN6fI8kfpc zcY6cnz?AmhuJVl~JO9kvV2A5qB5XX8uXVI1X)>J}f}5Y!qh>Oyt*|fYpN;zcKbHx; z(1giVrj*7bb;zmbBML`gy z8v*H18YB#)1f+2&k?sazC?!;o8X1sAn4z1YOF=|RVCWX<7`pR41JCbW>#lq6U*cMD zzUS=TpS|}v6{-pn_1V^IZsmfjDjeW}UCwinW<;JZP|o9*u&VEv=}x*DIc_~D$u^$e z?qzVFph5gPbxIdk{@F|Db~M@{Y}mX^=?b5~;J*A4UB}Y-7VyRJ7$M!yedpZyPl(7rTct9#l+sK)jK_D-}Oq;R!jA zUGxL`202yVGvvh3dN7NXX`B2BHoAf1!J`Mi5to=UxQ(E@Y1`vl>aCYbc^*Bcb_;dI z?5IC`^0NKn7=0u-I;hX^VU&#~kcjKrig4eaGm2`v-*zQ>VswzO41T4<)f7xgEUQP< zF!`t&wM&BF3@`>%V~6LPuw>rQJkbT7XkzlXeqwk#d^dJA zmc=asTabBQ3Z?QO>AgPP?R&etvGqQRBkRR1O}5LTP->6ZzG=eNH#f}P&i8_T1xR}P z{lIKquO7_=#$r_ZOUqgm3v1;a!QYg~hQtGk=D-%bswb%k0m8-1tLE#)C%HMh$rcLJ ztI^`&H?_^qS4q7C$Qp}=KVhidMUuab_l3&*!w=*KK9s_VD>9k^J| znhA2rUpuG3s^E^nr)u;dsv0@ZYR%9i^_%Q6Q);aYbQg|ewo~~qIXz!kr2@56I%yo` zf2@+J19l*lY-3;Y@Xb7hmrawNn~IB@`Mkg^S}Z_^@%Bw`daF@yz$8qD7`$T4He!)6 ztg4fCXX-Pdec1VF{$`!8kmVB3l?x7#Bi2dgKW$2>J{N(>@j#X_$fK_3?v|}Fht)l$ zb}Tk^!7F@z{&$WqaDR8zB%Ukv(=0Z6pw{LZgP2~<2=hqXyO!_mz>30~@6=MCTdVI* zxHFQ^bqne^*uT}tCCa;rCbkuMDZRWUkTksbLTsN*-0`?=6Scz-|E;BPFQ3l<`naclg0J^Z+?;lQV^VzG|8S3ha^;Dz$CWSCWf|J^A!CB6B$WiQ)P z{mm*a4_zcLTf#Sxz_9APc-fA3zDU>yAd~NH$A7qa*_dFh3V4^@;&>O`K8*xb5I6_P zaG6nJk{LR>O~zkja~E10sT;X?6HI^Ft6x{MXh6pFfGL&4VLe^du7 zidwGTF5pE+@(j#a@vMK9uH{VTZzZ%pr;W?`VA*Y=ED#M_i| ze?Z#%fA^GX8UzM+bkDwN8on&!GkZN-O;4fJ!||Bwf-Y#n^Od(%GMB4Q2N&bJ3bK2o zOb!TNag+NvPqCHga)StVJ!|iVSS5{?}-dAJ%H?WoK%ZmjA&}Q1~$^&AxB!&veOImilH5 z+MVl)r*3tQh%1>*JXBDB&-FNVr}{N6jr@<`QFnte$@jYu?7-n2v^q2ew`aW4RP&Q2b9x~rZF}TaNVhFkVrK3B2 zkhGPAeoXvaA!I`3Aea9J?h~dwRC?IYQ;@Jq?H(&UW7{3JW#5;#Wf8Rf@p?p8dY6ZH z!Qfy+0q7REjGe}`EH2gS*k~?geg8-ak;9351OL+qZ+8nC!obJV`81aGu8 z7B3w2tS;$7EKv^%0RxmDILU_9Hw~s=mWH=&m3tx)niO+!GXzu%{DV0~sP zZ|xGT@()8R>~+k@9x6{u3%l!>y+@jT)~vqQ%L3C~x4zJ8rZAw_oSi>bT_6w>q{6eu znzJ$UOG(OW3rS&X?3s_`;H37%g9qb(1`$4mnwei!9v9rUoKkc_?UZ&#(MwP$JnV4K zHCPhvpw9=1VxuyU%c-5C@fBJQwr`&@I2`HPH|W8mNu!Wlhx*?_z4Vbo zMMI1__~_TGcdU9X=16t)8X}J;a(w7oz7oXk)yagsApDO4sdhj&y6;m3e`}5l-8noQ zEMs?3ORWRA3r_ZvCJtQ1^1ylfT9;$WJ4Jv_lYI?+pvR-F-0?Ll_s|fUllv686F57V_zp4Ya`8)zO#ES54N_y-TA?EzLKReaAbjK<*I~ja55Z6J&)-X z)S;&F89Q+q*^(KYBUE%iM#=0#Pg@EO7sr)uUPXFz8a{{)DS)~ z2qzoO9l`Qu&zlNtFE~}35)=Gql^`wt4vUp`?gXpqqc$T%ptuMjf@~A$Gaw>R)d858&x8wiag3%zgs{_{}Tz>H-epXfQflaJOokM4gQrxlE>6 zAZ?_C!Idi^DpIHOdq?2l@-y4SGRnl06d zZX<~`uV(8vp)JqF()vV-3lCX$3G_Wau71BaBlDE!;6tBNbhI$i9On5=v&3j*J6q7E zd|244y6-H_#4r5c70mU9$Z|h3d*ZVo!2=Q(D9<@D{ck^qTt*v9HK>jfl-u~MdgV)4 zUZbaR5gDLzeM+{yZPTJk|d_wX6nGUcef+!3`f?ZT*ocS_73Xinl*UG z`6m67Ro)l22ZB4wx_UAVsMBK*;8OM;1f$n zzKe}N`X`}4C#MMWv(<&Xp`2TQdlJhBt6C2#Rc{M%WP9}1(O(>o9Ar!QkA0g8>4GFW zQq!GHTY|@Kxdqcr?K~=+UwkoiNwDlofe7D+TJLhfCGzYpu{rm% zP!Mg%GuuZhx^%9abkNE9jg@#??Yde`v(4@LDk^cxGAx+3C`$M(^-KNX}!d zc=PvO+;-~rR6d57FMiZyEmE9NV$-KYTVc(RXBHc2t75g8j#*Dp%Dc!(AtQ{JZ>J(2 z57y2IAvZ76bTbX~my`y!=ueyHe}w%IfaB zCZt|cxPlYG>R;}N@irqT#+fQ5B(RS8hlN$+E+wv01nO_S9hWaw!hcv#cNKc6a57gG zMqvdud1&3Gvq>eTFc+<@QT?K)%HU7`Dyqh9SHYrv$`P*$3hA8tOYYK^d$J5*6>)6D zoH&#A!1{$EGD04QZvMu|p&j?0n8lbb)wxV+0II@~H1iW#0khZ55L%#?G%oSaa7ST< zS>e#DYw)lo#P7Gm{;Ys^b@^nOc*D`bV{fuB3y&WA&XI>oxYM1MoV?q8jJ&t(ay$g`}3NHJtxRR{#W$r)@DwWzg-U zuvaL>KqLKRVjdxyp?*U z0{GOmY1YJ|n?^zPV+Sa6`?ze>QOvcG>BfJq_7yHdWk;HB5o`26Z(hPf0Bc-lba-ks z=RW@h6>1or_9Z}%;(Q}A1WzIF$<5xjt&5Km2Qk1kXE@-pG2hFZ->88q8eDUQS6g2< zF;Uy1mwW_Ic-9`%!6UHKs+yA3ZNQF;uX?P~h00nqm4AO_%*@}Z`oaDb>qBhT#3BGCImYM;w;dQ^UjbrPqeazYZ zMc)Y%bO!fQCUV!h&?p{&+d#uUsQT){1!2p!ow`y_yHvdl4I6aM3{M<7DW#u+!ki8E zM_IMcDK_47;ze`KzW{xwal)qVwkupaKjw%9J?8ZRRLPd?=Pg$Q&?#(v4a8# zqt4A#+4cWyu(^Hattg-YA#0>#)feA}ieA2r7N7T!Hu5`N?P}xe8l3o7C;rl%k>5@G z%>4ubz)z4s;EF7fT=^WC+;X^BkiqsqM&hOi-bl?a_kIvDxdA33{wm@dzJoxM|D9YI zVLSU2S0D>ba7pe;w+pJGFXJ&wqUkP@sdPpEW}%GFSNESc>P5eqNlOxiv^VH>nL3)GH^4rc0YEZ8#)YlHx z+9-G{=`rF0a!zZC2^HeczA_DmOFAG0+NAM4v7cFsrbbZr4Hj3tEi|`_LlIZ_X02dW zWRAYOUpbep)rYU5!hbVrH=4C)W?@$RPZugWQJD4zJXA0 zXQFB?+vACY0w&DGq3_3LKuKE;D3YwwITZqbCic%~s*-c z?j_tO1s|EcO~QU?Bv#y*wny+t#| z@sST6f2nz)U9;}~IFHnlb<;zM;rPi&UEdhJGb&nGuu`au<$;xYgaB)<&=BH6;R5k4 z-=^(ft3ODppWLfsSxotIN;P90uMMz?(1#ROKMJnmJO`&M#kJj_(I%n$cAo*qvNSNN zYKdIDZ-Xx9cm7gE5j!B-wopZsi?tR=Uy5u0S!zfiKW^8ORGasHTOAr=Nu>(y_*lll@eDr~O-xsq-iu z7Y<90ul-|xV zyBhW3J<^4mGe8nj^dfuSA z+Xs>qZgM5b2t4#_pRU+n6HIl2Rpv)UHYobc_T?Sx$y|@@@k|dz>9dY8kEY|C=>Z>h zpPh3g7;NzVMdL$a}A_>_9#46rwF9V_nOL>egfeh{ zOVSp{at+XZE`VW}mFbcJz{4d|k^=wwQgv5iw#)lt#hka^^e07Y*E=UA!Sg(P-KUt7 zcRm0XWO0QSbIR*DhCK>7oUAf<0ALKUa*Sw60%vH&| z=8?U9Ac=`6j2oqEk*7G33sIIXZn@weB%I`Ycb|Pz|LmS6Z%vxitMZf8gzjJ`9B>Nc zQ#wyW1`D}zbZ>=(I#x>Mu7pZoE1in=XMy`45to1TxSi=Az>-nWyESAhQSRJu-s8Ou z>HX7N7}#K3uVw4Kq)nQ|J{Sv4CiQ>Bkgi8O$@NIx_9tHv9^BH6FVi$^5Gms8L1f*a zW5bC^*b6$2%&@ZS-R`d_I$xT~mLK1pD4_Gt^KMT}<9xU=#4yC)(ZdXc$Fm)oWoot5 zfGU`#`DT5w{NH`Reyzjozic@661ekpF9qb^^I9jVnRefT>EIZg@-R%s!9oZR9`i2m*zUvfXqVPEu^~mg6JjS zugE~C2~Dok58dU(02pWhRQ57Y|35!@o5@&*k?Whh zy85uQ-9nZI)g|$bA$k!P)b^>HI+%WMzOP)1D_xngx?W^JGV3J35rELPCd7Slv~JS6 zXF~Q6)WtaW5Z8Al@`wO|ta#r{7}t)-p^4v=$q;Oum*xPVzkObtGdRi?+}l(4wiuqQ zl$j2_Y1ZzmSnc$<|HRkZfZAEMDS)6UGUik%e(!qge9RjGBnYU)!)@WQ{|N*wG4TGB zsAP4YhP5M^1>BW5VJ9Hb#&O>S^UKn9L|0ZU{k7%Hyl&_{0BX z?)NeKG8nTco>|~MBBMMinXRoOToq>P z>>iaA$G2S9jdt~szyEW;kUoHiE4Ml9moZrch_x}hL}@eV@}x`=tauFTi*wAf;C2R< z>w8emoc_o^2Klx@aQQx{g}A`Jvtq;qkVOmsvxyKKY(s4T3RM989!RSTMT@!=JGZ;o ztgKOw_7gtB{Ias#d|9N5#dyzvs;p{B{rJtVpl+5?d*Od%a%CXz@6Lft zcWh$G)sSwK*ugl?j3zLH^VF5-p;O%V$Sqak+(sO8rO*!^)?m z;Pc+#KZ)%Id8a7vFzfI;w@3Bu$11YPAaR4SZ4Xp#J5eVHYX`uuwHmwOWvfG4kgp53 zf9zlin&)=AZIG=IiYf!s7d(?$20XjwbTkGn_6s7%8Xz468v0{ud4zUbf}5>hEK%af z^T5iaPb$qPlJlzLnDCiuyj!Ve43}6s$|VJUO`mop=R$-0r*TVF?Ipm39Oi4km&=mh zvXqvY22`;<)ZI~9VFM{52>WS83iS>*nXFo+JFtC^LH?oiY5e_vVL!z2GQLbVBeTYH z>*iB3+#vv%jf-xZtNy(=AostEs4?(5n+G+gx!vD-$X*8cit&&9|Ln2oW1zv2AQD)@ z7{<1}DaNZIg@l=nb1$YFDUt=jxm2qErl_x#1{nO8+;+3$zC}b6`t=G^lg9m%wF*$_ z?7)7G!pQO|I#K=KbuFLafnsg&GlWIkX`89lnYaQus3&6rClvw{FHVmC0QVc@Gix#6 zRS0pn-rkb^adlJJVxynJxGI6W*~M?kd;v`W{x4_UloICTrR(q8CGaH>D!?1II7$q+ z892nneqX&15Qs9a`t+ppGz=3mh|)SkD7swkJXM+APQPZ^-9;ZQ)Is+1^8Zv0)CVBn zQqy#yBJG4y?tJ;y5sFd4`b@W~)aw@ru}K1Q0eR(r`!DngB6t^|K9>1}Pe*FT68~9a zufuDGaCL{|FQ{)iO5zUJG2KH(DB9@_sjXd6hKnmg7W*^bjJQmS60;c!bGPA*l( z312*O)f*&1axDDt>rpKk=FFGR?g&GhA30`Jy>Rw^j~aTVP;cb8N^HbrG!{N3GTQV8 z^)B}754n-QsWBJ$G6d}kSVmp&e^E5svwb3~p)yP)7t)PEkzwNAcxCt4UUR@4`bEW= zr6Glxh(l+7D`-pz8ANJ1D6wA88IcGR7~EZeCC}g!8~XgWZLTM{ZHq_bk869&wCQsg z?0l;l-}43yBOPi?JsiMSD|r+aLKE(ZS5@WM(T%a1TcZEDSq;K-c7e}Z7X(1@n~GG# zMPLp=gXkWj@?wf!psz^FH&K^c-S&F+>xdbSFOAbEhvZ0KsAaezrC(v6n>RlfkyKOU zL!GZ0`uUzl&J=N2^4z}Z7ht`JUe*NWO1J++E1wcTjTzH>@ykKzHJ+r?$mlXfFYINj zLv;>Lj-h^`2Egl1nE85CU3rdVeW>6zr&YHg$9ZRn@9he<%$4>Y0 z@o2-*C$B&G?yM@#BD_ekCCeL1*Rm~~(JYHO6tPP(YC+uOp=ph_UVq1Yms03yI%0cp zm2uGr59m7FB)tt?NIx2XO_zQnAzvWsqS^FasnbN`y23^ha>dP#4YF~BqMHPuesBb< zQP8kGfj}k!jTfTo*N1-U|7v8AZseb(l(YmDY))v3k$U=xhrr;11+(}Pe2OZ*^uAJq zuLDA=+Afi0k)b!3Q+Oi>eH>crwYg-si4;`-WJvV%_bfe{|LJ0sUU{89hJP8u=?CQe#42o?eoH;NosTPY)u71nb$5V z3;1clpZP^+W@RN@y(VW~M-Q8$epR6xvYr^G7`Z2C1shvB_*P;5HQLa@Hj0Q2Px6G? zxSY78FjRrodJMSr$x&69oQlpK`s*S%qf|hPbt(pBvb?1W-41VeAt<+&Q~5Me?F%fD zmBxr{P__~DvpMLoR0_6OC@njRre0Q`caP#^-^v=B)^Pr;1mA9OJ0fM6($o)}W{(JY z3W)XB5?J55KK)UXaqdtAFfqgbWHe*3z`Q0XlR(o=o(z@r5TLS ztn3Bhz|&D5fkDe3zfQzo>VLB_JT#0lcK6vyxZ(A73375+r*$~rXcuy`bh%jRn&LwW z$&}N%2+qBIvts#AYASVav5w?Vq^|*c@-hVgzBqI4^!h1Iey#S)F#bxQ_n|1~oRF!q zx|LQ9$zN+;(We;keo!Vh5|#1kedBuS5<0Vc$f_XKV3bfAx-(42maEEn7Hh8}M{Ufg zaCR`q=7Z+ca5#Mv{iccPRd+OfoH$55?6K*B%LBz_BN9L5EZt|{?1)O?_K;*O4~vPj zf#oG}c(!-A!`_zl&^NKb-Oov_`Escz3CLNENSJoljHOS5q>e{@=@XYVajnu!9iML! z7RoWnr*8YY!YrVsIxq&ZwXaM$ji+w{+ICc3h+v zn;cD&_i*$xQ0qu)ngY6rufh)vEW>wyQ~t2L z=;&AiP%v^+aU5DNpwlGIYB_OeOQ!R-jIB`cw!i6ItkvQ!ZD*yeqhsjR?m3*M!#G2b zLThn9TI&0?uvo9SbjfQ5yg@D33#HCC3;jeH`}C~#P1fn|!F@z^9refqLrHj=X({wd zOKpR9gvxSKUZA`M4&o&z0n14|)By+2!?}Y5yK?^QwFC3@9w)(c$@A4jpPN*d^?tR- zvM7)lrl=gYQ!GW1vMPZ5WQ}Jszd`@yUf&BycQhbkV0p+J(BCr4rxeGPGjbQE8NRz8 zM;djz_M!{yR=H!ZujB)d(nnGa`a}uz^^X2tXyU;Hz5K&@Y4UdKvNq$=h2+*cp>kNw z>)28A6+Uhqb)0Uj#OeuU=t;QQQ*bCiYkB0PQoemT*n-@~0}=uyZcyEf)-qHit|>^z z{+(;q!aem4W6a zf&Eg*MgL30Bp>K8xOV#%KD+gb#PL`0@GUJ`BZC{`06kL-$W(|r{&$|)LDQ3}SVJNl zb8tS->RBwF*<7rRf%&(4IX+EVnya_egX{*=DQ@L?ObSTTU_K)tGRokD;b8gMQx>y) z!OWO8eI~Q~0&2USzLhCBv%d2)O+%dq15a#-(BR&JcZsImh7gWtGRwXHKLYgvzCAS7 zdFVavOBU_9eT;ZY*ikMww&Hfgvw?SF8NC%__-h4?^a|^uVhDYjFF7!HOT=u+^HC3Un?ANnN zG$kE(LHGDt0j41Fju=+^lXryt%)vXY}G-NYY&>Ok~gj?hwJt zq_H)uSY{pGx5Rnm?!&%{Uq8ocRQe~SMzffxoV>8}%xG(H|GSq@RehDkds^Z8*A6Nd zsxa60>wl_{Op0Rs?Ei91?e3cZ5vCv3oxkExs#!*BFrQk;bft}hb`XPyMjDuy^Iz>`m$ zbAP$oWTHi5$z!zWN}WCGokPZ#zTPH5a$XV)G^X67`BBg~vz1V`e;l00lggeeTcZ2* zSK$MIpUf(*+(*nR*2E}+LL<%m*JUMuaUaujh*vEQRfe03zCWZ2)+{I-1MT_QO6tkafDLo^I0Q#EMswYrhd) z4wjZJZ%?rQ-fbRwd$}YiuRW@fcTZ3zQAtQ{c$4*pd0(2_v9?yKp{>prQRM?Xl;+$< zb_WpljqKVHY<$ap=g9{KBfFYIEP14mrpcheWG8_;2^=}x+hYClxqeYQ{tYk(bpXav zc7{wMa1&l_ZEcvmSEa5$u2SIb(gc6IPXAWsY|rm36FdhLMkk>SUXQHx+Fl?Ly)Po7 z10KbzkviQsd6lni;MybWb-0)bTI$IHbpog7LJ+(@${;swHQ;umG!7SajK!-diRt3+ zkYO*9@tk#gWsfz<4{s|n0nCf)((Udha_bU`o5Basghp0NxbWfkL6BburrQ{Kz;F`9WXn zf`iBkjl&iNbucVP<{&?8gVJjdki#c66S3owJ?hwzWLeB@NHCUvBa*##6@U@Q8+&n~ zsT5|QLMvp)^F!N^k#3BWZcN{;b(nM3_Dj=RkGw)o`9cDf`*wDfxtzLm>r~Fx6wd4k z5`$3`?k#zE2v;reOus#co{ao2n)$prQd>RnbzzKGUE>;ZsdLSJv7i@b-M{LM<>DUv zU2x-Z0lAFL^zI=-$2yqo-FjN(lPVPbY>Xx?x$E0#ou!yH(Ya5~L)?lVT{)Q^zPJ%Z zv?bnH8-A;TtIK2X-Y< zH_^?%ep%1_j)In$e&TI7cE(LEIypJLTYn0_uN=<;rd?12EOH8m34 zSQ)NenjUma-}jQ0b6@aGI61iW6pY=}!)dALBQ)V`u(!3f!CJers_n35?$)BOCNB(b z%(>ky_BpV4(;sGwOYTn^>%$4q>#X|`jp`- zBKs&-i_qv&*_g!qk{R15ROM+=Yf+8nUwL)Sz2Xw&t*9t*-RI6mt%h<#B*@dxe+fn` zZbEMz;)CI@_ra+tf8|HK&fYFz-c=uj&EE7F(tNqv<04JN9Xj=;#pLvjNN%dWQpNnj zn#NJt@ZLh?>up5KS%q4=`&{d?h#(8Iil1ad#3T9$Umq`#lf#oT@trk-nW9(Q`?6O6 z&`dAgYjRaj@9f3nllW?fw?4qS%s7 z08DC@6Xm*c%i?djCsy-G;M0vL71n2>WMt+xfqxtM3M=eh1U1jgx4WhJ-3P63&^~p6 zeo$$pw(;jStkpGX3D+_=&rsLUxYAGQ?L0Xk8SV-<}w&B?$1z8uzsWsrqysS z$B#R=^SDV31`tbSeW3Ts(mv92s6&1H`0*D^E&th3V;Ob%bjs$drkQob!Ux_4O+!&0ZS&(SMxD{ap<}WT?#axB5N=t7jv?nmGOc=5_a=k2lQygq zr!y*N2$A!z2>l)VQ0~2H@c>L3XJmK+x*|`jCNfGNdN0v4W4U8aOM5b4*A7Uv4gz}5 zu*K}9eQC>Hvtd1XhESlR=pY7si`s#9<)daS>{q-!bF4T6{W_(Oz}Hx zW8)JuQ_}@7j3!zjQvTrWqhxEBE}`jet_GcQ5u-@I5xo+3T4trW2b0_#eq8ioi!<$gD!yDnjQt$s8T@{6wk4X=#@I-pFQ=e>Z z=5Tn=*R3aE4tKgMS3iNMKcaJA+fTeALS?mw_ama5(5|X5b!vf4^d~U4t2@~p(>hfx znT?p6Jp1OwUb_rwPbwOmU7wdlQKRMrH4e<|XJf%N3CHlu!1=T~8W0@_|XFkL2 z*1JqyM3KAW$nf-;--bMHlo;=wGC{+N=!&|L5n8>R0fOQ0+myw)Z z3})b==$+JK->1{C%=KAaA-m$jze7E$P~j$i&8eN-KCDJuOXkB0;JuB)un!}2%g=x3BHl z0NeV5vkr7=GLl&+T^Cls!W6_tkz-i(H^kXzvX}urB#DSTfIKD`P!BxtYW~e>!I|xh z*a0eyJ^bVC@Y!q5yG$3g|L2_}^KDm_-N<`)6H2YmH4O9@@Jl{&^Ur9gdO{v5=6I|+ zzo+4)U&-RKu@(Bk;jw~;mvd?=3PD8V2?Ulp;|2J(6fty@hj)~JSWpT*33o13 z?Gz(vXgAiXY`P!XmA~y?98#!{cic@)wGkzBC2U{*!@tHP=ZAx&x7Be$kG_6hzFx(( z@(PE^0tA;1Cz$-ClW^}#@|ehOIG*KO>Pi1l?YfvIeLO|1sH8-YcNYVu`<0U)y%HI7 z3^05oYO|c#E>I(`rDqdD$Gma`Z5o$)=$M|JmPIOlm9{=Emf;^I3>F^ zRO}&77kssJBxBx9sU|l5U5hFKvI7Apk}#1-&%H|9UvRftad(6{6wt&!qx|)>ucVa6 zm*e1>ts}Q-j&WB2GI`nm(Do_vjwqjxUI^m)u-M_d6A>-fE9&Q1{f8mZaK7HccOY19 z@QU4wxY5jjX0kSp?3)jWVl;!P5ZLP>9m`{PD!f}Hq%{a;&=?#uKPI{J~kaLF^lIne)9ULyP6ifsUBts zu0=T6t!U6vQ21nDyYYN>e%@xR(&_Mct83P|>hhlFR;LK={)a_$ugaHx>wZ}Z1EfW= zXU4FRQm!y=M6dF^)2`D<)#V|f%gtOn0x$#9QUT9I&OJ~#LE7I%7EE{UsHSPK5HxfH z#95~OHE0yWrRVid(TB)imLB%mDzHs1<<*q5;_=bNv3FL7okzLv4emn%Nx?PZRT+U| zPo`fxVM(a3a}~OTjB~mT3MBj_`57z`O*yMs^P8Xbxmc%?>DLiiF$5)92Eapj%ph@~ zE3C5A{Hqf?vZyTj-lf1=Fh~2DLE7*a$*(3bSb`ge#ehEYOs@z9dHHVOj`~SwnKZRh z2CPRfXFED{o2=l|4x$eQ$7=*gd9xp z#W=`cUBD4MOY(`ER(pGhcP-u=HVEq%Hf980#KRt3iLk$mn(_U-4n8iEYYgz%h?HCX zoetbOfxQLqA4V8fI#U`YUb6fG?2YWK;p_mJsV0Horc!SCR{NutGQ*(ed#uki!#d>YQO#xB%bgR{z&k5wDwl6vW*sW>+8%Zq8F;n-$X3;*3tSZ1Y&8n zsW=wDn}T|Wb&gQ2aaP)y|Axttyn5K4sO$_o$yq;iZCxiE_qMKJ)E*TE(T1diUntnm z*XQoaeL3R?)u&}`WM{l}*Usz^Xc5EEoIW#PLIHC(l4d9JyU$h3vs>J@t?0 zhS?xWPo6fEX8vVXsLxn4*EsA%5-v`G3BTpRUw0RRX2fH}H((W;OPd`f|2p`>2JEk! z;Y#?IE2C$pUI{U_5?S&sQsdIFI$yWvd`S}`uMSZ5NxMIF#PdDiUMzCgi~n_3 zNaemf3gr|mu}NdGdigw2-NXPI`zrMd3{C9p25~eEHfFE*ncv|p@b`BIpN971S7F#I z&14_Kx{DMfDi}7L(i>MoBJ#-fL4ZUtrTGMzuKgXjvtU{x8s>ROst^Dx7S^@pYhtx| z41M>}+Mw3uB-jfDfwy3>hwo6nk@6B#SGZ3}mNi|7dW9-cf>tp}_+Rp&Ysg>0Hh#uc z<*R(^dq_*HsBT)47;0%m3d{^$@^6!rGMh_y_uSk!?jb>&we4CbpGMH2Uti0OQauDc zMZwHhel1d3%?A3Ue%>}Mi&PSdsh3~J2M7y^Al-0~-tRmlT>PHVrbaIpH;^;>OyKx6 zlna=q`(@r11vlGjdO>WJI0ZTcPemb9X!q82d}_PSp-pUlg4$+ z!vrqV;;(0}r@aR!(crrl4P$8{v8(F#pY-;8i=f0EhMB5 z1O*Lt+c=({p6n2vxI6PDNsAiPI4imhH^f@L{-B%j9o$k!tTG6~J)5#gUnudoFEoNt zGcabgyKr-lEV|t#ahX+6IAt*R)&aS!gBW{4QXxO|PReBAN@K|Pk6|6w?>@A6Y@gnp zLTeEST3@GaEjIoPx{wn2Pj~!dS~Tv@+Jeqz+A&*0h9Q<&`!C)fP85HxKBVAY6YkNk zO|;4fD*QeJ*_f-UV_~&xH_f8ZOmDRsY%A$8%deo`@)Q5oB4wtT#1_7czq$K<;iiqZ zmBGu5yyMMlXPgZO!`qF)3;_ms;qUtIv9?rRe)k-j*iKtUqDSWVGjP;w>TC^g^f~1H zUk<)VBHI`u`y6t2+vrXAoL?h!{liUQ@CC`6`Bg*jK|ZK*%Y<&UF1-M_gW4XF9XLSQ zp-!WH-U+XlCe;-hfSp_(v&$6I)z@k?8E2w3-{uBUmknx(#u&|J{;Gy{@U7iydI_#$ zdGqGYeo1XmF%*TgjK%!ZfA^AEXn;@xZlcdkPXw_f0abJ~;Zshr*VkzJjUxXH}= z{iJmgsa(-(tYs3e;~F8I{AUQD%Kqf@Neu4Gn`d~B_Y(>eU8Tjs5-ONS1rUG|_`q1(jQGV|D{q&S!nX1B zZyvEN@}<~!Zzg$y5*-_NXt1vL7Oo@Ae6zb?PH&;ZJkf|&)#XAYoRleffE=s^sX?|z*dgNd8`r}56$ z={{>YMa;z#%dTMi&v*V1*X)e8f}zjMJ!K*^@ggNq5ob>yU*B26Krnv~!rX*!ftj4I z*$drkIy9=VyC6%DwykmY+Zm;A0G`U;$gD`Ms*q{fOz>K$Y>49!=_;B_?0()Ke`X$G zeQbJ@Y3V~nK&ijFz}1q0GJq1Wst!q>Qm7t|sC1B>z++@2@FtG*rx z_u1&*RuxNK^LqfQ`1Clh+)fWvSFV~FCJjhr57fs}*bVL*Dg-jf5X|h+v~jcdf+Fll zyg?Sjo-W#Vm0WB8bM=+aGL=(>#f4R`c+}sT$&dg=pD6ElIg)P~TDB!F)zj;X#|;F1 z3v|fs;Scb=??!KNjjotZH{}ZCwsW{(Gsa;;5B2{AC40Bhlj2Yoid)KsWX>JXV!4!p zKNty-Fd}s`2#d>77O?gs)eX9%M5GDtES29i&(1oksGU#qw?z65iEEyn9la z?mTMsrQKemvKN|;?Z!H0dNRZ|-A`z~mpPvEv90`LTV&%bV=CApuEy2PkA=m7uKAIV zOB&oh)%TSM`~(c)g6zyHtq+W$hZ+UHb}T7=-W<(<-z=0eNJ0%)gyr^}ZsfecL2Y%O zP3*w#6R5k%jH<70^xqT(zG)yl5$=^40U(~GM9OSl>^;rIQq{U@H#O6*PkBF-{eh%= z>8eT2I1cB3-UdP5cQsIKf*4#Qr4A9MzS3Dy|n)H-cOV|oEtv(Clhs0Hc=l7TIOmRHU z!m~^Q(hl3|4EkNM!k0thN*V)Ot}{~noI79{zN(<6_}R5Y3OBL_lK=MN0QP|rAPg~E~)9)sl zqXoXBMqOwv?NCtjY^3dsB1NrYJ9}sWwKzwb1+~D3EPc)ilap-|f`WA|<=0FaWN$?9 zL^hfCe{R3l{$pELCe)ZRSaDoxHl`AxvsB=YRWtmgR|O!{8lNBFDbCSlVm!)sGXILO zhvY;Kwkio)2BUJKrE zDLyD=WsNma_{neq!5|{lvh-66Y9k7|vl@S?`5Os|8G@PT@+e~JS$2z_CxhRt$y=>e zs|g_ zNxXDB={i- z%@3S_GA*sU-S=XZTSUuSf#7sCu1dudMK4>k;&lvvyc9=Ex8giXm@?T7a+V$W5KNuL z&cI0B)#{~YR6J}j+nRwcgN=`dTfxikfL`)&_<5c4_{YEGgy_e>+?}`<>5lF)+!X6b zHPNxp_TK5BFe{VCrZtjMnHLh$<%KwoTzU6&N9JDRE0^tO&&nLZ4-$QjVzwnDj5w;` zBA845x83%|@5WU%A5JBVA2zM*91edBuQq)fJeSvsDV)?pMcC6&fIWUjS317p!CZZc zVO2QkH927|Gk;&+qNwfalNeBo19cNBdjQ>LT5bTVkI zZnVFNx|5#hwJ|c~-E&jW-3dy>tL80j+=cJbA8a)Rq2 zL>lz1oTeTZP|7I%%O+%NBmO__eR(+4Z`8MT5#?888L22+k=>9bGD0aSG+9EjlYNQN zMuj0tO8k(08T(kWg^W*TlxeS+DX{`-z325Ejaxh>YNLtz=W+)q9O=fC@QgP|px zh95ZKn)1nEZWWI;+6X@;X%(AJ8hQFLn4u?wtbfK`+&rn3=pBFWhm7R&upJUB>wb>vJ#~;9fM9&_S2({|xjy<7Gm(sw zw&8qEXJ5acH{yN07W1V-Mh+F1QUSWZQ<3X59CbZ$EDHjZiSW{g?j7g*Yju}9IN zbLi@J6+mPyWl=Gae6AQmM2Ve25a>6Xe489(4UcqX$=bSE8e~_UPYxQv^x-@J=hjVZ zj$U#1>SyZSk#|PEJa%2>UST$G=H+51^}Ipew0or+af{3maWejOrEuTx+djNz)x|%o zI)F~iH`Px+yd_hbh@(j9{PnTLI*Qm44m(`RN>l3P1&shg0jJ_z+BEfbn0-)t$9vsG zxiIpBISpcge}swUDr=&-uP<{NW6{9LOD@VRbERQ02S3YF45{RVn-^4ZMT@_} zQnPlnXcwV$K;nXO^025XRuwc~NSjdeOt7eHgdw;l4(;S>T{q3>DE&5vZtK)}c1Yby zuR;Fpa&I5vhD+PIs7_%OLAT-Yis1Iz$%VAa@fMi&&T}b0AkF%arS9ATaG_zhCv+e= z57ZF^K@|>+>`-#zcUl#w!lyE!m<>0zrj9~(32WnSmdupF7)E}Ue|Rfv^KJUiRcR0b z<+&F-X)G)*6^qB4>c>o$y|Z>+8kKYL?7IsaTe@@|HX6Q@>O5KiSR=EON?Swy-?I!p|?0{);wf`MyhXiDm%3?vWPlKZDTv!v0F*2bhb$ zql&NxqsT@+E6(0AKTf7(edSgYa9M>FQD%+`=d+5|W~_d6^`&9PzHAnQH})Pyhs8;z z_B9C3pmbv(y5k2(2$|S_;wr(y=xVT`nC=zm2%RyMc+3sst|=Q3uw}Anwkl*SHdhvT z8OC47?BF!9&Qox$Rs6Bs zFg^VFoYCk3CCBG%6Ce(u=!fKa1{R=@KvRyH>O`Jzc>?%jI7$kT>yAMWuf6%VdkzE`QPBa?BS1 zs$`#u3o6Pg(zfb>sRx7wRIPY!__4kSF@Ds&d%KQHntkV?*0c(?XJ zR?7QA(&RkM*f%?r)S4d+(5>73Vz=$mjV~I{SqQdNK81Kn(1FM|lV2gR5CFyD0wp*x z{bUK5N+ZEL($1HQ3OwKU*`$^AY0oYDoq2ng@VG8pO07Sw)9#&g;kmBTTEnhjfdrDi z3212CQv9PeG}4e^AG^`l1$~1HzDteO7QJtiL#r=EcHRcDL=Yvxat$Xkv{gmhz9gG} z8JC)$b1)E3*Y?V7fAl6HxhL-Hnj`oFOM6KB&ebD?JbzSOPj6k;hcVZ~4I?)K zs_vyQ^R*UD<{gua_^_ckFx_+%{Azl8SH)8x^hBba#Lemsp;1A<9yI+Clj0#rsl4GP zl!{PtD%1n$!;M)zZEH2x*V?$|tA8X(Y8Xu2NHfSp_LE*4%wYq#ZMu( z?(9Xi?F#H>mS#q^#_pLb7Ykw)Qc2;){2zE$^ZpSu02YNPqogj|W*-rHex zgXwK36yA(Ph(s-r(HyUVli(FE_MACRLhOL@94D@x#mNV?+`DNNsgaVMQ3swwhS8TZCA;7M z0EK&7n;yQfr*FDr7j2~AGqevDE&%2z#cOZ6Ell4DZ~HYVe1`1S%{bCxphJi*R%t&T zYyuU+#LO&#pVHTEG{vkU^LiKJUa^rHlP9aj^vMtmZyjS$3l*1Iwn(Ze2&OkV1xa!U zVA8o<2Q51r^v`yOBpDPXggqcM_fB3QWXc=6S`!tkZrToF-0xg`R&Px2`fmF?O0+v@ z8y`c6ip@<@1b&ERXAu1SUDDe1t9a8hEGfEFq!F?st8!!Y|UM>QD&r z^Xux$k?qH%`39cX;sTwz9JWl5jOx$k)=gVH@?~;?EKM59vbv9n)EtY9F^(FL$kQ&V zv~Au}D0O>KsN*;PP?>>Pv2O?MAs(R71EhR2nND|J()=h{Mo6SNr9Xyc`Co*sHq zg1j>AexCSyyMTqpmJM$IvKLO7BZrP?qnd&1c$YLJJDZo8RnqQY(5+(SKJ3mg6&V9u zF975`EvkPkKSV`K^A~M!1)Bq%+g`UO z$L*ic0$^5@J5Y5EatyF!51Ja#oiuAz;H2JzEo(V&-gWSGyJujlUbvr|W}{jZMWRIe zv1h`?`g>+Fu*9-;SXhA{4g(5w9i(lzSTtXI2<)OOP-w(0iwwDNa&-)6ewCJbIxdgxd*U`|VW!&_10)quL88BS%gNuaZBgS)(wos?($sZ<34e+!|d;G8jpX~-ZpqNG)l0~;NL%NZRNWC;rJl1__vRTFQG)>?}z{S z0kYxk_VHgRr69SEJ$X0$j4y>kC&MQ?PiiPymX;~-e(1jRW1W3ic`6vXJnOXszP%;_`?Tibcn%VUJCx5lQEM50s_} zo(-t}=QTTAE-WM@_D8Xs;OWz+`6OaoVzzn(NVES3I^YPG1>c{Wp*Bi2UYiel1G#A6 z9rK?(dqrnFJ9DIh_NAvDLC0mJ@kEE&rBGziE#TSS*#FF#M%^(uROQK$|CfN9AN%_H zjy~FV?3$jQUY5oMdeyDH>hFusGl?JZ-otP~p(3PF0d9&}eE0h9g;;xp02Ldc()d>d zieHR(|ECn*5p~RCkSWT!S5*ZpAijepI_|M_P@YD&&PUfAR zosZVjbO_Dgaf@O=mg75rUf-KK--HlyDI#U-i?tZHSVsH_2`-JWm~oQ>yX{~YVOA0IFMw_W3rX;?TCzXJTS~E{| zxEtH3AU!M|d~HN9(ka5wY2lSG{n2*n1N&^fJo~;f?)DlqZ=q7G&;16=V{k$EYU!`F z0yPyCU)<(uUz&E3CTNHDa6{BWvxYDykp%rjG^1qQ-qa5@e+l7USYPTRcWlBg^|vWC z!Mc|(2SOSc8Y~1)eN$wJZImJfa~X~2j{bUYFW=y{dttwCS&nVDq=9?CuT@`JDX56^ zXhL{<^1*MPK8eTz0URH0gzMBRb|qvx4yl{gz2?W%1aaaA1_nNfNcDN;hJ=I|d%>Ra zq#U#QK&?0o8whm&gwIU%QM}Q{Y&faXmmY81ozIq8zVVUi*fG2Fs}s48Oc5bc2nD^O z?HLBvHhpD3+}9V#_~*}QDbP}f%ryRBzDX4id-GGO4l0Q25U^&EZoM9ua3O=hoSd9b zB2h9fqCmY-V7qne)+3DtYLhhffl+6%TP711mwk`d+&2;l&w++7~Jx0R04q$GqJinbGOoA=zWV!-I@M*>}uQ~Dk$ zkd4G0eBR_dH2v`7;T9Iobm)zg6gomBr6m1pg?v{+{yiNX9s4L}tq?9i8 z(xY;LYOWlbeYZB$lWVyBw!OsZ%Wv<09{xC8NskxIEXnCz$CdY8Qd1K-_Fy7g@iq=u z#>B#MZ*8f3lOfM#thM$nXm*n!JNqqbNW4+W<$>|>@$6i6X}Xz`JZ!h~ZP2p;)ehEU zILA)2a5jYSKJ#hULDYgqy&oL83An$~dY_vRPq-WD|!g zXH4nRG1snLJFcdF>C#J{vqok5(ANN=l%raT-RxZ^Ib#qcO*$qBb!)tc%X?ny)alb!UtXT@oXD<$21&tdN)DCq5Gl#Y zFIz@mw_z8wU@{2RM!M2piQ`|btrsp&kH%5e4xXP@d}4)u^Zkf;aC;YGCCb~|!2;}7 z)!yvBJN>gl{mPX#Xm^sK62QWl&C-BAd)0c93#^C{3;^h2Tne>TmCHN6zv|gI(x;-i zrKK&`{OURkjSkF}(%^pAVxrf|EcIMBbb#*q#(|;jrCQHP-u$5 zo78g4T617PHaF6?7Oy(EvfAuR6k%<{5cPewVMqvI@7 z^lEtdT7n-VXX?|ZyUzkQ9QtrX!%Uxt_9BuaE|d-;sZ7*i;37hUMkMMCW11Wve{rez zK_(BspkSIY+-y9^@y*%W&d_pd44xiuA%I zF(9V24O4ulMR?fn$+A z(t3sQ*!g6j{oO>P(Vk!c$Gsw->^oRDJlEEFRno4iN+b(gr`9|fj&Rp}TCE1YwsHh!?t13?fSCwg4 z>fCZg$`Yu<>|lTmJx5RB*~Bnn_rAXTj82lUARrTd&KmFSi@em~29{Qla&hoUR-d0U zMTnaD|LZlYR!SX96A%<^0XL%^7hSUQ>pgxZwDA(wy037C#NqPmow?PghdVwF_zTW= zS!Y_dr{C(zx9xT)XGGnyo)CnZ5b}em(xhO84LvO_Eq^@zCYUeKvAUH+Hj$l!yL*7S zO9cg+UmzQ$!LUDCeEs@J(GNS|uaYkv&&|yZ3k|(a5kXp-wP?y-k?M7i`(3`dArqaX z5iS%Ozhl>4K3Un@2j!PzaErOoqa||sgOt1&vBs;~8KE2*2J%20DWn9N)yq!=nwSzrTVkr#tPPseZwgn!}te_k4 zPZG!u)Rq7FcyJyTe8yXVWg&0g+_UK|DQe$Prk^g^+*o~-kLQqT$38Tl>>^?S$j!X( zTT86?zTT*OkPTeAjEOBjKR<~QtZ>XikdH6fZRU$|uRDdI%8JNdR8+)}u}Af&zxPn} zQ6uq_Cr|3F5tt-Y6=qhvNH80%^zDj8NH~I4jxaOt>5^ZY zRz~h2At7O*UCQJ$EhWF(j^1X~OP*U!E=r~G{RO@SyfT6t*M zoh6{UqtL;$v?j)Z=^^SF^wg<-j>k(t+a`;e9SiR zn4C{a-7c4I-Y2RxD;_Y09u05s~RaH5_xlIAW zfWKLNuC8W-CP$JwnTEEJJ{v3B&`GrF+yT>>fogymVu8STXNNHqLqr_sy}C$(qMILI zrj7uV5;;)izSwDw2l_t;^pO(Xm(BI&Nxe62#1wa4#R-|efDt+*0 zZ|AdGx2KEzE~GFbLN@Z6sb(6dL>|^Blp^+59#9VJUI12&`s?w@$zMhqW1lzxy5s~HCoLzvP2r>@Aa(Pa0?C~O{tORhZVO;(qK95%a7m3_&=HN5 zq#;~-_sp%F&mA9K(q^D&lw<$?{RnbIWE12^Gbnv2bq+x{`+~qZiP=F(B)7bLFO(~t zLx38$prByZCWtS2P9$~HWD}|?MW_qo<`*wsWQERCq?ad@1AR8;qW!iICQPQ~Dz1$? zJiNRd(5H)JnG|);rYny>%Ll4dNnmjhoLn{J$Od7K$T8fqaa>7BNmDQP+dt!2IF_0g z2wt^n)R`TOzqsLpNg~F>{#rs2wYHy~nqa0(t(73_YY)!}>t+39?PEY?{GX$>Hfir8 z_R(ehUZK7a_lXk~tO~di5uc5YLN`VUTtul-f^p5$mO)yCQPW$XJf_ zmKGy+g2cziC*8laSAw`$X2R;{0DhFUwzk%-$;b0V)dMo$Tz3 zvV8s=VJoi_;S9L&7T_-wX!98C-eEM=Dr&~{~Qv+JnFjJ~y2#KC89{v3`=!3eN znwF>MM+7_dt^an5kb97iK;+WdI>FF*XybK#*WLrypoN#HsHpQep&+%eP%kv^e!mhl z=yVa_Q~7d>vv>0CBIw!V-|EE;PQ| zuJ{VT=q8AP2yJP)&ox7W@$D;;D#}`R5*!C1^0n&w*kOIQOx{&n& zKQmUc2_9u|Zlx6rD*GhJN&WI=n^`I{65^c5>N^b$p&gpKwnCNkWJk90aHLZZ;*8co zoHvz}9wUxnec)*M%kIexDH?tup*PTAZFZ>MEVt8YBEa9@DkvN|N6d>qc|MCUM355J z?IRh*znkHELrbd*pATRCVkHqS;|0Lj8a3rCGc>nimB+v)dQm?5Duj3BTHfd$8zS;} z7M_2yV%QQu?nq%Qd;_u~NIA~J7w+JZNT-G-u=E6w5NzK((rF&uhBQxufMV45sA2L9 zE2I*192~OC)@C&r*u^hF$4LNtNg0I$bV!?4&w&@b;&;Cs;*`FxXoOoy*vp7YhVo?D zOPQ>2@lP*u_7)>gLn9pl74rHiDJf$;MY*T1{+qsso@E3qUDHHoE!VO&CbrslWB5o}-9&M6mat&e?F$4 zhwMNyl#y1rry!SPe^Gtz0C$H9@_y?OKaF{~{TB8^`0tQ9o!cas*Kqt^N#sSIOHD=d KVusS4$Nvkld94=! diff --git a/data/stats_weekly_data.yml b/data/stats_weekly_data.yml index ff4f640e33..e6493f8c41 100644 --- a/data/stats_weekly_data.yml +++ b/data/stats_weekly_data.yml @@ -10098,3 +10098,195 @@ stars: 152 forks: 330 open_prs: 12 +- date: '2026-10-05' + content: + total: 591 + install-guides: 104 + automotive: 13 + cross-platform: 55 + embedded-and-microcontrollers: 88 + laptops-and-desktops: 91 + mobile-graphics-and-gaming: 94 + servers-and-cloud-computing: 281 + individual_authors: + adnan-alsinan: 3 + ajeet-singh-raina: 1 + akash-malik: 2 + alaaeddine-chakroun: 2 + albin-bernhardsson: 2 + alejandro-martinez-vicente: 1 + alex-su: 1 + alexandre-romana: 1 + alexandros-lamprineas: 1 + andrew-choi: 2 + andrew-kilroy: 1 + andrew-pickard: 1 + ann-cheng: 1 + anna-mayne: 1 + annie-tallund: 17 + anton-antonov: 3 + anupras-mohapatra: 3 + arnaud-de-grandmaison: 7 + arnaud-grasset: 1 + aryan-bhusari: 1 + ash-naik: 1 + asher-dobrescu: 1 + asier-arranz: 1 + aude-vuilliomenet: 2 + ayoub-bourjilat: 2 + barbara-corriero: 1 + basma-el-gaabouri: 1 + ben-clark: 4 + bhanu-arya: 1 + bolt-liu: 2 + brenda-strech: 1 + brendan-long: 2 + bright-edudzi-gershon-kordorwu: 1 + chaodong-gong: 1 + chen-zhang: 1 + chenying-kuo: 1 + chris-moroney: 1 + christophe-favergeon: 1 + christopher-seidl: 10 + claudio-martino: 1 + cyril-rohr: 1 + damien-dooley: 1 + daniel-gubay: 1 + daniel-nguyen: 2 + daniel-schleicher: 1 + dave-neary: 1 + david-spickett: 2 + david-wong: 1 + dawid-borycki: 35 + diego-russo: 2 + dominica-abena-o.-amanfo: 2 + doug-anson: 7 + elad-gross: 1 + elham-harirpoush: 2 + felix-johnny-thomasmathibalan: 1 + fidel-makatia-omusilibwa: 3 + florent-lebeau: 5 + frédéric--lefred--descamps: 2 + gabriel-peterson: 6 + gary-carroll: 1 + gayathri-narayana-yegna-narayanan: 2 + georgios-mermigkis: 1 + geremy-cohen: 7 + gian-marco-iodice: 1 + graham-woodward: 1 + habib-ogunbanwo: 3 + han-yin: 1 + henry-wang: 1 + iago-calvo-lista: 1 + jai-adam-schrem: 1 + jaidev-singh-chadha: 1 + james-whitaker: 1 + jason-andrews: 120 + jason-zhu: 1 + jeff-young: 1 + jett-zhou: 2 + jiaming-guo: 1 + joana-cruz: 2 + joe-stech: 8 + johanna-skinnider: 2 + john-o'hara: 1 + johnny-nunez: 2 + jose-emilio-munoz-lopez: 1 + joshua-marshall-law: 5 + julie-gaskin: 8 + julien-jayat: 1 + julien-simon: 2 + julio-suarez: 6 + jun-he: 1 + kasper-mecklenburg: 1 + kavya-sri-chennoju: 2 + kelsey-steele: 1 + ken-zhang: 1 + ker-liu: 1 + kiel-friedt: 1 + kieran-hejmadi: 20 + koki-mitsunami: 3 + konstantinos-margaritis: 8 + kristof-beyls: 1 + kwashie-andoh: 7 + leandro-nunes: 1 + marek-michałowski: 1 + mark-thurman: 1 + martin-ma: 1 + masoud-koleini: 2 + mathias-brossard: 1 + matt-cossins: 10 + michael-hall: 6 + mohamad-najem: 1 + mohamed-ismail: 1 + na-li: 2 + nader-zouaoui: 2 + neethu-elizabeth-simon: 1 + nii-osae-osae-dade: 2 + nikhil-gupta: 3 + nina-drozd: 2 + nobel-chowdary-mandepudi: 6 + odin-shen: 27 + oliver-grainge: 1 + owen-wu: 2 + pareena-verma: 103 + parichay-das: 1 + paschalis-mpeis: 1 + paschalis-mpeis,-jonathan-davies: 2 + paul-howard: 3 + peter-harris: 1 + phalani-paladugu: 1 + pinru-wang: 1 + powen-yang: 2 + pranay-bakre: 5 + preema-merlin-dsouza: 1 + prince-agyeman: 1 + przemyslaw-wirkus: 2 + qixiang-xu: 3 + rachel-belachew: 2 + rani-chowdary-mandepudi: 3 + raymond-lo: 1 + richard-burton: 2 + roberto-lopez-mendez: 2 + ronan-synnott: 38 + rui-chang: 1 + ruifeng-wang: 1 + sabika-tasneem: 1 + sagar-surendran: 1 + sayandip-pal: 2 + shuheng-deng: 1 + steve-jordahl: 1 + steve-suzuki: 1 + sue-wu: 2 + thirdai: 1 + tianyu-li: 2 + tinkerblox: 1 + tirui-wu: 1 + tom-dunkle: 1 + tom-pilar: 1 + tomas-agustin-gonzalez-orlando: 2 + tony-morri: 2 + tyler-mullenbach: 1 + uma-ramalingam: 1 + usamah-zaheer: 3 + varun-chari: 4 + victor-do-nascimento: 1 + waheed-brown: 4 + willen-yang: 1 + william-liang: 1 + william-watson: 1 + yahya-abouelseoud: 1 + ying-yu: 4 + yiyang-fan: 1 + zach-lasiuk: 2 + zbynek-roubalik: 1 + zenon-zhilong-xiu: 4 + zhengjun-xing: 2 + éliás-bálint: 1 + contributions: + internal: 539 + external: 160 + github: + stars: 154 + forks: 334 + open_prs: 13 From c35df8f3eca3510f36cb28f18bc796cc3408f4d2 Mon Sep 17 00:00:00 2001 From: Jason Andrews Date: Sun, 4 Oct 2026 20:51:29 -0500 Subject: [PATCH 32/66] Update _index.md to draft mode --- .../zephyr-signed-fit-uboot-cortex-a/_index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 1a344d8d2c..aeecab3345 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -1,6 +1,10 @@ --- title: Boot Zephyr from a signed FIT image with U-Boot on Arm Cortex-A +draft: true +cascade: + draft: true + description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on Arm Cortex-A only after U-Boot verifies it, in QEMU with no hardware and then on a TI AM62L EVM. minutes_to_complete: 120 From ed39dbe3ac5efa64c9e589d24cb317628e8c8388 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 09:59:37 -0500 Subject: [PATCH 33/66] nit --- .../multiarch_nginx_on_aks/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md index 718ae726f9..d3c63269c6 100644 --- a/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/multiarch_nginx_on_aks/_index.md @@ -59,7 +59,7 @@ generated_summary_faq: - question: What should I check if the Arm deployment doesn't start or the service shows no endpoints? answer: >- - Verify the Arm node pool exists and is ready. Ensure that the deployment and service selectors + Verify that the Arm node pool exists and is ready. Ensure that the deployment and service selectors match, including `app: nginx-multiarch` and `arch: arm`. Also confirm that the namespace and shared ConfigMap were created before applying the deployment. # END generated_summary_faq From 9bb62e545a517b4b6acaa381b9a509a3cc24801d Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 10:13:42 -0500 Subject: [PATCH 34/66] nit --- .../jetson_object_detection/balenaEtcher1.png | Bin 112639 -> 0 bytes .../images/img08_Functions_Tab.png | Bin 213220 -> 0 bytes .../uv_debug/callStackLocals.png | Bin 11960 -> 0 bytes .../uv_debug/callStackLocals_caller_callee.png | Bin 15869 -> 0 bytes .../uv_debug/gmsTicksMemory.png | Bin 15303 -> 0 bytes .../uv_debug/gmsTicksWatch.png | Bin 7281 -> 0 bytes .../uv_debug/mainWhileLoop.png | Bin 26764 -> 0 bytes .../uv_debug/mainWhileLoopDisassembly.png | Bin 17901 -> 0 bytes .../uv_debug/mainWhileLoopStopped.png | Bin 26684 -> 0 bytes .../uv_debug/manageBKPT.png | Bin 12425 -> 0 bytes .../uv_debug/periodicWindowUpdate.png | Bin 17579 -> 0 bytes .../kedify-http-autoscaling/_index.md | 4 ++-- 12 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaEtcher1.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_Functions_Tab.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals_caller_callee.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksMemory.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksWatch.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoop.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoopDisassembly.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoopStopped.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/manageBKPT.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicWindowUpdate.png diff --git a/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaEtcher1.png b/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaEtcher1.png deleted file mode 100644 index 6318e740eac02c11d3a703fa99665096f40bfd46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112639 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksMemory.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksMemory.png deleted file mode 100644 index c9a1e662d5d8ba330cc8710f7b24a7674592153f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15303 zcmch81z1$?zV1+hASHs*4FUox64KI$64H%?bV=vX9Rf-t64Ed<5efGW2bM6}8TQkF2>sw#EzxREA-wIb&l*PxTzy*Oo`0{d6uRtISSzx~c z=LYbXFr}LUC~i8)X*+>H1f8f~v=1Bvl)#7B&hjs%u~%63;<_0X(}Esf zBa72)Gj~2LmBsClPZ|f#l4&*Sn{eJqAjhnj80ZX;m9CfA8F6 zZm>y-#Yw=t{j6$IkA5xvQuOS60OGZB>b4p+HhjW?#(>(go%B9S$48adb`4cms>oQA9vYFo=4Gq~S@L2l4` zmNe(TmP*sHY}m+WIkcB~@nFIh&2HvkzW#tAgM%6}Z_^_N5smq92@MzHZy@`9&abu# zYoBesyssYV4}O@&Q-5w*H!cm{^Cgp=;2wTL!Mgu-2z+yan@*caE>GJ*&|k#RvK73< zZ6s-%%a@~YeU9vG#J)KO$PaqiuLBbI9EzXMciY7T!Hvg@a>3T0R|gz)Gca%Bl^?T^ zHu@g2AeVTOWcX-dgjDq{qzd32f71%O+ow+6_I*j^v>>|+LbwGYe!X@N#E*8FDH=5m z+3hKsOjJdI{0E!XM)W(1YsRrMCb?GQvv5qP1R@(D%-XL`4F4}E^<>*+EP*&e#9{A{5 z;?m0Lvis7}%)U~l7nv-dUML4~xX)4X&|J!dIAqD>KujB+ z4@%Aj8VG!eVMPiSJ z{Dzz?K>WA~Z#!i1J?9a(i|)=f)XB9gqasFaA8KBeP@#qEZdLNiZE(nH@6IPYxLww; zv*o@C{n)d|z0>|#!52Mp#r(i0P8e@LcrbGT!aYbuE2K$(HQ2D1qwu=ts%;UYH4K!%>#MpB4l3vl6x}KVz>AcN8AKyr_Ts*?0B6YT)~6JTusBEw%%2 z(t}_GY;u3E{^psthQ!E~Ja7H4gwVw;5&twhgx0D%+YA)all{T4HKAha?%C^kR{M50 zE_o4bkoT?33yzy&2wJgy&B2noG3h}(@g)rM>#6p2Sjj+``08xlz{zrCZ~3!rQ01&f z5^&9?QUXveF5ZJgiW1m}H%t*u%2lZ~a)y|{!kZsZ*ssF{!Kqt(7YxhkHj-_wZiu?f z6Hw{hiEPF-^xQObjAK55$3<{mOnGms$1Eu*jhlY?%tgl9);_a&eOVT)W@rL0FSPn{ zL04juC$V)8d1=4!(~U$Bx$FwJ&xxeJZW-0o#tn{TL1e}yt^9>Z$Je-&rjShE;h3Hn zZ(O%+XDQ9Z-*~~oWxG;vxiX*P`v-u?*=uM10Ts?%aY00Xv~;!;jaZlDHG*J%s%&hW z`5Sv~f+Fv7^ED7$Uzefd`1p9gR`B;5zs%qLl>M03>vTJQ)x_!g3{seXj9e+u)bBAu zj20$Z8gpGGi|h%AA;cOPO5-Uv3Ag$EVSy=)*Y+d*!#T$u>V{wA#($iL*=2LAFn*Qe zw9uK8lT-Q5=Y{2=lvRt#GJTmOanz;MPA5vVRS#EX34!kqGK2Z#)?PSag0Kmw9yVa2 z>X=>Wa)mgf)R%Z>936LhCP9(wRP+?xk5jkyo<2Hi^r~okZk5(OPgTP4U+#%rUP&@k zoc0}8*IcaZ=L%$!Umh&9jk+UEK8ZW>bdqX?LH>3SkxbGv)U}-z!+2#h^HUu8Jgk$_(t}&RMFJv z5;!=E{ul)AQpacb7&gABzF4O+Zi%hBHbUA}> zcpAbmi}6G=hoy;7706&_ftP?CIb;L9%8w3No-8~bGiF_ilnvDVKB64GxoP!8z-@{7 z*OX{I7Ct_wg{7sqiwoYVWlW)+MfiLffBk3r%F+fj&f(~kTC~gWuVw>$u=M>%%O*Ul zOSA(OpX9K)a^#F-<%@WxrOgtsO+JsA$8VgynLkP(A8+L5wdgucFYhYQj9jNbUAJ{| z6*%Hlvb0Y-@*;7uIAnHTtiJ0(b3HCq<(|lzn3&%xVazI6wQv|x)SDXveY(M4CUHE` z@XW?>j?hLpYH{(kvrUt*t8?NG$l!w4DoyaAus5OFn&O!2EfaV5dmYp@QyV`6o^5w@ zoEgTjhK4@!b|>}qx$2loa-;-35hvI9uKb-8wrID7;pwF^zZt;WFi@k9rZe7aYd4cd zzosxc6WV|;ildIEGwlbIHRL|Fv-=&9r->K6woX<&7dq1_Q~7Cd2Z%Po6WJ|gUH=v9 z1r3wNW{2q+<+|C>7#R-bV~^`8bL_Hu>@{`ujnJX@Ouq@yT?JdFC0GblMYx0O3HLID zgP14b+^|zHB?5Y({VILj>gDBwksr#Pwl0BFRY%M=UWF7h#%X19fo+uj8B;+qA-(vn zyh-CrR&h0RU|&BJWFvd zV&zm+AXT?QKbrUTdBm0s>m3_6>DXGnY{@6+zWjn-LKSaba(ixx5FMCGe+)(4uAKRz z0}g~*EI=AhH0t@Sj(~^k9C>t9xZ=1OnCSV+Z1{_3_IIzS0)gpzm)h%xSrRis6!{^i zO=QaBJRy$sJ~i}fkaRsPB6nvfInS()~DeQ==ZaqQv9qUDHwOv8rI!X zqtsaR6>hSB==)Ovr0is}x}(F(Z#+Ie^F0IhN#)pa9yJ^MI4xTBpJVgsBdiMoQ);94 zC~RCF*X|z5THNWT-UXW6#n_Cl(2c3GW|~U)TgnWQI==%HmG5x`RuGwdvSUfO)$r0Y8o`; zT3<~#QPohcztQm)z{2dI>mJDEK?{<6joHmGpe%4lT;PtBz#Yr?0sf$XoGh3d4f)H> z&CT1tf2+1vh61q3m-g{)AT=QF;r{l#pE>}5*M$B!SEpqQ?Yt+w~2X~Q|&CT`rP zq#*uc`!d2_sR{Pu8o08(0elYtdI!S<=LTc3EYLk|My9-ML^upK@iUtd@Y_>;ear9A zWH*ykc(WyOobSCtbt|#TImJ_is6<g%YIHlvPSsuf^%3LZqU^o8G#25Z)|YU7qycGj~J5$5fV{R z>D>+hqLgh=Z5Zl01?9mp)&H(bI%dc`;2^(Wyl_I)E+H4IT}b!T^*<+ z>#XrL!(NTQU@l!@0gl>hK3f9k9`evQ^Wo4hant#E&;;v$NkSPC~WNHUgm+MF)Cg@zHH$B zRP$auQ&(4q-+XQJPL8mm`~DqVdLkSn8=G4uCMK!vNm zl2DB(l^dG7YVq|wTe6@Fd!ABejOA!vR%PX5UoUEv!miXDaXKRVD2XiPkw=A2vDaNf zyuoa{VgV4fWIkI8;0PLMP0RrC2K@w8baXVDc$3O?Onxl!%1KQ{h4|`)EYL)0j3esX zXtyMAFwy;C=0B?i&QN#0ZX=)FB-oVx72{j=Fk*yR1? zXG4USqg(ZEQ4zZurw0==-#oIH^(aXDWb|YlcR@TN13G-%o zH@|+s)(2aqNbPg*Nf$%C@}h=>o+K<@2!I8^--N->@4F*T7*030wn$iO!3GcD6ADYm z8>0+FIAIQTk^;inMnw#G+VYt0ceHyWQUzL<A_L#RHoZr)@U5ov)eDtV6bdc7mXU)VJxWm<$p`P`N7oy;h&`^a#6y#c7r6AAE zV;1cbeS|C8PH!IXM7Y|f4i0Z%Ex5=C2?_li-W}dNY+JMXHXY^Rc9Qj_uc*&3sn`A# z;mbe$9XCn6YThcipY?m3bDysO^Ue5Qo$iX10an3Plw)kw;h>Nttk=Q z_d&j;m^c0xck}HD`1yk#krxy`7;%{zcfE_y$>08R)1@};b#V7~(5^v4!Va}`!5rRw zLRD-0m%cT$1yw7e8idTvqGAm~TNPQv;>$P2+*}zyBl^C~>*&Uo+Sac?=}XU62K49h$)Mrxf#(|cnS1k5l2_B*dB2Fk z9(;wykb*olC&}@_iT(J+bgm&{lj~R_bDdODI9J9d0176P|C|S=Kl;M781NW3auc`bmZ|tydve+! zyaiEFtN`!dvXRs;E?zj0&!F|9xuEcU6sJpyFsOE$$f=pSBF-3q1*|E>9rqe4E?Z0a z4rc!RYUv%_J9M6)`!pIteEt;tmLvawm*L7ZRqS)(X>|h$Yp24z4kri)B!N8jTg@VV z>)qHv;`3H|yMD@KKu!IAOs8XI2jeSR_dIs;rLQ(ns#(Gx^mmk|8E1nqh{V6D^5fWWvABtYJzK8(YeG&d>3(mGO zx|zFhGKnWe?E`!LEtMBZhvO|oAgAu!4LWPLU_yv7Z7LjJ(=B9?5QEYMU5c1IJUu-l-03i`KN@E0Tt!8XurM69 zfjA)Mv&MZC7(%`8eZj8EZ$ZgKkJ-NX@BtauLzRv2-25eGgX=&iBWD$3Jn-(6bVgCl zs_-a!;QDOjY=uvYtSuiE5eQ<-hy9$?zG-yB?#FO6%<=Y;aw=O{!cpfx?p_W1 z8o(sqda!5I_nz$?6Wak0EyleUD`&Wv_hOsV4O;g?L|iU^L}7zqi!Rg4Gdqg>O}m}^ zQfsk8=IH0qG@0>H_GMWqw>U5LyvmC9pwknc<(U^5 zT=;UkYAG07Gfb&gn9acV-0a{h2PBM9SCmn-Y9&nIZEm^dWV2=j$KLGiE1&-By`AS& zRVzG}P}UWGcktXrEETbAjB~gbr0Lbq#uWp{74zEM?X)TDe)F+Fp4T3-WpHbj3ln}@u%QG5p$HLcX z#&T$~Du|=JVYh)j4jOMvjy0>R?_x1M(0U@gyIh@T@Vdpg4^AWlGWVkvl2^5CeMz>5 zG_MYNpkaH#b{$vRM9~9NRMGT@=DxW%@7F&S+?9pJ6RwGH-J1(f490Ujf>J*dNPdeP zTLrqzN$l_u)d4NPxwp|BfZPJ~@F1VjDvi9-wY+K`I@NwU5tLqyj}GoLy#0eAOkpW%}79z<>({Z z>FQqV=gbchzjp2=0i7r2B4jY{&RK@|d8BnZb~fxeTiuDY9DQgzZC1Z?iS4*wm|tG9 z9n6eTqO zmh4Z?^Tuep+OnXi=xej*`);&YB4yGqy;s`r|3lFIm$BK~QcV%KYXC*X0p>j@v?u%m z;z?@X>_jt|MvLG+9xXB|MBGCWcS6r)LJ@%g4#$-bt(0JQ>``m6)TdsyoGlJsj2|z1 z0+W%!I-u6E2uAm1!qG>~WaLMb&0>ZK1?V}u0pg7f9Zk>t)q)9ZhEV*GVv$NuX7643toPMeTo{o0?!y(ge{M*OpQV{z9R@;0Uh7xXo zi!E>kKXOE#ubBY*2je+FJD{{JStRpYYwA}GjL^F~87CGl+B`%1-h*$NP>$7LuTOQV zd%nm)b>huoM(}^)3Sw(Yb}LU>WPYu|`%2ThC&S_R%av^eb4z_x z85Bvbf>!UT_7LKSqpmB4JcwNal|UMF?0$p7IX?8uQRB|5=`*BUJZ9gd-)@kmQ+Qs?Z-L3O zk0c8^V!izSBIKHT0qo1nd+twaVX}IzDggw`1N&f737kbo9PP`RYMM|7cigKG9rd{2 z5+-!vi1b8ma{$STBi=dbmG{u&Nso6H7b%-YSx3EPV}ddWNsVk&^LkOCPY0??_p-_*9!il zJT%68sF6e{s%bLu=7BjXko4`zQ0gpJS}m1o)O({-%O`Dzs>Z)-*;FfnS9IiX7y<$< zg#ZL9#+ymI{GRBDReEa)kf<#Oom&S;7HkJ(RMId&Op}HF8JmE3L@9$nlsc%j07EZO zYU=Wv%Dnim{Bf+zBJmKa^H~jS^2by(w0au0eqt@c6BF~ehKGaO=L41Ct;28qAy#6_ z=KUGg47h{PKO@qJj`h~?3?$JOkRBWY2Ki^2|8r2Hyuu*=??jwN=UU<|QvX}2m*RKDeU77H|l*HH1)Wl;eXIz|3f%1wTSVI8^c5w_pu#;_`2Nnq?b(e z_vMvcHmPZ^$s%9hrjZ4PL4Nr}wrFjoX|ckW#M_kS$X?DU4~-QN3X#p%r}~-awogc@ zAfuPXZpcdVc?R;|{=k62wN3C>k!iWA6#ki4Hk$H|5#8{<`;3qZ^l=4p5#TS@7{Wz_ zqJ|vb-zeyizn$4}=-!h&>X?}eFnDDgqIiB&!rI6D@Okn) zUcShQrHi!hYQX}0dEqR(xr(N=OYw0IAW6Y|%O~z&Kmz`ILQ0T6s7L@4ghsc~XII3~ zQzs-m%&M77lV2p^$P|-6O_LR2`r|Oo1Z;(P-hHvM?%PX{<^C#m9|xPx?|r`Ao%@=; z(lSka;$-qG#m@nNgK!Rw9h_sod8KDKyl3Cm(RrR=_9r6!b753g##P~dU<_&nOyldE zqLdofUw|Yn{OiIO&Y*@eqT1Ouk^EjOE>Sc~vJ(Lc>C0D#Fe-7Hu-u61Ct2lBnLrluxb z_jNFlggceQgfC}l4?We#c4(G{x+y(JI4G7Of2BWVegOeEUZHQGMZM%@hNKY>@Vatv zJcI*PL9vo#5k-YcfG%JxydmuxmRnVnDkx0g{|oQ-+ph-z>;cXb%RRBhGk(IsOyR$^ z!GE!-STe;b4BlizfX0riefw*6Jam=C+BmS3z^5@=KP}J6*%Qq@V|Z{dW(qxOd?j#b zJh_G(s2JuY8mML>*YNU2yk=6jz|S5#UPIU+6vGW4N&qI*dQRIv@_si(O(~+aRcR@&ATrF12X|b0NmZb4g{>pdT3}CiIJz02q)sOp1Gg&|0vHmBgXw>^x zzx}bVuKwGOHQIGapG~?I^s zj3gH0>09@|OdoavdRZq)SDdbdUPy2F5qhPZU`-Lz(vyQ!2f)&$O_q1`k%mIC2uaqI z68%%|{OL-x!{8V^Y`vd?Sxx<|vI=_pWot7S{?te06ZI)_QZa1?9fP#Ck1Jr0-jC4UZjoguZ#K zH;*|tAK-vArTyKxuJaxtP83-3KW@*|^cem2Uw5 z@0G^U)(Gl}L*h5b*``JpvELzIrpVF5?Su3Z#5oHB4#zeCV&Y!qML17a+*PkFbCRgc z{mV4$H6@z=YHIuiTnR&&THHLt0DLCNS;ve}pxeGKVlWj44M!fJqE#+G@uR{4l|cXj zXn!#EK)4Iz*kLbU1*4q3v~>QGa(G2wP9EP!iCm?*TRkbiS(=zOG(w+*QRyvn#JF)^uJ_8*Zd?^xgj|@(eSLjEp=k+tDFU`zJyT$VV}??K(5^ zO18j5cFr1?U3v^%S)0g1Tk-Olp0S^6US6PF-nDDZMlw&gU7J64*XwCB*0}xVZ)4XU zeb4@x0JxG6piqE4g?g!WuTlRAMsGffZM>q)lAvG&iT_*d3G*^*_7l5AA~k~tj#^f4 zrLu6uyB;0^tbGB~tb)`FAR;`Dw^DnxrNZlSM;QumH$WTR>{fyy1_F;*3IC_4brTU$+OPw+*mYgrMn9SRt$}j*Km{(U-G1h`i0F%av_l<4$ z+g1KH zs1PBpKM|u~!jY(O+lI3l>+|@8VGNLVgDkjb%oze%t^pWX-*56}e|pW~{w`kdfGg!} zgK#aQ{ETV-HEA*c)*N}(amAJ-|Iqo~=;9HwRRt{Nz!^pp@x0%9?e3jZMgPxvw!aZA zKay7}m`?_zoYGQw7r_qNF;)VE9r0hnZk$l7s^pe-se`SB%vvhSJbMU;tI_joYYhZ? z;))X%Gey9^y;F0p*^O&fj4@qp@*xdi!VtgZ>XRgse_zQ8caPpfBiD$b;J@GMw|d08 zlTl!pqII?3xKmz(Ml+6`2_dzpVlGXu-*FXKj)m<1N3l2h8=1E1DLyfXIhnd-)wJ-e z-1NN8uX#l2s+^?V2l9*NJO;5SN&TO#t#q+3A4XvmahXS~b=OFy1Q2N}OQm8GAW1F> zA_B#K+|FbFGfB4T2!v|cC4nD{#8zKPm@8NKy`eyeZV*AnQ@1C41k_5eBSEYK2wl$S ztNv@XuDAk#F-fcXF<5UUNRJfa70mzpDzEPZv*Dl#fUKag@o{D{Zi8E(WDzgEYYQpt zYgeIa{`2^JU<<>3{D*raAx~&}Uwu;gI@_dX$0W78$C&zLPK-p#;n*jq|GxG3`1tR| zug)4SE-qPz-%@yFCZDOjqR+ugW`bQ&qRc71j-fx+-TME@zx>`~KQ=wA!eEz?#kfa~ zZ}fyn+~`4ATm?ub2MXSa43gDyuVX_h@FQb2>f~@hBqE9AmSd*i81aY!&)!R+XX~$qi&Em2~y#j zDqJ^Pf-t3|TW&m@{S~zl`q= ztZN*l%kFfqQe(eEj0KPJ4PJy281<~$6`aR@yMHh0$@$hKB=+i7DAsPX8%Drue@LC3 z)Wcgg7pr1)_rBFKG!Sx*j~CeeNUAm8A2ur}GYFBzj(ni36c}r)?SeN_%z`4_rA-{N zhlXPd$8tEVzG6CXPFE{_zP%e7CA!!%K?*Sxf_~JEq2=y7f)7$vi*ikiGh$~k*i&tW z-JVmoe%CYV6$_GfV!#k_ev9L@=0jm_J{9U<)Wdgd#I>rp5an-Vx+{A8T@vJnP3w&V zbm~kVHZhKjZ%oY1pJylFXZO?BT!(FEr}CeCqHlRkG_);@WAu9XWW$6gmP^;~vYZG{ z#oYN3YHa5vxvZ?m?gj5dVlRntLmfLx-P#>vIX1|I_J$0lCy|Cr8_nE{Q^T4|K(nuj zWp+S)uE<~J(NnoQ;zUmJnOQ`II2g%h70ai5YYUA>8fXkRd+^6BQ6JkxuJpSQkj_?o z$lo2~4exEK9*_@pUYpAldFVJ-J)SU@ic6W3g&~yPa|hah4uXBhN)~c{+`^tqK-HD* zapY%$T(6~v#iAXRI8}}%Ziw_c>#HDlg(vy2BQ+o$4dat93dr$pFboV|oNN)3wRT5u z5#!#ho`Vv{W1{|o_FMU{=#}zSiH5u>u;BDw){FWxSdmUc<<-DklWf!0L zkW<=d7-%AmkDNRwYuZl$o_`X9Z#;{-fr*Z$0#n@%feVCqSbT*g+5RG&mj*F_g|E;z zvtPVa%lj^Eq0@vh!)Mh*&4fayn<-`2Agv8~Q{*P# zYQn|Vn7fYtip8(2&g^b+8brE8u1aZ)HxRZqcoMIgmaustQlntfLsTVNb)HKcPEIAs zp?0uPve$#@^yyTovC}LZiZqv4is;D+$G&fTuO2sJr}SJ(rUsh+U(CUxKZ~3107oe3x8flAnE!!(DZ})6lf5CEpd#?jO z(B1h*hP!h)nqe85U*LKs&_bb^ZIxJf-x0qahU|IV=_g~-$T_X~8GytlFoE^+#^tRI z$~tz;p`N&Tj(>x8rzc?7N11}+;rd=ryZV__ENWF>wy~-HQ^7}1cx`92==??*>0w|m zmSs*?^X_)o=ZiMjN8`I!Kfl{ibrC7Xm>gIPW{+#t*5n(XU2w;it7T%`U^>k5 z*Bzcg?Qx_z!xg_W#pyX@LEruI8ZP(uML~hF+0>NT(MsP$o$WDdXI}xU^0Dgo7M@WF z(ah8l726e{S(OxYNPKI&H4HxM5W5!{O@jf#f2rl=!1|H=ML4#yQwRHl?K2aiK=(JS zx38zF+WYj(rx&x|EpZ-U5bpRArXgD>a!k;EI&5Wt{2+4&SfDuF?QV(JQCRKw$Vu)| zpWsplunMPy%lFFJjc}i~neR)|NsvcS#p?CW>Rs^lpTzEkud?hG#-dg7{bMXFMCoNa`E4~n)1f$S7&Xdy>Ao|@r?~mrfX8S z4u3f!(w6)BO4Z-wiMa|1*$`*jWf${EVLt4d3a);Q$a6{VrLLSKk{R4G&Ka#t zeR_I_D<4WCf}7q)lvjSrS_}U6c~=kQ2Jp4U=VOFoOWQ^83x&8lnu4(_j#7+i^e6rD zYEq|sW~XW$NFQ_KjxU6$w^r<$v=&jiD^LSbd>GSA|7qnA;j&UaCMEcxpP4I%0b1Ec%L^C8m$Fj6|@k7CYJhMV_Ax*k>P($ zSTBp|;_Ac*{ZJCE6kS6wv%A%U5&DAy#eQDCcLo;UmYfmI9usmea^JmrI_73>4BJ72 zpGH5sg?Iz<5o;!yM?lsN48@R+6P*>I0`JbZ=b^L;NnE@QxAalFlbp@OZNp~?wO4Dq zcPo}*aUHY2ta{E(zJCl=b>jiflVDr6~adF`tOn<7{9)*gdt4USB^Gr%Y2Cd&V zZqEsw^C?34gIY4@JZh~NGtwgmhJTSD2yy~1ylca+sbEIrq3_LY?plM$ix08%R1}g| zqi&hesbTjay>9n>eyl%6aZ{E!fJ8{Gumlx38Lh|}UOyw2?W8i1KaRRr;5i_LKb^WP uKY(d|$N?Vx$x)y~;ppSPs3#ii%7k!7_C8m30`L$nNM2e|s!YNt;Qs&+5qNw6 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksWatch.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksWatch.png deleted file mode 100644 index 6f97e3a9ea6239b0bcc9250a7a5ca74b6b8267a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7281 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 E2e}c5?EnA( diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoop.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoop.png deleted file mode 100644 index 48728386a2c7caedf5848a6c85c916aabffac96a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26764 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/manageBKPT.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/manageBKPT.png deleted file mode 100644 index 496dc1cef968486ab8812ad1a00a1424c7fb23e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12425 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicWindowUpdate.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicWindowUpdate.png deleted file mode 100644 index 82fafd16f18dc5c65a97f5f765d76b972b01a56b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17579 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

oBa4U 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 diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md index 1005b475bc..077b0b8566 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md @@ -42,9 +42,9 @@ generated_summary_faq: answer: >- Run `kubectl get pods -n keda` and confirm that the KEDA, HTTP scaler, and Kedify Agent pods show `1/1` in `READY` and `Running` in `STATUS` before continuing. - - question: Do I still need to install Traefik if my cluster already has an ingress controller? + - question: Do I need to install Traefik if my cluster already has an ingress controller? answer: >- - No. If your cluster already has an ingress controller, skip the Traefik installation and use its endpoint and IngressClass name in the application steps. + No. If your cluster already has an ingress controller, skip the Traefik installation and use its endpoint and `IngressClass` name in the application steps. - question: Which deployment target should I use for the ingress controller on Arm-based nodes? answer: >- Install Traefik with Helm and set its node selector and toleration for arm64 nodes to run the controller on Arm nodes in your cluster. From 10234ef3b871c0ca5ad70f38f68a226e666d4290 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 10:14:57 -0500 Subject: [PATCH 35/66] bypassing failing test --- .../servers-and-cloud-computing/nginx_tune/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md index 1012851c0a..0dbe89f092 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md @@ -91,7 +91,7 @@ operatingsystems: test_images: - ubuntu:latest test_link: null -test_maintenance: true +test_maintenance: false further_reading: - resource: From 89d90ec40c0fd7502b78d21ebb70ead7b4ad97f0 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 10:38:38 -0500 Subject: [PATCH 36/66] assisted fixes --- .../kedify-http-autoscaling/_index.md | 6 +- .../kedify-http-autoscaling/http-scaling.md | 61 +++++++++++-------- .../install-ingress.md | 7 ++- .../install-kedify-helm.md | 11 +++- 4 files changed, 55 insertions(+), 30 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md index 077b0b8566..ec5b0346cf 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md @@ -8,9 +8,9 @@ who_is_this_for: This is an introductory topic for developers running HTTP workl description: Enable event-driven autoscaling for HTTP workloads on Kubernetes by installing Kedify and KEDA with Helm and testing autoscaling behavior. learning_objectives: - - Install Kedify (KEDA build, HTTP Scaler, and Kedify Agent) with Helm - - Verify that Kedify and KEDA components are running in the cluster - - Deploy a sample HTTP application and test autoscaling behavior + - Install Kedify (KEDA build, HTTP Scaler, and Kedify Agent) with Helm. + - Verify that Kedify and KEDA components are running in the cluster. + - Deploy a sample HTTP application and test autoscaling behavior. prerequisites: - A running Kubernetes cluster (local or cloud) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md index 2da8b6b060..075d3fd43e 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md @@ -1,13 +1,18 @@ --- title: "Autoscale HTTP applications with Kedify and Kubernetes Ingress" +description: Deploy a sample HTTP application through Kubernetes Ingress, configure Kedify autoscaling, and observe replica changes as traffic varies. weight: 4 layout: "learningpathall" --- ## Overview -In this section, you’ll gain hands-on experience with Kedify HTTP autoscaling. You will deploy a small web service, expose it through a standard Kubernetes Ingress, and rely on Kedify’s autowiring to route traffic through its proxy so that requests are measured and drive scaling. +Deploy a sample HTTP application through Kubernetes Ingress and configure autoscaling with [Kedify’s HTTP Scaler](https://docs.kedify.io/scalers/http-scaler/). You'll complete these tasks in order: -You will scale a real HTTP app exposed through Kubernetes Ingress using [Kedify’s HTTP Scaler](https://docs.kedify.io/scalers/http-scaler/), and then move on to deploy a simple application, enable autoscaling with a scaled object, generate load, and observe the system scale out and back in (including scale-to-zero when idle). +1. Deploy the application and expose it through Ingress +2. Enable autoscaling with a `ScaledObject` +3. Generate traffic and observe scale-out, scale-in, and scale-to-zero behavior when idle + +Kedify’s ingress autowiring routes traffic through its proxy so that requests are measured and drive scaling. For more information, see [Scaling Deployments, StatefulSets & Custom Resources](https://keda.sh/docs/latest/concepts/scaling-deployments/) on the KEDA website. @@ -15,7 +20,7 @@ For more information, see [Scaling Deployments, StatefulSets & Custom Resources] With ingress autowiring enabled, Kedify automatically routes traffic through its proxy before it reaches your service and deployment: -```output +```text Ingress → kedify-proxy → Service → Deployment ``` @@ -46,7 +51,7 @@ If you use an existing ingress controller, set `INGRESS_ADDRESS` to its endpoint ## Deploy the application and configure Ingress -Now you will deploy a simple HTTP server and expose it using an Ingress resource. The source code for this application is available on the [Kedify GitHub repository](https://github.com/kedify/examples/tree/main/samples/http-server). +Now you will deploy a simple HTTP server and expose it using an Ingress resource. See the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). Run the following command to deploy your application: @@ -119,22 +124,23 @@ spec: EOF ``` -## Key settings explained +## Application and Ingress settings The manifest includes a few key options that affect scaling behavior: -- `RESPONSE_DELAY` is set in the Deployment manifest above and adds approximately 300 ms latency per request; this slower response time increases the number of concurrent requests, making scaling effects easier to observe. +- `RESPONSE_DELAY` is set in the Deployment manifest and adds approximately 300 ms latency per request. This slower response time increases the number of concurrent requests, making scaling effects easier to observe. - The ingress uses the host `application.keda`. To access this app, use your ingress controller's address with a `Host:` header. ## Verify the application is running -Run the following command to check that 1 replica is ready: +Run the following command to check that one replica is ready: ```bash kubectl get deployment application ``` -Expected output includes 1 available replica: +The expected output is: + ```output NAME READY UP-TO-DATE AVAILABLE AGE application 1/1 1 1 3m44s @@ -142,13 +148,14 @@ application 1/1 1 1 3m44s ## Test the application -Once the application and Ingress are deployed, verify that everything is working correctly by sending a request to the exposed endpoint. Run the following command: +After the application and Ingress are deployed, verify that everything is working correctly by sending a request to the exposed endpoint. Run the following command: ```bash curl -I -H "Host: application.keda" http://$INGRESS_ADDRESS ``` -If the routing is set up properly, you should see a response similar to: +The output is similar to: + ```output HTTP/1.1 200 OK Date: Thu, 11 Sep 2025 14:11:24 GMT @@ -159,7 +166,7 @@ Connection: keep-alive ## Enable autoscaling with Kedify -The application is now running. Next, enable autoscaling so that it can scale dynamically between 0 and 10 replicas. Kedify holds requests while the application scales from zero, subject to client timeouts. Apply the `ScaledObject` by running the following command: +The application is now running. Next, enable autoscaling so that it can scale dynamically between zero and 10 replicas. Kedify holds requests while the application scales from zero, subject to client timeouts. Apply the `ScaledObject` by running the following command: ```bash cat <<'EOF' | kubectl apply -f - @@ -200,7 +207,7 @@ spec: EOF ``` -## Key fields explained +## ScaledObject settings for HTTP autoscaling Use the following field descriptions to understand how the `ScaledObject` controls HTTP-driven autoscaling and how each setting affects traffic routing and scale decisions: @@ -211,41 +218,43 @@ Use the following field descriptions to understand how the `ScaledObject` contro - `minReplicaCount: 0` - Enables scale to zero when there is no traffic. - `trafficAutowire: ingress` - Automatically wires your Ingress to the Kedify proxy for seamless traffic management. -After applying, the `ScaledObject` will appear in the Kedify dashboard (https://dashboard.kedify.io/). +After applying, the `ScaledObject` will appear in the [Kedify dashboard](https://dashboard.kedify.io/). -![Kedify dashboard showing the ScaledObject alt-text#center](images/scaledobject.png "Kedify dashboard: ScaledObject") +![Kedify dashboard with the ScaledObjects tab selected. The application row shows the kedify-http trigger, minimum zero and maximum ten replicas, and READY status after you apply the ScaledObject.#center](images/scaledobject.png "Kedify dashboard: ScaledObject") ## Send traffic and observe scaling -Since no traffic is currently being sent to the application, it will eventually scale down to zero replicas. +Because no traffic is currently being sent to the application, it will eventually scale down to zero replicas. -## Verify scale to zero +### Verify scale to zero -To confirm that the application has scaled down, run the following command and watch until the number of replicas reaches 0: +To confirm that the application has scaled down, run the following command and watch until the number of replicas reaches zero: ```bash watch kubectl get deployment application -n default ``` -You should see output similar to: +The output is similar to: + ```output Every 2,0s: kubectl get deployment application -n default NAME READY UP-TO-DATE AVAILABLE AGE application 0/0 0 0 110s ``` -This continuously monitors the deployment status in the default namespace. Once traffic stops and the idle window has passed, you should see the application deployment report 0/0 replicas, indicating that it has successfully scaled to zero. +This continuously monitors the deployment status in the `default` namespace. After traffic stops and the idle window has passed, you should see the application deployment report `0/0` replicas, indicating that it has successfully scaled to zero. -## Verify the app can scale from zero +### Verify the app can scale from zero Send a request to trigger scale-up: ```bash curl -I -H "Host: application.keda" http://$INGRESS_ADDRESS ``` -You should receive an HTTP 200 OK response, confirming that the service is reachable again. -The application scales from 0 → 1 replica automatically, and you should receive an HTTP `200 OK` response. +The application scales from zero to one replica automatically. You should receive an HTTP `200 OK` response, confirming that the service is reachable again. + +### Generate load and observe scale-out Now, generate a heavier, sustained load against the application. You can use `hey` (or a similar benchmarking tool): @@ -259,7 +268,7 @@ While the load test is running, open another terminal and monitor the deployment watch kubectl get deployment application -n default ``` -You will see the number of replicas change dynamically. For example: +You will see the number of replicas change dynamically. The output is similar to: ```output Every 2,0s: kubectl get deployment application -n default @@ -274,7 +283,7 @@ Expected behavior: You can also monitor traffic and scaling in the Kedify dashboard: -![Kedify dashboard showing request load and scaling over time alt-text#center](images/load.webp "Kedify dashboard: request load and scaling over time") +![Kedify dashboard showing the application's ScaledObject Summary tab. Compare the Scaler's metrics and Number of replicas graphs to observe traffic metrics and replica changes during testing.#center](images/load.webp "Kedify dashboard: request load and scaling over time") ## Clean up @@ -288,6 +297,10 @@ kubectl delete deployment application ``` This will delete the `ScaledObject`, Ingress, Service, and Deployment associated with the demo application. +## What you've accomplished + +You've deployed an HTTP application through Ingress, configured a Kedify `ScaledObject`, and tested scale-to-zero, scale-up, and replica changes under load. You've also monitored scaling in the dashboard and removed the sample application resources. + ## Next steps To go further, you can explore the [Kedify How-To Guides](https://docs.kedify.io/how-to/) for more configurations such as Gateway API, Istio VirtualService, or OpenShift Routes. diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md index bbabbfd5da..22d80a1b65 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md @@ -1,5 +1,6 @@ --- title: "Install an ingress controller" +description: Install Traefik with Helm and prepare an ingress endpoint for testing Kedify HTTP autoscaling on Kubernetes. weight: 3 layout: "learningpathall" --- @@ -72,7 +73,7 @@ export INGRESS_ADDRESS=127.0.0.1:8080 You have two options: - Option 1: DNS (recommended for production): - create a DNS record pointing `application.keda` to the external IP address or hostname of your ingress controller. + Create a DNS record pointing `application.keda` to the external IP address or hostname of your ingress controller. - Option 2: Host header (quick test): Use `INGRESS_ADDRESS` with a `Host: application.keda` header when you test the application in the next section. The address can be Traefik's external endpoint or your forwarded local port. @@ -86,4 +87,8 @@ kubectl get pods --namespace traefik You should see the `traefik` pod in `Running` status. +## What you've accomplished + +You've installed Traefik with Helm, checked its Deployment, IngressClass, and pods, and prepared an ingress endpoint and access method for testing. + Now that you have an ingress controller installed and configured, proceed to the next section to deploy an application and configure Kedify autoscaling. diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md index 158f7ba342..d86b306915 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md @@ -1,11 +1,13 @@ --- title: "Install Kedify using Helm" +description: Install the Kedify build of KEDA, HTTP Scaler, and Kedify Agent with Helm, then verify the components for HTTP autoscaling. weight: 2 layout: "learningpathall" --- ## Overview -In this section, you will install Kedify on your Kubernetes cluster using Helm. You will add the Kedify chart repository, then install three separate Helm charts: KEDA (Kedify build) for event-driven autoscaling, the HTTP Scaler for HTTP-based scaling, and the Kedify Agent for connecting your cluster to Kedify's cloud service. You will then verify the installation. This enables HTTP autoscaling on Kubernetes with KEDA and Kedify, including arm64 nodes. + +Install Kedify on your Kubernetes cluster with three Helm charts: the Kedify build of KEDA for event-driven autoscaling, the HTTP Scaler for HTTP-based scaling, and the Kedify Agent to connect your cluster to Kedify's cloud service. Then verify that the components are running. For more information and other installation methods on Arm, see the [Kedify installation documentation](https://docs.kedify.io/installation/helm#installation-on-arm). @@ -116,7 +118,8 @@ List pods in the `keda` namespace to confirm all components are running: kubectl get pods -n keda ``` -Expected output (names might vary): +Pod names might vary. The output is similar to: + ```output NAME READY STATUS RESTARTS AGE keda-add-ons-http-external-scaler-xxxxx 1/1 Running 0 1m @@ -127,4 +130,8 @@ keda-operator-metrics-apiserver-xxxxx 1/1 Running 0 1m kedify-agent-xxxxx 1/1 Running 0 1m ``` +## What you've accomplished + +You've gathered Kedify credentials, installed the three Helm charts with Arm node selectors and tolerations, and checked the component pods in the `keda` namespace. + Proceed to the next section to install an ingress controller, deploy a sample HTTP app, and test autoscaling. From dbd81ee6cabe2a67e54ac592753bfcbd88c693a9 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Mon, 5 Oct 2026 11:53:07 -0400 Subject: [PATCH 37/66] Mark ROS 2 Device Connect guide as draft Set the draft status to true for the ROS 2 Device Connect guide. --- .../cross-platform/ros2-device-connect/_index.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/learning-paths/cross-platform/ros2-device-connect/_index.md b/content/learning-paths/cross-platform/ros2-device-connect/_index.md index 4bb1ceb9b4..dd1d57c4f8 100644 --- a/content/learning-paths/cross-platform/ros2-device-connect/_index.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/_index.md @@ -1,5 +1,10 @@ --- title: Get started with ROS 2 and Device Connect on Arm + +draft: true +cascade: + draft: true + description: Learn how to expose a ROS 2 system running in Docker on an Arm-based Linux device as a discoverable Device Connect device, and inspect its ROS 2 graph through remote procedure calls. minutes_to_complete: 30 From ca090e00c0aa4d5230cc8ba699b8be9fdc341d5f Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 11:50:13 -0500 Subject: [PATCH 38/66] manual edits --- .../configure-autoscaling.md | 168 +++++++++++++++ .../kedify-http-autoscaling/http-scaling.md | 193 ++---------------- .../install-ingress.md | 43 ++-- .../install-kedify-helm.md | 34 +-- 4 files changed, 225 insertions(+), 213 deletions(-) create mode 100644 content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md new file mode 100644 index 0000000000..f3b3cbdd84 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md @@ -0,0 +1,168 @@ +--- +title: "Configure and test Kedify HTTP autoscaling" +description: Configure Kedify HTTP autoscaling for the deployed application and observe replica changes as traffic varies. +weight: 5 +layout: "learningpathall" +--- + +## How application autoscaling with Kedify works + +Configure autoscaling for your deployed HTTP application with [Kedify’s HTTP Scaler](https://docs.kedify.io/scalers/http-scaler/). You'll then generate traffic and observe scale-out, scale-in, and scale-to-zero behavior when idle. + +Kedify’s ingress autowiring routes traffic through its proxy so that requests are measured and drive scaling. + +For more information, see [Scaling Deployments, StatefulSets & Custom Resources](https://keda.sh/docs/latest/concepts/scaling-deployments/) on the KEDA website. + +With ingress autowiring enabled, Kedify automatically routes traffic through its proxy before it reaches your service and deployment: + +```text +Ingress → kedify-proxy → Service → Deployment +``` + +The [Kedify proxy](https://docs.kedify.io/scalers/http-scaler/#kedify-proxy) gathers request metrics used by the scaler to make decisions. + +There are three main components involved in the process: + +- For the application deployment and service, there's an HTTP server with a small response delay to simulate work. +- For ingress, there's a public entry point that's configured using the `application.keda` host. +- For the `ScaledObject`, there's a Kedify HTTP scaler using `trafficAutowire: ingress`. + +## Enable autoscaling with Kedify + +The application is now running. Next, enable autoscaling so that it can scale dynamically between zero and 10 replicas. Kedify holds requests while the application scales from zero, subject to client timeouts. Apply the `ScaledObject` by running the following command: + +```bash +cat <<'EOF' | kubectl apply -f - +apiVersion: keda.sh/v1alpha1 + +kind: ScaledObject +metadata: + name: application +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: application + cooldownPeriod: 5 + minReplicaCount: 0 + maxReplicaCount: 10 + fallback: + failureThreshold: 2 + replicas: 1 + advanced: + restoreToOriginalReplicaCount: true + horizontalPodAutoscalerConfig: + behavior: + scaleDown: + stabilizationWindowSeconds: 5 + triggers: + - type: kedify-http + metadata: + hosts: application.keda + pathPrefixes: / + service: application-service + port: "8080" + scalingMetric: requestRate + targetValue: "10" + granularity: 1s + window: 10s + trafficAutowire: ingress +EOF +``` + +Use the following field descriptions to understand how the `ScaledObject` controls HTTP-driven autoscaling and how each setting affects traffic routing and scale decisions: + +- `type: kedify-http` - Uses Kedify’s HTTP scaler. +- `hosts`, `pathPrefixes` - Define which requests are monitored for scaling decisions. +- `service`, `port` - Identify the Kubernetes Service and port that receive traffic. +- `scalingMetric: requestRate`, `granularity: 1s`, `window: 10s`, `targetValue: "10"` - Scale out when the average request rate exceeds ~10 requests per second (rps) per replica over the last 10 seconds. +- `minReplicaCount: 0` - Enables scale to zero when there is no traffic. +- `trafficAutowire: ingress` - Automatically wires your Ingress to the Kedify proxy for seamless traffic management. + +After applying the settings, the `ScaledObject` will appear in the [Kedify dashboard](https://dashboard.kedify.io/). + +![Kedify dashboard with the ScaledObjects tab selected. The application row shows the kedify-http trigger, minimum zero and maximum ten replicas, and READY status after you apply the ScaledObject.#center](images/scaledobject.png "Kedify dashboard: ScaledObject") + +## Send traffic and observe scaling + +Because no traffic is currently being sent to the application, it'll eventually scale down to zero replicas. + +### Verify scale to zero + +To confirm that the application has scaled down, run the following command and watch until the number of replicas reaches zero: + +```bash +watch kubectl get deployment application -n default +``` + +The output is similar to: + +```output +Every 2,0s: kubectl get deployment application -n default + +NAME READY UP-TO-DATE AVAILABLE AGE +application 0/0 0 0 110s +``` + +This continuously monitors the deployment status in the `default` namespace. After traffic stops and the idle window has passed, you should see the application deployment report `0/0` replicas. `0/0` replicas indicates that the application has successfully scaled to zero. + +### Verify that the app can scale from zero + +Send a request to trigger scale-up: + +```bash +curl -I -H "Host: application.keda" http://$INGRESS_ADDRESS +``` + +The application scales from zero to one replica automatically. You should receive an HTTP `200 OK` response, confirming that the service is reachable again. + +### Generate load and observe scale-out + +Now, generate a heavier, sustained load against the application. You can use `hey`, or a similar benchmarking tool: + +```bash +hey -n 40000 -c 200 -t 60 -host "application.keda" http://$INGRESS_ADDRESS +``` + +While the load test is running, open another terminal and monitor the deployment replicas in real time: + +```bash +watch kubectl get deployment application -n default +``` + +You'll see that the number of replicas change dynamically. + +The output is similar to: + +```output +Every 2,0s: kubectl get deployment application -n default + +NAME READY UP-TO-DATE AVAILABLE AGE +application 5/5 5 5 23m +``` + +The following is the expected behavior: +- On bursty load, Kedify scales the deployment up toward `maxReplicaCount`. +- When traffic subsides, replicas scale down. After the cooldown, they can return to zero. + +You can also monitor traffic and scaling in the Kedify dashboard: + +![Kedify dashboard showing the application's ScaledObject Summary tab. Compare the Scaler's metrics and Number of replicas graphs to observe traffic metrics and replica changes during testing.#center](images/load.webp "Kedify dashboard: request load and scaling over time") + +## Clean up resources + +When you've finished testing, remove the resources that you created to free up your cluster: + +```bash +kubectl delete scaledobject application +kubectl delete ingress application-ingress +kubectl delete service application-service +kubectl delete deployment application +``` +This will delete the `ScaledObject`, Ingress, Service, and Deployment associated with the demo application. + +## What you've accomplished + +You've configured a Kedify `ScaledObject` and tested scale-to-zero, scale-up, and replica changes under load. You've monitored scaling in the dashboard. After testing, you removed the sample application resources. + +You can further explore the [Kedify How-To Guides](https://docs.kedify.io/how-to/) for more configurations such as Gateway API, Istio VirtualService, or OpenShift Routes. diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md index 075d3fd43e..118d211d11 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md @@ -1,57 +1,33 @@ --- -title: "Autoscale HTTP applications with Kedify and Kubernetes Ingress" -description: Deploy a sample HTTP application through Kubernetes Ingress, configure Kedify autoscaling, and observe replica changes as traffic varies. +title: "Deploy an HTTP application through Kubernetes Ingress" +description: Deploy a sample HTTP application through Kubernetes Ingress and verify that its endpoint returns an HTTP response. weight: 4 layout: "learningpathall" --- -## Overview -Deploy a sample HTTP application through Kubernetes Ingress and configure autoscaling with [Kedify’s HTTP Scaler](https://docs.kedify.io/scalers/http-scaler/). You'll complete these tasks in order: +## Deploy and verify an HTTP application -1. Deploy the application and expose it through Ingress -2. Enable autoscaling with a `ScaledObject` -3. Generate traffic and observe scale-out, scale-in, and scale-to-zero behavior when idle - -Kedify’s ingress autowiring routes traffic through its proxy so that requests are measured and drive scaling. - -For more information, see [Scaling Deployments, StatefulSets & Custom Resources](https://keda.sh/docs/latest/concepts/scaling-deployments/) on the KEDA website. - -## How it works - -With ingress autowiring enabled, Kedify automatically routes traffic through its proxy before it reaches your service and deployment: - -```text -Ingress → kedify-proxy → Service → Deployment -``` - -The [Kedify proxy](https://docs.kedify.io/scalers/http-scaler/#kedify-proxy) gathers request metrics used by the scaler to make decisions. - -## Deployment overview - -There are three main components involved in the process: -* For the application deployment and service, there is an HTTP server with a small response delay to simulate work. -* For ingress, there is a public entry point that is configured using the `application.keda` host. -* For the ScaledObject, there is a Kedify HTTP scaler using `trafficAutowire: ingress`. +You'll deploy a sample HTTP application and expose it through Kubernetes Ingress. Then, you'll send a request to verify that its endpoint returns an HTTP response. ## Configure the ingress address -Before testing the application, make sure `INGRESS_ADDRESS` is set to your ingress controller's external IP address or hostname. For a local cluster, you can use the forwarded address from the previous section. +Before testing the application, make sure that `INGRESS_ADDRESS` is set to your ingress controller's external IP address or hostname. For a local cluster, you can use the address that you forwarded using `port-forward` earlier. -If you followed the [Install an ingress controller](../install-ingress/) section, you should already have this set. Otherwise, if you installed Traefik separately, run: +If you completed [Install an ingress controller for HTTP autoscaling in Kubernetes](/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress/), you should already have this set. Otherwise, if you installed Traefik separately, run: ```bash export INGRESS_ADDRESS=$(kubectl get service traefik --namespace traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}{.status.loadBalancer.ingress[0].hostname}') echo "Ingress address: $INGRESS_ADDRESS" ``` -If the Service has no external address, use the local port forwarding option in the previous section. +If the service has no external address, use `port-forward`. {{% notice Note %}} -If you use an existing ingress controller, set `INGRESS_ADDRESS` to its endpoint and change `ingressClassName` in the following manifest to its IngressClass name. +If you use an existing ingress controller, set `INGRESS_ADDRESS` to its endpoint and change `ingressClassName` in the following manifest to its `IngressClass` name. {{% /notice %}} -## Deploy the application and configure Ingress +## Deploy the application and configure ingress -Now you will deploy a simple HTTP server and expose it using an Ingress resource. See the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). +Now you will deploy a simple HTTP server and expose it using an `Ingress` resource. For more informaton, see the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). Run the following command to deploy your application: @@ -124,14 +100,12 @@ spec: EOF ``` -## Application and Ingress settings - The manifest includes a few key options that affect scaling behavior: -- `RESPONSE_DELAY` is set in the Deployment manifest and adds approximately 300 ms latency per request. This slower response time increases the number of concurrent requests, making scaling effects easier to observe. +- `RESPONSE_DELAY` is set in the `Deployment` manifest and adds approximately 300 ms latency per request. This slower response time increases the number of concurrent requests, making scaling effects easier to observe. - The ingress uses the host `application.keda`. To access this app, use your ingress controller's address with a `Host:` header. -## Verify the application is running +## Verify that the application is running Run the following command to check that one replica is ready: @@ -148,7 +122,9 @@ application 1/1 1 1 3m44s ## Test the application -After the application and Ingress are deployed, verify that everything is working correctly by sending a request to the exposed endpoint. Run the following command: +After the application and ingress are deployed, verify that everything is working correctly by sending a request to the exposed endpoint. + +Run the following command: ```bash curl -I -H "Host: application.keda" http://$INGRESS_ADDRESS @@ -164,143 +140,8 @@ Content-Length: 301 Connection: keep-alive ``` -## Enable autoscaling with Kedify - -The application is now running. Next, enable autoscaling so that it can scale dynamically between zero and 10 replicas. Kedify holds requests while the application scales from zero, subject to client timeouts. Apply the `ScaledObject` by running the following command: - -```bash -cat <<'EOF' | kubectl apply -f - -apiVersion: keda.sh/v1alpha1 - -kind: ScaledObject -metadata: - name: application -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: application - cooldownPeriod: 5 - minReplicaCount: 0 - maxReplicaCount: 10 - fallback: - failureThreshold: 2 - replicas: 1 - advanced: - restoreToOriginalReplicaCount: true - horizontalPodAutoscalerConfig: - behavior: - scaleDown: - stabilizationWindowSeconds: 5 - triggers: - - type: kedify-http - metadata: - hosts: application.keda - pathPrefixes: / - service: application-service - port: "8080" - scalingMetric: requestRate - targetValue: "10" - granularity: 1s - window: 10s - trafficAutowire: ingress -EOF -``` - -## ScaledObject settings for HTTP autoscaling - -Use the following field descriptions to understand how the `ScaledObject` controls HTTP-driven autoscaling and how each setting affects traffic routing and scale decisions: - -- `type: kedify-http` - Uses Kedify’s HTTP scaler. -- `hosts`, `pathPrefixes` - Define which requests are monitored for scaling decisions. -- `service`, `port` - Identify the Kubernetes Service and port that receive traffic. -- `scalingMetric: requestRate`, `granularity: 1s`, `window: 10s`, `targetValue: "10"` - Scales out when the average request rate exceeds ~10 requests/second (rps) per replica over the last 10 seconds. -- `minReplicaCount: 0` - Enables scale to zero when there is no traffic. -- `trafficAutowire: ingress` - Automatically wires your Ingress to the Kedify proxy for seamless traffic management. - -After applying, the `ScaledObject` will appear in the [Kedify dashboard](https://dashboard.kedify.io/). - -![Kedify dashboard with the ScaledObjects tab selected. The application row shows the kedify-http trigger, minimum zero and maximum ten replicas, and READY status after you apply the ScaledObject.#center](images/scaledobject.png "Kedify dashboard: ScaledObject") - -## Send traffic and observe scaling - -Because no traffic is currently being sent to the application, it will eventually scale down to zero replicas. - -### Verify scale to zero - -To confirm that the application has scaled down, run the following command and watch until the number of replicas reaches zero: - -```bash -watch kubectl get deployment application -n default -``` - -The output is similar to: - -```output -Every 2,0s: kubectl get deployment application -n default - -NAME READY UP-TO-DATE AVAILABLE AGE -application 0/0 0 0 110s -``` -This continuously monitors the deployment status in the `default` namespace. After traffic stops and the idle window has passed, you should see the application deployment report `0/0` replicas, indicating that it has successfully scaled to zero. - -### Verify the app can scale from zero - -Send a request to trigger scale-up: - -```bash -curl -I -H "Host: application.keda" http://$INGRESS_ADDRESS -``` - -The application scales from zero to one replica automatically. You should receive an HTTP `200 OK` response, confirming that the service is reachable again. - -### Generate load and observe scale-out - -Now, generate a heavier, sustained load against the application. You can use `hey` (or a similar benchmarking tool): - -```bash -hey -n 40000 -c 200 -t 60 -host "application.keda" http://$INGRESS_ADDRESS -``` - -While the load test is running, open another terminal and monitor the deployment replicas in real time: - -```bash -watch kubectl get deployment application -n default -``` - -You will see the number of replicas change dynamically. The output is similar to: - -```output -Every 2,0s: kubectl get deployment application -n default - -NAME READY UP-TO-DATE AVAILABLE AGE -application 5/5 5 5 23m -``` - -Expected behavior: -- On bursty load, Kedify scales the Deployment up toward `maxReplicaCount`. -- When traffic subsides, replicas scale down. After the cooldown, they can return to zero. - -You can also monitor traffic and scaling in the Kedify dashboard: - -![Kedify dashboard showing the application's ScaledObject Summary tab. Compare the Scaler's metrics and Number of replicas graphs to observe traffic metrics and replica changes during testing.#center](images/load.webp "Kedify dashboard: request load and scaling over time") - -## Clean up - -When you have finished testing, remove the resources created in this Learning Path to free up your cluster: - -```bash -kubectl delete scaledobject application -kubectl delete ingress application-ingress -kubectl delete service application-service -kubectl delete deployment application -``` -This will delete the `ScaledObject`, Ingress, Service, and Deployment associated with the demo application. - ## What you've accomplished -You've deployed an HTTP application through Ingress, configured a Kedify `ScaledObject`, and tested scale-to-zero, scale-up, and replica changes under load. You've also monitored scaling in the dashboard and removed the sample application resources. - -## Next steps +You've deployed the sample HTTP application through Kubernetes Ingress and tested its endpoint for an HTTP response. -To go further, you can explore the [Kedify How-To Guides](https://docs.kedify.io/how-to/) for more configurations such as Gateway API, Istio VirtualService, or OpenShift Routes. +Next, you'll configure and test Kedify HTTP autoscaling using this application and `INGRESS_ADDRESS`. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md index 22d80a1b65..31a59add05 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md @@ -1,27 +1,26 @@ --- -title: "Install an ingress controller" +title: "Install an ingress controller for HTTP autoscaling on Kubernetes" description: Install Traefik with Helm and prepare an ingress endpoint for testing Kedify HTTP autoscaling on Kubernetes. weight: 3 layout: "learningpathall" --- -## Install an ingress controller for HTTP autoscaling on Kubernetes +## Install Traefik with Helm -To expose the sample application, you need an ingress controller to handle incoming traffic. This Learning Path uses Traefik with the standard Kubernetes Ingress API and schedules Traefik on arm64 nodes. The Traefik chart used here needs Kubernetes 1.25 or later. +To expose the sample application, you need an ingress controller to handle incoming traffic. One option is to use Traefik with the standard Kubernetes Ingress API and schedule Traefik on arm64 nodes. {{% notice Note %}} -If your cluster already has an ingress controller installed and configured, you can skip this step and proceed to the [Autoscale HTTP applications with Kedify and Kubernetes Ingress section](../http-scaling/). +- If your cluster already has an ingress controller installed and configured, you can skip this step and proceed to the [Deploy an HTTP application through Kubernetes Ingress](../http-scaling/). +- Before installing Traefik, ensure that you're using Kubernetes version 1.25 or later. {{% /notice %}} -## Install Traefik with Helm - Add the Traefik Helm repository: ```bash helm repo add traefik https://traefik.github.io/charts helm repo update ``` -Install Traefik with a node selector and toleration for arm64 nodes. The chart creates an IngressClass named `traefik` and a LoadBalancer Service. Set `ingressClass.isDefaultClass=false` so this installation does not change the default class for other Ingress resources: +Install Traefik with a node selector and toleration for arm64 nodes. The chart creates an IngressClass named `traefik` and a LoadBalancer service. Set `ingressClass.isDefaultClass=false` so that the installation doesn't change the default class for other ingress resources: ```bash helm upgrade --install traefik traefik/traefik \ --version 41.6.1 \ @@ -35,28 +34,28 @@ helm upgrade --install traefik traefik/traefik \ --set ingressClass.isDefaultClass=false ``` -Confirm the Traefik Deployment is available and its IngressClass exists: +Confirm the Traefik Deployment is available and its `IngressClass` exists: ```bash kubectl wait --namespace traefik --for=condition=available deployment/traefik --timeout=300s kubectl get ingressclass traefik ``` -Managed clouds can take a few minutes to allocate a public IP address or hostname for the Traefik Service. +Managed clouds can take a few minutes to allocate a public IP address or hostname for the Traefik service. ## Get the external endpoint -Retrieve the Traefik Service's external IP address or hostname and store it in an environment variable: +Retrieve the Traefik service's external IP address or hostname and store it in an environment variable: ```bash export INGRESS_ADDRESS=$(kubectl get service traefik --namespace traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}{.status.loadBalancer.ingress[0].hostname}') echo "Ingress address: $INGRESS_ADDRESS" ``` Typical values by provider: -- **AWS EKS**: Load balancer hostname (for example, `a1234567890abcdef-123456789.us-west-2.elb.amazonaws.com`) -- **Google GKE**: IP address (for example, `34.102.136.180`) -- **Azure AKS**: IP address (for example, `20.62.196.123`) +- Amazon Elastic Kubernetes Service (EKS): Load balancer hostname (for example, `a1234567890abcdef-123456789.us-west-2.elb.amazonaws.com`) +- Google Kubernetes Engine (GKE): IP address (for example, `34.102.136.180`) +- Azure Kubernetes Service (AKS): IP address (for example, `20.62.196.123`) -If no value is printed on a managed cluster, wait briefly and run the command again. For a local cluster such as k3d, forward a local port to Traefik in a separate terminal. Use this method even if the Service reports an address on the cluster's private container network: +If no value is printed on a managed cluster, wait briefly and run the command again. For a local cluster such as k3d, forward a local port to Traefik in a separate terminal. Use this method even if the service reports an address on the cluster's private container network: ```bash kubectl port-forward --namespace traefik service/traefik 8080:80 @@ -68,27 +67,27 @@ Keep that terminal open. In your original terminal, use the local address for th export INGRESS_ADDRESS=127.0.0.1:8080 ``` -## Configure access +## Configure access to the applications -You have two options: +You have two options for configuring access: -- Option 1: DNS (recommended for production): +- DNS (recommended for production): Create a DNS record pointing `application.keda` to the external IP address or hostname of your ingress controller. -- Option 2: Host header (quick test): - Use `INGRESS_ADDRESS` with a `Host: application.keda` header when you test the application in the next section. The address can be Traefik's external endpoint or your forwarded local port. +- Host header (recommended for a quick test): + Use `INGRESS_ADDRESS` with a `Host: application.keda` header when you test the application. The address can be Traefik's external endpoint or your forwarded local port. ## Verify the installation -List the controller pods and confirm they are running: +List the controller pods and confirm that they're running: ```bash kubectl get pods --namespace traefik ``` You should see the `traefik` pod in `Running` status. -## What you've accomplished +## What you've accomplished and what's next You've installed Traefik with Helm, checked its Deployment, IngressClass, and pods, and prepared an ingress endpoint and access method for testing. -Now that you have an ingress controller installed and configured, proceed to the next section to deploy an application and configure Kedify autoscaling. +Next, you'll deploy an HTTP application through Kubernetes Ingress and verify its HTTP response, then configure and test Kedify autoscaling. diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md index d86b306915..4a32cde799 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-kedify-helm.md @@ -5,17 +5,23 @@ weight: 2 layout: "learningpathall" --- -## Overview +## Helm charts for installing Kedify -Install Kedify on your Kubernetes cluster with three Helm charts: the Kedify build of KEDA for event-driven autoscaling, the HTTP Scaler for HTTP-based scaling, and the Kedify Agent to connect your cluster to Kedify's cloud service. Then verify that the components are running. +Install Kedify on your Kubernetes cluster with three Helm charts: + +- The Kedify build of KEDA for event-driven autoscaling +- The HTTP Scaler for HTTP-based scaling +- The Kedify Agent to connect your cluster to Kedify's cloud service + +After installation, verify that the components are running. For more information and other installation methods on Arm, see the [Kedify installation documentation](https://docs.kedify.io/installation/helm#installation-on-arm). ## Before you begin -You will need: +Before installation, you'll need the following: -- A running Kubernetes cluster (for example, kind, minikube, EKS, GKE, or AKS), hosted on any cloud provider or local environment +- A running Kubernetes cluster hosted on any cloud provider or local environment — for example, kind, minikube, Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE), or Azure Kubernetes Service (AKS) - Kubectl and Helm installed and configured to communicate with your cluster - A Kedify Service account to obtain your Organization ID and API key (sign up at the [Kedify dashboard](https://dashboard.kedify.io/)) @@ -27,10 +33,10 @@ If you already have a Kedify Agent deployed, decode the key from the existing Se ```bash kubectl get secret -n keda kedify-agent -o=jsonpath='{.data.apikey}' | base64 --decode ``` -Otherwise, in the Kedify dashboard go to **Organization** → **API Keys**, select **Create Agent Key**, and copy the key. +Otherwise, in the Kedify dashboard, navigate to **Organization** → **API Keys**, select **Create Agent Key**, and copy the key. {{% notice Note %}} -The API key is shared across all agent installations. If you regenerate it, update existing agents and keep it secret. +The API key is shared across all agent installations. If you regenerate the key, update existing agents and keep it as a secret. {{% /notice %}} Optionally, export these values for reuse in the following commands: @@ -50,13 +56,11 @@ helm repo update ## Install components with Helm -Most providers (such as EKS and AKS) schedule pods on Arm nodes when you specify a `nodeSelector` for `kubernetes.io/arch=arm64`. On Google Kubernetes Engine (GKE), Arm nodes commonly have an explicit taint, so matching `tolerations` are required. To stay portable across providers, configure both `nodeSelector` and `tolerations`. +Most providers such as EKS and AKS schedule pods on Arm nodes when you specify a `nodeSelector` for `kubernetes.io/arch=arm64`. On GKE, Arm nodes commonly have an explicit taint, so you need matching `tolerations`. -{{% notice Note %}} -For a portable deployment across cloud providers, configure both `nodeSelector` and `tolerations` in your Helm values or CLI flags. -{{% /notice %}} +To stay portable across providers, configure both `nodeSelector` and `tolerations` in your Helm values or CLI flags. -## Install the Kedify build of KEDA +### Install the Kedify build of KEDA Run the following Helm command to install the Kedify build of KEDA into the `keda` namespace: ```bash @@ -71,7 +75,7 @@ helm upgrade --install keda kedifykeda/keda \ --set "tolerations[0].effect=NoSchedule" ``` -## Install the Kedify HTTP Scaler +### Install the Kedify HTTP Scaler Install the Kedify HTTP Scaler with matching node selector and tolerations: ```bash @@ -90,7 +94,7 @@ helm upgrade --install keda-add-ons-http kedifykeda/keda-add-ons-http \ --set "scaler.tolerations[0].effect=NoSchedule" ``` -## Install the Kedify Agent +### Install the Kedify Agent Edit the cluster name, Organization ID, and API key (or rely on the exported environment variables), then run: ```bash @@ -113,7 +117,7 @@ helm upgrade --install kedify-agent kedifykeda/kedify-agent \ ## Verify installation -List pods in the `keda` namespace to confirm all components are running: +List pods in the `keda` namespace to confirm that all components are running: ```bash kubectl get pods -n keda ``` @@ -134,4 +138,4 @@ kedify-agent-xxxxx 1/1 Running 0 1m You've gathered Kedify credentials, installed the three Helm charts with Arm node selectors and tolerations, and checked the component pods in the `keda` namespace. -Proceed to the next section to install an ingress controller, deploy a sample HTTP app, and test autoscaling. +Next, you'll install an ingress controller for the HTTP sample application that you'll deploy. From b97cbc47c82a40c7b9bcb970cb26aadb800e9382 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 11:50:48 -0500 Subject: [PATCH 39/66] nit --- .../kedify-http-autoscaling/install-ingress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md index 31a59add05..3e11c91620 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md @@ -1,5 +1,5 @@ --- -title: "Install an ingress controller for HTTP autoscaling on Kubernetes" +title: "Install an ingress controller for testing HTTP autoscaling" description: Install Traefik with Helm and prepare an ingress endpoint for testing Kedify HTTP autoscaling on Kubernetes. weight: 3 layout: "learningpathall" From 30365d244229e22fe14206935fa3a177efa14505 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 11:54:35 -0500 Subject: [PATCH 40/66] nit --- .../kedify-http-autoscaling/configure-autoscaling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md index f3b3cbdd84..1cc78da871 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md @@ -1,5 +1,5 @@ --- -title: "Configure and test Kedify HTTP autoscaling" +title: "Configure and test HTTP autoscaling with Kedify" description: Configure Kedify HTTP autoscaling for the deployed application and observe replica changes as traffic varies. weight: 5 layout: "learningpathall" From 07b01e95c823eb4c6ebc4685a6b9337bb3b45ecf Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 11:58:50 -0500 Subject: [PATCH 41/66] nit --- .../kedify-http-autoscaling/configure-autoscaling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md index 1cc78da871..6dbdf15e7f 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/configure-autoscaling.md @@ -77,7 +77,7 @@ Use the following field descriptions to understand how the `ScaledObject` contro - `service`, `port` - Identify the Kubernetes Service and port that receive traffic. - `scalingMetric: requestRate`, `granularity: 1s`, `window: 10s`, `targetValue: "10"` - Scale out when the average request rate exceeds ~10 requests per second (rps) per replica over the last 10 seconds. - `minReplicaCount: 0` - Enables scale to zero when there is no traffic. -- `trafficAutowire: ingress` - Automatically wires your Ingress to the Kedify proxy for seamless traffic management. +- `trafficAutowire: ingress` - Automatically wires your ingress to the Kedify proxy for seamless traffic management. After applying the settings, the `ScaledObject` will appear in the [Kedify dashboard](https://dashboard.kedify.io/). From 56508a8c3ee9eb279a5b12c2e6838e372eabe26b Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 11:59:59 -0500 Subject: [PATCH 42/66] nit --- .../kedify-http-autoscaling/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md index ec5b0346cf..fb3a489dda 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/_index.md @@ -44,7 +44,7 @@ generated_summary_faq: show `1/1` in `READY` and `Running` in `STATUS` before continuing. - question: Do I need to install Traefik if my cluster already has an ingress controller? answer: >- - No. If your cluster already has an ingress controller, skip the Traefik installation and use its endpoint and `IngressClass` name in the application steps. + No. If your cluster already has an ingress controller, skip the Traefik installation and use its endpoint and `IngressClass` name while deploying the application. - question: Which deployment target should I use for the ingress controller on Arm-based nodes? answer: >- Install Traefik with Helm and set its node selector and toleration for arm64 nodes to run the controller on Arm nodes in your cluster. From 83fb062c3e0234380165feca0381e2a3e7ea0ac2 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Mon, 5 Oct 2026 13:03:02 -0400 Subject: [PATCH 43/66] Swin2SR tech review --- .../swin2sr-vgf/1-prepare-environment.md | 52 ++++++++++++++++--- .../swin2sr-vgf/2-export-model.md | 2 +- .../swin2sr-vgf/3-run-model.md | 8 ++- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md index 7f6a5eeb8e..b926c46c1e 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md @@ -7,11 +7,17 @@ weight: 2 layout: learningpathall --- +## What is Swin2SR? + +[Swin2SR](https://github.com/mv-lab/swin2sr) is a neural network for image super-resolution and restoration, built on the Swin Transformer V2 architecture. Super-resolution means estimating a higher-resolution image from a lower-resolution input. The model uses patterns learned during training to reconstruct details such as edges and textures. + +Its transformer processes image features in small regions called windows and shifts those windows between layers to share information across regions. You use a pretrained model, so you can run it without training it yourself. + ## What you'll build -You will upscale a low-resolution image using Swin2SR, a pretrained image super-resolution model. It predicts finer detail as it doubles the image's width and height. +You will use the ×2 version of Swin2SR to turn a 64 × 64 image into a 128 × 128 image. It doubles the width and height, predicting finer detail. These predictions can differ from the original image, which is why you compare the result with a high-resolution reference. -You export the model with ExecuTorch, then run it through the Arm Vulkan Graph Format (VGF) backend. The result is a PNG image you can open and compare with a high-resolution reference. +You export the model with ExecuTorch to create a `.pte` program, then build a host runner to execute it through the Arm Vulkan Graph Format (VGF) backend. An image helper connects your input image to the runner and saves the result as a PNG. You then check its dimensions and compare it with a high-resolution reference. ![Equal-size views compare a 64 by 64 low-resolution input with its 128 by 128 Swin2SR output. The input is enlarged for display only; labels show actual pixel dimensions. ExecuTorch and Arm VGF run the model on the host.#center](swin2sr-image-flow.svg "Images shown at the same display size to compare detail; labels show actual resolution") @@ -31,7 +37,7 @@ sudo apt-get install -y \ libvulkan1 libvulkan-dev vulkan-tools unzip xz-utils ``` -These packages don't install your GPU's vendor-specific driver. The Python installation step installs CMake 3.31.10. +These packages don't install your GPU's vendor-specific driver. The later **Install ExecuTorch** section installs CMake 3.31.10. ## Get the ExecuTorch release @@ -46,11 +52,13 @@ git submodule sync --recursive git submodule update --init --recursive ``` +The `test` command checks that the checkout matches the expected commit; success produces no output. The recursive submodule commands synchronize and download the source dependencies, including nested submodules. + Run the remaining commands from this repository root, in the same terminal. ## Configure the Arm ML SDK -Create a fresh Python environment: +Create a fresh Python environment to keep this example's packages separate from your system Python. Activating it makes the following `python` and `pip` commands use that environment: ```bash python3.12 -m venv .venv @@ -58,7 +66,7 @@ source .venv/bin/activate python -m pip install --upgrade pip ``` -Review the [ML SDK license terms](https://github.com/arm/ai-ml-sdk-for-vulkan/tree/main/LICENSES) and the Vulkan SDK terms. Use the setup script included in the release to install the SDK tools: +Review the [ML SDK license terms](https://github.com/arm/ai-ml-sdk-for-vulkan/tree/main/LICENSES) and the Vulkan SDK terms. Use the release's setup script to install the SDK tools. `--enable-mlsdk-deps` selects the ML SDK dependencies for VGF, and `--disable-ethos-u-deps` skips the Ethos-U dependencies: ```bash bash examples/arm/setup.sh --disable-ethos-u-deps --enable-mlsdk-deps @@ -93,7 +101,7 @@ These commands replace `install_executorch.sh`, which uses nightly and test inde ## Check the tools -Activate the SDK paths and check the export and GPU prerequisites: +Source `setup_path.sh` to make the SDK tools and libraries available in this terminal. The `--aot` check verifies the ahead-of-time export dependencies. The import check tests ExecuTorch's export module and runtime bindings, while `vulkaninfo` checks the GPU feature required by the SDK: ```bash source examples/arm/arm-scratch/setup_path.sh @@ -102,7 +110,29 @@ python -c "import executorch.exir; from executorch.extension.pybindings import p vulkaninfo | grep shaderFloat64 ``` -Resolve any `FAIL` entries before continuing. Confirm `shaderFloat64 = true` for your device, and keep this terminal open for the remaining steps. +The output is similar to this selected excerpt; paths reflect your checkout location: + +```output +[PASS] Python version + Python 3.12 meets the recommended VGF minimum (3.12). + +[PASS] TOSA serializer + Imported tosa_serializer from /home/ubuntu/executorch/.venv/lib/python3.12/site-packages/tosa_serializer/__init__.py (version=1.1). + +[PASS] MLSDK model converter + /home/ubuntu/executorch/.venv/bin/model-converter --version succeeded (version=0.10.0): +{ + "version": "19d1d0f", + "dependencies": [ + "argparse=v3.1-0-g68fd027", + +[PASS] MODEL_CONVERTER_LIB_DIR + MODEL_CONVERTER_LIB_DIR is not set; relying on the process loader paths. This is OK when model-converter --version succeeds. +ExecuTorch is ready +shaderFloat64 = true +``` + +The `[PASS]` entries report successful export dependency checks. `ExecuTorch is ready` confirms the imports succeeded. Confirm `shaderFloat64 = true` for your device, and keep this terminal open for the remaining steps. ## Prepare the input image @@ -113,6 +143,14 @@ python examples/arm/super_resolution_example_vgf/model_export/prepare_demo_asset --output-dir swin2sr-work ``` +The output is similar to this; paths reflect your checkout location: + +```output +Prepared demo assets under /home/ubuntu/executorch/swin2sr-work +Runtime input: /home/ubuntu/executorch/swin2sr-work/runtime/demo_lr_64.png +Runtime reference: /home/ubuntu/executorch/swin2sr-work/runtime/demo_hr_128.png +``` + The script creates a 128 × 128 crop and downsizes a copy to 64 × 64. You use these two files: | File in `swin2sr-work/runtime/` | What it is | diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md index 6ea07ed64a..932777111a 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md @@ -9,7 +9,7 @@ layout: learningpathall ## Export the pretrained model -You don't need to train Swin2SR. The exporter downloads the pretrained ×2 checkpoint and converts it into an ExecuTorch `.pte` program. The pinned checkpoint revision keeps the model weights consistent between runs. +You don't need to train Swin2SR. The exporter downloads the pretrained ×2 checkpoint—the saved model weights—and converts it into an ExecuTorch `.pte` program. The pinned checkpoint revision keeps the model weights consistent between runs. Run the exporter from your ExecuTorch directory: diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md index 407edeab5c..d7ece22141 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md @@ -39,7 +39,13 @@ python examples/arm/super_resolution_example_vgf/runtime/run_super_resolution.py --output-image swin2sr-work/runtime/demo_sr_128.png ``` -The helper converts the image into a tensor, runs the model, and saves the output tensor as a PNG. A successful run ends with `Saved super-resolved image to` followed by the full path to `demo_sr_128.png`. +The output includes a message similar to this; the path reflects your checkout location: + +```output +Saved super-resolved image to /home/ubuntu/executorch/swin2sr-work/runtime/demo_sr_128.png +``` + +The helper converts the image into a tensor, a numerical representation of its pixels, runs the model, and saves the output tensor as a PNG. A successful run ends with `Saved super-resolved image to` followed by the full path to `demo_sr_128.png`. Your input must be exactly 64 × 64 pixels. If you see an `expected (1, 3, 64, 64)` error, check that you used `demo_lr_64.png`, not the larger reference image. From e05c7e840a0cba8f8d8910314c1df4c9dd253045 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 12:07:53 -0500 Subject: [PATCH 44/66] url update --- .../kedify-http-autoscaling/install-ingress.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md index 3e11c91620..9a8f13054f 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/install-ingress.md @@ -10,7 +10,7 @@ layout: "learningpathall" To expose the sample application, you need an ingress controller to handle incoming traffic. One option is to use Traefik with the standard Kubernetes Ingress API and schedule Traefik on arm64 nodes. {{% notice Note %}} -- If your cluster already has an ingress controller installed and configured, you can skip this step and proceed to the [Deploy an HTTP application through Kubernetes Ingress](../http-scaling/). +- If your cluster already has an ingress controller installed and configured, you can skip this step and proceed to [Deploy an HTTP application through Kubernetes Ingress](/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling/). - Before installing Traefik, ensure that you're using Kubernetes version 1.25 or later. {{% /notice %}} @@ -50,7 +50,7 @@ export INGRESS_ADDRESS=$(kubectl get service traefik --namespace traefik -o json echo "Ingress address: $INGRESS_ADDRESS" ``` -Typical values by provider: +The following are typical endpoint values by cloud provider: - Amazon Elastic Kubernetes Service (EKS): Load balancer hostname (for example, `a1234567890abcdef-123456789.us-west-2.elb.amazonaws.com`) - Google Kubernetes Engine (GKE): IP address (for example, `34.102.136.180`) - Azure Kubernetes Service (AKS): IP address (for example, `20.62.196.123`) From 21a56818740cf56edd8ac6c6ed13553332cbe40a Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 12:09:33 -0500 Subject: [PATCH 45/66] nit --- .../kedify-http-autoscaling/http-scaling.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md index 118d211d11..7a38357e19 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md @@ -27,7 +27,7 @@ If you use an existing ingress controller, set `INGRESS_ADDRESS` to its endpoint ## Deploy the application and configure ingress -Now you will deploy a simple HTTP server and expose it using an `Ingress` resource. For more informaton, see the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). +Now you'll deploy an HTTP server and expose it using an `Ingress` resource. For more informaton, see the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). Run the following command to deploy your application: @@ -100,7 +100,7 @@ spec: EOF ``` -The manifest includes a few key options that affect scaling behavior: +The manifest includes the following options that affect scaling behavior: - `RESPONSE_DELAY` is set in the `Deployment` manifest and adds approximately 300 ms latency per request. This slower response time increases the number of concurrent requests, making scaling effects easier to observe. - The ingress uses the host `application.keda`. To access this app, use your ingress controller's address with a `Host:` header. @@ -113,7 +113,7 @@ Run the following command to check that one replica is ready: kubectl get deployment application ``` -The expected output is: +The output is similar to: ```output NAME READY UP-TO-DATE AVAILABLE AGE From 3a456cbe117b0a3c543726ba3fa8c88d687c6358 Mon Sep 17 00:00:00 2001 From: Annie Tallund Date: Mon, 5 Oct 2026 10:28:03 -0700 Subject: [PATCH 46/66] Tech review of ROS2 with Device Connect --- .../cross-platform/ros2-device-connect/background.md | 1 - .../ros2-device-connect/how-it-works.md | 12 ++++++------ .../ros2-device-connect/profiles-and-hardware.md | 2 +- .../cross-platform/ros2-device-connect/setup.md | 8 ++++++++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/content/learning-paths/cross-platform/ros2-device-connect/background.md b/content/learning-paths/cross-platform/ros2-device-connect/background.md index 5fd219529b..21111d8c35 100644 --- a/content/learning-paths/cross-platform/ros2-device-connect/background.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/background.md @@ -39,7 +39,6 @@ To learn the SDK primitives in more depth, see these Learning Paths: - [Device-to-Device communication with Device Connect](/learning-paths/embedded-and-microcontrollers/device-connect-d2d/) for the developer model and a sensor-to-monitor example - [Deploy multi-network device meshes using Device Connect server and NATS](/learning-paths/embedded-and-microcontrollers/device-connect-server/) for server mode -- [Connect AI agents to edge devices using Device Connect and Strands](/learning-paths/embedded-and-microcontrollers/device-connect-strands/) for driving devices from an AI agent ## The ros2-device-connect example diff --git a/content/learning-paths/cross-platform/ros2-device-connect/how-it-works.md b/content/learning-paths/cross-platform/ros2-device-connect/how-it-works.md index 755dfed89b..17d5995bb8 100644 --- a/content/learning-paths/cross-platform/ros2-device-connect/how-it-works.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/how-it-works.md @@ -11,12 +11,12 @@ layout: learningpathall The adapter doesn't add a new way to talk to ROS 2. It wraps the same `ros2` command you ran from your terminal in the setup section, one layer at a time. Each layer adds one thing to the layer beneath it: -| Layer | What it is | What it adds | Example | -|---|---|---|---| -| 1. ROS 2 command | A `ros2` CLI call run in the container from the host | The ROS 2 query itself | `docker exec ros2_test ... ros2 topic list` | -| 2. Python wrapper | `run_ros()` | The same command, called from Python and returning structured output | `run_ros("ros2 topic list")` | -| 3. RPC | An `@rpc` method on `Ros2InspectionMixin` | A named function that peers and agents can discover and call over the network | `get_ros_topics()` | -| 4. Device | A driver class run by `DeviceRuntime` | A device that bundles those RPCs and joins the network | `PuppyPiRos2Driver` | +| Layer | Component | What it is | What it adds | Example | +|---|---|---|---|---| +| 1 | ROS 2 command | A `ros2` CLI call run in the container from the host | The ROS 2 query itself | `docker exec ros2_test ... ros2 topic list` | +| 2 | Python wrapper | `run_ros()` | The same command, called from Python and returning structured output | `run_ros("ros2 topic list")` | +| 3 | RPC | An `@rpc` method on `Ros2InspectionMixin` | A named function that peers and agents can discover and call over the network | `get_ros_topics()` | +| 4 | Device | A driver class run by `DeviceRuntime` | A device that bundles those RPCs and joins the network | `PuppyPiRos2Driver` | Layer 1 is all you need when you have a shell on the machine. Layers 2 to 4 let a caller *without* shell access run the same query, safely and by name. diff --git a/content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md b/content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md index b046dfef4e..d2f56b740c 100644 --- a/content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/profiles-and-hardware.md @@ -139,4 +139,4 @@ In this Learning Path, you: - ran the adapter in D2D mode and called read-only inspection RPCs from a Python client, including one call rejected by input validation - saw how profiles reuse the same shared core for a Raspberry Pi 5 camera and a ROS 2 robot, and how to add a profile for your own hardware -To go further, try driving the adapter from an AI agent with [Connect AI agents to edge devices using Device Connect and Strands](/learning-paths/embedded-and-microcontrollers/device-connect-strands/), or build a larger ROS 2 workload on Arm with [Build a ROS 2 and Zenoh simulation environment on an Arm server](/learning-paths/cross-platform/ros2-zenoh-arm/). +To go further, try building a larger ROS 2 workload on Arm with [Build a ROS 2 and Zenoh simulation environment on an Arm server](/learning-paths/cross-platform/ros2-zenoh-arm/). diff --git a/content/learning-paths/cross-platform/ros2-device-connect/setup.md b/content/learning-paths/cross-platform/ros2-device-connect/setup.md index 08d7d8d143..f38e8dfb28 100644 --- a/content/learning-paths/cross-platform/ros2-device-connect/setup.md +++ b/content/learning-paths/cross-platform/ros2-device-connect/setup.md @@ -29,6 +29,14 @@ By the end of this section, you'll have: The adapter talks to ROS 2 through Docker, so you need Docker Engine. Follow the [Docker Engine install guide](/install-guides/docker/docker-engine/), including the step that adds your user to the `docker` group. The adapter runs `docker exec` as your user, so Docker must work without `sudo`. +Verify that Docker is installed and that you can connect to the Docker daemon without `sudo`: + +```bash +docker version +``` + +The command should display version information for both the Docker client and server. + ## Start a ROS 2 container You don't need to install ROS 2 on the host. The official `ros:humble` image is multi-architecture, so Docker pulls the `arm64` variant automatically. If you'd prefer a native install, see the [ROS 2 install guide](/install-guides/ros2/). From 83e86e4722686cc87a9f56bc53b8bad23116aaad Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 14:32:37 -0500 Subject: [PATCH 47/66] first pass on swin2sr --- .../jetson_object_detection/balenaEtcher1.png | Bin 112639 -> 0 bytes .../images/img08_Functions_Tab.png | Bin 213220 -> 0 bytes .../uv_debug/callStackLocals.png | Bin 11960 -> 0 bytes .../callStackLocals_caller_callee.png | Bin 15869 -> 0 bytes .../uv_debug/gmsTicksMemory.png | Bin 15303 -> 0 bytes .../uv_debug/gmsTicksWatch.png | Bin 7281 -> 0 bytes .../uv_debug/mainWhileLoop.png | Bin 26764 -> 0 bytes .../uv_debug/mainWhileLoopDisassembly.png | Bin 17901 -> 0 bytes .../uv_debug/mainWhileLoopStopped.png | Bin 26684 -> 0 bytes .../uv_debug/manageBKPT.png | Bin 12425 -> 0 bytes .../uv_debug/periodicWindowUpdate.png | Bin 17579 -> 0 bytes .../swin2sr-vgf/1-prepare-environment.md | 46 +++++++++--------- .../swin2sr-vgf/2-export-model.md | 10 ++-- .../swin2sr-vgf/3-run-model.md | 15 +++--- .../swin2sr-vgf/4-inspect-result.md | 22 ++++++--- .../swin2sr-vgf/_index.md | 14 ++---- 16 files changed, 59 insertions(+), 48 deletions(-) delete mode 100644 content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaEtcher1.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_Functions_Tab.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals_caller_callee.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksMemory.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksWatch.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoop.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoopDisassembly.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoopStopped.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/manageBKPT.png delete mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicWindowUpdate.png diff --git a/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaEtcher1.png b/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaEtcher1.png deleted file mode 100644 index 6318e740eac02c11d3a703fa99665096f40bfd46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112639 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%0D(F!YvI7 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_Functions_Tab.png b/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_Functions_Tab.png deleted file mode 100644 index cd2398617703b5a6a95e92c74ef6e7059e6d9c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213220 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 OILj~MeK_kdxdH%FnUR{*}%%r!c1CKql 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

bCvn8)3$vA_bJA{i#Tqn`2rp@8F!O>TMj(0}@B= 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

nVGQ6D5)RdRmjSS%zirQh<*FLMjrjPRo-rg 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals.png deleted file mode 100644 index afc60d58ec3996918632a0f862ed9363ef448ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11960 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksMemory.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksMemory.png deleted file mode 100644 index c9a1e662d5d8ba330cc8710f7b24a7674592153f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15303 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksWatch.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsTicksWatch.png deleted file mode 100644 index 6f97e3a9ea6239b0bcc9250a7a5ca74b6b8267a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7281 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 E2e}c5?EnA( diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoop.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/mainWhileLoop.png deleted file mode 100644 index 48728386a2c7caedf5848a6c85c916aabffac96a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26764 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/manageBKPT.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/manageBKPT.png deleted file mode 100644 index 496dc1cef968486ab8812ad1a00a1424c7fb23e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12425 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicWindowUpdate.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicWindowUpdate.png deleted file mode 100644 index 82fafd16f18dc5c65a97f5f765d76b972b01a56b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17579 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

oBa4U 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 I|NHa*0MheYD*ylh literal 0 HcmV?d00001 diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg deleted file mode 100644 index 7db53c4c46..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg +++ /dev/null @@ -1,10 +0,0 @@ - -Responsibilities across the OMM pipeline - -Responsibilities across the OMM pipeline -Content + authoringChoose stable masksProvide mesh and UVsBake opacity statesBalance subdivisionOutput: per-triangle data -Engine / RHICreate OMM resourcesMap source trianglesBuild runtime geometryEnable the pipelineOutput: OMM-enabled BLAS -API + driverExpose feature supportBuild and synchronizeProvide runtime controlsManage device behaviorOutput: execution path -Mali hardwareTraverse scene geometryLocate OMM stateAccept opaque regionsContinue or fallbackOutput: opacity decision -OMM succeeds when every responsibility connects to the next stage.Use this map for design reviews, debugging, and ownership discussions. - diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.webp b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.webp new file mode 100644 index 0000000000000000000000000000000000000000..fe415696adda18c57be009b1f53ea401c7c92e10 GIT binary patch literal 35618 zcmZs?V{m3&&^CIh86>7F47qByghu01a^wC7=?QCM*B|fd2Q?fddLb0sr2}bwvUIOm)HK0Cl9G)&zW0 z*D%2|TYYG;A@EzRM=7Asc@_%N&_L)UJqf8%2-e)XSg#HumuK!dhbp|I5!!o#Wa)E5f*cLH7n~mDQe2f+e2J?K3 z>34yhn}?6>XN?)-@69nhY6xppk}!>gBi;1h_mwG2OxcE-PxRgNOr0qObrdV4Y_lrq zIKRCp>IM!=1}lc~6d*+~%>Fhu6#}^@XAu_+WUrY;%`qMYG8>ciLbz$dESWFW(=(D9 z57iCw2jTe>WKo<|_Rbts_86SuE18RmT+=Ntb`!ZR>A+eVj+j~1$^!?R;fVxx1`pQ= zoTgJ}5@#YatP!8+H&u8IDvy*DsN|{!y$4!&CpE(q^KC24QDPZh zo7rZ``T^v^iRa%>0^BMxG{NyI(iC;lD&*3M#THc1@V3LZlI#!PVVBOC3$uQ(@#I=o zRoc^-QjO+qC$~tu;-5n{-RP0eW!9Pl|eq6Ht3Gc_Aak}|UXvSX34ZSca za6D;-*mUzAZniTu8)eC{vvC=PEoKb)BOGsTvghNwcjx)LE|DTn=cJFGww;p#)~rf$ zxBl6V0ydeeW)}7X+-#?A8Ks~I_5)rUi{wSTv1 zPfOsh#RI@qh=pmCh#_DP`}%EUQWnu}17yr9#H54p|L%`4`+_!cJ1}9W5ksL;C*;FR z_S35efb$STNEYM`a$=OHt)XW(bB5GH89>NPgHRk*qig1)mFMGAD+SOh=jY?ARi5lB zN#9fvoWtN#{GJ5%U$V;3c3;cq=l{w_oTL=RD2E&0bu|Fk5g&cm@mY)glf`f@NVxnd zMHXq5Z~oa<+b&yc9ou8cP!63NVp|(A5P2{k1 z>FCE&f}EI?Oe4SYBh;U7(Q0dIo!kZTv#@ZqPP$w^QJ9#YjI#8G`O~qs*VFYvnANYn zoyw`JjHz2&pPdb*WNgILj4x8gW@MmODqLylmZ}cBT((Y5PCD2aPuL7fXGs6}kckv# z9eaRHRLcplkV-VY`1sbSO_jm1ZJt}t9{G)r3&53;PCV@R{vOyeVabpy{Z3q!a3YW3 zzVOVkB8tf%bbboaSpRmhqu)vgm89aE_~-rqiWkiH_s#QXTfuug5`%n73bm4ZI#l*k z@UK%e#gxJ$-7=XgT5FQG)FX#}u!bOce zycen-$TC=bZuQDp8K~sRNfH{R-O7lcO9}Qu>c81CCiX~nh7(m7sIN@7UG)3!N!~$| z>8bA!sAmyYE1b84pak+4)t%Nu>Z8dYcaHJQb6Td~K(Vp?NvWlQPRHLjd}G*Wz2s7f zhpjX(+UG)7=7Yg7=~Ks1Dv#e6CAD1F*Vpwy4rtYn38h0X? z`~Cki7Ra#VC;UDQ*FDBnc&j;6)or@pz?bcz}G#J$$XYxOC|*?U!K6y|L49`m3Ajvzq{)i1-`pWc_-F+p1(nfNCmiRYGJCVVilxWDz(bE)mp7#E|S$O*8?NhT>Qjw!kN#s?h$h|;O zQhAFP-oI%DFfrO%WJdyonzb{Jwro1LVQQGFtB#QkD$}k9MQ3MFRuk4*f_1zv5rmGJp1OdU(zqZSl+!CSuv4{r-RLwm&$`? z5KLUrmhL7L&KfO))%HuC)2}zbO)gSXHitTaDQ6Cs34^a?Z!~iZ7fr|U%yPN?s8#9? z=sO^Q^ggyCx#Pfr*d+X=9+9Oqx14)i8ukbkBHC)Z$zVvykUDIYR;RS}Gan_utvAZm z@Eb%iBXoq}xx5UUK?mrRbTOZDHe_=7NC!w(WabQxd83at(MwV~ zx|PTUi6W*3LpE_LjgTF#O$vs7gRQKbb*Z#2UL=?CDR1ojfl5hj!{Tj+myfLuKgjwO31`samjS3a>%JfwaA< z%jpyNK%ORfapSLkeFb_oTIU$%0~7DD1m4o2jZA|Z)<^G|@nrdp5z368X`IVR;#7^NLXD-}{Ti{w`S zgEt}SQ$eLYVQcgC!5eIJqRulg^k*ziwL!zvLb+t>7beT^@Tg0@UR1^oLmRqq3QW3M zx_5z|rQBdv;ksAKz1QY(Y1pC8+^gp5!_wjlG=E1moF{>3>b(nL4AEg@s(R@z{~ z0o)GUtW7NeZeM>z!Sw)X!2k}L8AIwl{ydEiNC3b%sVV>vJH2R`+32_79M4Gzn4JV7 zXMy`@xh28@ZsoNFjuZkd2zIO#ogV(S$SBY0JYeKb+fr69AOWDSext3gASafIG_3(A zVC__NJ6S*_+w}97e>A179T*wZ&EVTdFe44&ze(*Hb_4F8JUC&v zXHk|Y}=ZV|~)c?vi6a8tS zKC9>p0+75yk^Y@D@-wL{;?(5nJmv3!O>6Zo=UJP^{G^cNW z710;xer;9yQ1t_S&@CygssB>eQiUt2Yk+Ew{exTl4{oUTN`-Vys0>l1IzC#za=~Wt zUQqXXLTE+~WmkHy0`7R^&6Zp2J%dZ&plUT2IhYXB742N6jd<@wuTn9)Z}z^5MdBYj zJYkzVTkS|o^qb+wH0V_j~;u77R~W`@B_dsGgz7g|M)MFFL)>_FqF?k zOCpVNicO9{0lVi#y0sW_M_ZE^mis1OImF9}j(&L`Ssk=tV$F0^C4UXcpdl;s zkS1jUi8YkDwKhJ-y-32J;;{buv$C%$MTQH~u~zzq`DMU7j1PH*7};w_V^p_tx>^&T;DXxsOT;imju8pXWS$b5E?_= zswsS5&=Y6h5*DTOC_QV(l$v!Jg$vJyQ_(Vtu0_kC19ViKeT3nFG^r9uG|$s;K&|&9 z2Z%Lh8PGJhB)MF2)8wyeU|Xrv)FiOnAE|3^VMEzXPeTFRdv6AkvB3eKZ>Uw8Yx8TI zkWj+`co{(MLSkkh6XbGjdF z44J|SLdzx7uPA4@?+H@pUsSxfKIJGg?N|Z3`t`2wjva}mv@Uh}SbV=6f0v9S(EgXL zs&g%aD(|c1GXt+IfW870v#a)u%GsbHCUIk|{|jlc*cJ9)ni4&O?d$n})fD6J9|B!p zcZ*4|h8!m2Pjd(*;mnS0^Aw=~Hx+0^#&5REJp_L)002LAZfaW)KzB924Mamw8!O%i zetPzW@mu9eeL9SH1%Eaoz=8Kd5i!ZC9v0vbNW+5*7*DO>(;n8FptTeEH?L-`R>qky zCa19aPq|n@0fd~|vjQjB&r!fzvy+uB=)i|-Rg>0f7HMOBHtiF-Xo_7;YU` zufYIPY!$tlM)TS2Wk!cP<^qX%*7vW!z9!X!K>Ao&BGdG1^2i%QYKUF?rqfIX`r!a$ zYXYT7(w-|}IRm&oON7%s<*vT57pO97VZzDtg>91RY7Iur(G0mLlfVg?fAFHlFAd8C z;LZY+fbv_jtyw#)Q(z$-au1ZWj+e^~C&hu<`Xtn@{|YL$K+Tap_=jx%4yO}1ApgVG z%F;k(0{8mZ0w5H|`t_0}2L_PDejRPem!hVNdyGMHUqqJrJx$pfxC%-g2_`4ev=L^J zRx3ywSU#crXd&fcs^l=`dPWN zp|t9#BHB=goLs5$lWasuYb$;9Km=V#%Q@YC2M?mJ=vgtm$<{J*iSSo5yeb^DiwpVTyv$6#cQ>4rn2V3$>K?z$-s4?{S{Cp0td^hKui6E5&2)Ua)nP@ zg;$i{aa*Ph*nb70u1@(r#|(J@i2vFO#Hd#s-QX1KdP!&X*#%-W?I%x|i?^1}Y+7BQ z0)%FfA77IeqrUMeud8p5wrn`1Q19fN^Z+>Bm3$CFR)!c!z+{k${o`qw_C^FSYMdPl z#n9db5I`(a3=ae#65VAxJ-cw54R^|uj2Q{G^< zQXg*-xifH;s|wqIv7U_Hf06BMjj9U0KOU4WMWO?^iBTaQ|UKD=AEIR?)Ltbi!+vs zp;LCs$J3J{$eJ*ZwXUjM(7(Mi)FRoy}Y}L(DW`I7e z-GfaWBO`)l)9}1mqs!gir{sm38k#;Jn$jT zFE49y^QYUZDyc3;$ane;&zC3lAzh8ZrQ45@2cj82zVEyLALE2=e*blbIQI+W3;Xa} zEt@bQq*1%fu62DdB_+9KieyP(YTHU};bHXMRh%G^x8l)}UX^;}eWx(^K1x-&USC_m$rK`?vPz(By;Fic?M=h} zN#c6!`@)j5Zh7Pyrp5TIXR15hRI8wTHq)wmlqaprzLyy`B-62RVYFHrLOJ2b5?5N; z%i|1|sYpv@!>$EJoDxo%x~%A#N3w#jwc2JzGXA8}QqxziUhLf?)Yn;^+w(M>X-ntN zTI%6JL+N(VwAi<6n^T3NERXEBjOm4MsIs!4wvtm*bBCE{PRa;cweffv7ytG%{xoX~Hq^WlEX7+MM@(I? zZidEitx%0b$?6{(IEH^IVt!yu=mH1Z(;Ps69;2^6uoYkP&brK<%K-}Y7 znyHa1Z8ProH#| zxkT%&k?t6bdm02q+nE;O4Kc*M;f{}y{bDynmSm;eVP))(LqOb^IgMMxh}dbVtskcd zF({TflSE=%WWI0jUQHQW9nCU&Rg2F_yG`dgJ=gWyLf)X3XoVBCBpsB#`*aJe#JQWK z?9!^6YYiE!=gcK=(URH6XK`rPR{L@;$1D_)?wPL7@L6=N_nq6zGRFI>r<%+96E`ue zO4%mX<-EqZuO+eP#q-E+R4* z*&X-wnH1mJI39A}{4h8}Xpyd_`pQP!6wB>a+Bm_?-6ouR|8#N4KT3=RH7e-pMT*Mk zHmxS10wFNtUq`<3CffTex zIrU0(|Cx65wE3YhML7NMJJJ>P56jv`BlRttIau?im-!25>6Xoo7xL|3)P1m;{+u7K zq_2p+*;rCWy?L6#T#l71`hC^ibZO&BGA_!Mv}C*`AEqj?QZ1XEFKD!rE&7-JJyzoJ zjq$Ac8@eh|X?s_0n;PJS`Q5*{+y9}fgD~yfPN9|(*{_wzE0VJFVuKRg=ONPuf3e6} zZ3E`Ta=kzjSN-yin*hu1Y-oEdK+wf2^66>K`h2$1MUqT~QgE!|=^Nwq$#>Ks&ZYmf zno_{)^39WT!t=??%;UBjt5k%Yqr8b+sZ8mP$J53w{RbGgWm}#w6ZBIy^PxEAr)`q? z{hXBvXK*ItWo?ql{oK>TLN?X6L5lyp7a(A|;(d-KRejjkJP~+sxrA*x7*Fc(+ zXn9U)z#I%=k;aMR(Hx|2jQ6L5bp5jP9N9fLq&;?Tz@TmRTHnkMK5jc`_R2k+C65Bn ztzK{V+>uL{v{rvJ{-2(B-Cci^awym8_;7Q1?4Vn$Blo!FPeQB$`aE-yayx!f6}(Z# zq2YF4+)FxUDt}yX@~zy2Dyh?jnk!GksgsSaG0OBm#5R#PUp9CKaUuy0TdI6~At-*^ zL8q9yH)dmvj|A;c&uFkDgok0h5IV(XXK*2nj zghww8T!e>3E;B#}J+xc`cj$A%r^msxA}wYK1X%J!eDfJfp|zmqNU%@ST4|WUjA^m3 z9H$Ue3{HNcBs}OYlBuZ5`Qhb$P07WflThiJ(O=frN7UjM554D&ENYO!3XC?9xkG`3wRUFZ$nYfX{Q zn!ZQH4K@htOP;r1v!d2xy#~BuTFX&nOSrS~N^C$%_t&Dka-*d25xg+$u$Ta%Rt4S| zc2pV=CWGiB$6;@urXzr^VSCNpYiflQlW7W0_BWuvO6VmpxYP2W2;hlW)=Df6?Fjw@Qhq+|-y zQiVp-kFY_S2*WwnF90=`crpo7!>IUZW7q4l*g*Vn7I4In(||z-5t2Dq7X%UJE(NS! z)H$1|J~L-gP-7803JPemO5_}R8DwzUX3EM!VjHt$i?<=MVn~oaZPWP47)bwpsfKY) zA*1kQOJRS09SZPz4Gt98d5Ff{GnR34P5?MS2naVR^f;L=jcwMq0uG!jH&sVe8R4o} zwl=e2MSprUtibQ&J!l{c4!3ZsfTzV)k=dBYu9bs>S1?3R!Z-SB(NQbJ6IE#+r=@4= zgbA=VEGRU#AWv6{1PKNIfmq{ZrFMp%?Bw(wK-qJSnwbeF+e^{&>SY?zx^3BZB+6|5YL_ch)c_(5-#1@3=5Z1=Y=R_@C-q?*i<~6G*~s*FM~*Q8 z>(zyrtjM~D-P-iQkWm=kwMxj9mjbUbgt=q}`=-OIIvR%hKNrBKaXHNGo|DLFplehA zt7(~G&z}Q>qFlS zkVDuD5{PhQid?MwwTtFdh76<*EH-G}Cn0hQb;9f0%_90N3uw&%0XBvHG6zn~fO+q1Tk9N)lOZJsyX{v=EpeA| zCehINW!w}pm&%fuHnkiJpU6GSq4Vgfm0?udO@ii0PD4(XPakM{SYWNwZ11^CHBzmt z+G%lEgf}k@833Won5)7xWDX`%wePB&puh)Q<0eGfY}T0InsXO2LcPut`^~Kw<_rL| zQF(5B1NvHub=NDwPbS^P&Yfc!g5J|&dhzB^1FX?%;ISjs8Y0)EJF10OE88yM0O3?U znqol!JAmt--@=v*kn3Q8%aHQpJF#NGE(a@oc!B=?fczAyJbhYtxNCV!WP7+bY2gHE zCMd?tXyrO3jYUR-t|_#ZzRsJfiWxVma!6S?`{WQDnyv3I9-2AIOzM6}?TF4$E@5K- zFA%e~;ZW^}@XmUQERyi$9ofGLOSDfJkq~oGUusq3!V#_o(5(>Ropx9VffMAk#D%ti zPRa;_eA1A~SV)e^F?ayyj_dO5%O4wNK)V=@3=a9F4hVCUBnY2a>;!>JrZP4f5Dz-x z-m{P5iG<+DKdV}sP{VsSGU`BT4PQerIcg+_2L#|fKgQ?+;-T#iqn38P`lJcsZ%=#t z4dN<|4{p|6&JQqse3cVX0Zi#;;!}P27n9Ry0aj+LD)%pPJWW#^QmWXXOiVh*)s4{V z_=zc$n}d-J4k*iwFxq`E;Wqsb>BZ<=(-_dzb>i!^%N<8?u(+< zw7Epc{xsSN7%grTYaZK1c%*=K$?rmC65uPmA`z|^O|%d(Q&JwITGy=6K5FET7pMAN=yQ@MwT6!XIT<}Bi z5Xu+y@9S6K;JYt)qWd=0SQX}VV0RiNuVNd*f!90>G9*mjs$CU)jiZRlg)kk$%nh1_ z-&nsgD9&jS0xgThRHYzV;Y>;_-;KObEh;?C04jk^`!sLUGV!pRG0BP`f0n2#4E(fE zKwhK_iB5{YWRr|Ro8WY_x)%;O#VQzNH`a2IILS^0v67ff-<1`- zN7pM;G_3XMc3mJkTH6VOjz(3m@KO91f_G0}Jzkh32*5(r={Cc8pC9K6Y*-1GRGfYhW$7&#o?!$XV#YO1ZQ zApuxeQQXm?gAif0QQg&Ii%fo&d5=#psDck=kv6z}7u3B-(gn4?bPA{P28M}4ey;km zSlA!v1=X!J8-`xO9dMzM5AZ);x580o`ctW=on1KrE&>8~Qe0ichU!2kzh<8I8&q%> zqJRwy{xoc3bDxy2LYz4Ez9bG&OqJZs@P3_PkwpzHPhQD%{k5(8h+%^QghJicW8$EK zelL5Mvi5~5kK`>^`k_n-v^zYp2~cNZl?AgKE(dG$M2752Ibx2(Fn5d*v6F!Zxum+xMf%7l!s6Y( z@4*d2@2lZT)eaaRtg5_b+3_cXMJ(%7_W*ZAQ?Zy&w0TeOopZew)!_SHjXYf?)q-x} zHziLivCywAA)PGwXoSSXzf)oUNC2!uT^AV#)@TWevr%Fg_c3DSJkk#0u|@%y08Zg`h%T** zE{TsxY->7(2U@z9&vgRgU}lB))3u67W!!nVU?xMH&l62uiK|| zP&`-+w|8P%KXK$*&$12FxuN=hR0%Mg;-a#|DjQgnboU3ng+WhhBiq(&p%5?iq}&bb8$MqB>;K%JXG2B8ptLVyrV3E$?0 zZVeHkrG}Okwk6#&ckKUxdgX##?NMhwn%y>)U`_BO+^3oNV7vQEg%P(sGb7k15?SKR zH!``!qB~j@9}3X<7YUrXr}q-_R8xkEx86&E0`|Dy-%Cfuu9|v@D7OZUFDV{W4~M>c ztN^50@)s|$m9mSmE|`=MuFb#-;N$ySO$~z??(&;zn=M{ez*Zgf`pL2cXK^c4YnHD_$ahN)^m`6#}cEe<7Rs>9%bQU z^A)NuaYds%#hj;hTg}#)BXnVfQi5CQQHTf2TZeIBqa7h68JBC}<+u#Mj>i!cMFn`h z!Z-+^b0^g+Y+ay0TEtZ;5c1&6x(dRa5o<1PQp5|ipq({4)0U(R2IWGmLo!Ib+FAjP zwxl%7>q7#VjKEddVgaU~J^=XXU0PaLD!CY^ocPyOV(sqKw5rUuS6HLa?moik%wU(W zZ^X&?R8LU8Z(K;q(PR~|bG=z|`CPlTXg{gj*M9l1wy0Zn?~wYmnwB2})bywTeFHuO z0zmrY>rX+4q-|0b*+VTmz;2Oso^8EaZ1mL3*L z&6tUev=rM9PGnjx+`>i@3?f;UB_x;9!0g5{4xWTBNH7Qh6cUS``jKa+8i z{8AN8h0zQ2_TUVh}@g-O=Ekq%OpG)_TI74k}wD4RUc+aGwQw-G+mqXJAi#bZ?JEx#&i!D9$cN5M(l=MMQe=8Gkg8I2=U|b_6I9SR*cd)V3uSPrv13u8KH?iz;bVC3h zr?{xMVWaiB2?oaST#_!;bDaS2^a&*T)2nHUsK7&Ppcu&)a2J?|{@el9d(ymALR8vc zN8x55C`UqTFsR~+bh*7YO}lB138~q*=K{kgHpidl(IWur5TQ>5JRdz+Mb0@H>b)md z5%+FAk2R?6U-UuP&>XJ|*A#2x7=ghoY#5K;xg9A-8zNWFKLO99VALY0y4GOgJysE* z(`-5AE3A)Q_NkNYh<3&@)|H+ibc5qlOH~@c`KTbUa(gqvxV7HBsXFSf+&xj>z@HH& zdp5kZEMq)*DI^iVuu(Yn+^i9Li`R)2hz25WYKoV1#VS$LE8P?Ludnw!XD0A6pT9b` z$!%6Bm&1B6Q<40tz0jXRow>y7o$OWQ~tOfH= z3)*?N#jX1rft4(gYr(LL_jAdM`bphbFYPB-58lgX`bSkgky~)(`pls|MAXxk zzilG=YuKA$gc0qGUs02jTf0J$bI!F=hw-nc4FW4$h1m`*?ykkUH*Y5P=cjI(>-hPt zwAsy#k`9W+OM6gfd!)R5#3S=80g5Jv=L&c;Kv&y0{IqSy@U^$G1LG!xt9@KQw`&{r zFNt0JNVLm6?xkn9ii)-r&-0-!?CiDMvknbK9LY2K;BQUKP#qcWW!20lsg2 zQ6eg1-_EEym$)rn)vLi-d|lD!)u0>jfQ+_XovlH~-_IguhSyM^^3$_BoBFo1U!+}7 zH{0B1U$oI(G>g|)*qK>o&$FV_8ne|srJ{d1pT9}TeBW{|DQynpV3;;_3!*=M^fxp` z!FO%3AKp~>QL{@rM1CEA`HflV(=cq|xngbqz6mb%A%oXxXIN~&d(H`H=@@6=KlN^z zwL4$w{m3NalJs--;}81uEt&D^yX4rMt>4jiw?rrsDqm9sZL*_4STnV=9Kq@T`u$dR z|M|~<;@9zO;2+-+Apf4TQi{pcz)R9 z#j|eHG4%AjzF(E~VVX%eo{X$466-WR0yAg!!LtaNo6|=eWpMbt;prUBvJ6(XG`y*Y&#B zTidvot@73X&hCQgn8lf`f3gFC>BF4B>hX6eZrEEBW49q2Y>U?p{=1})+M}C1yTEx- z>}T4Bh&Y6>O*5g>Z$@mjL8G58%V8`#ne10>_`?PxG)BB4;xNK#kQxKH&(QFT_y0Dx z^8Q<4{dctU;W6(-umClYipr0i^|Wee?hPP2xT`8cnt=8dmg4#Hw>FUm^VsfWr&PWFZ>ROfW zrX)_Klux8jHe$T9%zbt=_gj?&c25QGVq{z;nwZ{N)`=d~Rr3_1T1lB2z?bQ&!$XY( zjLv7bI5~8*NGe}y8&>O|R~W`Uub*T5g?W+M;Ox~_59^Ja8+f#<%-nr<8b%258ff#L z@2ONJ4lE8R2*QHJ#lATCCf+4Rt=T&qb*bO+eawT>c;px={HRC~z$x;;yoBe8huNh& zD5>HV2VpcaB@Tupo&_?a)#%D}7Zaqcmu52_pLtCC9?YPKWzK@3ed5#`=h~U9M-kyy z7VlYwHUXbr*|;^_revh8C*(QBuNS9mQ5VZfh5 z-Xbf$s-Ez(Q@fXgnBJbZc9NJi@%dL(lZk!Du=ysfL_QtC^RkLAtT(EsSE{j zsVvQ%hfi*g2U5(Oh0OL`7rmAO8~hCx`~3R86&Rgbtm)>J7@N}i2N!;;#AJGEHP`lpbhToghOt{|O$^dj z|2>A#){^_~8PMHGkYWO) zhtL5ilEJf} z1AEnSxx24<(S_WR3cd?unhUf8Ya>;t>0w$DzTPdq(w$y*Wc@l5mWu96=zl$ykb{2t z8FkjH>EMH_r*E+!LS| zb#*40VrDYG(N{u6DOOwze(%|N&3!V!vP=oIZHp*%|9;PC`pIO+UzCHF_v{3Shl6EO{;WHeJ$9z?yaQW?;Eg^3%v?prerLaaM9Df%OJ^v~u3t^0%P zWaj<2uBig;dI3vLH{BuK@$;TQow{$Bm8g9#mG|B8aTJigsk%IN!u10Nsmv(yeasFP zmzGi9-4#?&H)2ilPfL1)uazH1?Bbvj?k6<*r4v2XI>ny{dbi3RMb|(6W-O3`ycgoZ zmqsmaJ&@CW2q*@Gqev3zCy zB@-@&KpY!w$;F}&Pu(|7#^b<5OU!i~vZ%s5sI@MA+SOLmC}zxod5F|A;5{d)uCi}o z&4z({S7SdJ3lpd;+kI6Pco?1qt(-DjB z31y(SUL?&74LpOwQ|ALqkp5SydSO!1Fq1=Bcveh6+q^l;>`AA z(z@^DR`h~~9$athkg83T1BK1G9h|FfASNe9Xi0bBQ)u^&^F^djiBX*zM5Z0IJPrX> zdw@7rp9eH|;}25?m>nKVVZWQ+E(|(NT2!<6dl6FPgwan?=tcekUh+ey1cwj%i{%>G zh3W8^K94lU`5gjehc6x9sIPu;$U$-P1F<9`;uD%5Y(+m*$bKGb;|oVl4oM6=+^ya^ z@`}L+#xoXrSws((&Hb1Z&IzlEcFGgcAf2b&y>_|rZ)0xAo>f#>mJ$UE5QffuPKYaW z`APmo-e#+BY1C{a0lom0>t7^=@;YuAd|K|iZ_7YhWxjfAGoS>9S4c0IAg)*tRHg#o zqb|t0v&AK)AH@(|%L%@K#8C;K@fXzL%;j%#v5>F4T)K0b8YQrXy%uJ;Ux4={q=rv` z2|qhF?g`z+OXP%WgnRSDFc9-P^Z2dS?Hdl61JtLxmI+KKgaR6UU1?^9NVWQdBm@rR z#z#=FCz}~X>JaNmIE)>Wp&QuHLD_qEXJ2z3?d658?H}6i^DrZ+9sk#1A+_}i@_s)f;l!1}0!B3tjh{z6=bf##c=6c51+sNh3 zGrAN>k2Gec!^5f2`1cCqMN@!_fo?mQDXMLU1nW#L=_d8??mZXu4kYnY{BB&2Uae^0 zoi{=84K3`@E<%FXqhUGY-kFgZBluQ6U4pwI4wf8f$4Pn@kr$lXT~4Nv>A1&iS9}4} z*ok3)1){xqQfw9=pW>L3wk&wL?jaz+y$=5(Kah)M{)5F#7I+3m6eMJ-h+g|gF6a<; zDelf8XkUPXFG~~OXBA3TI45B`TuVxS5K{sd{DGjdzuuo-&;K#r5c3w(M#+)WGewpFZ1j zyo@>KwSFBGPhg#I;}Q2%V9J0J%9@w~X`VOwIHMiN*~G=MDaIcqXSzBP_#d~g1B8mLh)V_Vxf5RgqoY4=hgl7+4{T*cyAwzxn@(sY5_ zrg*#C9V25r@<@8vrTEc8K!S3?@N%v^?H{)XwLe!6Eq%LfEE>G50vky}Z@8_@^X15L zg2l=muKJT%2r7~38#g~#&LDQ@FVIL;R6v~@f?f;8CD5hI23K%ScS8U&uls!=FHqxX zfZh_ca+(X&=EzdM4tQvjWfYG6DZ0QuhP9_TK5*=jh^bA`Y?6{-5e}5}$)&!oo#YYH zoDsli&6Y2TIkmQ>qc*a(g5cJS}!ezS28Ab&|{YwWbci!uA`f@IVR>T;pgh$pJ*UHsjF z%F(mXeRW@P{FkS4&#FFH9dIMk6n5-($jg1HO3!}g#iR&`|J6FU*guB3YmNd(^a!_} z64)pzDU$R6jQl@H_$esr$$Ac@eD5wy{X+d`DS61Sb2u4W0z0tlpB)FW0GtNJBX7{2h+P&*Q)GQ5_(aO4lCG&pC1WSVKk__4LH!tNX@Z{Bhj$5KUfOZ7 ze|FJ{lT94jq4-S_^MRFm1l(gn`iQme9^B_0Wh_ z+?kX-9eA{!ofRN_C30KL(as%(f&dy3Y@PG6Y$Qn&>kK8*Ub%Rp@nf$tSQ$ylzvNZYyk4R}8Qu(a9D?>#%_fBK1@h z%Fe$1mgU?$oEuP^N5a_8j4A(2YUgrsWc3dE-2-r$i*UK^GBp#JxPZAFbAC%1JlQ1w z&Jn^?P%JAq-|RLX|9NX-ivp==rk+i|rsmxE(U&FLAx=!j^rb%Y(;w#q<~lL<3IBMxbzJ_OrE(@Ou1mlKTB|7w zY87F|Bv>zTqtZz;>Ac}IMI@&>mWXw4(Ac1T@-c$HI=Jj!06}m``(uXzhI>8}jmYt~ zCRYQ|3eY=-gR%MbK}X{LCWxby^D|c`cF^Dll2uP2&Pt1ow&e^m))1)^3q26#2g&>^ z4VEkeFqVHsiAe3x-aKsb8KC=!;Q+W+>%h++1nJz22N$tN-ckdQk+@t4>2>Za%}c(O z&T^xc3$K=w-bb|X@Ww>E`ac4FW$c09hu6yfgH7c70{MZll`8_vHjt-aK?wSMD*^pZ zwbrlzFh%#-R#?~<>1{y$v3V|1Kh*ET${ZEM0dR%6?0Y}>YN+h)_)=ESy>rb*h^O}@0xbFcUQo}cq$ z*18VtV_)l>+522>?S@a`6ws{dr7PKhqMf9TYAi1lmArFq%sxebgz38}6LaKfQlpBG zV@jtKmY}=&4evdELSu0Bl1nX_6Y2^3Oz|1xe5akTEU~7M@i9o9Z`ZltkIHe)wTx<* zarp1~RlK@KG}6vX@qq1|?<3~gKo?g{va?7Fw~?mHxQuzUxiF`u$z;MS9H0KfF_eX< zecUPWlIO`ATH`OU?9mC>L^w5aM(-`X{cx{MXS1q~&hhrszm&G&CCwSIR<%rtCAv`a z$gmmbiX7P@v+Zr@@WO3Xm=3;QfY4$_V(PG@(YKg$s>}Xjzu-1H$_#S@f#ggCv~39u z&9>%AD$`vsX)S=J1NUhONCBLOl}Zlc(*PoKLon*!#f{A&HuYF(a6C7$N0k|(Z4{8JZ19nh@R$gHO-Mh$Qy)**Bp6M23^;e4MGuQUfQVhfbA zB}>Hw`T9lsNsnBRMcyZdG}@H9|IRVh*?P2L#omTps{En0;bz!feH3d3aTJcR2%Ic1 ze0o91PkJhb?@f}huXj?|=htv*f@U84&LYBMW$@`|a$+O!K2xtiw`2I{4xviO%Ja;K zwJQ)Cs#|xpmwT7%yUBZhinY=gAE`p7UqrtII)Y(4OE4TW=MTL2OznKOFn=LUW@d;w zl|s_s`S^yS=aub7ch^oJzT+CsA<7h(H4S@Bku!fz&e^Y=oVend+{>0FQ*&#yzCyk$ zKF4Y%hQsHMLc(WsVsZ1qT%V*!JO#o0;|okcG(w?lMAUudR&j^~#GEWDCW^D%M6|^^ zDcZ#UWV0&d7iL{N_A>^>#G*%%bu5Q@@9c>TXDcVoIQTQJ8HJP?0_}H!=RHpRdSeDV z6se|oV2bIdZi6nf-!CD$?E->vSqp3?ap#e$7{0F&EbGNxRTK87(^(qsccn!~g{_CO z7#6G#jXCx}K#`&G&sp_eB1K6H%`TrZz17c7(I*Y)?1?TpUz~+rQ#|{o$u2ID)6z*w zdVZcLGFJa+-SM;E6Zrw$eJkdPXpj-rDT@O?`_+E)h`p^-M<5=ehh7l_DF(LE50C8M zJ+LelOXu012HBT>ck70RsVPk2W&#vLoCKD8XmJN8%L4~EGdZk$kJR(du6)ohI)|~* zro|A6y0PKKq9%q-`tLpGsqlDwZaXqj1w{L(lZU04{GsVZ09nAsFX8d~w|7lj4vhW^ z;3zm;Q^fUAe&n{6%n|X_Q>4x#A$2E6bwSQJ+bq+du^=+P(vp^h=~QR~e)VTR3lumm ziZs&&28%pT3mYNODF-krr%X78gszzHHhs+`IIx1j85v+@@y+Y_L6E!9^y)hEdLKhf z4D=IcbY$9+ysfpP+cH4H(U_eQZ(h#wtg1u3{B! zi?C5A9bu#^9!0_HoV-hZ#~6SfexLAb+-TyJve)tvaKGG#n+>MM_aDey=jdqZaQ9V{c?XUw?OFk_-9Q$x{j75} zn&Z?5tlmE43RK!W)rd6NlU%3}FB~TaVI@Xhd9o%1 zKY7d}vY5;M@H&Qd@)clhF^Gr-R??U3aJrj`Uyv1o;>D7Zc`tL2sF}+%GYs=|R7giq zQs)kaQ*lj$v0P1#zW}Ug+|GFk%}d3)f+~(5`#L04Rd~K=b@N11IqAVnPNLK(0Dbq? zM2cHVTwu`Lq~az`?Bl>desJWsNrIJPM#8Z0p%*Ko%TlO9!w~_E7Sca5FeY<2R01Tg zN`yo0Swi#49a=yUg%ofSV@+vBMScjC)2RQWv%b_Ub+Q^3v{6z;L{?RoY!{||y8C?8!a82PMEbe{O?c!md zpTE3P8Og8g6RQXY;tHsW$49uA_fv?vDZXA(YkrIr&NVQzqc_Zx>j|m4|88>+Bxw$= z7mkR4{KX`S`I%ARt1pea7~@n$EbU)!lkc;rIsZXBp1l4BF8YHq5Mrnaka6^chee17 z(UVk9?u?L!|6Y+zDya4>@#5JCpSUj-3cF*XEQClj-WB}@C$G-fOx;3Y-*J99cV;I1 ziYk;Zi(Vi_9;v|PPNUa>69TE0RkBG$}SgK=rEG| zOudUXATHzF^JpB%IiIUd&iP_}u<%^kodR%LA4%pigv&he$IZxnlBJ+nU4YFCZ5DYG z4mEV=NdIsK`9+}a$bO0Vz!{K_wqEVj`bNfr)62-W$NTzjE4vMaI|G{aNi<8~G8SG* z&O%-daLSm28ngk9+mKNbf8FTy;6DI$L;Xv9$Vh+paEiwZeKc6Igup!gtOjWKp~pfN z?kIY>IQ4`=Hwm9fe|^n2l~o1WJ%*&FL%KteX_l}J8%5+WUCpxuaNeY`Hf>CX7O zA*(LeyPDIv^fUbnGS?G%w%!gFZ^K034GBu;p5BBX*t&qGJv@;$rd^>}Pf*2`dYC+V zA(iqbIt`B|h7^H~>yyyW@0v`J#Tc9ZE@IdS*&@iDC6kVsJ#}mYe7{`DNY@6xAI-`n zU0}%=t<5tbbqJF;B&378!gntOLU7^0iwp^=^Exjhj1D!(ibjG}L0cg0 zsxZFyirYT?eL~d8nAoSA?_L)(Q0{zEz=9&3h^y*P#axB!i+p+v*q^S7$yMn_n~`0Hps^2FoRyhd9T;7J=^;UC+7*7&%=Ux|ly14t_~^ogT%~hmOKOlFp#YC?+VrDt=vld z&u*EVW&f^Qhr@T?VT}yMZ5AU?*z9_`I)h8) zOCGMBj5Gd5$AEx2b1(>|9~g2B5u5u{3LHVR@#jH{$rda%wm^B31#FJzASG$0j2NK0 ztH2=NimVmS2=ZMi_d1x6`a3_Kq;bS(h}{f1;U9oEVVT;HD&j0VK41r9f{Fly(;?!>o_8&GKSsvTlh z;ol7iA=bp5L^Eh8n86GorRvZJxLX$}#`&hEk(dRa4F{&t8_~B2lfja1Rgxf^eAr!H zdgG`t`dBP9GNO~l7#Yry+$lm#979T-LzdtMgl^#T_uDx7Ew;ZYE!TTCgI0VZ}P1xgu7+`EzN=VAK;&0n)q>@WKWP{EZ zvC@`HrtBadsR>=^h1 zo7OuzV)zUxHF})_9U)a&sQH%3e zortAt%eDQKp6NeT2bEDFruM&bvzK2{iPgpNS03p$7rT<1!u^Mkk+i>r9D@Zv+M_S8 zd13#q60e8ctqb_%7HsdQ&eq#j&}s6@KjfevWam>;2k5gkZ>Ac_opv=5>o=xz+`1g~1{ zH9Fp-SrX>|rxVWM_Xe!hL%obcB1NH$0Wvk9lW!0uuS(%8I`U;Wt?Us(A>{-i#Ank- z1ddNS`Tw8@2&FE$IObJ2kb%+tNY;_SP|`@g8Z_OBJt|V=<=-f7+do&${7*TS{4Gbc zkl#NW-agX@Q{G3|pgu@~&zdGlC&_lS#)e!%f%*)RfQbwjKP|-2j$?hL&O%Y4fJ4LW9=LWJz!FKA=~bwLK$1BPs_-vq)XfY> z`{y?FKBGK^2EG@}^RCXZo98d)k<_>GGUx7c5_`Lp@OvJ>>)}AeX=-WHq%YX2nsP)z z@BHL0owDT0hH_K^gXRA5A2@XS6f&=1PtiGrC9x$Wxg{iXCEKJpnqL|#WYlx?2mVt` zdeD57=+OVc0)fb}xA;p2sv1rJzC7|=@qeobNIJ0APXi}7T#RQd?Gy@jZ7BS4=&mk= zeu&ZdNpP6S>VY!97mDq3DGXDlJ50b)A`7`eGT0xcP(HJQP<10K06pXbr!z%e`gBw8s8$*m-#veZ>u9iV{o*JP-n>}1>wZXeAj zEjr29x0Tm&Oya-MSkmM0a*QHah?+(6kr$HwAeNFWf^*C)N%&{9JwUJ=&A{{Iw=9Ql zW2BmsW(pn+K~vOTdGv-xz3gWK8BtZddfH9~H#2A^c6qe%dM=+(+>BUpw^pJ!jp2)egW)w#tjABqZ*zB;W+| z%=}gANEnZZ+}(B;&nzf3y&x*IG=I3uEy0I?dcpD+(dk^^BtyikP6`KsMoIj_-htwO zB+~dRkug?;U1ElQ>a)Sf1zIGO(1WBfx?IF0F!W#SOO5%$v93bul0}{gq)o{tQtw@n z2Uf76SHtaa%qlf~^->F)F!0Nbg38Ve1+S1R-)@x3DJ$?$H5QesYvBIolfm>Z*KMjo zbys9_8ie zExMBS3GALUncW%qV&mv|y61%+m4awZuLSj}(ow9R5oSHJhP<*Ww6b<9nqO^M^}Dj) zRle(%0T?OZty$h~Y7%u)$ek%vSvWpoLYW%fE@_Bfx!k-gw--QU2dv6<_FZ3RmV15V1SNlK8 zA@ufhTT${9d7w;>egi9LhtS0-Sms(+6cbTnQJiC8b_vRubxEBnOB;O%Cs`E8ttq7U zou}(qVLml40pL}evJ)zG!CW5LeGG{LjWUuZ09kYM!I@9H7mh4@9oo~S&P{38H+7XS z+k=vF`0M7=H4zk14}!;M&j+(u(?+Zb$TtC5R1OC=tW2xpu5y83^=zc+{D5G6-SDTT z|9j+Y34ic1^CPfd4Uphq%wuo~&OM8*RA4MJpx!9qKeYuLLA)U;z#A8BV&)&n##z=w zi?uhUfUWQ}CK(R39q6Cb;qv#WnbfMhhgL0grR-p@hjxh;5qoICf+T2H^aNSLo}P@Q zf9KVt88XP&Ub}BP3CYl*p$uD|2)7!S<@Fp+Fv%h!Jl&UuKDa;4Sc~}w2472}*Nju* zLXmpv5fe~Ks&XyDV?sil`}5^`eoco9!tb$7jm)uY6Dtv}u8g>qQ&cL1{nIECu>Qzt zBEi5Bv{@TbzHe!qW9}(Vgowz?s;u0`1&aN}BSPsJ#LACMDJ}TZ5b|2FfL2=yu}|VW zpDzi^a^aP5DUvONJe*4WiNvbSnbMNM4CvkaXAR^4E*Gupd1jDQ^oEW{)-XVA^jc4} z0dN4~aMPhpqY``&Tv#FI9<#N%qx$f{_dj*a&fhjO!We26+AeMA{nQNie_SL=YhxnU z8w5#q8i3J&y(?np!aS?vxNTH7C`re{iC=__-h@1*HDc|1=V7irJk^$8AgFEy)+Iuo z2Nk@|$}5{#utZRskQq`+I>{$Zi(iKiV0X1{JJUz$PyW(5H7ubHARPBzg$&r$2$sBu z+--#;%=FSS2zp2SIdNA?shhCCYWM(rNV)FNG-@cr*f2vQkKQ1hO>~j7xCND93=DJ< zDddW8MFh2owu@7Nub9?cQ0l{v33Er`)Vv2qf?;hI(c^^~X*qFd(m?e?4k|`nW;A~< zz#@9XS`gH*lhv25Onp#h1a%duAMM{Yg{H30Z0HO_CUSRtNY(&IDe$MUQwV2ADwVnq z^FH99t7Pu4$OT^U8upa-q$sy@#m=~SBH1}KeQ}93F~)&ZQ58N1iiHsedkABre+>ej z0MQV~N#M0Fc?wjIo9C|2r&Ec=y}-v3yTauF@NsOgJ=9E>8<06lmH?33vdD8bUSb}c zAp`CW>v#)AE7g&-;eemjW9%$w4Mzn!3bv>rv*^*3 zw4gy%J)X}fYltI%rB(bVZHWhHz0gGiYLq9AGbw{08MgIPgfm|U0HH*g01892BP2jM z;)-HOAZ7T4<=yWYksx$2BjF!BvYt`^&tke~|Lva$YaoDJz=)cb{1$fzqcNcY9mqwU zY0%*R4N4z^K8q_nZa~}*_jHX^;+mKROw^%7=#mfYY6Ga1IuBNNQK_}S|v^uMFR8uB^$je8jPc$j@B^nuFJ9z35g^lBS)^=yb|)S zV9I=E7m9Tmp^#q$?PSR(3&A|`rQK4AJ}@9)VTevxoHg``#E_7^6@ISEY7fy{5+-A( z`fNol#j6luPusT&sxAmbU6BNc`VGk|Ls~FIP^bEZrIL2YXL z{1S6(lR)8#k_kw1#GEJnkr(h}i(V^z8c=_@B_>#EF8qbO#Jr;ok&L|fLkn8MlO~b$ z0xOfE49L|-QdD8f@!37OK5+BT?_qoTM#@eca21gKz_7v+AJF<9qKV_)?aJTh&t=Iv z@8`;uFlJx~NL{bUAf3M${?Gs4-FtgtizG(L)*l`1)shh zurmH%3Fe?k0!HLY`E4*cr+hJ|b_WCFC% z10=|Pfqf3=$Nqw{5zkWd&k?jwe~TiWgCWxtUS*%%%M6^75U2Emd-7F$ZcJBU3l3_b za9axlA;h+;UN2=srZP(N!M56C*9L@Au=1pMj%wRqFZ<-V5GpnSjTBP@h zw`vZNvGe;@eL2Bl_? zLAv5@m-LbqdjtFvC{v{a=^eB7@uOzpg5cmpXy=WWe>Fu=iH-QG;S(K?l+01#)((d- z$x%~ch-P)?{v;wDLVH)dsH`9Mv0U3cu_;c%#}NHseP0`1$4Ark#V=`+n|_EriSY0d z6b)MobyYGuGj^32{+}$;zbuT56BXQJn*S~ocgSY~4l5a4;0=DDnQOBPBginC=Af=a8RhXwj-7N!h6) zGl5TYzN1qoqm;RVg>>I&$e>O&Xu9&%==zhLm4BRDOQ$e+h=wQTbqz41W8sUk2U7jn zoOwnx;~_0IM~A{BX?&;DDj7sji#^Yj63O6q&ZkHkIzMy!w08I|m|u0Xn<9*%aAMJp-YEfq^_7 zpAx}c{H{aS?I~7fI+Lv@mf{taR`z-^~Ld`kJ&{M#!7f#}6k;VaWPOZ=BlNz3A(JqzYuq#Vj*Qu)wbSu@W`Mgta<%)+o5&p(?4u452G!w!hSv1tw{k<9PL6#W(bT;-d z9qS>`Y)%!S03iK=+ZH@sClyt~3$vyoc-Abv?Lt#xyBw`On-vXbIG*+#?E}P#_oDtZB&u(;^>pN71ga5% zIh<4{=Z8F^1Y!NF?0o9%Dc^B5d;PDI^_e9P9LXE;yJ^;Qd{?U8$9E+yazU?!gQIt! zFm-nLS-m3(bBI^PcXpGue{H|{HCgn77EGk&e?}T>u6zAa_*h2|fTBmY@#`EgnP{(J zsCn-Zjo(FNHlPPUj%w^h1ji{q#Au;`;x*j|v-x)S>ZzW9RzdEHG667d2xFz0}UgT&=gLh+&T2~+zG-a=zA-guItv4ZMk)+BW-jKod2&u1HSmWi$ z{(JLV90B@4v0ex=`1IrnkvVN%@T(q2eX0vo7UNQcmk%n>A1q0XZ_2#=4%=vd}0(1;Uie zmNc#C9IuBYRMfq2=|3%6(b?$4e)d}?c1SGZNjve}=`@~JOX9}V=hm^Jb0M@g z3pS4pyN^C34>ZcbyN1=RIhk29Vi}PVOo$0z=Hh(t8x}!$GEO1U!l7a!4*z8LY7d6F z5H8hs{|3tW@)de+E4J3KFyW4V8%J*a#yn(oxAHfslfL;^Qa zKGqvh+RDS|@f;GS;H7}6!C{`d18dQuaVkS{kdjv()%m zs60E8tk}h0j>1u-=5x{}?X-vbg$`)l&>`m0KSMJv`w^7Z;_hdei+h*ckfW{X^DK+T zLuTunFoWD@wURM!tO6@}WrEKj`pd-F8ZB?rW|hz&V4HW#mXP>-99zY{{GtqO<7QJp zGfUY)AnHL?&KlTjXkHpQ2pKeie{nFgG!p!vDp3%+*Uf@EqxMf)M7|CL!eu;Wq9wkF zXo*pTu(ym?l;rQc^1@r97}pM9Z}6C7Vqzj0{O^LK;MMS#Y|N-HJd(e(BP0`rl@cp? z=79+2k(*(CK{}%|xLmSF%Cax^#WQ~4BcUPWi^f;LJDzOkYjl;hPOBNR%Uo568&gInijzcj&EoP`@0=NJ~duroN^QZkXQ6LHtywsbSwR zQV9G(;DaFyyN(fa2OYr+PBz_7J})oy!41h%0<&vm`WAT4HJyHSkXjKQ_kK2-7IcZ# z+zUN?^gL`clY->+)$nNDib2*1l|E% zQ(_i!cYMv%3FQ_^h7M}1{b;jn4D{B%c^39RAm--644L!}O*Vz&&KdJ)_F=LNgI)bH zbd<6p#z2$%mNW<7bwh^(ZVR8W;5B!=M)|CHUSqDFq0NC2sv}E0ibYg#9*tw21sQ+6 zvs0y5|HI<^4!ogs*w6+8^|Hby-W4N&Rl|?48LN-5R>&B$FXXB*D^mhIzpwJe0j#F2NYrBd`^ zzt;If&9|@D6)yip%U`u;LgZ4WJjDC0$xFOawFvlY1jnDNIUV2lf}Uf(|gh$T>W;!qvN}jY;XP z9AuDe4EA8QvuWA1fUB==p;@J4UYBTGFKx&zh9uihoJsBY^+b)v^W1q)se5_kA>PXB zotVd4ED#FT?-CWjYYB6muou!w`WX=4;IOVws+yc9PJJX8GL#Vd_$I8b>EL}AnVmT- z{ie+ukx!iH+aD<9BB5 z^6P1;FuCZ_>jtG^Q@%x{t^!kMWj(y3F^D8>JMISEqX@uiS@&qr@EQWuB<09s*>l_}N@3v@FDa8!1K1uL|p2+e} zbRtRFf3-gp7jY?wnX5Xt(D>lj_KJhtlATGwHyFoVM7mW_YjJbW+*V?3W(>nzE=D-| z!=rVVv{1`S>e;O-d@@oztvihn8AN7wxO%bE9>28H8$VV=BIdNFvZCx0o=;;iktq~Z zaS!k<1=K934>RvxUh`viwp9+)kxCYY5us9Za1Bvh3-@Utw32ATYD4f4I617iutvQt zjca~lu1e34iR!ab36d1-_fRXaO6*V|fCcA>L7M#-&Hw4!z~M%{jr&=GWKqT~o*M0~ zgE5mbfDL}fCdcKTUr(jV9g#HTtAeshE~99NHh%eg79|k1a1jkFdM52o@N*bh@^mXl z=Voi1AAOwBv=^4N99T3GzhxrdoVJ%n8IXK<1$ER*u>Ju;*unc$sHmDl1qxvAu=Oic zZ2r^z27Q|gG(a-%K91A{)kb-gyzUl0;J@X9KEM$x8{rR#BHJ}U-!V`ke zuujcUg(}U|_f9{_uMX8j4GnP&!1ZV>89$f-J_hJ=#RdhqkFVw}>%}d3d@~iLL}@_! zIRhm8#21fL$BPc3jwEv&%EPQN<=Pq$SPT94c$@n2e~-5XCjQ?J<1SoSib(~I*-V8n zsRmOv?tA%~h)NvQJ6+i{;?D&tPEF*#=yZ2?f8g(8rh|O^F~wv*exrrt(wxl{I$_hC zl%YId*V)OhG;$#xd`QM(z6-Jn6f{fZp3Ri3OIEZUc__~wXaCZEbNdH6D#J_Yu0w`J zs2;1((LE%c*DSiMG3ocaZt#t}ul|#%&G;q)9h`CUMF8LgaN209@_YPaaY23m6Z(#V z%FrPKUDjs-O|TPt7A^53&mIAhq0L^|F+QxFUU@Ouo&tQ+piSf#6{2ssIY8rkZ;AUq zCdSF1o!+XhZ{`6aH zhO|RZZ?7{4gY&ljj=DcyI4eYO)HRROJx{Ut20^Z$xl#+WO1_=M&4NG%m!Gl5uV;hT z(#l@he<{jgimKmoZ_ zo)vm2{)zaRM7gB+`iLC8z|MpD8uJNCm-`>7WxDEK(93XAh||04RlJFxH72}MvFi`w zq&*2+it>SiUbfy7cp}#A{`22;ZRXaoOZwt4#*xC!v~$B57u@NX#Glv6=CrI01hiCe zdyn?w2DJ`uaQPSZ)VD;uK^dww*{@sTdKNmIbTN!4zp3Ka^SgV{x@5^lutR@7q@n!K zx5Vv!G*Ftk;Q^ew4~^riO+CE(9|tk~=?S^hoqC^ec~gs>%b>{8gT{AUeiM&YeA(!h zsrVX!5cwVZ`ZP1MuFFa^ig2q!oU}20ZA>FkQR$%rh?me>AuZ^mn^ZIR({-oOd$l^x zEZ$dm$$|a9mUd^>zyH^#C#C=S&Bt4qaK<0{>h*mk2$E80t!+*EFe7Wd@~6wI0v?~4 znKo5Mk`lk`OKimo++pnU+DOXwbCdmo*YRz7BVwoi^V-YzRD_9E0^cP?(V-RTZyQq> zxCEwqmw(~=Cjyv&)0m_!LQv($tJchyMIFSWu?95s#Y2r4@iV~ybC7xNRSd>%+y7X z^Df#mb_JZGi6-nPqQSkNG2fL=kg0MijpJ(Np*SN$? zeBt9PWwedxnlfWQgK7*uh1Kq8k(#v_%8i;LsOx58Hde$f-)WYDY!bO__6D%%nj)jh zP{Cf+qF>Xd))X6b!8d+Jo{<>#g`~uxFUQ6Iv}D(_v_%7@<)mgUds!z@J~oV$QErYx zq&%{+_A&;HHbk{Xtppxtr)1n%wjGR}5=>y^J7fNGbH4MX=w}AKH4pZqotybB&ygiw zzh)mdYzX)Fa#P<&W-nqmpUCpgW-$Y0lrnt8&E#33$iuO%ogFUkK%+1){NJz|J;GSD!+exU3_l=DTgZkHtGSE>H~9p`a7Jv>6*kjl0kEW)n#XF*#d zQHO@7g@E;t-Cg))Kk0acw^;?5NfJCUPG?`Ex3H2y;nDAFzc$!bU#ia*!j~yA^My}t zA!>^AO7rQHF)nB=f9rq!a&oDx{5E@_$*!b?`jdGx^!+pT>!>E9d~`{;DPMwHY4T+g zk6z)IqqVFJ2J-Chy;j^`+G_3Wo7pST2YS@1P0eiP_o2PZ9$w-mx}HvkAYt@nFCxo; zK4g$IW`86`zr%*s^^xq?=Rtc}r$C%>(GhpUeQ7B}o~Sb8MEUp!)0zJKABCXCU-~VI z7D|)wfH8eD4LdrBfLU<28~r)Vh$(WyU>96O{64lID#1Bqz~c$g9P=Xz*teG= zfFi>9*I21aM?q=`>Vz>>9bzO|hy>Wr?D74A7fs?+ija_;n-tk=kfu;e`b_%JCV+qk z-?b@}u*RZzek~yNM)9^JQ~;&(>IeY=05ElNxN{B#@Zs0x3-S!m+TXTd?)2nCMFNZ& z&j%9IRq`SLP-U>o3&JTODlPI_Mn4ttZcseY3bOMA;;&Bryie0sS=oD2Tn1aFIS#=D zL_m>`@y)3o)+62X_94;b2He4u1thcX;Z~vPA_P)+vt1t0ATxrMP8TwS+#4d~0FW2m zpc;a{N;z7j|fWy%zB{%%;U`yOZlfNDa+=RbpV&k<{V)6x@#9T!h~}ajPW@S-1JdV+0m2E zNhIf}PYzxqdk-w>d;2QH5LGHzB=-3DJxxM321?C%OMjceuD(r%O>Tbr3AlOAA=G@E z3|9m2`Q{X`0)Gep;MY>yF35Eus1T@{myBpIh*7z(dfQ+^%3gD9>D~pnTXO?n=6~oy zXbWg)-OTEke(~Df%EExxv3V`fEdRxY;WR5J^7sPis5*yUrU5}Eg?T%iWpb-S{N{oD zVwAU!1JI}Lj>*QdJGT%@g=ow0#I-VlDiKCZxVE_0Mp$9#8Si=_CY+YN8XWx7OQ82U~IY z`KXM&KdXW{o(hW^;>B{Cv-4o7)4x=Bcn{t%AbtX?bgQtYmgAFX)Anr-Z>;2)(5m0tcv5aRh&YPbEO@KyW|@ zfnzg<7gLBq0zPy8LNU7&*9FJ5$v`BTZW<6Lt?;}#o($aJ!iKfn-h@LubQFZ_d`d?A zK}g3JP4M=94VIL}Z4rVK>M1uQR6&bhg@gYdH_=H(-UDsIeMy!8 zkCrh!y5$3#CO}7+`lCV|8l7~VlWjMbpPmw6XQQ`# zL^y5~cd6W*iFegJm~J>o^ZtRx`mrzh8GNqIHeOxSw}tQk(BRt^x8Y^|lN)5%%HvEJ zkeqKJ?%=Es@gcp~4}6puwKe#h!fPo(!iEHcFN%;ZH^o2N@}VcBuZ@$(L4$H{Xc@flfnVW3A`~Tq+|ZA6wnPPhH3cDpJL1m^iY14V1L`0O#3aRsV%|*bZTg z4E0tI96O z#i5jA9YeHhr?O|hLow+pMeHUA@ZL$!P|tBS@e{)j8TMZY5;_D8m_eW@|G=d>g? z3&o@cFAiXH`+!xHTErTF0KyQpi&Ck<%>2G>0tRT~&H~NX^=<(|+zgKhC_-JF8u_AJ zp~KAr9-3lfU&}PLZ!YnMH?_JM+EE=$vvUgA6}V@`k|*$895KHJTKt9O+rmqM70}A6 zEr=|Has+uVZa?t?EXZ1cfU*L?{zc~io-qKLlmU}4Pu(L1%*iqjl_UjxKlzFRH(A$( z@dz~`)|=5DE)~oN@XcuLyP_%?;O;w{;VoU`GR&zbjCtug*<|)9bK+y+T?zmdsvrXX zbaDecI<*8xn8wS$CG2n9R{`33MDIg$*?(2oEjU3-1*jEGWYHH{(K>E`SOE?&xh1qci%-T3$ zoeM)aRYSrh}5NJ>4nfHWNl%;zl$VC6d z3AUa3s@1ovcaj1jAkP(b$9I7XK_t+SY+vi5ZDQTLpgPFf ztehPNBX!}D!`7zx3Q>8+UFQtor14+P=6&%&-_;n26tog{=FfnkZdDT~4qzw;G|gz8gJ-RUGh}_ehncnJ)Xa&(PD3my@?0loj8axo z323g*2mhkk`Y({dNlp6BIzeYCngA=KKg$CF#JBM2p9Jn5C$s>zwzh5MtdM=QKnPwz zwq$!ui>gA2#G0+*rBc*`fJWr&=LPuT^>|j>?-_$EU;vum6R(N@LA*;T7v%1EJHZL3 zI%uXzc$P4v&61S+WTe~$RMG?VHc!kHf=X-+8u1Hr2*7Y0V{l6jNC{6d&A3MF!>#bm zf2>+WSOFOW9M=jVjl9K~0@a8U6Nat6V@32S6kvx*!|hm24KAc=l6Osf+d_~j<}Z!b zfmUyh0cSeP=k%>*br@i_TSH~k0jeLxxDLT>OkCbT|8c_?Y17Be(u4cJUCeFR^H?)y zNJUU>fW@&!-?)+>p><=t()9juJiA)CM_>|{qogV4=qor1DhcnVwBa;3%06RuJ>j<& z1~6z6^!C85bAcwryps05OxfevOccTjQ$4UREqI3jYTS~7n7IC0)sKF@-rYVP0}TOP zXan7O+Qy61rfG^CpoV!Qm}bg4+0wC?PjiRKpaJoPBhw1$o~jOVKiQ}zDfz-OrTF|e zBY;q4wbqf9Nu7cYLbB5A?Df~BOcy|!BMXev91&dk-KwpFY}s<^6Ea7cK_SSq%z;BG zCyY1^zNE-|ov1$Irwtd;Sp9wjx`Ah#+04iL$U>wXWW#F+i$`@v`5{V`Y3*CJpnloC zs0#WfX!B?@eaZjEtx}>;3BCl0vhy6pRLt^3vZ_%_5k+WY*-AKrD3rlpGX3z9fa*t_ zVJJjKX6Cfv)2!H}1c}y2gWqDlnD|y!oJ=(~O}ZsZMYkEht)aOykSbLteQd%^?i;bA z9d7Ps6<_r7NKFMfsK#uqT@6?JL>+N7hgIZvfpv8%$S(T$LcU*l4cE)utmq4SGVzCD zVbSvVVc8@h*IAoYT)n-lwNhrU)b;u&@XtWiCdc#v$@CAR=Z7Q{v9XJ(wej}+YQ|JV z1Zr+(c96>096noc(>g~R1^kL7@lE)kbA-JN-)|IVA9tOdJe>o-AM`EmrCvy}Y>cg2 zjGisfkAbi=Zvd+A6Zr>Fc8ejzk5@V$<=1z`bWfxZWbE>0yitilg4nljj@}33hYCS@ zE$;S0yzn4CLvv{C^k%&C?Lo=~4EBQaIFPE%)3kb8?R&CDL+bv5eaX9zl{U^cT$k>EW(Ga6Xsj4uHB zfcW8AUs_n4jUQ42*TN&0Y-exZqA?jqcFbF|t9jiUb(#H7Shhn$f6g`G8m~PhKT(5q z+Jt8X!P#7(A4gsqwuoPhL!`6rT{=5N&7?k+kdpXWUV7%o4tV+kF(Pg6kE7)%eJMzzSYF^QtvTygjnV00GAuU3`V?E|vn~EwlyLCOU!h=EP zyn!<-Ww>>;&WIs`$kuNYOH1gGemNqyo$uyTgb~u)BME+rK&I!{b4at^Ra#L4>D}Za zuFow6`gXr6XpU`V4!St$i6zb2|12ZtOYYNmtz-&du~Hc#l>pmL=Iv{M>(z0J^;F z^Qq@f1a-Qyz|Mp=l$VMtSM9HPmB)0e7T~4#RA@~n@jW&7IVXIr|lOvr@RZF zxDli9P)R^KQIQ}iM=c?scA~~N#;8ARs^6dlr}vSsYCZVh_-|NT$iY>>>0xd-4D@ep zkr(%^j+G*|lA=|?d&qjI?xjec86Cit5|+#1&wLkr9ccFzI^Z_G-#u#O_Zlc(xa>&E z?kXd41D%wmQ3)a|;pV$(lQZM(Lh&9M+xoY`uz^JQjwWGeQ>Vhu)J(1L@glc-rB0aW zP(NAi)+dL@jP-oZE;CYmj?cBe{^ls#mNf3cU83qBs*W)x4zC4qRjTD0bbZ+i` z<%lDVtjU$FKjiHHd>k6_F~alz1sDkD_i#nIq$akF{VNR0J#`7@{{lVqKqh_h80NkT zt(pH87Hi}V;Beh@JNlb$F(&VcYUT;(#~CX*+kpk##T7vpq!f^aw_!etG$4vCKsV+I zo-_g?uqL3B>&Ib(lerbrm0=`a~C`jv5h3K2^!(cRX?KJuj@s&QS%5G*J zo4?B7G3G2EZ9q+s>P=&uD~$b@@hR?B-vvh9Z5i z;Sk=zYw-HoZA#A&cC!;J!aQ+C%1f|C4`gzys|)js4HafF4@ZQ?oy>$MXFL^J#gX}J zl7pXP$mGVc6E`eG8kUX59HJndUHF~s=JE=v*a9T5n-B6v5)gqk0i8s4^S~g!0LAR) znpi56-*wH786ANiM--&>sY3Kk_rayEa5v9KB@y53)6KQ4$Z2~WGnb}xW!{ak2Gj(} z-c6MVR0(A@wg)ni7>~f0!!YL z|2WjuoMbF>SM=w2jMeOPZfCB>%QE*hC|(IT2ATYQgT%dl4JU{+f0;j=h;0wX?^MZx z)8O^7;?tn6L@kg)P&vCf+hsDAc^l5uIFp(3EWoM16Y~{f0RV7uA6#&FX>as*;HNP9lC3&NTS6SRm!j0bDwm-CT^@4X6o{y{Y(*Dg#Oua(<+8)}BBY(m#R8 zQq(03W}z8Tpf;1Hvh2p|o1BaPf|;`?FU`fA`KW%hxxz>m66kiUvXJ5&Pu!+c{9{*Y zbSq+l1FUf-IUV@H_?0RH(AVGstmud&CFKA;kV$!o!8VvIqzPfBJfj9pyxKKDVPMJx zMTR+YTvBQFlA${ji5i)zxRpUt1rx=pBn9zqR5GtXCnB&epb??sR6N&{{5TAI{ZETQ z2vLyMrwY-xMIWWxRfzae2r*!esV>Kd8d?O@1j*i1nCmZI|A{H7;p@HZ=Bhal)0-oN z^iN>$o;X*DawK0bkeW$TSXv=JjG3=SF}K~`ia8IPCgUV#{?O#QgvJC5bUQmZv5NVM zwLu0><^hg0ibEn;!MuD)Hv%_D&J1Tx!wSv~^<$p9vp^4I@-I-xTwo73;mMphc>A5K zFciC(m)AnZF%R_)s^*g%WR1+s3cnIxCvAqWV4~OpR5M?41W}OIrwY+G*#`v?UpfAFUNDk*o9i+fYJy~M+PllEm~Y0zmf}}3 z_dqYbIYLPP1O{`ln3>byr(-dbrmlZE1LcdWbCBWBE!LLj%{s_yTy;6fo02%Xlm6rM zW-q+WWE$Ph4yT}WVe?pc4II7JWw?GPMW4NXjoWy_L0-?rBnfDJB!46fE9KSZ#xuwh|geUW6V57Z&VSFlNTQs|~rlTg7# zu>~lbe|FeJykEu&Av!ZZAXH$TA8}aL#baVK_y3+Tl*X#&s^5eMbWy6@6 zn_*#tz2lkP7H%!-5xS%9Qx%h~=BSE^VkTmn=GPa8GoK45>%pi5l&72N*vmRoE*3R% zm$hNKcT{Jli)H3*pH`(f`oC;fIxvx(j=|gKuVk)TGlF^7&3Y8S;{IclQ zr*jB8aac`V9{a3M`$O`vqJ^Wq2{PLqoBb+%G%Dr?51a-Q?V934ngt%$>P0n&1P&p2}-LRv0(>YnscOFZAbQ&ehgN5ZHcl&VJvy9of`s zoF@3d(&sU4jK9Ng@w^p{e;v&1evqs6qx{G7pC9Evp8t6M Date: Mon, 5 Oct 2026 17:13:12 -0500 Subject: [PATCH 57/66] first tech review of Boot a signed Zephr with U-Boot --- .../1-boot-chain.md | 49 +++++----- .../2-set-up-tools.md | 40 +++++--- .../3-build-zephyr.md | 70 ++++++++----- .../4-sign-zephyr.md | 49 ++++++---- .../5-build-uboot.md | 97 +++++++++++-------- .../6-boot-the-target.md | 82 ++++++++++------ .../7-test-the-checks.md | 57 +++++------ .../8-production.md | 56 +++++++---- .../_index.md | 36 ++----- 9 files changed, 304 insertions(+), 232 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 2ee8438fb9..4e611858eb 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -1,6 +1,6 @@ --- -title: Understand where Zephyr sits in the Cortex-A boot chain -description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how a Cortex-A boot chain hands control to it, in QEMU and on a TI AM62L EVM. +title: Learn where Zephyr sits in the Cortex-A boot chain +description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how the boot chain hands control to it. weight: 2 ### FIXED, DO NOT MODIFY @@ -11,23 +11,23 @@ layout: learningpathall On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a bootloader such as MCUboot. A Cortex-A processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several firmware stages run before your code. Zephyr is the last stage, so the stage before it, usually U-Boot, can check it before starting it. -U-Boot checks images packed with their signature into a FIT (Flattened Image Tree). Signed FIT images are documented for Linux, and secure boot for Zephyr is documented for Cortex-M; this Learning Path covers Zephyr signed on a Cortex-A. +You package Zephyr in a Flattened Image Tree (FIT) with a signature that U-Boot verifies before starting the image. -Everything except the target setup works on any Cortex-A board that runs U-Boot. This Learning Path is written for QEMU first, so you can follow every step with no hardware at all, and then shows the same work on a TI AM62L EVM (evaluation module); the next section compares them, and the few steps that differ are in tabs. +You can build and boot a verified Zephyr image in QEMU without hardware, or on a TI AM62L evaluation module (EVM). Both targets use the same signing and verification workflow, with separate instructions where setup differs. ## The boot chain on a Cortex-A board -On an Armv8-A board with U-Boot, the boot chain is: the boot ROM in the SoC, then early firmware, then U-Boot, then the payload. The payload is what U-Boot loads from storage and starts: Linux on most boards, Zephyr here. +On an Armv8-A board using U-Boot, boot proceeds from the SoC’s boot ROM through early firmware to U-Boot. U-Boot then loads and starts the payload: Zephyr in your setup. The early firmware is usually the SPL (Secondary Program Loader), a small U-Boot that loads the full one, plus TF-A (Trusted Firmware-A) and OP-TEE (Open Portable Trusted Execution Environment), which run in the Secure world. Many SoCs add the vendor's own security firmware, which checks the later stages. You build the SPL with U-Boot; the rest comes prebuilt in the vendor's SDK. -![Diagram of a generic Cortex-A boot chain in four boxes: the boot ROM, the vendor's early boot stages, U-Boot, and Zephyr inside a FIT image. A grey bracket over the early boot stages and U-Boot says the silicon vendor's ROM and firmware check them, against your fused key or, before fusing, with any key passing. A blue bracket over Zephyr says U-Boot checks it with your key, the link this Learning Path adds. Under each checked box the diagram names who checks it: the ROM, the firmware, and U-Boot, which then starts Zephyr with go.#center](images/boot-chain-generic.svg "A Cortex-A boot chain, and the link this Learning Path adds") +![Cortex-A boot chain from boot ROM through early firmware and U-Boot to a signed Zephyr FIT image. U-Boot verifies Zephyr; trust in the earlier stages depends on the platform’s secure-boot configuration.#center](images/boot-chain-generic.svg "U-Boot verifies Zephyr in the Cortex-A boot chain") ## Choose your target Pick one target now. QEMU is the default and needs nothing but your host; the AM62L EVM shows the same work on real silicon. Every page is written for both, and marks the few steps that differ. -| | QEMU | AM62L EVM | +| Requirement or feature | QEMU | AM62L EVM | |---|---|---| | Hardware | None | The board, a micro-SD card and reader, a micro-USB cable, a USB-C PD supply | | Download | U-Boot source, 32 MB | TI Processor SDK, 4.5 GB, unpacks to 11 GB | @@ -36,32 +36,29 @@ Pick one target now. QEMU is the default and needs nothing but your host; the AM | Boot media | FAT partition in a 64 MiB disk image, `virtio 0:1` | FAT partition on a micro-SD card, `mmc 1:1` | | Console | The terminal you start QEMU in | USB serial at 115200 baud | -QEMU proves the link this Learning Path adds, and nothing underneath it: it has no boot ROM, no vendor firmware and no eFuses, and `u-boot.bin` is handed to the machine on the command line, so nothing authenticates U-Boot itself. That is what the board adds. Start in QEMU to learn the mechanism, where every step is reproducible and nothing can go wrong with a cable; move to the AM62L EVM to see the stages underneath, which only real silicon has. +Choose QEMU to test signing and verification without hardware. Choose the AM62L EVM to run the same workflow on a board with ROM and early firmware stages. -### The same chain on your target +### The boot chain in QEMU -{{< tabpane-normal >}} - {{< tab header="QEMU" >}} QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: -```text +```output QEMU -bios u-boot.bin -> U-Boot -> Zephyr inside a FIT image ``` -The U-Boot code that checks the FIT is the same code the board runs. What is missing is everything below it: nothing checks U-Boot itself. - {{< /tab >}} - {{< tab header="AM62L EVM" >}} -On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships as HS-FS, TI's name for the development state described below. +QEMU runs U-Boot’s FIT verifier, but nothing authenticates U-Boot itself. -![Diagram of the AM62L boot chain from the boot ROM through tiboot3.bin, tispl.bin and u-boot.img to the Zephyr FIT image. A grey bracket over the three TI files says TI's ROM and TIFS check them, and that on an HS-FS device such as this EVM any key passes. A blue bracket over the FIT says U-Boot checks it with your key. Under each file the diagram names who checks it: the ROM checks tiboot3.bin, TIFS checks tispl.bin and u-boot.img, and U-Boot checks the FIT signature before it starts Zephyr with go.#center](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/images/boot-chain.svg "The same chain on the AM62L, with TI's file names") - {{< /tab >}} -{{< /tabpane-normal >}} +### The boot chain on the AM62L EVM + +On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships in TI’s High Security, Field Securable (HS-FS) development state. + +![AM62L boot chain from boot ROM through `tiboot3.bin`, `tispl.bin`, and `u-boot.img` to the Zephyr FIT image. In HS-FS development mode, the early stages accept any signing key; U-Boot verifies Zephyr against your key before starting it.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") ## What a FIT image is A FIT is U-Boot's container format for boot images. It's a device tree blob (DTB) whose nodes hold images instead of hardware descriptions. -One FIT holds three things: +The signed FIT you build contains: - The image itself, which is Zephyr's `zephyr.bin` here - A hash of that image, so U-Boot can tell if a byte changed @@ -69,20 +66,20 @@ One FIT holds three things: `mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the target, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. -This Learning Path uses `sha256,rsa2048`: a SHA-256 hash of the data, signed with a 2048-bit RSA key. +You sign the FIT configuration with `sha256,rsa2048`, which combines SHA-256 hashing with a 2048-bit RSA key. The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`: every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature at all still boots. -![Diagram of a signed FIT image next to U-Boot's control device tree. The FIT contains an images node with the Zephyr binary and its hash, and a configurations node with a signature. The control device tree contains a /signature node holding the public key with required set to conf. Arrows show the signature covering the configuration and the hash node, and the hash covering the image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") +![Signed FIT image beside U-Boot’s control device tree, which holds the required public key. The signature covers the FIT configuration and payload hash; the hash covers the Zephyr image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") The signature does not cover the image bytes: it covers the configuration node plus the hash node, and the hash covers the bytes. -## What this Learning Path adds +## Verify Zephyr before starting it -This Learning Path adds the last link of the chain: U-Boot verifies the Zephyr FIT and only then jumps to Zephyr with `go`, U-Boot's plain jump-to-an-address command. +You configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, U-Boot’s command for jumping to an address. -In QEMU there is no key to fuse and nothing checks U-Boot at all. On the board, this Learning Path doesn't fuse your key into the chip either, so the SoC stays in its development state, where the ROM and the vendor's firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. +In QEMU there is no key to fuse and nothing checks U-Boot at all. You leave the AM62L EVM in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. ## What you've learned and what's next -Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it, and `required = "conf"` makes U-Boot refuse any FIT it can't verify. Next, you [set up the host tools for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). +Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it, and `required = "conf"` makes U-Boot refuse any FIT it can't verify. Next, you set up the host tools for your target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 17345f736e..a15fb3ca84 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -1,6 +1,6 @@ --- title: Set up the host tools for your target -description: Install the Ubuntu packages, get the U-Boot source and cross compiler for your target, from the U-Boot project for QEMU or from the vendor SDK for the AM62L EVM, and create the environment file that every later page of this Learning Path loads. +description: Prepare an Ubuntu host with Zephyr build tools, U-Boot source, a cross compiler, and a shared environment file for QEMU or the TI AM62L EVM. weight: 3 ### FIXED, DO NOT MODIFY @@ -9,19 +9,25 @@ layout: learningpathall ## What you need -Whichever target you chose, you need a U-Boot source tree that supports it and a cross compiler that builds U-Boot. For QEMU, the U-Boot release and two Ubuntu packages are everything. On the TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) you also need the prebuilt firmware that runs before U-Boot, and all three come in one installer, the TI Processor SDK. +You need Zephyr host tools, U-Boot source, and a cross compiler for your chosen target. For QEMU, you download U-Boot source and install the emulator and compiler from Ubuntu packages. For the AM62L EVM, the TI Processor SDK supplies U-Boot source, the cross compiler, and prebuilt early firmware. -You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/), an open-source [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) by Ac6. Follow [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) up to and including its section *Install the required host tools*, then come back here. Skip its toolchain and workspace steps; you add a Cortex-A toolchain and workspace when you [build the Zephyr image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +## Install the Zephyr host tools + +Open Visual Studio Code and select **Workbench for Zephyr** in the Activity Bar. In its panel, select **Install Host Tools** to install the dependencies used to build Zephyr: Python, CMake, Ninja, Git, Device Tree Compiler, and West. + +When installation finishes, select **Verify Host Tools**. Resolve any missing-tool errors before continuing. + +You’ll import the AArch64 toolchain and create the West workspace in the next lesson, before building Zephyr. ## Install the host packages -U-Boot's build and the signing tools need a few packages beyond a normal Zephyr setup. Install them in one command: +Install the additional packages used to build U-Boot, sign images, and prepare the boot media: ```bash sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools dosfstools xz-utils curl picocom ``` -On QEMU, add the emulator and a cross compiler; the AM62L EVM gets both from the TI SDK instead, so skip this command if you are on the board: +If you chose QEMU, install the emulator and U-Boot cross compiler with this command. For the AM62L EVM, skip it; you’ll get the cross compiler from the TI SDK: ```bash sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu @@ -29,7 +35,7 @@ sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu ## Create the working directory and environment file -Every path in this Learning Path lives under `$HOME/zephyr-secure-boot`, and every page reads the same variables from a file inside it. Write the file for your target, then load it and create the directories the later pages write into: +Keep your source, tools, and build outputs under `$HOME/zephyr-secure-boot`. An environment file stores the paths and target settings you’ll reuse throughout the workflow. Select your target’s tab, create and load its environment file, and create the signing-key and FIT directories: {{< tabpane-normal >}} {{< tab header="QEMU" >}} @@ -93,13 +99,17 @@ mkdir -p $KEYS $FIT {{< /tab >}} {{< /tabpane-normal >}} -Only the `# Target values` block and the paths under it depend on the target; for another board, copy `env-am62l.sh`, change those, and leave the rest as it is. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) says where each value comes from. The variables live only in the shell that loaded them, so every later page starts by loading your file again. +The variables are available only in the shell where you load the environment file. Load it again whenever you open a new terminal; later lessons include a reminder. If you adapt the workflow to another board, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains how to choose its target values and paths. + +{{% notice Note %}} +Example output shows paths under `/home/user/`, the home directory of the account that produced it. Your paths reflect your own username. On a standard Ubuntu cloud instance, for example, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically, and only the printed paths differ. +{{% /notice %}} ## Get the U-Boot source and the cross compiler {{< tabpane-normal >}} {{< tab header="QEMU" >}} -There is no vendor SDK. Download the U-Boot release from the U-Boot project and unpack it into your working directory; the archive is about 32 MB: +Download U-Boot 2025.07 and unpack it into your working directory. The archive is about 32 MB: ```bash curl -L -o $WORK/u-boot-2025.07.tar.bz2 https://ftp.denx.de/pub/u-boot/u-boot-2025.07.tar.bz2 @@ -113,7 +123,7 @@ The expected output is: /home/user/zephyr-secure-boot/u-boot-2025.07 ``` -The source stays unpatched: the key and the boot command are configuration. Check that the compiler you installed above runs: +You’ll add the public key and boot command through build configuration, without patching U-Boot source. Check that the cross compiler runs: ```bash ${CROSS}gcc --version @@ -126,18 +136,18 @@ aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 ... ``` -`qemu-system-aarch64 --version` prints the emulator's version; this Learning Path uses only long-standing QEMU options, so any recent version works. +Run `qemu-system-aarch64 --version` to check that the emulator is installed and report its version. -There is no card image to download: you build a 64 MiB disk image from nothing when you [boot the target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/). +You’ll create a 64 MiB disk image when you prepare the boot media; you don’t need to download one for QEMU. {{< /tab >}} {{< tab header="AM62L EVM" >}} -The U-Boot source, the firmware that runs before U-Boot and the cross compiler all come from the TI Processor SDK Linux for AM62Lx; you use nothing from Linux itself. The installer is 4.5 GB and unpacks to 11 GB. Download it from the [TI download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): +The TI Processor SDK Linux for AM62Lx supplies U-Boot source, prebuilt early firmware, and the cross compiler. You use these components to boot Zephyr. The installer is 4.5 GB and unpacks to 11 GB. Download version 12.01.00.05.03 from the [TI Processor SDK download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): ```bash curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin ``` -Make it executable and run it without the graphical wizard. `--mode unattended` accepts every default, and `--prefix` installs into `$SDK` without root: +Make the installer executable and run it. `--mode unattended` uses the default settings without opening the graphical wizard. `--prefix` selects `$SDK` as the installation directory, without root privileges: ```bash chmod +x $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin @@ -161,7 +171,7 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 ... ``` -The boot ROM only accepts a card laid out the way it expects, so you start from TI's own SD card image and replace the files inside. Download it; it is about 1.3 GB and stays compressed, because the boot page reads the part it needs straight out of `xz`: +Download TI’s SD card image to preserve the boot partition layout expected by the AM62L boot ROM. The download is about 1.3 GB. Leave it compressed; when you prepare the boot media, you’ll extract the boot partition and replace its files: ```bash curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz @@ -171,4 +181,4 @@ curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software- ## What you've accomplished and what's next -Your host has the build packages, the U-Boot source for your target, its cross compiler, and an environment file with every path. Next, you [build a small Zephyr application for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +You’ve installed the Zephyr host tools and U-Boot build packages, obtained your target’s U-Boot source and cross compiler, and created a reusable environment file. For the AM62L EVM, you also have the early firmware and SD card image. Next, you’ll import the AArch64 toolchain, create a West workspace, and build a small Zephyr application for your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index fdfc7227f7..728bf34aae 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -1,6 +1,6 @@ --- title: Build a Zephyr image that U-Boot can start -description: Use Workbench for Zephyr in VS Code to build a small Zephyr 4.4 application for a Cortex-A target, QEMU or the TI AM62L EVM, then check the arm64 image header that U-Boot's go command relies on. +description: Build a Zephyr image for QEMU or the TI AM62L EVM with Workbench for Zephyr, and check the arm64 header used to start it from U-Boot. weight: 4 ### FIXED, DO NOT MODIFY @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -You build Zephyr with [Workbench for Zephyr](https://z-workbench.com/) in VS Code, installed on the previous page. [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) sets up a Cortex-M toolchain and workspace. This page does the same for Cortex-A: an AArch64 toolchain, and a Zephyr 4.4 workspace. The steps are the same for both targets; only the board you pick differs. The screenshots on this page were captured with the AM62L EVM selected, so if you are following the QEMU option, read the board field as `qemu_cortex_a53` and take every other field as shown. +Use Workbench for Zephyr to import an AArch64 toolchain, create a Zephyr workspace, and build your application. Both targets follow the same steps; select the board that matches your target. Open VS Code on your working directory: @@ -17,15 +17,15 @@ Open VS Code on your working directory: code $HOME/zephyr-secure-boot ``` -Then select the **Workbench for Zephyr** icon in the Activity Bar. The panel has one view each for **Applications**, **West workspaces**, **Toolchains** and **Host tools**. +Select the **Workbench for Zephyr** icon in the Activity Bar. Its panel contains the **Applications**, **West workspaces**, **Toolchains**, and **Host tools** views. {{% notice Note %}} -The screenshots were taken on Windows with the Zephyr SDK installed globally, so their paths start with `C:\Users\` and the SDK is tagged `[global]`; on your Ubuntu host the same fields take `/home/` paths and the `tools` directory you choose. +The screenshots show Windows paths, a globally installed SDK, and the AM62L EVM. On Ubuntu, use your own paths and the SDK location you choose. If you chose QEMU, select `qemu_cortex_a53` wherever a board is requested. {{% /notice %}} ## Import the AArch64 toolchain -Cortex-A cores need the Zephyr SDK's `aarch64-zephyr-elf` compiler, and the Minimal SDK type downloads only that one. +Use the Zephyr SDK’s `aarch64-zephyr-elf` compiler for your Cortex-A53 target. Select the **Minimal** SDK type and **aarch64** architecture to download that toolchain. In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: @@ -34,27 +34,27 @@ In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the - **Destination**: **Custom location** - **SDK Type**: **Minimal** - **Version**: v1.0.1 -- **aarch64** checkbox selected, the others clear -- **Location**: a directory for the SDK, for example `/home/user/zephyr-secure-boot/tools` +- Select **aarch64** and clear the other architecture checkboxes +- **Location**: a parent directory where Workbench creates the SDK folder, for example `$HOME/zephyr-secure-boot`. Workbench adds a versioned subdirectory such as `zephyr-sdk-1.0.1` inside it. -![The Add Toolchain form in Workbench for Zephyr with red rectangles around the fields to set: Add Toolchain in the sidebar, the Zephyr SDK family, the Minimal SDK type, the version v1.0.1, the selected aarch64 architecture, the Location field and the Import button#center](images/wz-add-toolchain.webp "Add Toolchain, filled in for the AM62L") +![Workbench for Zephyr Add Toolchain form with Zephyr SDK 1.0.1, the Minimal SDK type, and aarch64 selected. These settings provide the compiler for both Cortex-A53 targets.#center](images/wz-add-toolchain.webp "Import the AArch64 toolchain") Select **Import**. The download takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. ## Add a West workspace -The workspace needs a Zephyr release that supports your board. `qemu_cortex_a53` has been in Zephyr for years, and board support for the AM62L EVM entered Zephyr in version 4.4, so this Learning Path uses 4.4.2 and one workspace builds both. Select **Add West Workspace** and fill in the form: +Create a Zephyr 4.4.2 workspace for your chosen target. The same workspace supports QEMU and the AM62L EVM. Select **Add West Workspace** and fill in the form: - **Source location**: **From template** -- **Minimal**, not **Full**, under the **Path** field -- **Template**: your board vendor's, **Texas Instruments** here; it works for QEMU too, because the template is upstream Zephyr plus the vendor's HAL +- Select **Minimal** under the **Path** field +- **Template**: **Texas Instruments**, for either target - **Revision**: v4.4.2, or a later 4.x release -- **Location**: `/home/user/zephyr-secure-boot` +- **Location**: `$HOME/zephyr-secure-boot` (shown expanded, such as `/home/ubuntu/zephyr-secure-boot`) - **Subfolder**: `zephyrproject` -![The Add West Workspace form in Workbench for Zephyr with red rectangles around the fields to set: Add West Workspace in the sidebar, the From template source, the Minimal option, the Texas Instruments template, the v4.4.2 revision, the Location field and the Import button#center](images/wz-add-west-workspace.webp "Add West Workspace, set to Zephyr 4.4.2 with the Texas Instruments template") +![Workbench for Zephyr Add West Workspace form using the Minimal option, Texas Instruments template, and Zephyr v4.4.2. The workspace is named zephyrproject and supports either target.#center](images/wz-add-west-workspace.webp "Create the Zephyr 4.4.2 workspace") -Select **Import**. Workbench clones Zephyr, the vendor's HAL (hardware abstraction layer) and the other modules into `zephyrproject/deps`, the longest step on this page, and `zephyrproject` appears in the **West workspaces** view. +Select **Import**. Workbench downloads Zephyr, the vendor’s hardware abstraction layer (HAL), and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. ## Create the application @@ -70,9 +70,9 @@ Select **Add Application** and fill in the wizard: - **Application type**: **West workspace application** - **Project Location**: `zephyrproject/applications/hello`, filled in by the wizard -The identifier under the board name, `qemu_cortex_a53` or `am62l_evm/am62l3/a53`, is the `BOARD` value in your environment file; on another board, select the entry that matches your `BOARD`. +Check that the board identifier matches `BOARD` in your environment file: `qemu_cortex_a53` for QEMU or `am62l_evm/am62l3/a53` for the AM62L EVM. -![The Add Application wizard in Workbench for Zephyr with red rectangles around the fields to set: Add Application in the sidebar, the zephyrproject workspace, the zephyr-sdk-1.0.1 toolchain, the TI AM62L Evaluation Module board, the hello_world template, the project name hello, the project location under zephyrproject/applications and the Create button. A call-out beside the board field says to select QEMU Emulation for ARM Cortex-A53 instead if you follow the QEMU option.#center](images/wz-add-application.webp "Add Application, filled in for the AM62L EVM; the call-out gives the QEMU board") +![Workbench for Zephyr Add Application wizard creating hello from the hello_world sample with the zephyrproject workspace and Zephyr SDK 1.0.1. The AM62L EVM is selected; the callout identifies the alternative QEMU Cortex-A53 board.#center](images/wz-add-application.webp "Create hello for your chosen target") Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. @@ -89,9 +89,9 @@ CONFIG_BOOT_BANNER=y CONFIG_AARCH64_IMAGE_HEADER=y ``` -`CONFIG_PRINTK` gives you `printk()` on the console, and `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, the first sign that the jump from U-Boot landed. +`CONFIG_PRINTK` enables console output with `printk()`. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, confirming that Zephyr has started. -Replace the contents of `src/main.c` with the following code. The banner names the image and its key, so that on the optional page [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) the console tells you which of two images ran. +Replace the contents of `src/main.c` with the following code. Its banner identifies image A and the key you’ll use to sign it. This helps you distinguish the images during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). ```c #include @@ -117,7 +117,7 @@ int main(void) Save both files. -## Two settings that matter +## Configure Non-secure execution and the arm64 header `CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one U-Boot hands it. Without it, the driver of the GICv3 (Generic Interrupt Controller) never programs the Non-secure registers, the timer interrupt never arrives, and Zephyr hangs right after its banner. @@ -127,7 +127,7 @@ The configurations for `qemu_cortex_a53` and `am62l_evm/am62l3/a53` already set ## Build the application -In the **Applications** view, right-click `hello` and select **Build**. Workbench runs `west build` in the terminal with the build directory `build/primary` inside the application, and the linker prints its memory report near the end. The output is similar to: +In the **Applications** view, open the context menu for `hello` and select **Build**. Workbench runs `west build` in the terminal and writes the build outputs to the application’s `build/primary` directory. Near the end, the linker prints a memory report similar to: ```output Memory region Used Size Region Size %age Used @@ -136,13 +136,37 @@ Memory region Used Size Region Size %age Used IDT_LIST: 0 B 32 KB 0.00% ``` -![The Applications view in Workbench for Zephyr and the build terminal, with red rectangles around the hello application, listed with its zephyrproject workspace, zephyr-sdk-1.0.1 toolchain and am62l_evm/am62l3/a53 board, and around the Memory region table near the end of a successful build#center](images/wz-build.webp "The hello application built for the AM62L EVM") +![Workbench for Zephyr showing hello configured for the AM62L EVM and the build terminal’s memory report. The report appears near the end of the build; the generated zephyr.bin is checked in the next step.#center](images/wz-build.webp "Build hello for the AM62L EVM") The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. It is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM, and about 58 KB for the AM62L EVM, which reports 2016 MB. +{{% notice Troubleshooting %}} +On an `aarch64` host, the build can fail with `exec format error` when it invokes `cmake` from `~/.zinstaller`. Some versions of the Workbench for Zephyr host tools install `x86_64` builds of CMake and Ninja, which can't run on Arm. Verify Host Tools can also report a misleading error, such as `-255 package(s) are not installed`, for the same reason. + +Confirm the architecture of the installed tools: + +```bash +file ~/.zinstaller/tools/cmake-*/bin/cmake ~/.zinstaller/tools/ninja/ninja +``` + +If the output reports `x86-64`, point the two tools at your system's Arm builds, after installing them with `sudo apt install -y cmake ninja-build`: + +```bash +ln -sf "$(command -v cmake)" ~/.zinstaller/tools/cmake-*/bin/cmake +ln -sf "$(command -v ninja)" ~/.zinstaller/tools/ninja/ninja +``` + +Rebuild the application. The Zephyr SDK compiler is a native Arm binary and doesn't need this change. +{{% /notice %}} + ## Check the arm64 image header -Open a terminal (**Terminal > New Terminal** in VS Code, or any shell), load the environment for your target with `source $HOME/zephyr-secure-boot/env-qemu.sh` or `source $HOME/zephyr-secure-boot/env-am62l.sh`, and print the header's magic number at offset `0x38`: +Open a terminal with **Terminal > New Terminal** in VS Code, or use an existing shell. Load your target’s environment file: + +- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` + +Print the header’s magic number at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -158,4 +182,4 @@ The expected output is: ## What you've accomplished and what's next -You've built a Zephyr image for your target's Cortex-A53, linked at `ZEPHYR_ADDR` and carrying the arm64 header that `go` needs. Next, you [create the signing keys and sign the image into a FIT](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). +You’ve built a Zephyr image for your target’s Cortex-A53, linked at `ZEPHYR_ADDR`, and checked its arm64 header. Next, you’ll create the signing keys and package the image in a signed FIT for U-Boot to verify. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index ef6f6da1e6..fd45e8b9c5 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -1,25 +1,28 @@ --- title: Create signing keys and sign the Zephyr image into a FIT -description: Build mkimage from your target's U-Boot tree, generate two RSA keys with OpenSSL, and sign the Zephyr binary into a FIT image that U-Boot can verify. +description: Build U-Boot’s signing tools, generate RSA key pairs with OpenSSL, and package Zephyr in a signed FIT image for U-Boot to verify. weight: 5 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Build U-Boot's host tools first +## Build U-Boot’s host tools -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. +Open a terminal and load your target’s environment file: -`mkimage` builds and signs a FIT image. `fit_check_sign` verifies a signed FIT on the host. Both come from the same U-Boot tree as your target's U-Boot, so signer and verifier match. +- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` -The `tools` target needs the target's `.config` first, so run the defconfig target named by `UBOOT_DEFCONFIG` in your environment file: +Build `mkimage` to create and sign FIT images, and `fit_check_sign` to verify them on the host. Use your target’s U-Boot source tree so the host tools match the U-Boot version you’ll run. + +Before building the tools, generate `.config` from your target’s default configuration. Run the target named by `UBOOT_DEFCONFIG` in your environment file: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -`UBOOT_CC` is the compiler command from your environment file. In QEMU it is the plain cross compiler; on the AM62L it carries `--sysroot`, the SDK's library path, without which the U-Boot link fails. Keep `CC="$UBOOT_CC"` on every `make` line, including the ones on the next page. +`UBOOT_CC` stores the compiler command. For QEMU, it names the cross compiler installed from Ubuntu. For the AM62L EVM, it also includes `--sysroot` to locate the SDK’s headers and libraries. Keep `CC="$UBOOT_CC"` on every `make` command, including when you build U-Boot later. Then build the host tools: @@ -27,7 +30,7 @@ Then build the host tools: make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" tools ``` -Both tools land in `$UBOOT_OUT/tools/`. Check that `mkimage` runs: +Both tools are written to `$UBOOT_OUT/tools/`. Check that `mkimage` runs: ```bash $UBOOT_OUT/tools/mkimage -V @@ -39,17 +42,17 @@ The output is similar to: mkimage version 2026.01-g5fb294342321 ``` -The version string names the U-Boot tree you built from. The listing above was captured on the AM62L EVM, whose TI tree is 2026.01; in QEMU it reads `mkimage version 2025.07`. +The version string identifies your U-Boot source tree. This example uses the AM62L EVM’s TI tree, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. {{% notice Note %}} -If the `tools` build stops at `pylibfdt`, `swig` or `gnutls/gnutls.h`, a package is missing: run the `apt install` command from [Set up the host tools for your target](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/) again, then the `tools` step. +If the tools build reports a missing `pylibfdt` dependency, `swig`, or `gnutls/gnutls.h`, check the packages installed during [host-tool setup](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Run the shared `apt install` command again, then retry the tools build. {{% /notice %}} -## Create two signing keys +## Create two signing key pairs -The private key signs and stays on the host. Only the public key goes into U-Boot, on the next page. +Use the private key to sign the image and keep it on the host. You’ll embed only the public key in U-Boot during the next lesson. -You create two pairs. `key-a` is the key U-Boot trusts. `key-b` is a valid key U-Boot never sees. You use it on the optional test page, [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), to prove that U-Boot refuses a key it doesn't know. +Create two key pairs. You’ll configure U-Boot to trust `key-a` and leave out the public key for `key-b`. The optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) use `key-b` to demonstrate rejection of an image signed with an untrusted key. Generate both pairs with OpenSSL: @@ -69,13 +72,17 @@ The expected output is: key-a.crt key-a.key key-b.crt key-b.key ``` -`mkimage -k

` expects this layout. `.key` holds the private key, `.crt` is a self-signed certificate wrapping the public key, and `` is the `key-name-hint` you write in the FIT source. +`mkimage -k ` expects these files in the key directory: + +- `.key` holds the private key +- `.crt` is a self-signed certificate containing the public key +- The shared file-name stem, ``, matches `key-name-hint` in the FIT source -These 2048-bit keys, generated on the build machine, are fine for a demo; [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production keys. +These 2048-bit keys are generated on the build host for this demonstration. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production key handling. ## Write the FIT source -You describe the FIT in a `.its` file (image tree source), and `mkimage` compiles and signs it into an `.itb` (image tree blob). Write the source; the heredoc is unquoted, so `$WORK` and `$ZEPHYR_ADDR` expand: +Describe the FIT in an image tree source (`.its`) file. `mkimage` compiles and signs it to produce an image tree blob (`.itb`). Create the source with this command. The unquoted `EOF` delimiter lets the shell expand `$WORK` and `$ZEPHYR_ADDR`: ```bash cat > $FIT/zephyr-a.its < $FIT/zephyr-a.its < $WORK/payload.bin ``` -Write the throwaway FIT's source, the same layout as `zephyr-a.its` with a placeholder payload: +Create `key.its` using the same layout as `zephyr-a.its`, with the placeholder payload: ```bash cat > $WORK/key.its <<'EOF' @@ -70,16 +75,16 @@ EOF `mkimage` refuses the file without its two `description` properties, and `dtc` looks for `payload.bin` next to `key.its`. -Sign the throwaway FIT and convert the scratch DTB to `signature.dtsi`: +Sign the temporary FIT and convert the scratch DTB to `signature.dtsi`: ```bash $UBOOT_OUT/tools/mkimage -f $WORK/key.its -k $KEYS -K $WORK/scratch.dtb -r $WORK/key.itb dtc -I dtb -O dts -q $WORK/scratch.dtb | sed '/^\/dts-v1\/;/d' > $WORK/signature.dtsi ``` -`-K` writes the public key into `scratch.dtb` and `-r` marks it required. `sed` removes the `/dts-v1/;` header, which a `.dtsi` included after the main `.dts` must not repeat. +`-K` writes the public key into `scratch.dtb`, and `-r` marks the key as required. The `sed` command removes the `/dts-v1/;` header so the resulting `.dtsi` can be included after the main `.dts` header. -Check that the file names the right key and nothing else: +Check the key name and required-signature setting: ```bash grep -E 'key-name-hint|required' $WORK/signature.dtsi @@ -92,11 +97,13 @@ The expected output is: key-name-hint = "key-a"; ``` -`key-b` must not appear: U-Boot never gets its public half. The build compiles this file into U-Boot's control device tree, which is why `mkimage -K` is not used here: it writes the key into a finished `u-boot.dtb`, and the next `make` rebuilds that file without it. +Confirm that `key-name-hint` is `key-a` and `required` is `conf`. Leave out `key-b` so U-Boot doesn’t trust its signatures. + +The build incorporates `signature.dtsi` into U-Boot’s control device tree. Use `mkimage -K` only with the scratch DTB in this step. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. ## Write a boot command that fails closed -Zephyr's board documentation usually gives a one-line U-Boot command to start Zephyr, with no verification anywhere in it. Filled in with the QEMU values from your environment file, it is: +An unverified boot command loads `zephyr.bin` and jumps to it. With your QEMU target values, it looks like this: ```console => fatload virtio 0:1 0x40000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x40000000 @@ -104,7 +111,7 @@ Zephyr's board documentation usually gives a one-line U-Boot command to start Ze On the AM62L EVM the same line reads `fatload mmc 1:1 0x82000000 zephyr.bin` and ends `go 0x82000000`. -Nothing checks the bytes between `fatload` and `go`. The verified version puts `bootm` in front of the same handover. Split over several lines for reading, still with the QEMU values filled in, the chain is: +This command doesn’t verify the image between `fatload` and `go`. Add `bootm` verification before the handover. The verified command chain uses the same QEMU target values and is split into lines for readability: ```text fatload virtio 0:1 0x48000000 ${fit} && @@ -115,17 +122,19 @@ go 0x40000000; echo "*** REFUSED: Zephyr was NOT started ***" ``` -Each piece has one job: +The command chain loads, verifies, and starts Zephyr: -- `fatload virtio 0:1 0x48000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. In QEMU, `virtio 0:1` is the FAT partition of the disk image; on the AM62L EVM the same chain reads `mmc 1:1`, partition 1 of the SD card (`mmc 0` is the eMMC), at `0x90000000` and `0x82000000`. `FIT_ADDR` is clear of `ZEPHYR_ADDR`, so `loados` can't copy Zephyr over the FIT it is reading. +- `fatload virtio 0:1 0x48000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. `FIT_ADDR` is separate from `ZEPHYR_ADDR`, so copying the payload won’t overwrite the FIT being read. - `bootm start 0x48000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. - `bootm loados` copies the verified payload to its `load` address, `ZEPHYR_ADDR`. -- The four cache commands flush and turn off the caches, and on arm64 `dcache off` also turns the MMU off, the state Zephyr expects at entry. -- `go 0x40000000` jumps to `ZEPHYR_ADDR` and verifies nothing. Stopping after `bootm loados` keeps U-Boot a verifier, not an OS loader; a plain `bootm` would go on into OS-specific boot code. +- The cache commands flush and disable the caches. On arm64, `dcache off` also disables the memory management unit (MMU), preparing the state Zephyr expects at entry. +- `go 0x40000000` jumps to `ZEPHYR_ADDR` without performing verification. Using `bootm start` and `bootm loados` stops before the OS-specific boot code that a plain `bootm` would run. + +For QEMU, `BOOT_DEV` is `virtio 0:1`, the disk image’s FAT partition. On the AM62L EVM, it is `mmc 1:1`, the SD card’s first partition. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. -`&&` is what makes it fail closed: `a && b` runs `b` only if `a` succeeded, while `a; b` would fall through to `go` after a failed check. `go` never returns, so the `echo` prints only when a step failed. +Failing closed means stopping before Zephyr starts if any command fails. The `&&` operators enforce this: `a && b` runs `b` only if `a` succeeds. Separating the commands with `;` would allow execution to continue after a failed check. In this application, `go` doesn’t return, so the refusal message prints only when an earlier command fails. -That chain becomes the environment variable `zboot`, and three one-line wrappers pick the file it loads: +Store the chain in the environment variable `zboot`. Three wrapper commands select which FIT it loads: | Variable | Definition | |---|---| @@ -134,19 +143,21 @@ That chain becomes the environment variable `zboot`, and three one-line wrappers | `b` | `setenv fit zephyr-b.itb; run zboot` | | `t` | `setenv fit zephyr-tampered.itb; run zboot` | -`a` boots the trusted image. `b` and `t` name images that don't exist yet, for [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). Autoboot is U-Boot's countdown to running `bootcmd` on its own. `CONFIG_PREBOOT` defines all four before that countdown starts, so they exist even after you stop it. `CONFIG_BOOTCOMMAND="run a"` makes the trusted image the default and `CONFIG_BOOTDELAY=3` gives you three seconds to stop it. +`a` boots the trusted image. `b` and `t` select the images you’ll create during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). + +Autoboot runs `bootcmd` after a countdown. `CONFIG_PREBOOT` defines `zboot` and its wrappers before the countdown, making them available if you interrupt it. `CONFIG_BOOTCOMMAND="run a"` selects the trusted image by default. `CONFIG_BOOTDELAY=3` gives you three seconds to interrupt autoboot. The commands are compiled into U-Boot rather than stored on the card, where anyone could edit a boot script to skip the check. -## Configure and build +## Configure U-Boot -Reset to the board's defconfig so the fragment lands on a known `.config`: +Reset to your target’s default configuration before adding the custom settings: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -Append the fragment to `.config`. The heredoc is unquoted, so the target values `$BOOT_DEV`, `$FIT_ADDR` and `$ZEPHYR_ADDR` expand; `\${fit}` keeps `${fit}` in the file for U-Boot to expand at run time: +Append the boot-command settings to `.config`. The unquoted `EOF` delimiter lets the shell expand `$BOOT_DEV`, `$FIT_ADDR`, and `$ZEPHYR_ADDR`. Escaping `\${fit}` preserves `${fit}` for U-Boot to expand at runtime: ```bash cat >> $UBOOT_OUT/.config <}} {{< tab header="QEMU" >}} -QEMU hands U-Boot a device tree at run time, so `qemu_arm64_defconfig` builds none of its own and `CONFIG_DEVICE_TREE_INCLUDES` would have nothing to add to. Instead you build the control device tree yourself in the next step and pass it to the build. These lines turn that on, and close two gaps the AM62L defconfig doesn't have: +QEMU normally supplies U-Boot’s device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you’ll create a control device tree containing your key and pass it to the build. Add these settings to enable that approach, disable unsigned legacy images, enable cache commands, and keep the environment from being saved to flash: ```bash cat >> $UBOOT_OUT/.config <<'EOF' @@ -181,7 +192,7 @@ EOF `CONFIG_OF_BOARD` and `CONFIG_OF_OMIT_DTB` off make U-Boot carry a control device tree of its own, the one your key goes into. `CONFIG_LEGACY_IMAGE_FORMAT` off closes the older image format, which carries no signature. `CONFIG_CMD_CACHE` adds the `dcache` and `icache` commands the boot command uses, and `CONFIG_ENV_IS_NOWHERE` keeps the environment out of flash, so nothing saved at the prompt can replace your boot command. {{< /tab >}} {{< tab header="AM62L EVM" >}} -TI's tree builds its control device tree from source at every `make`, so one line is enough. `CONFIG_DEVICE_TREE_INCLUDES` is the list of extra `.dtsi` files the build compiles into that tree: +TI’s U-Boot tree builds its control device tree from source. Set `CONFIG_DEVICE_TREE_INCLUDES` to include your public-key node in that build: ```bash cat >> $UBOOT_OUT/.config <}} {{< /tabpane-normal >}} -Let Kconfig resolve the fragment: +Run `olddefconfig` to resolve the configuration settings: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" olddefconfig @@ -207,19 +218,19 @@ The output is similar to: .config:2360:warning: override: reassigning to symbol BOOTDELAY ``` -The warnings are expected: your lines replace values the defconfig already set. In QEMU there are a few more, one for each extra line in the target block. +These override warnings are expected because your settings replace default values. The QEMU configuration can produce additional warnings for its target-specific overrides. -### Build U-Boot +## Build U-Boot {{< tabpane-normal >}} {{< tab header="QEMU" >}} -First get the device tree QEMU builds for the machine you boot later, so U-Boot's drivers, console and memory sizing match it. QEMU writes the file and exits: +Export the device tree for the QEMU machine you’ll boot later. This keeps U-Boot’s drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits: ```bash qemu-system-aarch64 -machine virt,gic-version=3,dumpdtb=$WORK/qemu-virt.dtb -cpu cortex-a53 -m 1G -nographic ``` -Add your key node to it. `dtc` merges repeated root nodes, so decompiling that tree, appending `signature.dtsi` and compiling the two together gives the same tree with `/signature` added: +Add your public-key node by decompiling the tree, appending `signature.dtsi`, and recompiling it. The device tree compiler (`dtc`) merges the repeated root nodes, adding `/signature` to the exported tree: ```bash dtc -I dtb -O dts -q $WORK/qemu-virt.dtb > $WORK/uboot-control.dts @@ -227,7 +238,7 @@ cat $WORK/signature.dtsi >> $WORK/uboot-control.dts dtc -I dts -O dtb -q -o $WORK/uboot-control.dtb $WORK/uboot-control.dts ``` -Build U-Boot with that file as its control device tree. `EXT_DTB` is the make variable that hands it over, and the two targets are named explicitly because U-Boot's `scripts/check-of.sh` refuses the default `all` target on a machine that normally takes its device tree from a prior stage: +Build U-Boot with `EXT_DTB` pointing to your control device tree. Specify `u-boot.bin` and `u-boot.dtb` as the build targets. U-Boot’s `scripts/check-of.sh` rejects the default `all` target for this machine, which normally receives its device tree from a prior stage: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ @@ -243,7 +254,7 @@ ls -l $UBOOT_OUT/u-boot.bin $UBOOT_OUT/u-boot.dtb `u-boot.bin` is about 1.4 MB and ends with the bytes of `u-boot.dtb`, the control device tree with your key inside. {{< /tab >}} {{< tab header="AM62L EVM" >}} -TI's U-Boot tree packs the early stages itself, with binman, U-Boot's image packaging tool. Point `BL1`, `BL31` and `TEE` at the prebuilt TF-A and OP-TEE, and `BINMAN_INDIRS` at the directory that holds TI's system firmware, all from the SDK: +TI’s U-Boot tree uses binman, U-Boot’s image packaging tool, to package the early stages. Point `BL1`, `BL31`, and `TEE` to the SDK’s prebuilt TF-A and OP-TEE binaries. Set `BINMAN_INDIRS` to the SDK directory containing TI’s system firmware: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ @@ -256,11 +267,11 @@ The build takes a few minutes. Check the three boot files: ls -l $UBOOT_OUT/tiboot3.bin $UBOOT_OUT/tispl.bin $UBOOT_OUT/u-boot.img ``` -The sizes are about 0.2 MB, 1.5 MB and 1.4 MB, and the control device tree lands beside them as `u-boot.dtb`. +Expect sizes of about 0.2 MB for `tiboot3.bin`, 1.5 MB for `tispl.bin`, and 1.4 MB for `u-boot.img`. The build also writes the control device tree to `u-boot.dtb` in the same output directory. {{< /tab >}} {{< /tabpane-normal >}} -## Check the key is inside U-Boot +## Check the embedded key and verify the signed FIT Decompile `$UBOOT_OUT/u-boot.dtb`, the control device tree that went into U-Boot, and print its `/signature` node: @@ -285,9 +296,9 @@ With the long values shortened, the output is similar to: }; ``` -The `rsa,` properties are the public half of `key-a`, and `required = "conf"` is the rule U-Boot enforces with it. +The `rsa,` properties contain the public key for `key-a`. Check that the node includes `required = "conf"`, which makes U-Boot require a valid configuration signature. -Now verify the trusted FIT on the host against that DTB. `fit_check_sign` runs the same verification code as U-Boot, so its verdict predicts the target's. `-f` names the FIT and `-k` the DTB that holds the keys: +Verify the trusted FIT on the host using the key in that DTB. `fit_check_sign` uses U-Boot’s verification code. `-f` selects the FIT, and `-k` selects the DTB containing the public key: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -341,10 +352,10 @@ Could not find subimage node type 'ramdisk' Signature check OK ``` -**Lines to look for:** the first line, `sha256,rsa2048:key-a+`, is the signature of `conf-1` verified with `key-a`, the `+` being the pass mark, and the last line, `Signature check OK`, is the verdict. The exit code is 0. +Check for `sha256,rsa2048:key-a+`, which confirms that the configuration signature verifies with `key-a`. The `+` indicates success. The final verdict is `Signature check OK`, and the exit code is zero. -The lines in between are the tool walking the FIT the way `bootm` does; the two `Could not find subimage node type` lines are expected, because the FIT holds only Zephyr. +The tool also checks for device-tree and ramdisk subimages. The two `Could not find subimage node type` messages are expected because this FIT contains only Zephyr. ## What you've accomplished and what's next -You built U-Boot with `key-a`'s public half and a boot command that starts Zephyr only after `bootm` verifies it, and `fit_check_sign` confirmed on the host that the trusted FIT passes. Next, you [put the boot files and the trusted FIT on the boot media](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/) and boot the target. +You’ve built U-Boot with the public key for `key-a` and a boot command that starts Zephyr only after verification succeeds. The trusted FIT passes the host check against the embedded key. Next, you’ll prepare the boot media and watch U-Boot verify and start Zephyr on your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index 794d644fe9..c39f69ffa4 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -1,6 +1,6 @@ --- title: Boot the target -description: Build the boot media for your target, start the board or QEMU, and watch U-Boot verify the signed Zephyr image before it starts it. +description: Prepare boot media for QEMU or the TI AM62L EVM and confirm that U-Boot verifies the signed Zephyr FIT before starting the application. weight: 7 ### FIXED, DO NOT MODIFY @@ -9,15 +9,20 @@ layout: learningpathall ## What your target boots from -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. +Open a terminal and load your target’s environment file: -Some boot ROMs look for the first-stage file by name on a FAT partition, as the AM62L's does; others read it from a fixed offset on the card. That is why you start from the vendor's own card image on a board. QEMU has no boot ROM: it takes `u-boot.bin` on the command line, so its disk carries nothing but the FIT. On both, U-Boot's `fatload` then reads `zephyr-a.itb` from the partition in `BOOT_DEV`. +- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` + +The AM62L boot ROM reads the first-stage file from a FAT partition on the SD card. Start with TI’s card image to preserve the expected layout. QEMU loads `u-boot.bin` from the command line, so its disk image needs only the signed FIT. + +On either target, U-Boot’s `fatload` reads `zephyr-a.itb` from the partition selected by `BOOT_DEV`. ## Build the boot media {{< tabpane-normal >}} {{< tab header="QEMU" >}} -There is no boot ROM to satisfy and no vendor image to copy, so you build the disk from nothing. Create a 64 MiB file, give it one MBR partition of type `0x0e` (FAT16 with LBA addressing) starting at sector 2048, and format that partition. None of it needs root: +Create a 64 MiB disk image with one FAT16 partition starting at sector 2048. Use a master boot record (MBR) partition table and partition type `0x0e`, which specifies FAT16 with logical block addressing (LBA). These commands don’t need root privileges: ```bash truncate -s 64M $WORK/disk.img @@ -25,7 +30,7 @@ printf 'label: dos\nstart=2048, size=129024, type=e\n' | sfdisk $WORK/disk.img mkfs.vfat --offset 2048 -F 16 -n ZEPHYRFIT $WORK/disk.img ``` -Copy the FIT in. `BOOT_IMG` from your environment file is the image plus the `@@1048576` suffix, which tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: +Copy the signed FIT into the partition and list its contents. `BOOT_IMG` includes `@@1048576`, telling `mtools` that the volume starts 1 MiB into the image. `::` identifies the volume’s root directory: ```bash mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: @@ -44,10 +49,10 @@ zephyr-a itb 38742 2026-09-17 22:11 65 871 872 bytes free ``` -One file: the FIT you signed. `type=e` is what makes U-Boot's DOS partition driver present this volume as `virtio 0:1`, the `BOOT_DEV` in `env-qemu.sh`. +Confirm that the volume contains `zephyr-a.itb`. The partition is accessed as `virtio 0:1`, matching `BOOT_DEV` in `env-qemu.sh`. {{< /tab >}} {{< tab header="AM62L EVM" >}} -The boot ROM reads `tiboot3.bin` from the card's first FAT partition and is picky about its format: TI's FAT16 partition boots, while a FAT32 one with 512-byte clusters leaves the console empty. Keep TI's partition byte for byte and replace only the files; it starts at sector 2048 and is 262144 sectors long, which is where the numbers in the next command come from. +The boot ROM reads `tiboot3.bin` from the card’s first FAT partition. Preserve TI’s FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors; these values determine the extraction size in the command. Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: @@ -55,7 +60,7 @@ Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds th xz -dc $WORK/tisdk-default-image.wic.xz | head -c $(( (2048+262144)*512 )) > $WORK/sdcard.img ``` -The result is a 129 MiB file. The partition table still lists TI's second partition, which now points past the end of the file. Delete it: +The result is a 129 MiB image. Its partition table still lists TI’s second partition, which points past the end of the extracted image. Remove that partition-table entry: ```bash sfdisk --delete $WORK/sdcard.img 2 @@ -68,7 +73,7 @@ The partition table has been altered. Syncing disks. ``` -Replace TI's Linux files in the FAT volume with yours using `mtools`. `BOOT_IMG` from your environment file is the image plus the `@@1048576` suffix, which tells `mtools` that the volume starts 1 MiB into the file, and `::` is the root of that volume: +Use `mtools` to remove TI’s Linux files and copy your boot files and signed FIT into the FAT volume. `BOOT_IMG` includes `@@1048576`, selecting the volume 1 MiB into the image. `::` identifies its root directory: ```bash mdeltree -i $BOOT_IMG ::EFI @@ -93,7 +98,7 @@ zephyr-a itb 60198 2026-09-15 16:49 130 766 848 bytes free ``` -Four files: the three boot stages you built and the FIT you signed. +Confirm that the volume contains the three boot files and `zephyr-a.itb`. {{< /tab >}} {{< /tabpane-normal >}} @@ -105,7 +110,7 @@ The AM62L EVM steps write to a whole disk with `dd`. Replace `/dev/sdX` with you {{< tabpane-normal >}} {{< tab header="QEMU" >}} -Start the machine. `-bios` hands QEMU the U-Boot you built, `-nographic` puts the serial console in your terminal, and the `-drive` and `-device` pair attaches `disk.img` as the virtio block device U-Boot sees as `virtio 0:1`: +Start QEMU with the U-Boot binary and disk image you prepared. `-bios` selects the binary, and `-nographic` displays the serial console in your terminal. The `-drive` and `-device` options attach `disk.img` as the virtio device containing `virtio 0:1`: ```bash qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic -no-reboot \ @@ -114,24 +119,24 @@ qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic -device virtio-blk-device,drive=hd0 ``` -The machine must match the one you dumped the device tree from when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/): same `-machine`, same `-cpu`, same `-m`. U-Boot starts printing at once. To leave QEMU, press **Ctrl+A**, then **X**. +Use the same `-machine`, `-cpu`, and `-m` settings as the device-tree export used to [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). U-Boot should begin printing in the terminal. To exit QEMU, press **Ctrl+A**, then **X**. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Run `lsblk`, insert the micro-SD card in your host, and run `lsblk` again. The disk that appeared is the card. Write the image to the whole card: +Run `lsblk` before and after inserting the micro-SD card. Identify the newly listed disk and confirm its size matches the card. Replace `/dev/sdX` with that disk’s device name and write the image to the whole card: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress ``` -On Windows or macOS, write `sdcard.img` with balenaEtcher. If you prefer not to edit the image on the host, write TI's `.wic.xz` to the card unchanged instead, then open the first partition on any PC, delete `Image`, `uEnv.txt` and the `EFI` directory, and copy the same four files in. +If you transfer the prepared image to Windows or macOS, you can write `sdcard.img` with balenaEtcher. Alternatively, write TI’s unchanged `.wic.xz` image to the card. Open its first partition, remove `Image`, `uEnv.txt`, and the `EFI` directory, then copy in the three boot files and `zephyr-a.itb`. -Set **SW3** as shown below, the reduced pincount setting from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8), in which the ROM ignores **SW2** and **SW4**. **ON** is towards the **ON** label on the switch bank. +Set **SW3** using the table. This is the reduced pin-count setting from the [AM62L EVM User’s Guide](https://www.ti.com/lit/pdf/SPRUJG8), where the ROM ignores **SW2** and **SW4**. The **ON** position is toward the **ON** label on the switch bank. | Switch | 1 | 2 | 3 | 4 | |---|---|---|---|---| | **SW3** | OFF | ON | OFF | ON | -Connect the micro-USB port **J7** to your host. It creates four serial ports; the console is usually the first one, `/dev/ttyUSB0`, at 115200 baud. Open it: +Connect the micro-USB port **J7** to your host. It creates four serial ports. The console is usually `/dev/ttyUSB0` and uses 115200 baud. Open the console: ```bash picocom -b 115200 /dev/ttyUSB0 @@ -139,13 +144,13 @@ picocom -b 115200 /dev/ttyUSB0 If `picocom` reports a permission error, add your user to the `dialout` group with `sudo usermod -aG dialout $USER`, then log out and back in. To leave `picocom` later, press **Ctrl+A**, then **Ctrl+X**. -Move the SD card to the board, then power the board through a USB-C PD supply on **J17** or **J19**. The console starts printing at once. +Move the SD card to the board, then connect a USB-C Power Delivery (PD) supply to **J17** or **J19**. Boot messages should appear in the console. {{< /tab >}} {{< /tabpane-normal >}} -In QEMU there is no TF-A and no SPL, so the log starts at U-Boot's own banner and is about ten lines long. Three of them are worth knowing: `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are QEMU telling you that nothing ran before U-Boot, which is exactly the case, and `Loading Environment from nowhere... OK` is the environment you compiled in. +In QEMU, the log starts with U-Boot because no TF-A or SPL stage runs first. The messages `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are consistent with this setup. `Loading Environment from nowhere... OK` indicates that U-Boot is using its built-in environment. -On the AM62L EVM there is much more to see, because the stages below U-Boot actually run. The log up to the countdown is similar to the one below; your dates, version strings and countdown differ. +The AM62L EVM also prints messages from its early firmware stages. Its log up to the autoboot countdown is similar to this example. Your dates, version strings, and countdown will differ. ```output NOTICE: Booting Trusted Firmware @@ -184,13 +189,20 @@ Net: eth0: ethernet@8000000port@1, eth1: ethernet@8000000port@2 Hit any key to stop autoboot: 3 ``` -**Lines to look for:** the `NOTICE: BL1:` and `BL31:` lines are TF-A, from `tiboot3.bin` and `tispl.bin`; `Authentication passed` is TIFS accepting `u-boot.img`; `SoC: AM62LX SR1.1 HS-FS` says the SoC is in its development state, which TI calls HS-FS; `MMC:` lists the eMMC as device 0 and the SD card as device 1. The `ERROR:` lines come from TI's firmware and are harmless. +Use these messages to identify the boot stages and selected devices: + +- `NOTICE: BL1:` and `BL31:` identify TF-A running from `tiboot3.bin` and `tispl.bin` +- `Authentication passed` reports successful authentication by TI’s security firmware +- `SoC: AM62LX SR1.1 HS-FS` identifies the SoC’s development state +- `MMC:` lists the eMMC as device zero and the SD card as device one + +The `Agent 0 Protocol 0x10 Message 0x7: not supported` errors appear in this successful boot log. They don’t prevent Zephyr from starting in this example. This log comes from a board running TI's prebuilt first two stages, so its `U-Boot SPL` line shows TI's build date instead of yours. ## Watch the trusted image boot -After the three-second countdown, autoboot runs `run a`, the command you [built into U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Your times and hash differ, and on another target so do `FIT_ADDR` and `ZEPHYR_ADDR`. The block below was captured on the AM62L EVM; the QEMU values follow it. The output is similar to: +After the three-second countdown, autoboot runs `run a`, the trusted-image command built into U-Boot. This example shows the AM62L EVM; QEMU uses different load addresses and image sizes. Your timings and hash values will differ. The output is similar to: ```output 60198 bytes read in 1 ms (57.4 MiB/s) @@ -229,36 +241,42 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -**Lines to look for:** `sha256,rsa2048:key-a+ OK` is `bootm start` verifying the signature with the `key-a` public key in U-Boot, and `sha256+ OK` is the image hash matching; `+` means pass. `Loading Kernel Image to 82000000` is `bootm loados` copying Zephyr to its link address, and `## Starting application at 0x82000000 ...` is `go`, the last line from U-Boot. Everything after it comes from Zephyr: its banner, `Secondary CPU core 1 (MPID:0x1) is up` when it starts the second core, and `Hello from ZEPHYR IMAGE A`. +Confirm verification and startup using these messages: + +- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with U-Boot’s embedded public key +- `sha256+ OK` confirms that the payload hash matches +- `Loading Kernel Image to 82000000` shows `bootm loados` copying Zephyr to its link address +- `## Starting application at 0x82000000 ...` shows `go` handing control to Zephyr + +Zephyr then prints its boot banner and `Hello from ZEPHYR IMAGE A`. On the AM62L EVM, `Secondary CPU core 1 (MPID:0x1) is up` also reports startup of the second core. -In QEMU the same block reads `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000` and `board : qemu_cortex_a53/qemu_cortex_a53`, and there is no `Secondary CPU core 1` line, because that board configuration starts one core. +For QEMU, expect `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000`, and `board : qemu_cortex_a53/qemu_cortex_a53`. Its board configuration starts one core, so there is no secondary-core startup message. -## If nothing prints +## Troubleshoot boot and console output {{< tabpane-normal >}} {{< tab header="QEMU" >}} -QEMU always prints something, so read what it says: +Check the symptom and try the corresponding step: -1. Nothing at all, or a hang after the banner: the control device tree does not match the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu` and `-m` you start QEMU with. +1. Nothing prints, or startup hangs after the banner: check that the control device tree matches the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu`, and `-m` used to start QEMU. 2. `Failed to load 'zephyr-a.itb'`: U-Boot found the volume but not the file. List it on the host with `mdir -i $BOOT_IMG ::`. -3. `** Bad device specification virtio 0 **`: the partition type is not `0x0e`. Check with `sfdisk -l $WORK/disk.img` and build the image again. +3. `** Bad device specification virtio 0 **`: check the partition type with `sfdisk -l $WORK/disk.img`. If it isn’t `0x0e`, rebuild the disk image with the specified type. 4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` did not make it into `.config`; add it and build U-Boot again. {{< /tab >}} {{< tab header="AM62L EVM" >}} -If the terminal stays empty, the ROM did not load `tiboot3.bin`. Work down this list: +If the terminal stays empty, check the console connection and whether the ROM loads `tiboot3.bin`: 1. Try all four serial ports that **J7** creates; the console isn't always the first one. 2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks: BOOTMODE `0x0E43` in the same guide. 3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. -4. Flash TI's unchanged `.wic.xz` to a card and boot it. If it prints nothing either, the cause is the switches, the port, or the power, not your files. +4. Flash TI’s unchanged `.wic.xz` to a card and boot it. If that also produces no output, check the boot switches, serial port, and power supply before investigating your custom boot files. 5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. -On another board the same list applies, with your vendor's first-stage file, card image and console port. {{< /tab >}} {{< /tabpane-normal >}} -If U-Boot starts Zephyr but the banner is the last line you see, `CONFIG_ARMV8_A_NS` is missing from the [Zephyr build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). +If Zephyr prints its boot banner but no application output, check that the [Zephyr build configuration](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/) includes `CONFIG_ARMV8_A_NS=y`. ## What you've accomplished and what's next -You built the boot media and watched U-Boot verify the FIT signed with `key-a` and start Zephyr on your target. Next, the optional [Test that U-Boot refuses a wrong key and a tampered image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) proves the refusals; after it, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) lists what a product needs on top. +You’ve prepared the boot media and watched U-Boot verify the FIT signed with `key-a` before starting Zephyr. Next, you can run the optional wrong-key and tampered-image tests to confirm that verification failures prevent startup. You’ll then review the trust boundary and the additional work needed for production. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index 2b83f027bd..e2efd3fbb0 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -1,36 +1,37 @@ --- title: Test that U-Boot refuses a wrong key and a tampered image -description: "Optional: sign a second Zephyr image with a key U-Boot doesn't have, tamper with a copy of the trusted FIT, check both with fit_check_sign on the host, then watch U-Boot refuse both on your target." +description: "Optional: test on the host and target that U-Boot rejects Zephyr FIT images signed with an untrusted key or modified after signing." weight: 8 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Prove the refusal, not only the acceptance +## Test rejection of untrusted and tampered images -This page makes two images U-Boot must refuse, one signed with the wrong key and one changed after signing, checks them on the host, and watches U-Boot refuse each one on your target's console. +These tests are optional. Create one FIT signed with an untrusted key and another modified after signing. Check both on the host, then confirm that U-Boot refuses to start them on your target. The `b` and `t` commands are already built into U-Boot to select these images. -This page is optional, and the `b` and `t` commands in your U-Boot are already waiting for its two files. +Open a terminal and load your target’s environment file: -Open a terminal and load the environment for your target: `source $HOME/zephyr-secure-boot/env-qemu.sh`, or `source $HOME/zephyr-secure-boot/env-am62l.sh` for the AM62L EVM. +- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` ## Build a second Zephyr image -The wrong-key image is a different program on purpose: if U-Boot ever runs it, the console says so in capital letters. +Give the wrong-key image a distinct banner so you can identify it if it unexpectedly starts. -In Workbench for Zephyr, select **Add Application** again. Use the same workspace, toolchain, board and sample as when you [built the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/), and enter `hello_b` as the **Project Name**. Give it the same `prj.conf` and the same `src/main.c` as `hello`, with the two banner lines changed: +In Workbench for Zephyr, select **Add Application**. Use the same workspace, toolchain, board, and sample as the [trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). Enter `hello_b` as the **Project Name**. Copy `prj.conf` and `src/main.c` from `hello`, then replace these two banner lines: ```c printk("# Hello from ZEPHYR IMAGE B #\n"); printk("# signed with key-b (NOT trusted by U-Boot) #\n"); ``` -The replacement text is the same length as the original, so the box stays aligned. Build `hello_b` the same way, with a right-click on it in the **Applications** view and **Build**. The result is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`, the same size as the first image. +In the **Applications** view, open the context menu for `hello_b` and select **Build**. The resulting binary is `$WORK/zephyrproject/applications/hello_b/build/primary/zephyr/zephyr.bin`. -## Sign the second image with a key U-Boot doesn't have +## Sign the second image with the untrusted key -`key-b` is the second key pair you created when you [signed the trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). Copy the FIT source with `sed`, swapping `key-a` for `key-b` and `hello` for `hello_b`, then sign it: +Use `key-b`, the second key pair created during [FIT signing](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). Copy the FIT source with `sed`, replacing `key-a` with `key-b` and the `hello` application path with `hello_b`. Then sign the new FIT: ```bash sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.its @@ -64,7 +65,7 @@ Created: Fri Sep 11 19:14:00 2026 Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-b.itb', node '/configurations/conf-1/signature-1' ``` -**Lines to look for:** `Sign algo: sha256,rsa2048:key-b`, and a `Hash value` that differs from image A's, because `hello_b` is a different binary. This image proves that a valid signature isn't enough: U-Boot must refuse a key it doesn't have. +Check for `Sign algo: sha256,rsa2048:key-b`. The `Hash value` differs from image A’s because the application banner changed. This FIT has a signature from `key-b`, but U-Boot trusts only `key-a` and must reject it. ## Make a tampered copy of the trusted image @@ -75,7 +76,7 @@ cp $FIT/zephyr-a.itb $FIT/zephyr-tampered.itb printf '\xff' | dd of=$FIT/zephyr-tampered.itb bs=1 seek=32768 conv=notrunc 2>/dev/null ``` -The payload starts at the `Data Start` offset you saw when U-Boot loaded the FIT, a couple of hundred bytes into the file, and is tens of kilobytes long, so offset 32768 (`0x8000`) lands inside Zephyr's code, not in the FIT's own structure. +In the example FITs, offset 32768 (`0x8000`) falls inside the Zephyr payload rather than the FIT metadata. The payload begins a few hundred bytes into the file and is tens of kilobytes long. Check that the copy now differs from the original: @@ -89,13 +90,13 @@ The output is similar to: /home/user/zephyr-secure-boot/fit/zephyr-a.itb /home/user/zephyr-secure-boot/fit/zephyr-tampered.itb differ: byte 32769, line 94 ``` -If `cmp` prints nothing, that byte was already `0xff` in your build; pick another offset inside the payload, for example `seek=32800`, and run the `dd` and `cmp` commands again. +If `cmp` prints nothing, the selected byte was already `0xff`. Choose another offset inside the payload, such as `seek=32800`, then repeat the `dd` and `cmp` commands. -This image proves that U-Boot catches a change made after signing. Expect the signature check to pass and the hash check to fail: the signature covers the configuration and the `hash-1` node, which you didn't touch, and `hash-1` covers the payload bytes, which you changed. +Expect the signature check to pass and the payload hash check to fail. The signature covers the unchanged configuration and `hash-1` node. The hash covers the payload bytes you modified. ## Check both images on the host -Your times, hash values and `FIT Image at` addresses differ from the outputs on this page. Run `fit_check_sign` as you did when you [built U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), first on the wrong-key image: +Your timings, hash values, and `FIT Image at` addresses will differ from these examples. Run `fit_check_sign` with the control device tree from your [U-Boot build](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Check the wrong-key image first: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-b.itb -k $UBOOT_OUT/u-boot.dtb @@ -111,7 +112,7 @@ Failed to verify required signature 'key-key-a' Signature check bad (error 1) ``` -**Lines to look for:** `sha256,rsa2048:key-b-` followed by `error!`, then `Failed to verify required signature 'key-key-a'`, then `Signature check bad (error 1)`. The exit code is 1. +Check for `sha256,rsa2048:key-b-` and `Failed to verify required signature 'key-key-a'`. The final verdict, `Signature check bad (error 1)`, confirms rejection. The exit code is one. Then check the tampered image: @@ -164,11 +165,11 @@ Could not find subimage node type 'ramdisk' Signature check bad (error 1) ``` -**Lines to look for:** `sha256,rsa2048:key-a+` on the first line, then `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node`, then `Signature check bad (error 1)`. The exit code is 1. +Check that `sha256,rsa2048:key-a+` reports a valid signature, followed by `sha256 error!` and `Bad hash value for 'hash-1'`. The final verdict is `Signature check bad (error 1)`, and the exit code is one. The modified payload fails verification even though the configuration signature passes. ## Add the two images to the boot media -Add the two new FITs with `mcopy`, at the same `BOOT_IMG` volume you used when you [built the boot media](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/), then list the volume: +Copy both test FITs into the `BOOT_IMG` volume used to [prepare the boot media](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target/), then list its contents: ```bash mcopy -o -i $BOOT_IMG $FIT/zephyr-b.itb $FIT/zephyr-tampered.itb :: @@ -192,14 +193,14 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -In QEMU the disk image holds the three FITs and nothing else. The listing above is the AM62L EVM's card: six files, the boot files and the three FITs. +This example lists the AM62L EVM’s six files: three boot files and three FITs. The QEMU disk image contains only the three FITs. {{< tabpane-normal >}} {{< tab header="QEMU" >}} -Nothing to write: `disk.img` is the disk. Start QEMU again with the same command as on the previous page; it reads the image fresh at every start. +Restart QEMU with the same command used to boot the trusted image. QEMU reads the updated `disk.img` directly; no physical media needs to be written. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Write the image to the card again with the same `dd` command as on the previous page, taking the same care with `/dev/sdX`: +Write the updated image to the card. Confirm the card’s device name before replacing `/dev/sdX`; `dd` overwrites the entire selected disk: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress @@ -231,11 +232,13 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -**Lines to look for:** `sha256,rsa2048:key-b- error!` says the FIT is signed with `key-b`, which U-Boot doesn't have; `-` means fail. `Failed to verify required signature 'key-key-a'` is the `required = "conf"` rule, which an unsigned image fails too. `Bad Data Hash` and `ERROR -2: can't get kernel image!` close both refusals on this page whichever check failed; the lines above them say which one. `bootm start` failed, so the `&&` chain skipped `go` and the `echo` printed `*** REFUSED: Zephyr was NOT started ***`, with no Zephyr banner. +Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure: the image’s signature doesn’t satisfy the required `key-a` check. -## Run the tampered test +When `bootm start` fails, the `&&` chain skips `go` and prints `*** REFUSED: Zephyr was NOT started ***`. Confirm that no Zephyr banner appears. `Bad Data Hash` and `ERROR -2: can't get kernel image!` can appear for either rejection test; use the preceding messages to identify which check failed. -Still at the prompt, run the tampered test: +## Run the tampered-image test + +At the U-Boot prompt, run the tampered-image test: ```console => run t @@ -268,14 +271,14 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -**Lines to look for:** `sha256,rsa2048:key-a+ OK` shows the signature passes; `sha256 error!` and `Bad hash value for 'hash-1' hash node in 'kernel-1' image node` show the payload no longer matches the stored `Hash value`; `*** REFUSED: Zephyr was NOT started ***` follows. +Check that `sha256,rsa2048:key-a+ OK` reports a valid signature. `sha256 error!` and `Bad hash value for 'hash-1'` indicate that the payload no longer matches its stored hash. Confirm that `*** REFUSED: Zephyr was NOT started ***` appears without a Zephyr banner. {{% notice Note %}} -If `run b` or `run t` ends with a Zephyr banner instead of the `REFUSED` line, the check isn't failing closed. The two causes seen in practice are a `;` where `&&` belongs in the `zboot` chain of `CONFIG_PREBOOT`, and a `signature.dtsi` without `required = "conf"`. Check both against [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and put the files on the boot media again. +If `run b` or `run t` starts Zephyr, verification isn’t preventing startup. Check for a `;` where `&&` belongs in `CONFIG_PREBOOT`, and confirm that `signature.dtsi` includes `required = "conf"`. Compare both with the [U-Boot build settings](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and update the boot media. {{% /notice %}} To boot the trusted image again, type `run a`. ## What you've accomplished and what's next -U-Boot started the trusted image and stopped the wrong-key image at the signature and the tampered one at the hash, both before `go`. Next, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) separates what these runs proved from what a product still needs. +You’ve confirmed that U-Boot rejects the wrong-key image at the signature check and the tampered image at the payload hash check. Neither reaches `go` or starts Zephyr. Next, you’ll review what these tests establish and what a production device still needs. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index b7f9740f30..8ab371b16f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,62 +1,80 @@ --- title: Review what is verified and what production needs -description: See what U-Boot checks with your key on the target you built, what the stages below it accept, and what a production device needs before the whole chain can be trusted. +description: Review the trust boundary of U-Boot’s Zephyr FIT verification and the key provisioning, boot controls, and release signing needed for production. weight: 9 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Summary +## Understand the verification boundary -U-Boot verifies the last link of the chain, and only that one. It read `zephyr-a.itb` from the boot media, checked `conf-1` against the `key-a` node built into its own device tree, checked the hash of the payload, and only then jumped to `ZEPHYR_ADDR`. The optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) show the two ways it stops instead: a FIT signed with `key-b` fails at `Failed to verify required signature 'key-key-a'`, and a FIT with one byte changed after signing fails at `Bad hash value for 'hash-1'`. Zephyr never starts in either case. +You’ve configured U-Boot to verify the Zephyr payload, the last link in the boot chain. U-Boot reads `zephyr-a.itb`, verifies `conf-1` with the embedded public key for `key-a`, and checks the payload hash before jumping to `ZEPHYR_ADDR`. -Below that link, nothing is checked against your key. In QEMU there is nothing below it at all: no ROM, no security firmware and no eFuses, and you hand `u-boot.bin` to the machine on the command line. On the board those stages exist, which is the whole reason to repeat the work there. Most Cortex-A SoCs hold the customer's key in eFuses, one-time-programmable bits in silicon. Until that key is fused, the SoC is in its development state: the ROM and the vendor's firmware still check the boot files, but any key passes. TI calls the two states HS-FS (High Security, Field Securable) and HS-SE (High Security, Security Enforced), and U-Boot's banner on the EVM read `SoC: AM62LX SR1.1 HS-FS`. +If you ran the optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), you also confirmed two rejection cases. The wrong-key FIT fails with `Failed to verify required signature 'key-key-a'`. The modified payload fails with `Bad hash value for 'hash-1'`. Neither starts Zephyr. -So the key that matters, the public half of `key-a`, travels inside `u-boot.img` on an unprotected FAT partition, where anyone who can write the boot media can swap it for their own. Your chain of trust starts on the card, not in the silicon. Moving it there is what the rest of this page is about. +The earlier stages aren’t authenticated against your key in either setup. QEMU loads `u-boot.bin` directly, without a boot ROM, security firmware, or eFuses to authenticate it. + +The AM62L EVM has those earlier stages, but you’ve left it in TI’s High Security, Field Securable (HS-FS) development state. In this state, the ROM and vendor firmware check boot files but accept any signing key. The U-Boot banner identifies it as `SoC: AM62LX SR1.1 HS-FS`. Provisioning your key into the one-time-programmable eFuses moves the device to High Security, Security Enforced (HS-SE). + +On the EVM, the trusted public key is inside `u-boot.img` on an unprotected FAT partition. Anyone who can replace that file can replace the key and boot command. Production needs an authenticated U-Boot and controls that prevent bypassing its verification step. ## What production needs ### Fuse your key and move to the production state -On TI devices the tool is the OTP Keywriter, called Keywriter Lite on the AM62L; it burns the hash of your public key into the eFuses and moves the chip to HS-SE. You then re-sign `tiboot3.bin`, `tispl.bin` and `u-boot.img` with that key. From then on the ROM and the security firmware refuse any boot file that isn't signed with your key, U-Boot included, so the `key-a` public half inside it is itself authenticated. The procedure is vendor-specific and out of scope here. +TI’s one-time-programmable (OTP) Keywriter tool, called Keywriter Lite on the AM62L, burns the public-key hash into the eFuses and moves the chip to HS-SE. You then re-sign `tiboot3.bin`, `tispl.bin`, and `u-boot.img` with that key. + +The ROM and security firmware then require boot files signed with your key, including U-Boot. This authenticates the U-Boot image containing the FIT public key. Key provisioning is vendor-specific and isn’t covered by these steps. ### Keep the environment built in -`bootcmd` holds the command autoboot runs, and `preboot` holds the one that defined `zboot`, `a`, `b` and `t`. Both builds end up with `CONFIG_ENV_IS_NOWHERE=y`, QEMU from the target block you added and the AM62L from its defconfig, so `saveenv` has nowhere to write and both variables always come from the binary you built. Check your board's `.config` for the same line, and keep it that way: a writable environment is a writable boot command. +`bootcmd` selects the autoboot command. `preboot` defines `zboot` and the `a`, `b`, and `t` wrappers before autoboot starts. + +Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary you built. Check that your board’s `.config` includes the same setting. {{% notice Warning %}} -Don't enable `CONFIG_ENV_IS_IN_FAT`, a development convenience that stores the environment in `uboot.env` on the boot media: a saved environment overrides `bootcmd` and `preboot`, so anyone with the card can skip the check. +Don’t enable `CONFIG_ENV_IS_IN_FAT` for this boot configuration. It stores the environment in `uboot.env` on the boot media. A saved environment can override `bootcmd` and `preboot`, allowing someone with write access to the card to bypass verification. {{% /notice %}} ### Lock the console -With `CONFIG_BOOTDELAY=3`, anyone with a serial cable can stop the countdown, get the `=>` prompt and type `fatload` and `go` by hand. Set `CONFIG_BOOTDELAY=-2` (no delay, no key check), or use `CONFIG_AUTOBOOT_KEYED` so that only a known string stops autoboot. Both settings only cover the countdown: if `bootcmd` returns, for example after a refused image, U-Boot still drops to the `=>` prompt. On a production build, end `zboot` with `reset` after the `echo`, so a refusal restarts the board instead of opening a prompt. +With `CONFIG_BOOTDELAY=3`, someone with serial-console access can interrupt autoboot and run `fatload` and `go` without verification. Set `CONFIG_BOOTDELAY=-2` to remove the delay and keyboard check, or use `CONFIG_AUTOBOOT_KEYED` to require a known string to interrupt autoboot. -### Use real keys and sign in a release step +These settings cover only the countdown. If `bootcmd` returns after rejecting an image, U-Boot still opens the `=>` prompt. In a production build, add `reset` after the refusal `echo` in `zboot`, so a failed boot restarts the board instead of opening the console. -`sha256,rsa2048` is fine for a demo; the AM62L's own boot chain uses `sha512,rsa4096`. To match it, generate the keys with `rsa_keygen_bits:4096`, set `algo = "sha512,rsa4096"` in `zephyr-a.its` and `key.its`, and check that `$UBOOT_OUT/.config` has `CONFIG_SHA512=y`, adding it to the `.config` fragment if it doesn't. Generate the production key on a hardware security module (HSM), or at least off the build host, and sign in the release pipeline, the only place that holds the private key. +### Protect production keys and sign during release -## Take it to another Cortex-A board +The demonstration uses `sha256,rsa2048`; the AM62L’s own boot chain uses `sha512,rsa4096`. To use the latter for your FIT: -Every target-specific value sits in the `# Target values` block of your environment file and the paths under it, so porting is a checklist: +- Generate keys with `rsa_keygen_bits:4096` +- Set `algo = "sha512,rsa4096"` in both `zephyr-a.its` and `key.its` +- Confirm that `$UBOOT_OUT/.config` includes `CONFIG_SHA512=y`, adding it to the configuration fragment if needed + +Generate production keys in a hardware security module (HSM), or at least away from the build host. Sign during the release process and restrict private-key access to that process. + +## Adapt the workflow to another Cortex-A board + +Start by updating the target values and paths in your environment file: - `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. - `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It is Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. - `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. - `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC; `mmc list` at the U-Boot prompt shows your board's numbering. -- `UBOOT_DEFCONFIG` is the board's U-Boot configuration. It must enable `CONFIG_FIT`, `CONFIG_FIT_SIGNATURE` and `CONFIG_RSA`: add any that is missing as `CONFIG_=y` to the `.config` fragment in [Build U-Boot with the public key and a boot command that fails closed](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), and if the board has `CONFIG_LEGACY_IMAGE_FORMAT=y`, add `# CONFIG_LEGACY_IMAGE_FORMAT is not set` too. +- `UBOOT_DEFCONFIG` selects the board’s U-Boot default configuration. Check for `CONFIG_FIT=y`, `CONFIG_FIT_SIGNATURE=y`, and `CONFIG_RSA=y`. Add missing settings to the [U-Boot configuration fragment](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Disable legacy images with `# CONFIG_LEGACY_IMAGE_FORMAT is not set`. - `UBOOT_SRC`, `CROSS` and `UBOOT_CC` point at the U-Boot source and the compiler that builds it, with `SDK`, `PREBUILT` and `SYSROOT` added when they come from a vendor SDK, as on the AM62L. - `BOOT_IMG` is the boot volume `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. -Two things sit outside the environment file. The `make` line that builds U-Boot takes whatever the target's tree expects: `EXT_DTB` in QEMU, and `BL1`, `BL31`, `TEE` and `BINMAN_INDIRS` on the AM62L, and the tree names its own outputs, often `u-boot.img` or `u-boot.itb` plus an SPL file. The boot page follows the target's own media, switches and console. +Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and an SPL file. Follow the target’s requirements for media layout, boot switches, and console access. + +Check how the target obtains its control device tree. `CONFIG_DEVICE_TREE_INCLUDES` adds the key node when the tree is built from source with `CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`, as on the AM62L EVM. -The last difference is how the key reaches the control device tree. `CONFIG_DEVICE_TREE_INCLUDES` works on any board that builds that tree from source (`CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`), as the AM62L does. A board that takes its device tree from a prior stage (`CONFIG_OF_BOARD=y`) has no tree of its own to add a node to; the QEMU option shows the way around it, merging `signature.dtsi` into a dump of that tree and building with `EXT_DTB=`. +For a board using a tree from a prior stage (`CONFIG_OF_BOARD=y`), follow the QEMU approach: merge `signature.dtsi` into an exported tree and pass it to the build with `EXT_DTB=`. -Everything else stays the same: the `.its` file, the keys, the `signature.dtsi` recipe, the boot command and the three test images. +Reuse the FIT signing and verification workflow, adapting the target values in the FIT source and boot command as needed. ## Where to go from here -To run your own application, point `data` in `zephyr-a.its` at its `zephyr.bin` and sign it again; nothing else in the chain changes. To move to another Cortex-A board, work through the checklist above. +To sign your own application for the same target, point `data` in `zephyr-a.its` to its `zephyr.bin` and sign the FIT again. To use another Cortex-A board, adapt the environment, build inputs, and boot media using the checklist in this section. -The next page lists the further reading, including U-Boot's FIT signature documentation and the board pages for both targets. Ac6, where this Learning Path was written, runs courses on [Zephyr RTOS programming](https://www.ac6-training.com/en/rt5/zephyr-rtos-programming) and on [building a secured embedded Linux platform](https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build), which covers the fusing and release-signing steps above. +You’ve established verification of the Zephyr payload. Before using this approach in production, authenticate the earlier boot stages, protect the boot environment and console, and move signing into a controlled release process. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index aeecab3345..138e337041 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -1,26 +1,26 @@ --- -title: Boot Zephyr from a signed FIT image with U-Boot on Arm Cortex-A +title: Boot a signed Zephyr image with U-Boot on Arm Cortex-A draft: true cascade: draft: true -description: Learn how to sign a Zephyr image in a FIT, build the public key into U-Boot, and start Zephyr on Arm Cortex-A only after U-Boot verifies it, in QEMU with no hardware and then on a TI AM62L EVM. +description: Sign a Zephyr FIT image and configure U-Boot to verify its signature and payload hash before booting on Arm Cortex-A in QEMU or on a TI AM62L EVM. minutes_to_complete: 120 -who_is_this_for: This is an advanced topic for embedded developers who run Zephyr on an Arm Cortex-A processor behind U-Boot and want the bootloader to verify the Zephyr image before starting it. +who_is_this_for: This is an advanced topic for embedded developers who boot Zephyr from U-Boot on an Arm Cortex-A processor and want U-Boot to verify the Zephyr image before starting it. learning_objectives: - - Explain where a Zephyr image sits in the Cortex-A boot chain and which stage can verify it - - Build and sign a Zephyr image in a FIT, and build the public key into U-Boot without changing U-Boot source - - Write a U-Boot boot command that starts Zephyr only after the signature and hash checks pass, and optionally prove on the target that it refuses a wrong key and a tampered image - - Explain what a board in its development state, and what an emulator, each leave unverified, and what a production device needs on top + - Identify where U-Boot verifies Zephyr in the Arm Cortex-A boot chain + - Build and sign a Flattened Image Tree (FIT) containing Zephyr, and embed the public key in U-Boot without changing its source + - Configure U-Boot to verify Zephyr before booting, and optionally test rejection of wrong-key and tampered images + - Explain the verification boundary in QEMU and on a development board, and how fusing your key extends trust in production prerequisites: - - One of two targets, either QEMU, which needs no hardware at all, or a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with a micro-SD card and an SD card reader for your host, a micro-USB cable for the console and a USB-C Power Delivery (PD) power supply - - A Linux host running Ubuntu 22.04 or 24.04, with about 5 GB of free disk space for QEMU or 20 GB for the AM62L EVM; the EVM also needs an x86_64 host, because the TI SDK ships its installer and cross compiler as x86_64 binaries only - - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) and its host tools installed, as in the first steps of [Build Zephyr projects with Workbench for Zephyr in VS Code](/learning-paths/embedded-and-microcontrollers/zephyr_vsworkbench/) + - One of two targets - QEMU, which needs no hardware, or a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with accessories to power it, write an SD card, and attach a serial console + - A Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; QEMU runs on x86_64 or Arm, while the AM62L EVM needs x86_64 for the TI SDK + - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) installed - Basic knowledge of U-Boot and the Linux command line author: @@ -76,22 +76,6 @@ further_reading: title: Zephyr QEMU Cortex-A53 board documentation link: https://docs.zephyrproject.org/latest/boards/qemu/cortex_a53/doc/index.html type: documentation - - resource: - title: Workbench for Zephyr - link: https://z-workbench.com/ - type: website - - resource: - title: Ac6 training, Zephyr RTOS programming - link: https://www.ac6-training.com/en/rt5/zephyr-rtos-programming - type: website - - resource: - title: Ac6 training, Secured embedded Linux platform build - link: https://www.ac6-training.com/en/sec8/secured-embedded-linux-platform-build - type: website - - resource: - title: Ac6 training, AI-assisted embedded development - link: https://www.ac6-training.com/en/ai1/ai-assisted-embedded-development - type: website ### FIXED, DO NOT MODIFY # ================================================================================ From 75ea08da09ee399dff0354780c9ca2f51b9ce298 Mon Sep 17 00:00:00 2001 From: Annie Tallund Date: Mon, 5 Oct 2026 16:59:05 -0700 Subject: [PATCH 58/66] Fix LP issues --- .../pytorch-finetuning-on-spark/1-setup.md | 65 +++++++++-- .../2-finetuning.md | 2 +- .../pytorch-finetuning-on-spark/3-pytorch.md | 9 +- .../pytorch-finetuning-on-spark/4-testing.md | 21 ++-- .../arm_linux_page_size/_index.md | 30 +++-- .../arm_linux_page_size/debian.md | 103 ++++++++++++++---- .../arm_linux_page_size/overview.md | 21 ++-- 7 files changed, 182 insertions(+), 69 deletions(-) diff --git a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/1-setup.md b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/1-setup.md index e1eef83490..478526a37e 100644 --- a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/1-setup.md +++ b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/1-setup.md @@ -35,7 +35,7 @@ The first command grants your user Docker access, and `newgrp docker` activates NVIDIA provides pre-built PyTorch containers that include all the necessary frameworks, libraries, and dependencies optimized for NVIDIA GPUs. These containers are regularly updated and maintained, ensuring you have access to the latest stable versions without the complexity of manual dependency management. -Pull the latest PyTorch container from NVIDIA's container registry: +Pull the PyTorch 25.11 container from NVIDIA's container registry: ```bash docker pull nvcr.io/nvidia/pytorch:25.11-py3 @@ -67,23 +67,51 @@ After running the command, you'll be inside the container with a root shell prom ## Install dependencies -The base PyTorch container doesn't include all the specialized libraries needed for efficient model fine-tuning. You need to install several additional Python packages that provide transformer models, parameter-efficient fine-tuning methods, dataset utilities, and training frameworks. +The base PyTorch container doesn't include all the libraries needed for this fine-tuning workflow. Install the package versions used by the script and the rest of this Learning Path. Inside the running container, install the required dependencies: ```bash -pip install transformers peft datasets trl bitsandbytes +pip install \ + "accelerate==1.15.0" \ + "datasets==5.0.1" \ + "transformers==4.57.1" \ + "trl==1.13.0" +``` + +Verify the installed versions: + +```bash +python - <<'PY' +import accelerate +import datasets +import transformers +import trl + +print("accelerate", accelerate.__version__) +print("datasets", datasets.__version__) +print("transformers", transformers.__version__) +print("trl", trl.__version__) +PY +``` + +The output is: + +```output +accelerate 1.15.0 +datasets 5.0.1 +transformers 4.57.1 +trl 1.13.0 ``` These packages serve specific purposes: +- `accelerate` provides device placement and training-loop integration - `transformers` provides access to pre-trained language models and tokenizers from Hugging Face -- `peft` (Parameter-Efficient Fine-Tuning) enables techniques like LoRA and QLoRA that reduce memory requirements - `datasets` offers a standardized interface for loading and processing training datasets - `trl` (Transformer Reinforcement Learning) includes training utilities and recipes for language models -- `bitsandbytes` enables 4-bit and 8-bit quantization for memory-efficient training -The installation can take a few minutes as pip downloads and installs each package along with their dependencies. +The pinned versions prevent API changes in newer packages from breaking the script. The installation can take a few minutes as pip downloads each package and its dependencies. ## Authenticate with Hugging Face @@ -106,9 +134,30 @@ Clone the playbooks repository: ```bash git clone https://github.com/mhall119/finetuning-scripts.git cd finetuning-scripts/nvidia +git checkout 0076c9979dee71a16e3cca5e91da80d06cfb913a +``` + +The repository contains a customized copy of the 3B full fine-tuning script from [NVIDIA's PyTorch fine-tuning assets](https://github.com/NVIDIA/dgx-spark-playbooks/tree/main/nvidia/pytorch-fine-tune/assets). The customized script adds the dataset and output options used later in this Learning Path. The `git checkout` command selects the revision that matches the code walkthrough. + +TRL 1.13.0 uses chunked negative log likelihood (`chunked_nll`) by default. That loss mode isn't compatible with the script's compiled model wrapper. The existing `packing: False` setting controls dataset packing; it doesn't disable chunked loss. Update the script to use the standard negative log likelihood loss instead: + +```bash +sed -i '/"packing": False,/a\ "loss_type": "nll",' Llama3_3B_full_finetuning.py +``` + +Verify that the setting is present: + +```bash +grep -n '"loss_type": "nll"' Llama3_3B_full_finetuning.py +``` + +The output is similar to: + +```output +83: "loss_type": "nll", ``` -The repository contains a fork of the scripts found in [NVIDIA's Playbook](https://github.com/NVIDIA/dgx-spark-playbooks/nvidia/pytorch-fine-tune/assets) including the fine-tuning scripts you'll use in the next steps. This script is preconfigured with sensible defaults but also accepts command-line arguments for customization. +The line number can vary if the upstream script changes. The script is now configured to avoid the `AttributeError: 'function' object has no attribute '__func__'` error when `SFTTrainer` initializes. ## What you've accomplished and what's next @@ -117,6 +166,6 @@ In this section you: - Configured Docker permissions on DGX Spark - Pulled the NVIDIA PyTorch container and launched an interactive session - Installed fine-tuning libraries and authenticated with Hugging Face -- Cloned the fine-tuning scripts repository +- Cloned the fine-tuning scripts repository and selected a TRL-compatible loss mode In the next section, you'll learn how supervised fine-tuning works and what makes it effective for adapting pre-trained models to specific tasks. diff --git a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/2-finetuning.md b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/2-finetuning.md index 146c34b246..f73f6e6fc7 100644 --- a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/2-finetuning.md +++ b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/2-finetuning.md @@ -8,7 +8,7 @@ layout: learningpathall ## Why fine-tuning matters for domain knowledge -Pre-trained models like Llama 3.2 8B have broad language skills, but they don't know everything. Ask the base model about the maximum clock speed of the RP2350 microcontroller and it confidently answers "1.8 GHz," a completely fabricated number. The actual specification is 150 MHz. +Pre-trained models like Llama 3.2 3B have broad language skills, but they don't know everything. Ask the base model about the maximum clock speed of the RP2350 microcontroller and it confidently answers "1.8 GHz," a completely fabricated number. The actual specification is 150 MHz. Fine-tuning fixes this by training the model on real data from Raspberry Pi datasheets. After fine-tuning, the same model answers correctly: "The RP2350 supports up to 150 MHz." No hallucination, no guessing. diff --git a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/3-pytorch.md b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/3-pytorch.md index 86bfb6bb7b..bcb1337688 100644 --- a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/3-pytorch.md +++ b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/3-pytorch.md @@ -80,7 +80,7 @@ With the model and tokenizer loaded, the script prepares the training data by ca ## Training configuration -The training configuration controls how the SFT process runs. Notable parameters include `num_train_epochs` (initially set to 0.01 for a warmup pass, then updated for full training), `gradient_accumulation_steps` (batches to accumulate before each weight update), `learning_rate` (optimizer step size), and `max_length` (maximum sequence length). The logging parameters determine where and how often training metrics are recorded. +The training configuration controls how the SFT process runs. Notable parameters include `num_train_epochs` (initially set to 0.05 for a warmup pass, then updated for full training), `gradient_accumulation_steps` (batches to accumulate before each weight update), `learning_rate` (optimizer step size), and `max_length` (maximum sequence length). The logging parameters determine where and how often training metrics are recorded. ```python # Configure the SFT config @@ -95,6 +95,7 @@ The training configuration controls how the SFT process runs. Notable parameters "seed": 42, "dataset_text_field": "text", "packing": False, + "loss_type": "nll", "max_length": args.seq_length, "report_to": "none", "logging_dir": args.log_dir, @@ -103,6 +104,8 @@ The training configuration controls how the SFT process runs. Notable parameters } ``` +The explicit `loss_type` setting keeps TRL on its standard negative log likelihood path. TRL 1.13.0 otherwise defaults to chunked loss, which attempts to patch the `torch.compile()` wrapper and raises an `AttributeError` during `SFTTrainer` initialization. + ## Model compilation and training The script first optimizes the model graph for faster execution on the hardware using the `torch.compile()` function. A short warmup pass (0.05 epochs) triggers compilation so the overhead doesn't affect the actual training run. After warmup, the script creates an `SFTTrainer` with the full epoch count and calls `trainer.train()`. The returned `trainer_stats` object contains metrics like loss, throughput, and training time. @@ -167,7 +170,7 @@ python Llama3_3B_full_finetuning.py \ --output_dir "/workspace/models/Llama-3.2-3B-FineTuned" ``` -The `--dataset_size 300` flag tells the script to use all entries in the Raspberry Pi dataset (the default is 500, but a smaller, focused dataset can be more effective than a larger generic one). The `--output_dir` flag saves the fine-tuned model and tokenizer to the specified directory. Because you mounted your current directory into the container with `-v ${PWD}:/workspace`, the saved model is also accessible from the host system. +The `--dataset_size 300` flag tells the script to use all entries in the Raspberry Pi dataset (the default is 512, but a smaller, focused dataset can be more effective than a larger generic one). The `--output_dir` flag saves the fine-tuned model and tokenizer to the specified directory. Because you mounted your current directory into the container with `-v ${PWD}:/workspace`, the saved model is also accessible from the host system. Training takes a few minutes on DGX Spark. When it completes, you'll see a summary with metrics like runtime, samples per second, and loss, followed by a confirmation that the model was saved. @@ -179,4 +182,4 @@ In this section you: - Downloaded the Raspberry Pi datasheet Q&A pairs - Ran full fine-tuning and saved the resulting model with `--output_dir` -In the next section, you'll serve both the original and fine-tuned models and compare their responses to Raspberry Pi hardware questions. \ No newline at end of file +In the next section, you'll serve both the original and fine-tuned models and compare their responses to Raspberry Pi hardware questions. diff --git a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/4-testing.md b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/4-testing.md index 19300fcef7..d8d970a7ea 100644 --- a/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/4-testing.md +++ b/content/learning-paths/laptops-and-desktops/pytorch-finetuning-on-spark/4-testing.md @@ -10,6 +10,12 @@ layout: learningpathall Now that you've fine-tuned your model on Raspberry Pi datasheet content, it's time to compare its behavior against the original. You'll serve both versions using vLLM, a high-performance inference server optimized for large language models, and observe how fine-tuning on domain-specific data changes the model's factual accuracy. +Exit the PyTorch container to return to the DGX Spark host. The model remains available in the host directory mounted at `/workspace`: + +```bash +exit +``` + ## Download vLLM container NVIDIA provides a pre-built vLLM container that includes all the necessary components for efficient model serving. This container is optimized for NVIDIA GPUs and includes support for various quantization methods and multi-GPU inference. @@ -50,7 +56,7 @@ Start the vLLM server with the original Llama 3.2 3B Instruct model: ```bash python3 -m vllm.entrypoints.openai.api_server \ --model "meta-llama/Llama-3.2-3B-Instruct" --trust-remote-code \ ---tensor-parallel-size 1 --quantization fp8 \ +--tensor-parallel-size 1 \ --gpu-memory-utilization 0.80 ``` @@ -59,7 +65,6 @@ The server exposes an OpenAI-compatible API with the following configuration: - `--model` specifies the Hugging Face model to load, which will be pulled from the Hugging Face cache we made available to this container - `--trust-remote-code` allows loading models with custom code (required for some architectures) - `--tensor-parallel-size 1` runs inference on a single GPU (like on a DGX Spark) -- `--quantization fp8` uses 8-bit floating point quantization to reduce memory usage and improve throughput - `--gpu-memory-utilization 0.80` limits memory usage to 80%, leaving room for the rest of the OS because the DGX Spark implements unified memory between CPU and GPU. Wait for the server to fully load the model and display the message indicating it's ready to accept requests (this typically takes 30-60 seconds). @@ -110,14 +115,6 @@ The base model confidently reports the RP2350 has "256MB of memory," which is of Now test your fine-tuned model to see how training on Raspberry Pi datasheet content improved its factual accuracy. Stop the current vLLM server (press Ctrl+C in the container terminal) before launching the fine-tuned model. -{{% notice Note %}} -As of this writing, vLLM does not support version 5 of the `transformers` library that was used when fine-tuning the model, so you need to patch its `tokenizer_config.json`. Run the following command to update the `tokenizer_class` to `PreTrainedTokenizerFast`, which is compatible with the older `transformers` version bundled in the vLLM container: - -```bash -sed -i 's/"tokenizer_class": "TokenizersBackend"/"tokenizer_class": "PreTrainedTokenizerFast"/' /workspace/models/Llama-3.2-3B-FineTuned/tokenizer_config.json -``` -{{% /notice %}} - ### Launch vLLM Start the vLLM server with your fine-tuned model: @@ -125,7 +122,7 @@ Start the vLLM server with your fine-tuned model: ```bash python3 -m vllm.entrypoints.openai.api_server \ --model "/workspace/models/Llama-3.2-3B-FineTuned" --trust-remote-code \ ---tensor-parallel-size 1 --quantization fp8 \ +--tensor-parallel-size 1 \ --gpu-memory-utilization 0.80 ``` @@ -198,4 +195,4 @@ You've successfully fine-tuned a large language model on domain-specific data us - Ran full fine-tuning to train the model on hardware specifications - Compared base and fine-tuned model responses to verify factual accuracy improvements -The approach you used can be applied to any domain where you need accurate, grounded responses. Consider experimenting with different datasets from your own technical documentation, product specifications, or internal knowledge bases. \ No newline at end of file +The approach you used can be applied to any domain where you need accurate, grounded responses. Consider experimenting with different datasets from your own technical documentation, product specifications, or internal knowledge bases. diff --git a/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/_index.md b/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/_index.md index 13a4bf856d..8e8f7825ab 100644 --- a/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/_index.md @@ -1,6 +1,6 @@ --- title: Explore performance gains by increasing the Linux kernel page size on Arm -description: Learn how to install and configure a Linux kernel with 64K page size support on Arm systems to improve memory efficiency and performance for memory-intensive workloads. +description: Learn how to install and configure Linux kernels with 16K or 64K page sizes on Arm systems, then evaluate the memory and performance trade-offs. minutes_to_complete: 30 @@ -10,8 +10,8 @@ learning_objectives: - Explain the differences in page size configuration between Arm64 and x86 architectures. - Understand how page size affects memory efficiency and system performance. - Check the current memory page size on an Arm-based Linux system. - - Install and boot into a Linux kernel configured with 64K page size support. - - Confirm that the 64K page size is active. + - Install and boot into a Linux kernel configured with 16K or 64K page size support. + - Confirm that the selected page size is active. - Optionally revert to the default 4K page size kernel. prerequisites: @@ -32,13 +32,11 @@ generated_summary_faq: faq_generated_at: '2026-06-26T17:30:49Z' faq_source_hash: 67004eb9a75926144eb6f75124104972b3cf20a57a22b698c9359d20db3eca02 summary: >- - You'll evaluate and change the Linux kernel base page size on Arm, focusing - on installing and booting a 64K configuration. First, you'll start with page size fundamentals and a - quick check of the current setting using `getconf` and `uname`. OS-specific steps include Ubuntu - and CentOS package-based flows, while Debian requires building a 64K kernel from source using - the Debian source package. After reboot, you'll validate the change by seeing `65536` from `getconf` - and the expected kernel string. You'll also review common Arm page size options and an optional - step to revert to the default 4K kernel after testing. + You'll evaluate and change the Linux kernel base page size on Arm by installing and booting a + 16K or 64K configuration. You'll check the current setting with `getconf` and `uname`, then use + distribution-specific instructions. Debian provides a packaged 16K kernel and a source-build + route for 64K, while Ubuntu and CentOS provide packaged 64K kernels. After rebooting, you'll + validate the selected page size and optionally return to the default 4K kernel. faqs: - question: How do I check the current base page size and kernel in use? answer: >- @@ -50,13 +48,13 @@ generated_summary_faq: as `16384` or `65536`. Note the current value and proceed only if a change is needed. - question: Which distribution-specific section should I follow? answer: >- - Use the Ubuntu section for Ubuntu 22.04 LTS or later, the Debian section for Debian 11 or - later, and the CentOS section for CentOS 9 or later. Debian doesn't provide a 64K kernel - package, so follow the steps to build from the Debian source package. - - question: How do I confirm that the 64K page size is active after installation and reboot? + Use the Ubuntu section for Ubuntu 22.04 LTS or later, the Debian section for Debian 12 or + later, and the CentOS section for CentOS 9 or later. On Debian, you can install the packaged + 16K kernel or build a 64K kernel from the Debian source package. + - question: How do I confirm that the selected page size is active after installation and reboot? answer: >- - Re-run `getconf PAGESIZE` and expect `65536`. Also check `uname -r` to verify the kernel string - matches the newly installed kernel. + Re-run `getconf PAGESIZE` and expect `16384` for a 16K kernel or `65536` for a 64K kernel. Also + check `uname -r` to verify that the running kernel matches the kernel you installed. - question: How can I revert to a 4K page size after testing? answer: >- Use the optional revert step to return to the distribution’s default 4K kernel, then verify diff --git a/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/debian.md b/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/debian.md index 487bb9ef7b..2f22bb605c 100644 --- a/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/debian.md +++ b/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/debian.md @@ -5,39 +5,91 @@ weight: 4 layout: learningpathall --- -Follow the steps below to install a 64K page size kernel on [Debian 11 “Bullseye” or later](https://www.debian.org/releases/bullseye/). - -Debian does not provide a 64K kernel package, so you will need to compile it from source. - -There are two ways to do this: -- Download the source from kernel.org. -- Use the Debian source package. - -The instructions below use the Debian source package. +You can install a packaged 16K page size kernel on Debian 12 or later. Debian doesn't provide a 64K kernel package, so you need to compile a 64K kernel from source. ## Verify the current page size -Verify you’re using a 4KB pagesize kernel by entering the following commands: +Verify that you're using a 4 KB page size kernel: ```bash getconf PAGESIZE uname -r ``` -The output should be similar to below. The kernel flavor (the string after the version number) may vary, but the first line should always be 4096. +The output is similar to the following. The kernel flavor (the string after the version number) can vary, but the first line is always 4096: ```output 4096 6.1.0-34-cloud-arm64 ``` -The 4096 indicates the current page size is 4KB. If you see a value that is different, you are already using a page size other than 4096 (4K). On Arm systems, the valid options are 4K, 16K, and 64K. +The 4096 indicates the current page size is 4 KB. If you see a different value, you're already using a page size other than 4 KB. On Arm systems, the valid options are 4 KB, 16 KB, and 64 KB. + +## Install a packaged 16K kernel + +Debian provides the [`linux-image-arm64-16k` package](https://packages.debian.org/linux-image-arm64-16k) for Debian 13 (Trixie) and through backports for Debian 12 (Bookworm). + +Check your Debian release codename: -## Install the Debian kernel source package +```bash +. /etc/os-release +echo "$VERSION_CODENAME" +``` + +The output is either `trixie` for Debian 13 or `bookworm` for Debian 12. -Follow the steps below to install a 64K kernel using the Debian kernel source package. +### Install on Debian 13 -First, update, and install the required software: +On Debian 13, install the 16K kernel directly from the standard package repositories: + +```bash +sudo apt-get update +sudo apt-get install linux-image-arm64-16k +``` + +### Install on Debian 12 + +On Debian 12, add the official Bookworm Backports repository by following the [Debian Backports configuration format](https://backports.debian.org/Instructions/): + +```bash +sudo tee /etc/apt/sources.list.d/debian-backports.sources > /dev/null <<'EOF' +Types: deb +URIs: http://deb.debian.org/debian +Suites: bookworm-backports +Components: main +Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg +EOF +``` + +Update the package index and install the 16K kernel from backports: + +```bash +sudo apt-get update +sudo apt-get install -t bookworm-backports linux-image-arm64-16k +``` + +Reboot the system to load the new kernel: + +```bash +sudo reboot +``` + +After the system restarts, verify the page size and running kernel: + +```bash +getconf PAGESIZE +uname -r +``` + +The first command returns `16384`, and the kernel name ends in `arm64-16k`. + +If you want to test a 64K page size instead, continue with the source-build instructions. + +## Install a 64K kernel from source + +You can build a 64K kernel from the Debian source package. Another option is to download the source from kernel.org, but these instructions use the Debian source package. + +First, update the package index and install the required software: ```bash sudo apt-get -y update @@ -53,7 +105,7 @@ apt source linux cd -- linux*/ ``` -## Build and install the kernel +## Build and install the 64K kernel Now that you have the kernel source, follow these steps to build and install the kernel: @@ -100,9 +152,22 @@ The output shows the 64k kernel is running: 6.12.22-64k ``` -This indicates the current page size is 64K, and you are using the new custom-built 64k kernel. +This indicates the current page size is 64 KB, and you're using the new custom-built 64K kernel. + +## Revert from the 16K kernel + +Boot into the original 4K kernel from the bootloader's advanced options. Then remove the 16K kernel packages: + +```bash +dpkg-query -W -f='${Package}\n' 'linux-image-*16k*' 'linux-headers-*16k*' 2>/dev/null \ + | xargs --no-run-if-empty sudo apt-get purge -y +sudo update-grub +sudo reboot +``` + +After the system restarts, verify that `getconf PAGESIZE` returns `4096`. -## Revert to the 4K kernel +## Revert from the 64K kernel To revert to the kernel we started with, enter: @@ -127,4 +192,4 @@ The output should be similar to below -- the full kernel name may vary, but the 6.1.0-34-cloud-arm64 ``` -The 4096 indicates the current page size has been reverted to 4 KB. \ No newline at end of file +The 4096 indicates the current page size has been reverted to 4 KB. diff --git a/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/overview.md b/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/overview.md index 8eeced1079..90af3575cf 100644 --- a/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/overview.md +++ b/content/learning-paths/servers-and-cloud-computing/arm_linux_page_size/overview.md @@ -19,7 +19,7 @@ To keep track of these mappings efficiently, CPUs use a fast lookup cache called On x86 systems, 4K pages are the standard, while Arm-based systems support multiple page sizes - typically 4K, 16K, or 64K. This flexibility allows developers to fine-tune performance for specific workloads. -This Learning Path explains how to switch between 4K and 64K pages on different Linux distributions. +You'll learn how to switch between 4K, 16K, and 64K pages on different Linux distributions. ## How does the CPU locate data in memory? @@ -39,15 +39,14 @@ Changing the page size has a cascading effect on system performance: ### Trade-offs to consider -| Aspect | 4K Pages | 64K Pages | -|-----------------|--------------------------------------|----------------------------------------| -| **Size** | Small “bricks” (4 KB each) | Big “bricks” (64 KB each) | -| **Flexibility** | Best for flexibility and compatibility | Best for large, contiguous memory workloads | -| **Efficiency** | Needs more entries (more bookkeeping) | Needs fewer entries (less bookkeeping) | -| **Waste** | At most 4 KB unused per page | Up to ~63 KB unused if not fully used | -| **TLB reach** | Lower, more misses | Higher, fewer misses | +| Aspect | 4K pages | 16K pages | 64K pages | +|---|---|---|---| +| **Flexibility** | Highest compatibility | Balance of compatibility and reach | Best for large, contiguous memory workloads | +| **Efficiency** | Needs the most page table entries | Needs fewer entries than 4K pages | Needs the fewest entries | +| **Internal fragmentation** | Up to about 4 KB per partly used page | Up to about 16 KB per partly used page | Up to about 64 KB per partly used page | +| **TLB reach** | Lowest | Higher than 4K pages | Highest | -This Learning Path covers switching between 4K and 64K page sizes because these are supported by most Arm Linux distributions. In some cases, you may find that 16K page size is a sweet spot for your application, but Linux kernel, hardware, and software support is limited. One example of 16K page size is [Asahi Linux](https://asahilinux.org/). +Linux distribution support varies. Debian 12 and later provide a packaged 16K kernel, while the Ubuntu and CentOS instructions use packaged 64K kernels. Debian users can also build a 64K kernel from source. ## How do I select the memory page size? @@ -55,6 +54,8 @@ Points to consider when thinking about page size: - **4K pages** are the safe, default choice. They let you use memory in small slices and keep waste low. Since they are smaller, you need more of them when handling larger memory footprint applications. This creates more overhead for the operating system to manage, but it may be worth it for the flexibility. They are great for applications that need to access small bits of data frequently, like web servers or databases with lots of small transactions. +- **16K pages** provide a middle ground. They increase TLB reach compared with 4K pages while reducing the internal fragmentation risk of 64K pages. + - **64K pages** shine when you work with large, contiguous data such as video frames or large database caches because they cut down on management overhead. They will use more memory if you don’t use the whole page, but they can also speed up access times for large data sets. Choosing the right page size depends on how your application uses memory, as both the data size and retrieval patterns of the data you are working with are influencing factors. Benchmark different options under real-world workloads to determine which delivers better performance. @@ -69,7 +70,7 @@ The best way to determine the impact of page size on application performance is Do not modify the Linux kernel page size in a production environment. It can lead to system instability or failure. Perform testing in a non-production environment before applying to production systems. {{% /notice %}} -Select the Arm Linux distribution you are using to find out how to install the 64K page size kernel. +Select your Arm Linux distribution to install an available larger-page kernel. The Debian instructions cover both 16K and 64K page sizes. - [Ubuntu](/learning-paths/servers-and-cloud-computing/arm_linux_page_size/ubuntu/) - [Debian](/learning-paths/servers-and-cloud-computing/arm_linux_page_size/debian/) From 7f986f9f70459663f552baeda58789c98f381b1d Mon Sep 17 00:00:00 2001 From: Jason Andrews Date: Mon, 5 Oct 2026 20:22:34 -0500 Subject: [PATCH 59/66] second tech review of Boot a signed Zephry image with U-Boot --- assets/css/content.css | 19 +++++---- .../1-boot-chain.md | 16 ++++---- .../2-set-up-tools.md | 41 +++++++++++-------- .../3-build-zephyr.md | 16 ++++---- .../4-sign-zephyr.md | 24 +++++------ .../5-build-uboot.md | 40 +++++++++--------- .../6-boot-the-target.md | 36 ++++++++-------- .../7-test-the-checks.md | 14 +++---- .../8-production.md | 30 +++++++------- .../_index.md | 2 +- 10 files changed, 124 insertions(+), 114 deletions(-) diff --git a/assets/css/content.css b/assets/css/content.css index 254c7d9d64..a9abdb7bc5 100644 --- a/assets/css/content.css +++ b/assets/css/content.css @@ -186,15 +186,9 @@ div.answer label { .normal-tabpane { box-sizing: border-box; margin-left: 16px; + margin-right: 16px; margin-top: 8px; margin-bottom: 8px; - - padding-left: 16px; - padding-right: 16px; - padding-bottom: 16px; - - background-color: var(--arm-color-surface); - --ads-horizontal-tabs-navigation-background-color: var(--arm-color-surface); } .normal-horizontal-tabs { --ads-horizontal-tabs-tab-color: white; @@ -202,14 +196,25 @@ div.answer label { --ads-horizontal-tabs-underline-color: var(--arm-orange); --ads-horizontal-tabs-tab-color-hover: var(--lp-hover-text); + --ads-horizontal-tabs-navigation-background-color: var(--arm-color-surface); --ads-horizontal-tabs-tab-content-background-color: var(--arm-color-footing); } +.normal-horizontal-tabs .normal-tab { + padding-bottom: 16px; +} + .normal-horizontal-tabs table, .normal-horizontal-tabs p { padding-top: 16px; padding-left: 16px; padding-right: 16px; } +.normal-horizontal-tabs div.code-toolbar { + margin-left: 16px; + margin-right: 16px; + margin-top: 16px; + margin-bottom: 16px; +} .normal-horizontal-tabs table{ padding-bottom: 8px; } diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 4e611858eb..4f504e4497 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -17,11 +17,11 @@ You can build and boot a verified Zephyr image in QEMU without hardware, or on a ## The boot chain on a Cortex-A board -On an Armv8-A board using U-Boot, boot proceeds from the SoC’s boot ROM through early firmware to U-Boot. U-Boot then loads and starts the payload: Zephyr in your setup. +On an Armv8-A board using U-Boot, boot proceeds from the SoC's boot ROM through early firmware to U-Boot. U-Boot then loads and starts the payload: Zephyr in your setup. The early firmware is usually the SPL (Secondary Program Loader), a small U-Boot that loads the full one, plus TF-A (Trusted Firmware-A) and OP-TEE (Open Portable Trusted Execution Environment), which run in the Secure world. Many SoCs add the vendor's own security firmware, which checks the later stages. You build the SPL with U-Boot; the rest comes prebuilt in the vendor's SDK. -![Cortex-A boot chain from boot ROM through early firmware and U-Boot to a signed Zephyr FIT image. U-Boot verifies Zephyr; trust in the earlier stages depends on the platform’s secure-boot configuration.#center](images/boot-chain-generic.svg "U-Boot verifies Zephyr in the Cortex-A boot chain") +![Cortex-A boot chain from boot ROM through early firmware and U-Boot to a signed Zephyr FIT image. U-Boot verifies Zephyr; trust in the earlier stages depends on the platform's secure-boot configuration.#center](images/boot-chain-generic.svg "U-Boot verifies Zephyr in the Cortex-A boot chain") ## Choose your target @@ -36,8 +36,6 @@ Pick one target now. QEMU is the default and needs nothing but your host; the AM | Boot media | FAT partition in a 64 MiB disk image, `virtio 0:1` | FAT partition on a micro-SD card, `mmc 1:1` | | Console | The terminal you start QEMU in | USB serial at 115200 baud | -Choose QEMU to test signing and verification without hardware. Choose the AM62L EVM to run the same workflow on a board with ROM and early firmware stages. - ### The boot chain in QEMU QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: @@ -46,11 +44,11 @@ QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file QEMU -bios u-boot.bin -> U-Boot -> Zephyr inside a FIT image ``` -QEMU runs U-Boot’s FIT verifier, but nothing authenticates U-Boot itself. +QEMU runs U-Boot's FIT verifier, but nothing authenticates U-Boot itself. ### The boot chain on the AM62L EVM -On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` when you [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). The EVM ships in TI’s High Security, Field Securable (HS-FS) development state. +On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` in a later step when you build U-Boot. The EVM ships in TI's High Security, Field Securable (HS-FS) development state. ![AM62L boot chain from boot ROM through `tiboot3.bin`, `tispl.bin`, and `u-boot.img` to the Zephyr FIT image. In HS-FS development mode, the early stages accept any signing key; U-Boot verifies Zephyr against your key before starting it.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") @@ -70,15 +68,15 @@ You sign the FIT configuration with `sha256,rsa2048`, which combines SHA-256 has The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`: every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature at all still boots. -![Signed FIT image beside U-Boot’s control device tree, which holds the required public key. The signature covers the FIT configuration and payload hash; the hash covers the Zephyr image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") +![Signed FIT image beside U-Boot's control device tree, which holds the required public key. The signature covers the FIT configuration and payload hash; the hash covers the Zephyr image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") The signature does not cover the image bytes: it covers the configuration node plus the hash node, and the hash covers the bytes. ## Verify Zephyr before starting it -You configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, U-Boot’s command for jumping to an address. +You configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, U-Boot's command for jumping to an address. -In QEMU there is no key to fuse and nothing checks U-Boot at all. You leave the AM62L EVM in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains the production state. +In QEMU there is no key to fuse and nothing checks U-Boot at all. You leave the AM62L EVM in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. You'll review what a production device needs in the final section of this Learning Path. ## What you've learned and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index a15fb3ca84..22aadc75cb 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -17,7 +17,7 @@ Open Visual Studio Code and select **Workbench for Zephyr** in the Activity Bar. When installation finishes, select **Verify Host Tools**. Resolve any missing-tool errors before continuing. -You’ll import the AArch64 toolchain and create the West workspace in the next lesson, before building Zephyr. +You'll import the AArch64 toolchain and create the West workspace in the next lesson, before building Zephyr. ## Install the host packages @@ -27,7 +27,7 @@ Install the additional packages used to build U-Boot, sign images, and prepare t sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools dosfstools xz-utils curl picocom ``` -If you chose QEMU, install the emulator and U-Boot cross compiler with this command. For the AM62L EVM, skip it; you’ll get the cross compiler from the TI SDK: +If you chose QEMU, install the emulator and U-Boot cross compiler with this command. For the AM62L EVM, skip it; you'll get the cross compiler from the TI SDK: ```bash sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu @@ -35,11 +35,10 @@ sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu ## Create the working directory and environment file -Keep your source, tools, and build outputs under `$HOME/zephyr-secure-boot`. An environment file stores the paths and target settings you’ll reuse throughout the workflow. Select your target’s tab, create and load its environment file, and create the signing-key and FIT directories: +Keep your source, tools, and build outputs under `$HOME/zephyr-secure-boot`. An environment file stores the paths and target settings you'll reuse throughout the workflow. Select your target's tab, create and load its environment file, and create the signing-key and FIT directories: -{{< tabpane-normal >}} - {{< tab header="QEMU" >}} -```bash +{{< tabpane code=true >}} + {{< tab header="QEMU" language="bash" >}} mkdir -p $HOME/zephyr-secure-boot cat > $HOME/zephyr-secure-boot/env-qemu.sh <<'EOF' export WORK=$HOME/zephyr-secure-boot @@ -64,10 +63,8 @@ export BOOT_IMG=$WORK/disk.img@@1048576 EOF source $HOME/zephyr-secure-boot/env-qemu.sh mkdir -p $KEYS $FIT -``` {{< /tab >}} - {{< tab header="AM62L EVM" >}} -```bash + {{< tab header="AM62L EVM" language="bash" >}} mkdir -p $HOME/zephyr-secure-boot cat > $HOME/zephyr-secure-boot/env-am62l.sh <<'EOF' export WORK=$HOME/zephyr-secure-boot @@ -95,11 +92,10 @@ export BOOT_IMG=$WORK/sdcard.img@@1048576 EOF source $HOME/zephyr-secure-boot/env-am62l.sh mkdir -p $KEYS $FIT -``` {{< /tab >}} -{{< /tabpane-normal >}} +{{< /tabpane >}} -The variables are available only in the shell where you load the environment file. Load it again whenever you open a new terminal; later lessons include a reminder. If you adapt the workflow to another board, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) explains how to choose its target values and paths. +The variables are available only in the shell where you load the environment file. Load it again whenever you open a new terminal; later lessons include a reminder. If you adapt the workflow to another board, the later section, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/), explains how to choose its target values and paths. {{% notice Note %}} Example output shows paths under `/home/user/`, the home directory of the account that produced it. Your paths reflect your own username. On a standard Ubuntu cloud instance, for example, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically, and only the printed paths differ. @@ -123,7 +119,7 @@ The expected output is: /home/user/zephyr-secure-boot/u-boot-2025.07 ``` -You’ll add the public key and boot command through build configuration, without patching U-Boot source. Check that the cross compiler runs: +You'll add the public key and boot command through build configuration, without patching U-Boot source. Check that the cross compiler runs: ```bash ${CROSS}gcc --version @@ -136,9 +132,20 @@ aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 ... ``` -Run `qemu-system-aarch64 --version` to check that the emulator is installed and report its version. +Check that the emulator is installed and report its version: + +```bash +qemu-system-aarch64 --version +``` + +The output is similar to: + +```output +QEMU emulator version 8.2.2 (Debian 1:8.2.2+ds-0ubuntu1.18) +... +``` -You’ll create a 64 MiB disk image when you prepare the boot media; you don’t need to download one for QEMU. +You'll create a 64 MiB disk image when you prepare the boot media; you don't need to download one for QEMU. {{< /tab >}} {{< tab header="AM62L EVM" >}} The TI Processor SDK Linux for AM62Lx supplies U-Boot source, prebuilt early firmware, and the cross compiler. You use these components to boot Zephyr. The installer is 4.5 GB and unpacks to 11 GB. Download version 12.01.00.05.03 from the [TI Processor SDK download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): @@ -171,7 +178,7 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 ... ``` -Download TI’s SD card image to preserve the boot partition layout expected by the AM62L boot ROM. The download is about 1.3 GB. Leave it compressed; when you prepare the boot media, you’ll extract the boot partition and replace its files: +Download TI's SD card image to preserve the boot partition layout expected by the AM62L boot ROM. The download is about 1.3 GB. Leave it compressed; when you prepare the boot media, you'll extract the boot partition and replace its files: ```bash curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz @@ -181,4 +188,4 @@ curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software- ## What you've accomplished and what's next -You’ve installed the Zephyr host tools and U-Boot build packages, obtained your target’s U-Boot source and cross compiler, and created a reusable environment file. For the AM62L EVM, you also have the early firmware and SD card image. Next, you’ll import the AArch64 toolchain, create a West workspace, and build a small Zephyr application for your chosen target. +You've installed the Zephyr host tools and U-Boot build packages, obtained your target's U-Boot source and cross compiler, and created a reusable environment file. For the AM62L EVM, you also have the early firmware and SD card image. Next, you'll import the AArch64 toolchain, create a West workspace, and build a small Zephyr application for your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 728bf34aae..fafa53ae01 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -25,7 +25,7 @@ The screenshots show Windows paths, a globally installed SDK, and the AM62L EVM. ## Import the AArch64 toolchain -Use the Zephyr SDK’s `aarch64-zephyr-elf` compiler for your Cortex-A53 target. Select the **Minimal** SDK type and **aarch64** architecture to download that toolchain. +Use the Zephyr SDK's `aarch64-zephyr-elf` compiler for your Cortex-A53 target. Select the **Minimal** SDK type and **aarch64** architecture to download that toolchain. In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: @@ -54,7 +54,7 @@ Create a Zephyr 4.4.2 workspace for your chosen target. The same workspace suppo ![Workbench for Zephyr Add West Workspace form using the Minimal option, Texas Instruments template, and Zephyr v4.4.2. The workspace is named zephyrproject and supports either target.#center](images/wz-add-west-workspace.webp "Create the Zephyr 4.4.2 workspace") -Select **Import**. Workbench downloads Zephyr, the vendor’s hardware abstraction layer (HAL), and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. +Select **Import**. Workbench downloads Zephyr, the vendor's hardware abstraction layer (HAL), and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. ## Create the application @@ -91,7 +91,7 @@ CONFIG_AARCH64_IMAGE_HEADER=y `CONFIG_PRINTK` enables console output with `printk()`. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, confirming that Zephyr has started. -Replace the contents of `src/main.c` with the following code. Its banner identifies image A and the key you’ll use to sign it. This helps you distinguish the images during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). +Replace the contents of `src/main.c` with the following code. Its banner identifies image A and the key you'll use to sign it. This helps you distinguish the images during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). ```c #include @@ -127,7 +127,7 @@ The configurations for `qemu_cortex_a53` and `am62l_evm/am62l3/a53` already set ## Build the application -In the **Applications** view, open the context menu for `hello` and select **Build**. Workbench runs `west build` in the terminal and writes the build outputs to the application’s `build/primary` directory. Near the end, the linker prints a memory report similar to: +In the **Applications** view, open the context menu for `hello` and select **Build**. Workbench runs `west build` in the terminal and writes the build outputs to the application's `build/primary` directory. Near the end, the linker prints a memory report similar to: ```output Memory region Used Size Region Size %age Used @@ -136,7 +136,7 @@ Memory region Used Size Region Size %age Used IDT_LIST: 0 B 32 KB 0.00% ``` -![Workbench for Zephyr showing hello configured for the AM62L EVM and the build terminal’s memory report. The report appears near the end of the build; the generated zephyr.bin is checked in the next step.#center](images/wz-build.webp "Build hello for the AM62L EVM") +![Workbench for Zephyr showing hello configured for the AM62L EVM and the build terminal's memory report. The report appears near the end of the build; the generated zephyr.bin is checked in the next step.#center](images/wz-build.webp "Build hello for the AM62L EVM") The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. It is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM, and about 58 KB for the AM62L EVM, which reports 2016 MB. @@ -161,12 +161,12 @@ Rebuild the application. The Zephyr SDK compiler is a native Arm binary and does ## Check the arm64 image header -Open a terminal with **Terminal > New Terminal** in VS Code, or use an existing shell. Load your target’s environment file: +Open a terminal with **Terminal > New Terminal** in VS Code, or use an existing shell. Load your target's environment file: - **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` - **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` -Print the header’s magic number at offset `0x38`: +Print the header's magic number at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -182,4 +182,4 @@ The expected output is: ## What you've accomplished and what's next -You’ve built a Zephyr image for your target’s Cortex-A53, linked at `ZEPHYR_ADDR`, and checked its arm64 header. Next, you’ll create the signing keys and package the image in a signed FIT for U-Boot to verify. +You've built a Zephyr image for your target's Cortex-A53, linked at `ZEPHYR_ADDR`, and checked its arm64 header. Next, you'll create the signing keys and package the image in a signed FIT for U-Boot to verify. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index fd45e8b9c5..a8a42431ce 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -1,28 +1,28 @@ --- title: Create signing keys and sign the Zephyr image into a FIT -description: Build U-Boot’s signing tools, generate RSA key pairs with OpenSSL, and package Zephyr in a signed FIT image for U-Boot to verify. +description: Build U-Boot's signing tools, generate RSA key pairs with OpenSSL, and package Zephyr in a signed FIT image for U-Boot to verify. weight: 5 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Build U-Boot’s host tools +## Build U-Boot's host tools -Open a terminal and load your target’s environment file: +Open a terminal and load your target's environment file: - **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` - **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` -Build `mkimage` to create and sign FIT images, and `fit_check_sign` to verify them on the host. Use your target’s U-Boot source tree so the host tools match the U-Boot version you’ll run. +Build `mkimage` to create and sign FIT images, and `fit_check_sign` to verify them on the host. Use your target's U-Boot source tree so the host tools match the U-Boot version you'll run. -Before building the tools, generate `.config` from your target’s default configuration. Run the target named by `UBOOT_DEFCONFIG` in your environment file: +Before building the tools, generate `.config` from your target's default configuration. Run the target named by `UBOOT_DEFCONFIG` in your environment file: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -`UBOOT_CC` stores the compiler command. For QEMU, it names the cross compiler installed from Ubuntu. For the AM62L EVM, it also includes `--sysroot` to locate the SDK’s headers and libraries. Keep `CC="$UBOOT_CC"` on every `make` command, including when you build U-Boot later. +`UBOOT_CC` stores the compiler command. For QEMU, it names the cross compiler installed from Ubuntu. For the AM62L EVM, it also includes `--sysroot` to locate the SDK's headers and libraries. Keep `CC="$UBOOT_CC"` on every `make` command, including when you build U-Boot later. Then build the host tools: @@ -42,7 +42,7 @@ The output is similar to: mkimage version 2026.01-g5fb294342321 ``` -The version string identifies your U-Boot source tree. This example uses the AM62L EVM’s TI tree, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. +The version string identifies your U-Boot source tree. This example uses the AM62L EVM's TI tree, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. {{% notice Note %}} If the tools build reports a missing `pylibfdt` dependency, `swig`, or `gnutls/gnutls.h`, check the packages installed during [host-tool setup](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Run the shared `apt install` command again, then retry the tools build. @@ -50,9 +50,9 @@ If the tools build reports a missing `pylibfdt` dependency, `swig`, or `gnutls/g ## Create two signing key pairs -Use the private key to sign the image and keep it on the host. You’ll embed only the public key in U-Boot during the next lesson. +Use the private key to sign the image and keep it on the host. You'll embed only the public key in U-Boot during the next lesson. -Create two key pairs. You’ll configure U-Boot to trust `key-a` and leave out the public key for `key-b`. The optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) use `key-b` to demonstrate rejection of an image signed with an untrusted key. +Create two key pairs. You'll configure U-Boot to trust `key-a` and leave out the public key for `key-b`. The optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) use `key-b` to demonstrate rejection of an image signed with an untrusted key. Generate both pairs with OpenSSL: @@ -78,7 +78,7 @@ key-a.crt key-a.key key-b.crt key-b.key - `.crt` is a self-signed certificate containing the public key - The shared file-name stem, ``, matches `key-name-hint` in the FIT source -These 2048-bit keys are generated on the build host for this demonstration. [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production key handling. +These 2048-bit keys are generated on the build host for this demonstration. The later section, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/), covers production key handling. ## Write the FIT source @@ -164,8 +164,8 @@ Check `Sign algo: sha256,rsa2048:key-a` and the final `Signature written to . This example uses the AM62L EVM build. For the QEMU build, expect `Data Size: 37040 Bytes` and `Load Address: 0x40000000`. -Omit `mkimage -K` when signing this FIT. You’ll add the public key to U-Boot’s control device tree during the U-Boot build. +Omit `mkimage -K` when signing this FIT. You'll add the public key to U-Boot's control device tree during the U-Boot build. ## What you've accomplished and what's next -You’ve built the U-Boot host tools, created two key pairs, and packaged Zephyr in the signed FIT `$FIT/zephyr-a.itb`. Next, you’ll build U-Boot with the trusted public key and a boot command that starts Zephyr only after verification succeeds. +You've built the U-Boot host tools, created two key pairs, and packaged Zephyr in the signed FIT `$FIT/zephyr-a.itb`. Next, you'll build U-Boot with the trusted public key and a boot command that starts Zephyr only after verification succeeds. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index fbbf889b3e..eb93b2c198 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -9,7 +9,7 @@ layout: learningpathall ## Check that U-Boot can verify signatures -Open a terminal and load your target’s environment file: +Open a terminal and load your target's environment file: - **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` - **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` @@ -32,13 +32,13 @@ CONFIG_RSA=y `CONFIG_FIT_SIGNATURE` and `CONFIG_RSA` enable the verifier. `CONFIG_OF_SEPARATE` provides a separate control device tree blob (DTB), which will hold your public key. Legacy images, which carry no signature, are disabled in this configuration. -You’ll add the public key and boot command through build configuration, without patching U-Boot source. +You'll add the public key and boot command through build configuration, without patching U-Boot source. For QEMU, `qemu_arm64_defconfig` enables the unsigned legacy image format with `CONFIG_LEGACY_IMAGE_FORMAT=y`. The QEMU configuration fragment disables it and configures a control device tree containing your key. ## Generate the public-key device-tree node -Use a temporary FIT to make `mkimage` write the public key into a scratch DTB. You’ll convert the key node to source for the U-Boot build. First, create an empty DTB and a placeholder payload in `$WORK`: +Use a temporary FIT to make `mkimage` write the public key into a scratch DTB. You'll convert the key node to source for the U-Boot build. First, create an empty DTB and a placeholder payload in `$WORK`: ```bash printf '/dts-v1/;\n/ { };\n' | dtc -I dts -O dtb -o $WORK/scratch.dtb @@ -97,9 +97,9 @@ The expected output is: key-name-hint = "key-a"; ``` -Confirm that `key-name-hint` is `key-a` and `required` is `conf`. Leave out `key-b` so U-Boot doesn’t trust its signatures. +Confirm that `key-name-hint` is `key-a` and `required` is `conf`. Leave out `key-b` so U-Boot doesn't trust its signatures. -The build incorporates `signature.dtsi` into U-Boot’s control device tree. Use `mkimage -K` only with the scratch DTB in this step. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. +The build incorporates `signature.dtsi` into U-Boot's control device tree. Use `mkimage -K` only with the scratch DTB in this step. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. ## Write a boot command that fails closed @@ -111,7 +111,7 @@ An unverified boot command loads `zephyr.bin` and jumps to it. With your QEMU ta On the AM62L EVM the same line reads `fatload mmc 1:1 0x82000000 zephyr.bin` and ends `go 0x82000000`. -This command doesn’t verify the image between `fatload` and `go`. Add `bootm` verification before the handover. The verified command chain uses the same QEMU target values and is split into lines for readability: +This command doesn't verify the image between `fatload` and `go`. Add `bootm` verification before the handover. The verified command chain uses the same QEMU target values and is split into lines for readability: ```text fatload virtio 0:1 0x48000000 ${fit} && @@ -124,15 +124,15 @@ echo "*** REFUSED: Zephyr was NOT started ***" The command chain loads, verifies, and starts Zephyr: -- `fatload virtio 0:1 0x48000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. `FIT_ADDR` is separate from `ZEPHYR_ADDR`, so copying the payload won’t overwrite the FIT being read. +- `fatload virtio 0:1 0x48000000 ${fit}` reads the FIT named in `${fit}` from `BOOT_DEV` to `FIT_ADDR`. `FIT_ADDR` is separate from `ZEPHYR_ADDR`, so copying the payload won't overwrite the FIT being read. - `bootm start 0x48000000` parses the FIT, picks `conf-1`, verifies the RSA signature against `/signature/key-key-a`, then verifies the image hash. - `bootm loados` copies the verified payload to its `load` address, `ZEPHYR_ADDR`. - The cache commands flush and disable the caches. On arm64, `dcache off` also disables the memory management unit (MMU), preparing the state Zephyr expects at entry. - `go 0x40000000` jumps to `ZEPHYR_ADDR` without performing verification. Using `bootm start` and `bootm loados` stops before the OS-specific boot code that a plain `bootm` would run. -For QEMU, `BOOT_DEV` is `virtio 0:1`, the disk image’s FAT partition. On the AM62L EVM, it is `mmc 1:1`, the SD card’s first partition. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. +For QEMU, `BOOT_DEV` is `virtio 0:1`, the disk image's FAT partition. On the AM62L EVM, it is `mmc 1:1`, the SD card's first partition. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. -Failing closed means stopping before Zephyr starts if any command fails. The `&&` operators enforce this: `a && b` runs `b` only if `a` succeeds. Separating the commands with `;` would allow execution to continue after a failed check. In this application, `go` doesn’t return, so the refusal message prints only when an earlier command fails. +Failing closed means stopping before Zephyr starts if any command fails. The `&&` operators enforce this: `a && b` runs `b` only if `a` succeeds. Separating the commands with `;` would allow execution to continue after a failed check. In this application, `go` doesn't return, so the refusal message prints only when an earlier command fails. Store the chain in the environment variable `zboot`. Three wrapper commands select which FIT it loads: @@ -143,7 +143,7 @@ Store the chain in the environment variable `zboot`. Three wrapper commands sele | `b` | `setenv fit zephyr-b.itb; run zboot` | | `t` | `setenv fit zephyr-tampered.itb; run zboot` | -`a` boots the trusted image. `b` and `t` select the images you’ll create during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). +`a` boots the trusted image. `b` and `t` select the images you'll create during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). Autoboot runs `bootcmd` after a countdown. `CONFIG_PREBOOT` defines `zboot` and its wrappers before the countdown, making them available if you interrupt it. `CONFIG_BOOTCOMMAND="run a"` selects the trusted image by default. `CONFIG_BOOTDELAY=3` gives you three seconds to interrupt autoboot. @@ -151,7 +151,7 @@ The commands are compiled into U-Boot rather than stored on the card, where anyo ## Configure U-Boot -Reset to your target’s default configuration before adding the custom settings: +Reset to your target's default configuration before adding the custom settings: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG @@ -169,13 +169,13 @@ CONFIG_BOOTDELAY=3 EOF ``` -Keep the `\"` sequences around the `echo` text; they represent literal quotes inside the Kconfig string. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` and check that your target’s device and addresses appear in the command. +Keep the `\"` sequences around the `echo` text; they represent literal quotes inside the Kconfig string. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` and check that your target's device and addresses appear in the command. -Select your target’s tab and add its device-tree and boot settings: +Select your target's tab and add its device-tree and boot settings: {{< tabpane-normal >}} {{< tab header="QEMU" >}} -QEMU normally supplies U-Boot’s device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you’ll create a control device tree containing your key and pass it to the build. Add these settings to enable that approach, disable unsigned legacy images, enable cache commands, and keep the environment from being saved to flash: +QEMU normally supplies U-Boot's device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you'll create a control device tree containing your key and pass it to the build. Add these settings to enable that approach, disable unsigned legacy images, enable cache commands, and keep the environment from being saved to flash: ```bash cat >> $UBOOT_OUT/.config <<'EOF' @@ -192,7 +192,7 @@ EOF `CONFIG_OF_BOARD` and `CONFIG_OF_OMIT_DTB` off make U-Boot carry a control device tree of its own, the one your key goes into. `CONFIG_LEGACY_IMAGE_FORMAT` off closes the older image format, which carries no signature. `CONFIG_CMD_CACHE` adds the `dcache` and `icache` commands the boot command uses, and `CONFIG_ENV_IS_NOWHERE` keeps the environment out of flash, so nothing saved at the prompt can replace your boot command. {{< /tab >}} {{< tab header="AM62L EVM" >}} -TI’s U-Boot tree builds its control device tree from source. Set `CONFIG_DEVICE_TREE_INCLUDES` to include your public-key node in that build: +TI's U-Boot tree builds its control device tree from source. Set `CONFIG_DEVICE_TREE_INCLUDES` to include your public-key node in that build: ```bash cat >> $UBOOT_OUT/.config <}} {{< tab header="QEMU" >}} -Export the device tree for the QEMU machine you’ll boot later. This keeps U-Boot’s drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits: +Export the device tree for the QEMU machine you'll boot later. This keeps U-Boot's drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits: ```bash qemu-system-aarch64 -machine virt,gic-version=3,dumpdtb=$WORK/qemu-virt.dtb -cpu cortex-a53 -m 1G -nographic @@ -238,7 +238,7 @@ cat $WORK/signature.dtsi >> $WORK/uboot-control.dts dtc -I dts -O dtb -q -o $WORK/uboot-control.dtb $WORK/uboot-control.dts ``` -Build U-Boot with `EXT_DTB` pointing to your control device tree. Specify `u-boot.bin` and `u-boot.dtb` as the build targets. U-Boot’s `scripts/check-of.sh` rejects the default `all` target for this machine, which normally receives its device tree from a prior stage: +Build U-Boot with `EXT_DTB` pointing to your control device tree. Specify `u-boot.bin` and `u-boot.dtb` as the build targets. U-Boot's `scripts/check-of.sh` rejects the default `all` target for this machine, which normally receives its device tree from a prior stage: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ @@ -254,7 +254,7 @@ ls -l $UBOOT_OUT/u-boot.bin $UBOOT_OUT/u-boot.dtb `u-boot.bin` is about 1.4 MB and ends with the bytes of `u-boot.dtb`, the control device tree with your key inside. {{< /tab >}} {{< tab header="AM62L EVM" >}} -TI’s U-Boot tree uses binman, U-Boot’s image packaging tool, to package the early stages. Point `BL1`, `BL31`, and `TEE` to the SDK’s prebuilt TF-A and OP-TEE binaries. Set `BINMAN_INDIRS` to the SDK directory containing TI’s system firmware: +TI's U-Boot tree uses binman, U-Boot's image packaging tool, to package the early stages. Point `BL1`, `BL31`, and `TEE` to the SDK's prebuilt TF-A and OP-TEE binaries. Set `BINMAN_INDIRS` to the SDK directory containing TI's system firmware: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ @@ -298,7 +298,7 @@ With the long values shortened, the output is similar to: The `rsa,` properties contain the public key for `key-a`. Check that the node includes `required = "conf"`, which makes U-Boot require a valid configuration signature. -Verify the trusted FIT on the host using the key in that DTB. `fit_check_sign` uses U-Boot’s verification code. `-f` selects the FIT, and `-k` selects the DTB containing the public key: +Verify the trusted FIT on the host using the key in that DTB. `fit_check_sign` uses U-Boot's verification code. `-f` selects the FIT, and `-k` selects the DTB containing the public key: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb @@ -358,4 +358,4 @@ The tool also checks for device-tree and ramdisk subimages. The two `Could not f ## What you've accomplished and what's next -You’ve built U-Boot with the public key for `key-a` and a boot command that starts Zephyr only after verification succeeds. The trusted FIT passes the host check against the embedded key. Next, you’ll prepare the boot media and watch U-Boot verify and start Zephyr on your chosen target. +You've built U-Boot with the public key for `key-a` and a boot command that starts Zephyr only after verification succeeds. The trusted FIT passes the host check against the embedded key. Next, you'll prepare the boot media and watch U-Boot verify and start Zephyr on your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index c39f69ffa4..3508887413 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -9,20 +9,20 @@ layout: learningpathall ## What your target boots from -Open a terminal and load your target’s environment file: +Open a terminal and load your target's environment file: - **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` - **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` -The AM62L boot ROM reads the first-stage file from a FAT partition on the SD card. Start with TI’s card image to preserve the expected layout. QEMU loads `u-boot.bin` from the command line, so its disk image needs only the signed FIT. +The AM62L boot ROM reads the first-stage file from a FAT partition on the SD card. Start with TI's card image to preserve the expected layout. QEMU loads `u-boot.bin` from the command line, so its disk image needs only the signed FIT. -On either target, U-Boot’s `fatload` reads `zephyr-a.itb` from the partition selected by `BOOT_DEV`. +On either target, U-Boot's `fatload` reads `zephyr-a.itb` from the partition selected by `BOOT_DEV`. ## Build the boot media {{< tabpane-normal >}} {{< tab header="QEMU" >}} -Create a 64 MiB disk image with one FAT16 partition starting at sector 2048. Use a master boot record (MBR) partition table and partition type `0x0e`, which specifies FAT16 with logical block addressing (LBA). These commands don’t need root privileges: +Create a 64 MiB disk image with one FAT16 partition starting at sector 2048. Use a master boot record (MBR) partition table and partition type `0x0e`, which specifies FAT16 with logical block addressing (LBA). These commands don't need root privileges: ```bash truncate -s 64M $WORK/disk.img @@ -30,7 +30,7 @@ printf 'label: dos\nstart=2048, size=129024, type=e\n' | sfdisk $WORK/disk.img mkfs.vfat --offset 2048 -F 16 -n ZEPHYRFIT $WORK/disk.img ``` -Copy the signed FIT into the partition and list its contents. `BOOT_IMG` includes `@@1048576`, telling `mtools` that the volume starts 1 MiB into the image. `::` identifies the volume’s root directory: +Copy the signed FIT into the partition and list its contents. `BOOT_IMG` includes `@@1048576`, telling `mtools` that the volume starts 1 MiB into the image. `::` identifies the volume's root directory: ```bash mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: @@ -52,7 +52,7 @@ zephyr-a itb 38742 2026-09-17 22:11 Confirm that the volume contains `zephyr-a.itb`. The partition is accessed as `virtio 0:1`, matching `BOOT_DEV` in `env-qemu.sh`. {{< /tab >}} {{< tab header="AM62L EVM" >}} -The boot ROM reads `tiboot3.bin` from the card’s first FAT partition. Preserve TI’s FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors; these values determine the extraction size in the command. +The boot ROM reads `tiboot3.bin` from the card's first FAT partition. Preserve TI's FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors; these values determine the extraction size in the command. Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: @@ -60,7 +60,7 @@ Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds th xz -dc $WORK/tisdk-default-image.wic.xz | head -c $(( (2048+262144)*512 )) > $WORK/sdcard.img ``` -The result is a 129 MiB image. Its partition table still lists TI’s second partition, which points past the end of the extracted image. Remove that partition-table entry: +The result is a 129 MiB image. Its partition table still lists TI's second partition, which points past the end of the extracted image. Remove that partition-table entry: ```bash sfdisk --delete $WORK/sdcard.img 2 @@ -73,7 +73,7 @@ The partition table has been altered. Syncing disks. ``` -Use `mtools` to remove TI’s Linux files and copy your boot files and signed FIT into the FAT volume. `BOOT_IMG` includes `@@1048576`, selecting the volume 1 MiB into the image. `::` identifies its root directory: +Use `mtools` to remove TI's Linux files and copy your boot files and signed FIT into the FAT volume. `BOOT_IMG` includes `@@1048576`, selecting the volume 1 MiB into the image. `::` identifies its root directory: ```bash mdeltree -i $BOOT_IMG ::EFI @@ -122,15 +122,15 @@ qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic Use the same `-machine`, `-cpu`, and `-m` settings as the device-tree export used to [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). U-Boot should begin printing in the terminal. To exit QEMU, press **Ctrl+A**, then **X**. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Run `lsblk` before and after inserting the micro-SD card. Identify the newly listed disk and confirm its size matches the card. Replace `/dev/sdX` with that disk’s device name and write the image to the whole card: +Run `lsblk` before and after inserting the micro-SD card. Identify the newly listed disk and confirm its size matches the card. Replace `/dev/sdX` with that disk's device name and write the image to the whole card: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress ``` -If you transfer the prepared image to Windows or macOS, you can write `sdcard.img` with balenaEtcher. Alternatively, write TI’s unchanged `.wic.xz` image to the card. Open its first partition, remove `Image`, `uEnv.txt`, and the `EFI` directory, then copy in the three boot files and `zephyr-a.itb`. +If you transfer the prepared image to Windows or macOS, you can write `sdcard.img` with balenaEtcher. Alternatively, write TI's unchanged `.wic.xz` image to the card. Open its first partition, remove `Image`, `uEnv.txt`, and the `EFI` directory, then copy in the three boot files and `zephyr-a.itb`. -Set **SW3** using the table. This is the reduced pin-count setting from the [AM62L EVM User’s Guide](https://www.ti.com/lit/pdf/SPRUJG8), where the ROM ignores **SW2** and **SW4**. The **ON** position is toward the **ON** label on the switch bank. +Set **SW3** using the table. This is the reduced pin-count setting from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8), where the ROM ignores **SW2** and **SW4**. The **ON** position is toward the **ON** label on the switch bank. | Switch | 1 | 2 | 3 | 4 | |---|---|---|---|---| @@ -192,11 +192,11 @@ Hit any key to stop autoboot: 3 Use these messages to identify the boot stages and selected devices: - `NOTICE: BL1:` and `BL31:` identify TF-A running from `tiboot3.bin` and `tispl.bin` -- `Authentication passed` reports successful authentication by TI’s security firmware -- `SoC: AM62LX SR1.1 HS-FS` identifies the SoC’s development state +- `Authentication passed` reports successful authentication by TI's security firmware +- `SoC: AM62LX SR1.1 HS-FS` identifies the SoC's development state - `MMC:` lists the eMMC as device zero and the SD card as device one -The `Agent 0 Protocol 0x10 Message 0x7: not supported` errors appear in this successful boot log. They don’t prevent Zephyr from starting in this example. +The `Agent 0 Protocol 0x10 Message 0x7: not supported` errors appear in this successful boot log. They don't prevent Zephyr from starting in this example. This log comes from a board running TI's prebuilt first two stages, so its `U-Boot SPL` line shows TI's build date instead of yours. @@ -243,7 +243,7 @@ this image was verified by U-Boot before it ran. Confirm verification and startup using these messages: -- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with U-Boot’s embedded public key +- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with U-Boot's embedded public key - `sha256+ OK` confirms that the payload hash matches - `Loading Kernel Image to 82000000` shows `bootm loados` copying Zephyr to its link address - `## Starting application at 0x82000000 ...` shows `go` handing control to Zephyr @@ -260,7 +260,7 @@ Check the symptom and try the corresponding step: 1. Nothing prints, or startup hangs after the banner: check that the control device tree matches the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu`, and `-m` used to start QEMU. 2. `Failed to load 'zephyr-a.itb'`: U-Boot found the volume but not the file. List it on the host with `mdir -i $BOOT_IMG ::`. -3. `** Bad device specification virtio 0 **`: check the partition type with `sfdisk -l $WORK/disk.img`. If it isn’t `0x0e`, rebuild the disk image with the specified type. +3. `** Bad device specification virtio 0 **`: check the partition type with `sfdisk -l $WORK/disk.img`. If it isn't `0x0e`, rebuild the disk image with the specified type. 4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` did not make it into `.config`; add it and build U-Boot again. {{< /tab >}} {{< tab header="AM62L EVM" >}} @@ -269,7 +269,7 @@ If the terminal stays empty, check the console connection and whether the ROM lo 1. Try all four serial ports that **J7** creates; the console isn't always the first one. 2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks: BOOTMODE `0x0E43` in the same guide. 3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. -4. Flash TI’s unchanged `.wic.xz` to a card and boot it. If that also produces no output, check the boot switches, serial port, and power supply before investigating your custom boot files. +4. Flash TI's unchanged `.wic.xz` to a card and boot it. If that also produces no output, check the boot switches, serial port, and power supply before investigating your custom boot files. 5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. {{< /tab >}} @@ -279,4 +279,4 @@ If Zephyr prints its boot banner but no application output, check that the [Zeph ## What you've accomplished and what's next -You’ve prepared the boot media and watched U-Boot verify the FIT signed with `key-a` before starting Zephyr. Next, you can run the optional wrong-key and tampered-image tests to confirm that verification failures prevent startup. You’ll then review the trust boundary and the additional work needed for production. +You've prepared the boot media and watched U-Boot verify the FIT signed with `key-a` before starting Zephyr. Next, you can run the optional wrong-key and tampered-image tests to confirm that verification failures prevent startup. You'll then review the trust boundary and the additional work needed for production. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index e2efd3fbb0..c1dfba77ca 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -11,7 +11,7 @@ layout: learningpathall These tests are optional. Create one FIT signed with an untrusted key and another modified after signing. Check both on the host, then confirm that U-Boot refuses to start them on your target. The `b` and `t` commands are already built into U-Boot to select these images. -Open a terminal and load your target’s environment file: +Open a terminal and load your target's environment file: - **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` - **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` @@ -65,7 +65,7 @@ Created: Fri Sep 11 19:14:00 2026 Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-b.itb', node '/configurations/conf-1/signature-1' ``` -Check for `Sign algo: sha256,rsa2048:key-b`. The `Hash value` differs from image A’s because the application banner changed. This FIT has a signature from `key-b`, but U-Boot trusts only `key-a` and must reject it. +Check for `Sign algo: sha256,rsa2048:key-b`. The `Hash value` differs from image A's because the application banner changed. This FIT has a signature from `key-b`, but U-Boot trusts only `key-a` and must reject it. ## Make a tampered copy of the trusted image @@ -193,14 +193,14 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -This example lists the AM62L EVM’s six files: three boot files and three FITs. The QEMU disk image contains only the three FITs. +This example lists the AM62L EVM's six files: three boot files and three FITs. The QEMU disk image contains only the three FITs. {{< tabpane-normal >}} {{< tab header="QEMU" >}} Restart QEMU with the same command used to boot the trusted image. QEMU reads the updated `disk.img` directly; no physical media needs to be written. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Write the updated image to the card. Confirm the card’s device name before replacing `/dev/sdX`; `dd` overwrites the entire selected disk: +Write the updated image to the card. Confirm the card's device name before replacing `/dev/sdX`; `dd` overwrites the entire selected disk: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress @@ -232,7 +232,7 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure: the image’s signature doesn’t satisfy the required `key-a` check. +Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure: the image's signature doesn't satisfy the required `key-a` check. When `bootm start` fails, the `&&` chain skips `go` and prints `*** REFUSED: Zephyr was NOT started ***`. Confirm that no Zephyr banner appears. `Bad Data Hash` and `ERROR -2: can't get kernel image!` can appear for either rejection test; use the preceding messages to identify which check failed. @@ -274,11 +274,11 @@ ERROR -2: can't get kernel image! Check that `sha256,rsa2048:key-a+ OK` reports a valid signature. `sha256 error!` and `Bad hash value for 'hash-1'` indicate that the payload no longer matches its stored hash. Confirm that `*** REFUSED: Zephyr was NOT started ***` appears without a Zephyr banner. {{% notice Note %}} -If `run b` or `run t` starts Zephyr, verification isn’t preventing startup. Check for a `;` where `&&` belongs in `CONFIG_PREBOOT`, and confirm that `signature.dtsi` includes `required = "conf"`. Compare both with the [U-Boot build settings](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and update the boot media. +If `run b` or `run t` starts Zephyr, verification isn't preventing startup. Check for a `;` where `&&` belongs in `CONFIG_PREBOOT`, and confirm that `signature.dtsi` includes `required = "conf"`. Compare both with the [U-Boot build settings](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/), rebuild, and update the boot media. {{% /notice %}} To boot the trusted image again, type `run a`. ## What you've accomplished and what's next -You’ve confirmed that U-Boot rejects the wrong-key image at the signature check and the tampered image at the payload hash check. Neither reaches `go` or starts Zephyr. Next, you’ll review what these tests establish and what a production device still needs. +You've confirmed that U-Boot rejects the wrong-key image at the signature check and the tampered image at the payload hash check. Neither reaches `go` or starts Zephyr. Next, you'll review what these tests establish and what a production device still needs. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 8ab371b16f..6bf1cf54b9 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,6 +1,6 @@ --- title: Review what is verified and what production needs -description: Review the trust boundary of U-Boot’s Zephyr FIT verification and the key provisioning, boot controls, and release signing needed for production. +description: Review the trust boundary of U-Boot's Zephyr FIT verification and the key provisioning, boot controls, and release signing needed for production. weight: 9 ### FIXED, DO NOT MODIFY @@ -9,13 +9,13 @@ layout: learningpathall ## Understand the verification boundary -You’ve configured U-Boot to verify the Zephyr payload, the last link in the boot chain. U-Boot reads `zephyr-a.itb`, verifies `conf-1` with the embedded public key for `key-a`, and checks the payload hash before jumping to `ZEPHYR_ADDR`. +You've configured U-Boot to verify the Zephyr payload, the last link in the boot chain. U-Boot reads `zephyr-a.itb`, verifies `conf-1` with the embedded public key for `key-a`, and checks the payload hash before jumping to `ZEPHYR_ADDR`. If you ran the optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), you also confirmed two rejection cases. The wrong-key FIT fails with `Failed to verify required signature 'key-key-a'`. The modified payload fails with `Bad hash value for 'hash-1'`. Neither starts Zephyr. -The earlier stages aren’t authenticated against your key in either setup. QEMU loads `u-boot.bin` directly, without a boot ROM, security firmware, or eFuses to authenticate it. +The earlier stages aren't authenticated against your key in either setup. QEMU loads `u-boot.bin` directly, without a boot ROM, security firmware, or eFuses to authenticate it. -The AM62L EVM has those earlier stages, but you’ve left it in TI’s High Security, Field Securable (HS-FS) development state. In this state, the ROM and vendor firmware check boot files but accept any signing key. The U-Boot banner identifies it as `SoC: AM62LX SR1.1 HS-FS`. Provisioning your key into the one-time-programmable eFuses moves the device to High Security, Security Enforced (HS-SE). +The AM62L EVM has those earlier stages, but you've left it in TI's High Security, Field Securable (HS-FS) development state. In this state, the ROM and vendor firmware check boot files but accept any signing key. The U-Boot banner identifies it as `SoC: AM62LX SR1.1 HS-FS`. Provisioning your key into the one-time-programmable eFuses moves the device to High Security, Security Enforced (HS-SE). On the EVM, the trusted public key is inside `u-boot.img` on an unprotected FAT partition. Anyone who can replace that file can replace the key and boot command. Production needs an authenticated U-Boot and controls that prevent bypassing its verification step. @@ -23,18 +23,18 @@ On the EVM, the trusted public key is inside `u-boot.img` on an unprotected FAT ### Fuse your key and move to the production state -TI’s one-time-programmable (OTP) Keywriter tool, called Keywriter Lite on the AM62L, burns the public-key hash into the eFuses and moves the chip to HS-SE. You then re-sign `tiboot3.bin`, `tispl.bin`, and `u-boot.img` with that key. +TI's one-time-programmable (OTP) Keywriter tool, called Keywriter Lite on the AM62L, burns the public-key hash into the eFuses and moves the chip to HS-SE. You then re-sign `tiboot3.bin`, `tispl.bin`, and `u-boot.img` with that key. -The ROM and security firmware then require boot files signed with your key, including U-Boot. This authenticates the U-Boot image containing the FIT public key. Key provisioning is vendor-specific and isn’t covered by these steps. +The ROM and security firmware then require boot files signed with your key, including U-Boot. This authenticates the U-Boot image containing the FIT public key. Key provisioning is vendor-specific and isn't covered by these steps. ### Keep the environment built in `bootcmd` selects the autoboot command. `preboot` defines `zboot` and the `a`, `b`, and `t` wrappers before autoboot starts. -Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary you built. Check that your board’s `.config` includes the same setting. +Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary you built. Check that your board's `.config` includes the same setting. {{% notice Warning %}} -Don’t enable `CONFIG_ENV_IS_IN_FAT` for this boot configuration. It stores the environment in `uboot.env` on the boot media. A saved environment can override `bootcmd` and `preboot`, allowing someone with write access to the card to bypass verification. +Don't enable `CONFIG_ENV_IS_IN_FAT` for this boot configuration. It stores the environment in `uboot.env` on the boot media. A saved environment can override `bootcmd` and `preboot`, allowing someone with write access to the card to bypass verification. {{% /notice %}} ### Lock the console @@ -45,11 +45,11 @@ These settings cover only the countdown. If `bootcmd` returns after rejecting an ### Protect production keys and sign during release -The demonstration uses `sha256,rsa2048`; the AM62L’s own boot chain uses `sha512,rsa4096`. To use the latter for your FIT: +The demonstration uses `sha256,rsa2048`; the AM62L's own boot chain uses `sha512,rsa4096`. To use the latter for your FIT: -- Generate keys with `rsa_keygen_bits:4096` -- Set `algo = "sha512,rsa4096"` in both `zephyr-a.its` and `key.its` -- Confirm that `$UBOOT_OUT/.config` includes `CONFIG_SHA512=y`, adding it to the configuration fragment if needed +- Generate keys with `rsa_keygen_bits:4096`. +- Set `algo = "sha512,rsa4096"` in both `zephyr-a.its` and `key.its`. +- Confirm that `$UBOOT_OUT/.config` includes `CONFIG_SHA512=y`, adding it to the configuration fragment if needed. Generate production keys in a hardware security module (HSM), or at least away from the build host. Sign during the release process and restrict private-key access to that process. @@ -61,11 +61,11 @@ Start by updating the target values and paths in your environment file: - `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It is Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. - `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. - `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC; `mmc list` at the U-Boot prompt shows your board's numbering. -- `UBOOT_DEFCONFIG` selects the board’s U-Boot default configuration. Check for `CONFIG_FIT=y`, `CONFIG_FIT_SIGNATURE=y`, and `CONFIG_RSA=y`. Add missing settings to the [U-Boot configuration fragment](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Disable legacy images with `# CONFIG_LEGACY_IMAGE_FORMAT is not set`. +- `UBOOT_DEFCONFIG` selects the board's U-Boot default configuration. Check for `CONFIG_FIT=y`, `CONFIG_FIT_SIGNATURE=y`, and `CONFIG_RSA=y`. Add missing settings to the [U-Boot configuration fragment](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Disable legacy images with `# CONFIG_LEGACY_IMAGE_FORMAT is not set`. - `UBOOT_SRC`, `CROSS` and `UBOOT_CC` point at the U-Boot source and the compiler that builds it, with `SDK`, `PREBUILT` and `SYSROOT` added when they come from a vendor SDK, as on the AM62L. - `BOOT_IMG` is the boot volume `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. -Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and an SPL file. Follow the target’s requirements for media layout, boot switches, and console access. +Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and an SPL file. Follow the target's requirements for media layout, boot switches, and console access. Check how the target obtains its control device tree. `CONFIG_DEVICE_TREE_INCLUDES` adds the key node when the tree is built from source with `CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`, as on the AM62L EVM. @@ -77,4 +77,4 @@ Reuse the FIT signing and verification workflow, adapting the target values in t To sign your own application for the same target, point `data` in `zephyr-a.its` to its `zephyr.bin` and sign the FIT again. To use another Cortex-A board, adapt the environment, build inputs, and boot media using the checklist in this section. -You’ve established verification of the Zephyr payload. Before using this approach in production, authenticate the earlier boot stages, protect the boot environment and console, and move signing into a controlled release process. +You've established verification of the Zephyr payload. Before using this approach in production, authenticate the earlier boot stages, protect the boot environment and console, and move signing into a controlled release process. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 138e337041..f5615391cf 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -19,7 +19,7 @@ learning_objectives: prerequisites: - One of two targets - QEMU, which needs no hardware, or a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with accessories to power it, write an SD card, and attach a serial console - - A Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; QEMU runs on x86_64 or Arm, while the AM62L EVM needs x86_64 for the TI SDK + - A Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; QEMU runs on x86_64 or arm64, while the AM62L EVM needs x86_64 for the TI SDK - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) installed - Basic knowledge of U-Boot and the Linux command line From f1630eb3350b44e5e72a111e143473690ad40ce4 Mon Sep 17 00:00:00 2001 From: Jason Andrews Date: Tue, 6 Oct 2026 12:39:25 -0500 Subject: [PATCH 60/66] Review nested virtualization Learning Path --- .../nested-virtualization/1-preparation.md | 98 ++++--- .../2-create-l1-guest.md | 197 +++++++------ .../3-create-l1-hyper.md | 263 ++++++++++-------- .../4-create-l2-guest.md | 207 ++++++++------ .../nested-virtualization/5-benchmarking.md | 231 ++++++++++----- .../nested-virtualization/_index.md | 35 +-- .../nested-virtualization/nv2_stack.png | Bin 22899 -> 0 bytes .../nested-virtualization/nv2_stack.webp | Bin 0 -> 17566 bytes 8 files changed, 633 insertions(+), 398 deletions(-) delete mode 100644 content/learning-paths/servers-and-cloud-computing/nested-virtualization/nv2_stack.png create mode 100644 content/learning-paths/servers-and-cloud-computing/nested-virtualization/nv2_stack.webp diff --git a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/1-preparation.md b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/1-preparation.md index 9d663aade5..914375b0c8 100644 --- a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/1-preparation.md +++ b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/1-preparation.md @@ -1,52 +1,84 @@ --- -title: Preparing the Host for Nested Virtualization +title: Preparing the host for nested virtualization weight: 2 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Why use Nested Virtualization? +## Why use nested virtualization? -Virtualization allows organizations to mutualize large multi-core servers into smaller environments with a strong level of resource isolation. It is a foundational technology for cloud computing, and Cloud Service Providers typically provide compute resources to their customers using virtualization. +Virtualization allows organizations to partition large multi-core servers into smaller environments with a strong level of resource isolation. It is a foundational technology for cloud computing, and Cloud Service Providers typically provide compute resources to their customers using virtualization. -Nested virtualization enables guest virtual machines to serve as hypervisors, and run guest virtual machines inside a VM or cloud instance. There are a few use-cases where this facility is very useful: +Nested virtualization enables guest virtual machines to serve as hypervisors, and run guest virtual machines inside a VM or cloud instance. There are a few use cases where this facility is useful. -* **Resource isolation:** When running container applications in cloud instances, containers share a common operating system. By running containers inside microVMs like Firecracker VM, the container workloads share nothing with the host operating system -* **Mobile application development and testing:** It is very desirable to build and test Android applications on cloud infrastructure like Kubernetes. Cloud hosted Kubernetes compute nodes are typically virtual machine instances. Running Android environments in Kubernetes in this situation requires nested virtualization. -* **Testing and development of Embedded applications:** Many embedded applications are running specialized real-time or embedded operating systems, rather than Linux. Developing and testing these environments requires virtualization, which means developing on bare metal or VMs with nested virtualization enabled. +### Resource isolation -## Terminology and server set-up +When running container applications in cloud instances, containers share a common operating system. By running containers inside microVMs such as Firecracker VM, the container workloads share nothing with the host operating system. -Throughout this Learning Path, we will refer to the bare metal server as L0, guest VMs running on the bare metal server as L1 VMs, and nested VMs as L2 VMs. We will be starting two VMs on the host, which we will call `fedora-l1-guest` and `fedora-l1-hyper`, and inside `fedora-l1-hyper` we will create another VM called `fedora-l2-guest`. Both "guest" VMs will be 8-core virtual machines, and the `fedora-l1-hyper` VM will be assigned 16 cores. +### Mobile application development and testing -This will allow us to allocate similar amounts of resources, and pin those resources to specific cores, to minimize any potential resource conflicts across the bare metal host and the VMs when we are comparing the performance of a reference benchmark at the end. +Developers often want to build and test Android applications on cloud infrastructure such as Kubernetes. Cloud hosted Kubernetes compute nodes are typically virtual machine instances. Running Android environments in Kubernetes in this situation requires nested virtualization. -Nested virtualization: -![Server layout with Nested Virtualization#center](nv2_stack.png "Figure 1. Nested virtualization") +### Testing and development of embedded applications + +Many embedded applications run specialized real-time or embedded operating systems, rather than Linux. Developing and testing these environments requires virtualization, which means developing on bare metal or VMs with nested virtualization enabled. + +## Terminology and server setup + +The bare metal server is referred to as L0, guest VMs running on the bare metal server as L1 VMs, and nested VMs as L2 VMs. The examples assume an Arm64 bare metal host with 64 cores or more. You start two VMs on the host, called `fedora-l1-guest` and `fedora-l1-hyper`, and inside `fedora-l1-hyper` you create another VM called `fedora-l2-guest`. Both "guest" VMs are 8-core virtual machines, and the `fedora-l1-hyper` VM is assigned 16 cores. + +This lets you allocate similar amounts of resources, and pin those resources to specific cores, to minimize any potential resource conflicts across the bare metal host and the VMs when you compare the performance of a reference benchmark at the end. + +The following diagram shows the nested virtualization layout: +![Layered diagram showing nested virtualization. Hardware at the base runs a hypervisor, which hosts two VMs: one VM runs its own hypervisor with two nested VMs inside it, and a second VM runs applications directly. Each VM shows its apps and kernel.#center](nv2_stack.webp "Nested virtualization layout") ## Installing the virtualization software stack -To run a nested VM on Arm64, you need both a recent Linux kernel (6.13 or later, preferably 7.2 or later) and a recent version of qemu-kvm (version 10.1.0 or later), and all of the other virtualization tooling that we will need to create and run virtual machines using virsh and NV2_stack - -1. Connect to a host running Fedora 44 or later, and install prerequisite packages: - ``` - sudo dnf -y install libvirt libvirt-daemon-qemu libvirt-client qemu-kvm virt-install dnsmasq genisoimage - ``` -2. Enable nested virtualization on the host by passing the kernel argument `kvm-arm.mode=nested` to the Linux kernel at boot time, then reboot the server: - ``` - sudo grubby --args="kvm-arm.mode=nested" --update-kernel=ALL - sudo reboot - ``` -3. Verify after reboot that capability is available: - ``` - sudo dmesg | grep -i "nested\|vhe\|nv" - # Expected: "CPU features: detected: Nested Virtualization Support" - # Expected: "kvm [1]: VHE+NV2 mode initialized successfully" - ``` - -At the end of this step, you should have installed all of the virtualization tools that we will use to prepare and start virtual machines on the bare metal host, and confirmed that your host is now running with nested virtualization enabled. - -Next, we will create and start an L1 guest VM running Fedora 44. +The host is an Arm64 server running Fedora 44, which includes a recent enough kernel and `qemu-kvm` to support nested virtualization. You install the remaining virtualization tools with the `dnf` package manager in the following steps. + +{{% notice Before you start %}} +This must run on a bare metal Arm64 server, whether a cloud bare metal instance or a local physical machine. Nested virtualization needs direct access to the processor's EL2 virtualization support, which is not available inside a standard virtual machine. Running these steps inside an existing VM does not enable nested virtualization. + +Nested virtualization on Arm64 also depends on a recent Linux kernel (6.13 or later, preferably 7.2 or later) and `qemu-kvm` version 10.1.0 or later. Fedora 44 meets these requirements. These version details are included for awareness if you want to adapt the steps to another distribution. +{{% /notice %}} + +### Install the virtualization packages + +Install the prerequisite packages: + +```bash +sudo dnf -y install libvirt libvirt-daemon-qemu libvirt-client qemu-kvm virt-install dnsmasq genisoimage +``` + +### Enable nested virtualization + +Enable nested virtualization on the host by passing the kernel argument `kvm-arm.mode=nested` to the Linux kernel at boot time, then reboot the server: + +```bash +sudo grubby --args="kvm-arm.mode=nested" --update-kernel=ALL +sudo reboot +``` + +### Verify nested virtualization is enabled + +After the reboot, verify that the capability is available: + +```bash +sudo dmesg | grep -iE "Nested Virtualization Support|VHE\+NV2" +``` + +The output is similar to: + +```output +CPU features: detected: Nested Virtualization Support +kvm [1]: VHE+NV2 mode initialized successfully +``` + +The `VHE+NV2 mode initialized successfully` line is the key confirmation that nested virtualization is active. If you only see `VHE mode initialized successfully` without `+NV2`, nested virtualization is not enabled, which usually means the kernel argument was not applied or the hardware does not support FEAT_NV2. + +At the end of this step, you should have installed all of the virtualization tools you use to prepare and start virtual machines on the bare metal host, and confirmed that your host is now running with nested virtualization enabled. + +Next, you create and start an L1 guest VM running Fedora 44. diff --git a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/2-create-l1-guest.md b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/2-create-l1-guest.md index c3da7537b8..412547ac1b 100644 --- a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/2-create-l1-guest.md +++ b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/2-create-l1-guest.md @@ -1,91 +1,128 @@ --- -title: Preparing and Starting an L1 Guest Virtual Machine +title: Preparing and starting an L1 guest virtual machine weight: 3 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Preparing and Starting an L1 Guest VM - -Before we create a nested VM, we will create an L1 Guest VM which will be running on our host, so that we have an unnested VM to compare the performance overhead of virtualization with the additional overnead of nested virtualization, and to compare the additional work required to create an L1 hypervisor VM at the next step. - -To create a VM, we will first download a cloud image, make some configuration changes to the base image using cloud-config, and install and start the VM using `virt-install`. Once we have started the VM, we will connect to it to confirm that it has started correctly. - -1. Download an Arm64 cloud image to use for the VMs. To be consistent with the host, we use Fedora 44, but any recent Linux distribution will do: - ``` - curl -LO https://dl.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/aarch64/images/Fedora-Cloud-Base-Generic-42-1.1.aarch64.qcow2 - ``` - -2. We will make copies of our base disk image and resize it to give the VM more disk space. For convenience, we also set some environment variables: - ``` - export VMDIR="/var/lib/libvirt/images” - export IMG="${HOME}/Fedora-Cloud-Base-Generic-42-1.1.aarch64.qcow2" - export DISK_L1_GUEST="${VMDIR}/fedora-l1-guest.qcow2" - - # Prepare the L1 guest image - sudo cp "$IMG" "$DISK_L1_GUEST" - sudo qemu-img resize "$DISK_L1_GUEST" 40G - ``` - -3. Create a seed ISO image for `cloud-init`. `cloud-init` will run automatically the first time that we instantiate the virtual machine, and can perform some initialization actions for us. `cloud-init` looks for special files called `meta-data` and `user-data` for configuration information. In this case, we want to create a default unprivileged user (fedora), ensure that the user has permission to run commands as root using `sudo` without a password, and that our public SSH key is included in the `authorized_keys` of that user so that we can SSH into the virtual machine from the host. If you do not have a public/private key-pair, this is a good time to generate the pair, and use the public key file here. - - After creating these files, we will generate a special CD disk image (format ISO) which will be attached to the VM when we instantiate it. Once we have the ISO image, we copy it to the same directory as the qcow2 VM image we created in the previous step. - - ``` - cat > /tmp/user-data < - chpasswd: - expire: False - ssh_pwauth: False - EOF - - cat > /tmp/meta-data <` with the contents of `~/.ssh/guest_key.pub`. You use the matching private key, `~/.ssh/guest_key`, to connect to the VM later. + +After creating these files, you generate a special CD disk image (format ISO) that is attached to the VM when you instantiate it. After you have the ISO image, copy it to the same directory as the qcow2 VM image you created in the previous step. + +```bash + cat > /tmp/user-data < + chpasswd: + expire: False + ssh_pwauth: False + EOF + + cat > /tmp/meta-data < /tmp/user-data < - chpasswd: - expire: False - ssh_pwauth: False - EOF - - cat > /tmp/meta-data < block that enables virtualization functionality in the guest. - - ``` - sudo virsh edit fedora-l1-hyper - - # In the XML file defining the virtual machine, change the opening tag to: - - - # At the end of the file, just before the tag, add the following: - - - - - - # Save the XML file, and verify that it passes validation against the libvirt schema - ``` - -6. At this point, we should be able to boot our L1 hypervisor VM and verify that virtualization is supported: - - ``` - sudo virsh start fedora-l1-hyper - # After a few seconds... - sudo virsh net-dhcp-leases default - ssh –i /path/to/private_key fedora@{ip address} - - #Inside the fedora-l1-hyper VM, verify that virtualization functionality has been passed through - sudo dmesg | grep -i "el2\|vhe\|kvm" - # Expected: "CPU: All CPU(s) started at EL2" - # Expected: "kvm [1]: VHE mode initialized successfully" - ls -la /dev/kvm - # /dev/kvm should exist inside the VM - ``` - -If you see the line “CPU: All CPU(s) started at EL2”, congratulations! You now have a virtual machine that can function as a hypervisor. We will now install virtualization tooling and instantiate our first L2 guest VM. - +## Create a hypervisor virtual machine on the host + +At this point, you have used command line tools to create, boot, and connect to a guest virtual machine running on your Arm64 host. By the end of this step, you have another virtual machine running on the host that can serve as a hypervisor for nested virtual machines. To complete this step, you connect to it over SSH and verify that it is capable of running a virtual machine. + +This process is essentially the same as the previous step up to the point where you get a VM running. + +## Set environment variables + +Set similar convenience environment variables to the previous step. The L1 hypervisor needs a bigger disk than the L1 guest, because it contains an identical 40GB L2 guest image inside it: + +```bash +# If these environment variables are already set, there is no need to re-set them +export VMDIR="/var/lib/libvirt/images" +export IMG="${HOME}/Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2" + +# Use a different QCOW2 filename for the hypervisor VM +export DISK_L1_HYPER="${VMDIR}/fedora-l1-hyper.qcow2" + +# Prepare the L1 hypervisor image +sudo cp "$IMG" "$DISK_L1_HYPER" +sudo qemu-img resize "$DISK_L1_HYPER" 80G +``` + +## Create a cloud-init seed ISO + +Create a seed ISO image for the guest hypervisor for cloud-init. Use the same SSH key pair that you generated or used in the previous step - the main change here is the hostname of the guest. + +```bash + cat > /tmp/user-data < + chpasswd: + expire: False + ssh_pwauth: False + EOF + + cat > /tmp/meta-data <` block that enables virtualization functionality in the guest. + +Open the VM configuration in an editor: + +```bash +sudo virsh edit fedora-l1-hyper +``` + +Change the opening `` tag to import the qemu namespace schema: + +```xml + +``` + +Then, just before the closing `` tag, add the following block: + +```xml + + + + +``` + +Save the file. `virsh` validates the XML against the libvirt schema when you save. + +## Boot the hypervisor VM and verify virtualization support + +Boot the L1 hypervisor VM and verify that virtualization is supported: + +```bash + sudo virsh start fedora-l1-hyper + # After a few seconds... + sudo virsh net-dhcp-leases default + ssh -i ~/.ssh/guest_key fedora@{ip address} +``` + +Inside the `fedora-l1-hyper` VM, verify that virtualization functionality has been passed through: + +```bash +sudo dmesg | grep -i "el2\|vhe\|kvm" +``` + +The output is similar to: + +```output +CPU: All CPU(s) started at EL2 +kvm [1]: VHE mode initialized successfully +``` + +Confirm that `/dev/kvm` exists inside the VM: + +```bash +ls -la /dev/kvm +``` + +If you see the line `CPU: All CPU(s) started at EL2`, you now have a virtual machine that can function as a hypervisor. Next, you install virtualization tooling and instantiate your first L2 guest VM. diff --git a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/4-create-l2-guest.md b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/4-create-l2-guest.md index a1c9928c00..697acab39e 100644 --- a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/4-create-l2-guest.md +++ b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/4-create-l2-guest.md @@ -1,6 +1,6 @@ --- -title: Booting a nested L2 guest VM in the Hypervisor VM -weight: 6 +title: Booting a nested L2 guest VM in the hypervisor VM +weight: 5 ### FIXED, DO NOT MODIFY layout: learningpathall @@ -8,94 +8,119 @@ layout: learningpathall ## Prepare and boot a nested L2 guest VM inside the hypervisor VM -This process will essentially be identical to the process we followed to create the L1 guest VM on the host. We install all the virtualziation tools we will need in our Hypervisor VM, copy the base image from the host to the fedora-l1-hyper VM, resize its disk, create a new seed ISO, and re-run virt-install for fedora-l2-guest. - -1. Copy the Fedora cloud image and private SSH key from the host into the hypervisor using scp. - - ``` - # In the host: - scp –i /path/to/private/key $IMG /path/to/private/key fedora@{fedora-l1-hyper IP address}:~/ - ``` - -2. Log in to the `fedora-l1-hyper` VM, and install the same virtualization software stack as we installed on the host: - ``` - sudo dnf -y install libvirt libvirt-daemon-qemu libvirt-client qemu-kvm virt-install dnsmasq genisoimage - ``` - -3. After the installation has completed, restart the hypervisor VM from the host to start virtualization services. You will need to wait a minute to be able to connect again with SSH: - ``` - # In the host: - sudo virsh reboot fedora-l1-hyper - # After boot is complete - ssh -i /path/to/private/key fedora@{fedora-l1-hyper IP address} - ``` - -4. After the VM restarts, connect to it again and create the L2 guest VM image: - ``` - export VMDIR="/var/lib/libvirt/images" - export IMG="/home/fedora/Fedora-Cloud-Base-Generic-44-1.7.aarch64.qcow2" - export DISK_L2_GUEST="/var/lib/libvirt/images/fedora-l2-guest.qcow2" - - # Prepare the L2 guest image - sudo cp "$IMG" "$DISK_L2_GUEST" - sudo qemu-img resize "$DISK_L2_GUEST" 40G - ``` - -5. Create a seed ISO image for `cloud-config` similar to the other VMs. - - ``` - cat > /tmp/user-data < - chpasswd: - expire: False - ssh_pwauth: False - EOF - - cat > /tmp/meta-data <` below: + +```bash + cat > /tmp/user-data < + chpasswd: + expire: False + ssh_pwauth: False + EOF + + cat > /tmp/meta-data <` with the domain name for each of the VMs (`fedora-l1-guest`, etc): - ``` - sudo virsh vcpuinfo - sudo virsh emulatorpin - ``` -4. Install the sysbench benchmarking tool in all sustems under test (the host, the L1 guest, and the L2 guest): - ``` - sudo dnf install -y sysbench - ``` -5. On each of the systems under test, run the same benchmark test. You can run these in 3 different terminals, at the same time, and since they are using different cores, they should not significantly interfere with each other: - ``` - # On the host: - taskset -c 8-15 sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run - - # On the L1 and L2 guests - sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run - ``` - -In our tests, the results were as follows: +## Test nested virtualization overhead + +To measure the overhead of nested virtualization, you install and run a reference benchmark across the three layers: L0 (bare metal), the L1 guest VM, and the L2 guest VM. To make the test comparable, and to minimize interaction with other workloads running on the server, you pin each system under test to a fixed set of host cores. + +The following table shows how each system is pinned: + +| System under test | vCPUs | Pinned to | +|-------------------|-------|-----------| +| Host (L0) benchmark | | Host cores 8-15 | +| L1 guest | 0-7 | Host cores 16-23 | +| L1 hypervisor | 0-15 | Host cores 24-39 | +| L2 guest | 0-7 | Hypervisor cores 8-15 (host cores 32-39) | + +After the core pinning is in place and sysbench is installed on all systems under test, you run the test, verify that the correct cores run at 100% CPU for the duration of the test, and check the results to see how much virtualization passthrough affects performance. You can apply this core pinning while the VMs are running by using the `--live` flag for virsh. + +## Pin cores for the L1 guest and L1 hypervisor + +Pin the cores for the L1 guest and L1 hypervisor: + +```bash + # Pin L1 guest to cores 16-23 + for i in $(seq 0 7); do + sudo virsh vcpupin fedora-l1-guest $i $((i+16)) --config --live + done + sudo virsh emulatorpin fedora-l1-guest 16-23 --config --live + + # Pin L1 hypervisor to cores 24-39 + for i in $(seq 0 15); do + sudo virsh vcpupin fedora-l1-hyper $i $((i+24)) --config --live + done + sudo virsh emulatorpin fedora-l1-hyper 24-39 --config --live +``` + +## Pin cores for the L2 guest + +Log in to `fedora-l1-hyper` and pin the cores of `fedora-l2-guest` to cores 8-15: + +```bash + # On host: + ssh -i ~/.ssh/guest_key fedora@${fedora-l1-hyper IP address} + + # Inside L1 hypervisor: pin L2 guest to vCPUs 8-15 + for i in $(seq 0 7); do + sudo virsh vcpupin fedora-l2-guest $i $((i+8)) --config --live + done + sudo virsh emulatorpin fedora-l2-guest 8-15 --config --live +``` + +## Verify the core pinning + +Verify that the pinning is correct, replacing `` with the domain name for each of the VMs, such as `fedora-l1-guest`: + +```bash +sudo virsh vcpuinfo +sudo virsh emulatorpin +``` + +## Install sysbench + +Install the sysbench benchmarking tool on all systems under test (the host, the L1 guest, and the L2 guest): + +```bash +sudo dnf install -y sysbench +``` + +## Run the benchmark + +Run the same benchmark test on each system under test. You can run these in three different terminals at the same time, and because they use different cores, they should not significantly interfere with each other. + +On the bare metal host, use `taskset` to bind the benchmark to physical cores 8-15: + +```bash +taskset -c 8-15 sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run +``` + +On the L1 guest and the L2 guest, run the benchmark without `taskset`, because you already pinned their virtual CPUs with virsh in the previous steps: + +```bash +sysbench cpu --cpu-max-prime=20000 --threads=8 --time=60 run +``` + +The following is an example of the output from a single run: + +```output +sysbench 1.0.20 (using system LuaJIT 2.1.1761727121) + +Running the test with following options: +Number of threads: 8 +Initializing random number generator from current time + + +Prime numbers limit: 20000 + +Initializing worker threads... + +Threads started! + +CPU speed: + events per second: 9693.21 + +General statistics: + total time: 60.0007s + total number of events: 581607 + +Latency (ms): + min: 0.82 + avg: 0.83 + max: 0.98 + 95th percentile: 0.83 + sum: 479906.25 + +Threads fairness: + events (avg/stddev): 72700.8750/20.69 + execution time (avg/stddev): 59.9883/0.00 +``` + +### How to read the output + +The fields that matter most for comparing the three layers are: + +- `events per second` under `CPU speed` is the throughput. Higher is better. This is the primary number to compare across bare metal, L1, and L2. +- The `Latency (ms)` block reports per-request latency. `min`, `avg`, and `95th percentile` describe typical responsiveness, while `max` captures the worst-case spike. Lower is better. +- `events (avg/stddev)` under `Threads fairness` shows how evenly work was spread across threads. The second number is the standard deviation; a smaller value means more even distribution. + +### Record your results + +Run the benchmark on each layer and record the values from your own output. Fill in a table like this one with your results: + +| Metric | Bare metal (L0) | L1 guest | L2 nested guest | +| ------ | --------------- | -------- | --------------- | +| Events/sec | | | | +| Overhead vs bare metal | | | | +| Min latency (ms) | | | | +| Avg latency (ms) | | | | +| Max latency (ms) | | | | +| 95th percentile (ms) | | | | +| Thread stddev | | | | + +To calculate the overhead for a layer, compare its events/sec against the bare metal result: + +```text +overhead = (bare_metal_events_per_second - layer_events_per_second) / bare_metal_events_per_second * 100 +``` + +For example, if bare metal reports 9693 events/sec and the L2 nested guest reports 9219 events/sec, the overhead is `(9693 - 9219) / 9693 * 100`, or less than 5%. + +Compare the events/sec and latency values across the three layers to see how virtualization and nested virtualization affect your workload. The average and 95th percentile latencies are often close across all three layers, while the maximum latency tends to increase with each level of nesting. + +{{% notice Note %}} +Results vary with the Arm server, CPU generation, kernel, and workload, so draw your conclusions from your own measurements rather than from any single reference figure. Nested virtualization support continues to improve, so newer Arm Neoverse generations typically show lower overhead than older ones. Focus on the relative difference between bare metal, L1, and L2 on your own hardware. +{{% /notice %}} + +Here is an example of a completed table: | Metric | Bare Metal | L1 KVM Guest | L2 Nested Guest | | ------ | ---------- | ------------ | --------------- | | Events/sec | 2533.02 | 2525.84 | 2306.22 | -| Overhead vs bare metal | — | -0.3% | -8.9% | +| Overhead vs bare metal | N/A | -0.3% | -8.9% | | Min latency | 3.14ms | 3.15ms | 3.38ms | | Avg latency | 3.16ms | 3.17ms | 3.47ms | | Max latency | 9.16ms | 13.02ms | 19.72ms | -| 95th percentile | 3.13ms | 3.19ms | 3.55ms | -| Thread stddev | 52.18 | 41.46 | 73.47 | +| 95th percentile | 3.13ms | 3.19ms | 3.55ms | +| Thread stddev | 52.18 | 41.46 | 73.47 | + +## What you've accomplished + +You have configured and run nested virtualization on an Arm server from end to end. Along the way, you: + +- Enabled nested virtualization on an Arm64 bare metal host and confirmed FEAT_NV2 support. +- Created and started an L1 guest VM with `virt-install` and `cloud-init`. +- Configured a second VM to act as a hypervisor by enabling virtualization passthrough. +- Booted a nested L2 guest VM inside the hypervisor. +- Pinned CPU cores across all three layers and benchmarked them with sysbench. -We see some performance drop-off for the nested VM in events/sec (about 10% between bare metal and nested virtual machine), and there is a significant difference in max latency across the three levels, but the average and P95 latencies are very consistent across all three systems under test. +You can now use these techniques to run virtual machines inside virtual machines on Arm, whether for workload isolation, hypervisor development and testing, or running microVMs in cloud environments. -What this shows is that while latency-sensitive workloads may not be a good match for nested VMs in performance critical situations, the performance of applications is good enough for the test & development environments where nested virt is the best fit. diff --git a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/_index.md b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/_index.md index 0a5a2746d8..25774db3f1 100644 --- a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/_index.md @@ -1,26 +1,26 @@ --- -title: Nested Virtualization on an Arm64 Server +title: Configure and run nested virtualization on an Arm server draft: true cascade: draft: true -description: Configure an Arm server to allow guest virtual machines to act as hypervisors, enabling users to run virtual machines inside a virtual machine. +description: Set up nested virtualization on an Arm server so guest virtual machines can act as hypervisors and run other virtual machines inside them. -minutes_to_complete: 20 +minutes_to_complete: 60 -who_is_this_for: This is an advanced topic for System Administrators who are interested in enabling users to run VMs inside virtual machines. +who_is_this_for: This is an advanced topic for system administrators who want to enable nested virtualization, so users can run virtual machines inside other virtual machines. learning_objectives: - - Starting a Virtual Machine on Linux using virsh - - Configuring a host and guest VM to allow the guest VM to function as a hypervisor - - Using a standard benchmark suite, measure the performance impact of running software inside a nested virtual machine against a regular guest VM and on bare metal + - Enable nested virtualization on an Arm server and verify the host supports it + - Create and start Arm64 guest virtual machines using virt-install, cloud-init, and virsh + - Configure a guest VM to act as a hypervisor and run a nested VM inside it + - Measure the performance overhead of a nested VM against a standard guest VM and bare metal using sysbench prerequisites: - - An Arm64 server supporting FEAT_NV2 (available in Arm v8.4-A and later) - - Fedora 44 (or any distribution with a version 7.2 or later Linux kernel) + - An Arm64 bare metal server with 64 cores or more, supporting FEAT_NV2 (available in Arm v8.4-A and later), with Fedora 44 installed -author: David Neary +author: Dave Neary # New Learning Paths are opted in for the next manual generated summary/FAQ run. # The generator resets this to false after a successful write. @@ -40,22 +40,23 @@ armips: tools_software_languages: - KVM - libvirt - - virsh / virt-manager + - virsh + - virt-install operatingsystems: - Linux further_reading: - resource: - title: PLACEHOLDER MANUAL - link: PLACEHOLDER MANUAL LINK + title: Nested virtualization in the Arm AArch64 virtualization guide + link: https://support.arm.com/documentation/102142/0100/Nested-virtualization?lang=en type: documentation - resource: - title: PLACEHOLDER BLOG - link: PLACEHOLDER BLOG LINK + title: 'Unlocking Layers: Powering Nested Virtualization with Ampere CPUs' + link: https://amperecomputing.com/blogs/unlocking-layers type: blog - resource: - title: PLACEHOLDER GENERAL WEBSITE - link: PLACEHOLDER GENERAL WEBSITE LINK + title: 'Fedora Discussion: nested virtualization on Arm64' + link: https://discussion.fedoraproject.org/t/nested-virtualization/179358 type: website ### FIXED, DO NOT MODIFY diff --git a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/nv2_stack.png b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/nv2_stack.png deleted file mode 100644 index f1be7a3af00899f9f7d5c4cad45957f18f235d1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22899 zcmZsCWmFtZ*DVAMFc3V@NCLqL&fpN-0)#+tcf#NVeX!s%xVyUy?(Xg|z~DiG6D&Z0 zkN3y@ch~A(tF5a0>^gO-&aT~IUzBA*SmanpNJt=gIjOHmNUs1SB;+Mbl$R?sLRM=p zC!$|It4lvWKO5G_ot>TC-QC^X++1B+lE zzEDJceZ9}mz%Xc3Ku9>7-$HXsOL=*@d#8#Py<5FL z9o}X0Ww$3igSEQ4l{)QjrLEaCeE(6lMMg&UaI-$s`*Ug_$<-fPm>r-K z*~7!b<5=L7SJ9-Ppb*A<7XJe1YX>=PXCx$S!vF2aNNE{wk&xaY$xDf=yJwtaVjHdu zFAde{VS#LzFclX*%GK7C*AVmS+-%z|z_E0v^}DfrkykBkmTsTXv!+sYEhPK`)5Gul zN6eHhoVYG0ltq5RbB{{>D7-(AbJsg4jBK^wQF`)J;9`?s zmTso(_Bnm;+?vj>6||!j!BO&I@4EzHWun+APmD^DtnSyG|%mJ{VjqIClE=g?8j>uqaK4U%f=c zt@kt45p~|d!D*jt`&}R{GtifAE8`lcu-n!Zm*I44{=IzlF%!*tFkx=SI!;eWM#q@XBpaX>giCv+A(3$=DK=f7pX3GC#jay zji!b>pe9*HdUE(5IxZ3TJZn}%azf!I8~o?MwH~ruSp{2GO@l`~tbH__v9qsx!`FHQ z#~p!g?RuRg;KtD$aiR(6$vxMt^)=wtW9)G`95C@p-Y1+H*X|cAFnk}<7w9)Q?UV@q z?{-Puq1?;s@+-R6MRL038$Ow`Y=*u=t0eqiNF+4D*j@^W`>{|5Rg&nOc_XNe8v_yh z*V65k2@=!@&1$>t7|Iq8S4>A!Ppl{l&4tZ>J@_D^ues`2kA=+w)$%K9r^kchZiKW1 zDBvh?8}--Hgm$00y1B97kbBBC?67h{V(OP-(}Z}pZ3<^-%4D2x4|co(ay zpP3WAJ<9oETjK9!X$F&pLl}rf%-)thFz()fQ<+aUe&GYM0}bg;%;xL=n4|k;d~xZe zd`j`s+mgN%L9!k3((*IdOB6kdi6GgavNhwqXGX4LO z|LppLWx*H}c=?sEF$A$ZaXRME*@kyhd8#Vc(gEGIv&a79>Smg7{}9ey6!WmX^52EH zt7K-IN=?rv9nhNM%L9rJeCBemfJ0-qy8r4(wwIe#xb|Y9Da=$5+*U%bJ=nvay~P|z z;CT9K127j0b!-xosw(5-x*S1QO-Y|6t0r5Wuxn}~F@cz6|7e@y%0)8n^LpIk@S(*n zFrrHdWY~Jjs70O#S_Pf(+@qmeD=cQX8BK{Ct*0=0m3tB4jsR8!W?ki3Bq$^zoFYqE=g?_18|D=)0FHk2mfb< zRQl+5f#E*T{rL$IPQr&&vyZK1pCiU3%iJ2Lm;ea%%!M?7OARS#kXQTMtvuUoV_|-V zKPJ^4=yBWfC#r2}NOTIa*{x_%-=ig_GNAlQXwRzEH3EHA+@6!5@qVN9FUJF-*4T!z ztQ$h-wb;%KWAPD?P*dtcxftKAPT@W3%nN@mKsmZ5urH$ z6jCMs=UW*7b?yb!xS#&C!=riIGH%UwsL1!JC~h}SDRnNkU}uje~#>^blo1*(?yH9 z;v+HP+HZ~V-rc;80zrLuD5$WF_Wtivh)R!nU(N5Ni*i- z=e$;S72jYA95kE@VTk~=8@y9%v&ilo@{Fc;_O>M)?DjURHdqC{>D3Ad_OpP+fVZsU znXaEEH@kb@pcn65W%P>n?0Cti{uJ)D_YCh64oG!UTWsY!=iYZH^@?{iT>sjA;D+)O zar8A}U>cLkPB^0AYiVz}q0?0B>hRL)={+NEFqcL==Y$Z@ybIO(jykfNF2P)Aw_c)i zyC>4^#1#nj!6FJlWPFXFef-S*2f~o3kU9mft8VS;o!SN4+ks{8cl8I|)gdvG1a@GO zy1z@-y?C7t=#Oh@@gg2=WD13bk5sd*T^qrYrHGSqpik1n0*~l*<-d=PV`7*P=_#sS zJOdw(#MeRVVrsS3c800BG52F9bw4JvoQ{l`=LnbgZk)qUN?1Qw+rWJr``EAH5jIm_ z-|r6MSo5Vf#eT{8FTRWOKG}_+5hENogs%E?D}QsasE)4&R-s`fT5Yw@^R*PNw9n%% z@l^0b85eHsNe!&$`9nbANK;Ma8D#Ys`I5e}YNKT9FZ6EAhrgrCe*JCZpM$aG3<>3% zPq}Ak7_QTy#28D{ZD<95$4+2(PAnPTKbjwzN!RawTrRXW7^GyweZ+dc;SmPNG!6}; zKT?T37kY1v-Cx}z|4Y7)Z#w#|`H%~9&EK_GKWRjTgzhdU-z~e{Qyw2WfUywO=m-e% z>inbT;MN!gOx3gD+rP&TuOJ-5l8xI}atD>`jKVr#r>$6ZVUHq2Lhs9G#+CfHO z;W1)>*7|aHubh_*KK!rK@Tq~KX*-xfgbEC?bmJAF0h~(PTnRrxh;Z$Ey?vkI(+2CE z;~{+`nju@)$xU6wLq?L`dXVnZGKa!s!cLD7-%KpUQ&W|77rf1SpM2EuQzfo1ot(mn z`|wXnDl3M>kCG7g>oLjm%= zN2=YYp<}faU8=u+oz!ty^gSeFIwHE2lry*g^+DXPVtzr^GKRTKXko6pSVM;I!M(?H zcz5LQYU-MEbA3@K4R zu(1z>w#BEhaYdJ?Nz4uxoh|m6yw6|Z-GJm&8?K80$m8fwp7cM$WBn(YZiApm9uvHP z3x+mg^O??0@%6^{-Gt%*k_0;uh?}^xzzJ2VXOF+M*m?Z?j&y^ZwSLiM=aBO0W>iPgoP!D{+-yi3E!>>^T^Ed4!gUT_~`-4w{3AxAzF8#TN z_XYF(B4}>@`e6g1pfNKQWB`}Sf@?6Q(ira!lc!=>fTdUTqj>LoJF~qMkW+yL2k?(U zraneMto%t>YJof8dH$?wSm167)vX+cr;x_7lX2v3cpgT2-Rk+GJ3Z)wx5nRNrgd@nAGmlpv$+ zZkfT8MUA%{@a0$vAM!y8G*fY%6?aTee|v3KBR6dF^rTr$mR?5;b~EEr5b?Kgnnx%?sUZ zSa5Z9wY9YcBp)Keb085L*_q*=UMVxzi%(~odZoWa6CTHwoXwVjD%5PLQ3?ccHnQ4>kRcEpvTAd+COOD`Ajew;ubcJua&Ox|xx(ykq~u{AZuM9$f3LZQoyTwuKe%WTjJ zZ)3A+q%?vrpBs=2XOuQ&1!K_wEb$hmyVzL4NmRB7Mhkz?ybuSca7~S_lBc<8QyCFX zJ>4J8@fEhm`wTTLG8M>i-n&gsJ2U)_V|GeH>nvaJCQsxthn1jdw?I%0@}<6TA0b=( zhZ9K5!UKu+vOY3+cyXq{51y0Gz%+>q$@wr*4?k$*{k}2)c^e3_331J&>`$5s1=*x0 zfc6j+b;w>yUfoDw_uS^1w%WFcA{Lgm<}g)~F>@xPzE2RGk3To~?aa;_r*Z0fIAf7f zc1Y`bu;DO@8rw?CK0_1fK1TX3EswSi+-(Y-x7+B|Z(+vL1XpRA;6T&vFwmQNvb5|O zqA@xpoHBas6i}yJBD+McvBW-6XSp^4Cg|si907pA{L!wOWmY>9B*_+#D-!K3ieC`| zwLO_`_%P>DbnLa517q5VWh1MCN!JHOqX6QT)88MnC?>){@9kjIClq`{{?Nl~w5gx^ z%8(5GY!K@#gB`3ca_c%H@5s{y&aJ{wX2er=M70G%H~Ek!c`(Qt3L%mLmo42(cY*b4 z;D3MB%29(4?$EFwh6Y~8LhIk~X-s~QB`OU`fG+8s4*1b{!(n6CKr2LRN*0XQ#3D((-up~CABTiL5H`J zTQCMeOyEB?Q}Fb9A3lApYDcqHOY^6Yv?@bQ&B?2r{%o_C+b=a{e9M(fBo0$pvc!eN zD4Bq{8pWunqM&)1(8Rik!)56oZnv!DiC-;Q7Hs5~jI}Xe(Eyfuu{Ml(iYEA3(7ZQ% zjCH5W)436+sGzscbQC}EWI19^%=4{?BI=8!z#3(_hj!Pkt!++@sv>QjRayF)<)rTy z=c-==u`0a_=&jo&f23LY4Nw5-c5xo24|mO5IWBDS!u`^y;4)In1H7vDM%eM7#9%&oPbkf4~G8q=;Qc1iq$S6N_im8Ao$JrJC!-Qc_k?d9oi8v%? zBKO9v4;_UJ>pggS(ctVf3$1#J%`d1ff*6j2i|L>&39Ncg)c8BQPW>b;7$#$Ll8K1n z?fihf`98vq(<}X@4OEcH5$@O@puraYJmkO3!*A5zl|fh-a>})j&Bph4opc;Qv2E0zpjD?wfqAEE&pvD;T zEAUk)XmQ5O$Fb<>{(9N&TChx3)ogPIeFz;FsLnkIq6(t1Txul}*$Hnprak!y5-A&9 z{3~*hM5Gvpda67|@!5RczQ-LLV@dU)53un_T;W@6G?IHOm=)uEXW;d2^R$8hC#LQ7 z0oQaGh=R}RAV*>eV072LYpXWws;TRFO`T&ByYxjWf|vr{P5oLcyzOm$jsK2JbjX1x zN+VWsZuLW552=7;&8sTD3h$MZKJ>>Jm3F5A8UBEfq6?b4qIBA(YP+_Ud8H=o{5ikc zwNu*}XYW#V{v9@lt1zIT&L~M)h9b?8lsad6h6YKY^~=FnuxTt`3iOpHaReHh9p*)V zISrT<51SJ@0D2iZdcKJwy#vPuN#s%kZSEE3!n_i2xk4I0)PsVy(jq&% z)+TpOoDtP+8Rq=fdx{9S(d{REV42@0(8LgIpgE$wvKYDW1i51Q^STCE6~!LE#yC^@ z;3Fq?VtpK;u#1IhvYqV`FYryzY)J#PPPHFk`3jb6&$;#2t1(8EU=nsx!Nfg%b4%}w zd&41G8aOTN;_SToEkyLZLatzw5d!Ov z@^7JKD!oQt#k7ge|5D(qANJAJ9t8b z4}yxtOkRf(d@Sw^PQfD~8wr75;8Zl}(@`YZw{pB&oKS*P>c;iuI=OXVLYf)vo66Ay z4wFEQ>FCBN_u*HXf=R62+v)91oQ~0(|E5TQfN1h_qY0XL}`l zk-(_E#vaN?T(&P@j*h7EcKqAl6Qn}GNWB~j(oq~}Me^Udal!L>+Y*)FaaDP)`z;-g zw5v1WTx%DwHC<;1p6dvTHIwKYT|N1}f(^XIPRMaYp!UV;r3&1 zu~@z$kpg-cP;qh>&3tT-Y*G`r>~J2lfgAF>nEg$mNlT}+=hZ!-D5wTR0G8vY6`v3R z))QYc&JeuTT_g+I|GeTsq^;}`fuN~BgTch_{Gs(Z73ddBnWEBhZ}?2Yf45>%B=+8L z00koh0fg*@!~+^gH0g@oi?v_q$?lFjgTTz0@o%pNRFH)};5GZ`7)e=;~QU?*K?QtoexXJS-+<;d8RIf$x1@KYH!fMF!VT z*H*ydc8SKEcFkME56^^0IY#ju|B zhJ(~`Y;ND($qCXucR6EaxCj^F?}1V-+Dy6HXa7*Tx_V4chw%TaNIyFzH8%=KqR?8m zpr*Bh!~I-cFowG5(3*tL&7O|RwiLrZLL$3m1j`eie(Y>9#9upWFtx0dsuG0`p>{2IA7nX(H)wAw-_bq2eld8#?Qe`zayXbYGv`+{xycxk{URg0L375HLsO z8>roFGL11U%UEjqsnX}ceIku49KnM;pIb=i^ZStJ%EGxC7aaNn_M|BDc%1^XB#hBW zs}f@CRffdB(=>Ee?u}&i3tEEZ&Bg(qp^8JbE$$-}?E-Z~nsJ=%pd7yRIU30bsrrHj zwPpxwCXfu8QrL)5!?KWk>hQ7}excFH{YPm54f_J;*pwWe&$aT>GwAZFIq4qe@hv^( zM0ClhJpCp$6%zIzi7Twd&GMJ}AYeYYILIEl@x?VXAgwN-Mvvf$eeAiemBSoNUmi&c zp6<#XdCu{IzpKoKnqw#ihShiO(?o)PqS6L@$b_G_HsFUBoIv1f&OIe z04APkT>CHJxow>n5a^t6a0+zBI%2nJ7hfNYrCsszTsQTwhirEA&k4PxNXt2f`#BrO zu=Ysn6%nI+#@2nX9S+(1@fkK1_~}Qx81|~^X5{^4R?j-AB#Wp&xwG7?|sC0x8IBDHZjDqXQS>I6M3 z_!VQ*V(i-a^j7cQe2WlYv{(zH$lU-L{FY1)G`ULX91M?_q?7_l!rvS?knz2`6{m%X zKUIcpquXFQ@temhnEx5wY8=v!Y$LCU-DBtVtP-qEqjx2-_)x60F8)!L(u}oN*04YL zAiucz!f)Au|EXcpe(sC3u`EOSOC~Ko`dz0wq-9iH`1qYq5J%hubK{w_uqgPPQ-a)w z{3L3XYMXx@H*K)J20xvxt?Thd7h@-4%79;h6AVAVbJ1h6w9F?$kLq==Q4mE63iv-?)xy|qk{~drLF6ciE|OtA)>qq0%B(8 zHb1$45U~+fwucl{R<{ovJEAoFTW#u6I{G#e=J4wa;**TuX7o97(mDVLnR~VO#V26tqGBO57x=U0K+wTRmDCb5>%d^Hd`R3`4#UzC(}>zzEuAOCsTjJ42QeZ@H0C;F9& z0X`?|>6=z3p{Q`{$TbFpMr{yAvP>Cj6~QVN@e1+~kFpI4XT4QzO_yzfl@Wfd%_Gn; zo+#VL=h;Beo-tSIxHU1hUKM<)>1W)8hqcc zNlrEME?*a)O$3JQ&k3bJk76qPK)~b0l|F90w_18wme2=$NT0Bl|D}Z7E|K;62^nzo zc{F32O|1%{R66H){lD%tF(|i>is;xca4*7?%<>?j>R2*Gz`S=p7D)vL4_iMgHSJa_ zgxdymqZ8WsY(*Hq0!9kHrhx%R01(+Qy&9D%`a56>_gk16zQ&>wpECXZU67jwKp=nG zK|d+`>+9uZf4klrIC+7+tEHWFjCeQ{iv=Tk(x`%~la{wn0tp z&#X(6!GpdR8T~w(5LnG9R4WnJXo-8&cnTh3R^Rr*7Db}S7Wwr!>68~Y^L{Z-@)wXn zI2Z+7b6cw{j!O`>HC;X$TS`U(xPJUKJ(>z4Z-!x?1Nhf={xxwiknk}AsV23fAd1Dg zLWrLf*oR1`gnkCIT;~2#;dz$EB;yhLA%~k2obcE8KQBk9#dUWUUt7wL>uegHj=bfr zOEG@CUmSo*p$39n+CPT-sGP94?z_K_3o@3ieO*Sd=@k*c~)S)3Vlkm4K5E%jo+3 zpq{?pb@;0NpeTI4X`|f~kliN*V=ehAMd^pCS3AjN=#*`+ruw(;QV*nW^{GHP+7$7i z*>58m1b6oKXU%6vwip$elYZZ#ZmXshybS_DjY@oulILGoyiY0L*0bjt+qFM9sImXb=fErS&Y)j1Z9QO@eKX{X#ub(mA0u(Oy816f@%pgqq%`!vJJiVY0XW9 zK)q+D$!yKU@p$-5ioY zRKNR;M|_b1^A}b(0!KozWKiy$ejrNy0umL_NV*Xa1CVjPTJIGXhAP6y$JkQVIDq<7 zJaz2Xaihy6@-n~LEp>9J1>@e_og8GkdQozxZ%R^OdOKXAh#cnV`5%`3pAgb%uj;(9 ziH@DQ9TwgN9*M*b3x0%pdQZs=4sY~rnreRP_q^twWD|RLaRgG&;3pjlxWk(pyqfo( zRz7rzoD9*Gnz9QElNY})47f2n^}d;De@hQ80GsKWbCuftYc- zVx0$MVl4xJNP?*W3cCaalVZpw=dcvZGXchCL186+j7VK zc<=Auj?xO>riG^k)@;f&mB@aEAcRG$-g;#^plJ&ZW_=6y4Yp$V)kAQ4L^C_jKLSD+uH_~M?Y?q(>^ z9W)5c-`WvRLmu}?kzD*Oh6KV$y5<@uaZgf3#hQX|+5x)0gMRnpg}xGuVFEt?*OyJD z**oE|d*xEiB%QA+f5MYqTwJUvG1Pag6_mOzlD_apmhcW|FdLMaE36yj)< zUoALck<;Slsq^}9ri5zX?J+OQOR))sA-~V1^6&%V744SY;tF`^7d$=CLv((_| zoInje{2kt>XzAm3>eYq*J282V{`K{J?#(&aB7#;q3Lki!1bxgpY`}2=%hSO%j-Gn2 zzeTYy2L|tm_(PR*0v;^i0Jx5{LMhPD;XzpQjKE3BL^?#PtOpKBE;n#urMv{!l=C{SCn6uD*(Hg^mH7Vb1N<;Mo9y!x5PmwzYVi=0IlGomK;;)O9|u?N*YcH4~VWaDHUb$MS-_kFtNk!EUHH- zg+kLz-oE#RazTF(Z8h%OZLksp=h&#;8XS<4F5NFKE4#Z5vz@F$H=13xyKVYbi4;)a4 z?-60Aw1?%Zh8#mGy3dDOKV%w%U8~t&NVuh5%j6~6I%AP9NbpZ8J$cc+%(=~+14Ym5 zy;;?0@y&1f{_az3Qh#KirL+5CdkASq0c$yTqi-QQj*I-EJ&d#j5BoK6;2d5{H|PYZ z;!?tM0unpX!4=It3TIh`lQ~z{*WsBUpGy24bXl=5pq^=yk%Yu{nv@RFi)fkN{7NhUKtMXsonC1)%V z4pqb^-k7`fQMA~4E?=s6z!uZU&a;t)(qFOtKW9&yFVWm%99;#)chnTZfk(Tix$3%1 zkJdGC5;5r3KB2Hp+?AF9VzYyB$YgbFK4pBZ-$wV$r=`3G-?uwzh+t<`P76eQY-_7# z0W*#Je{+3Q8*0QCZ@4TV=I4m$<`Rx)k$!(8N;BRrayKH%GOmg8MNDY;z9F{f@AyUDQ5g z{ZXm7w6OO5%~a5AD5%~W52A%n@l2mN2oeI+W`+Dgp}=|HkDC~})xPAwX7R;+cuII@ ztuvNC{tzfjx5+U;n3lM%=bBPkLM6L0$6xMuMiUC)LSZ{JyP!@?T!y|i89EUqGc;%l zb~g_2HHt+63VuHy+wz96W?1t5TedVW4h2EpxE+{&;(wMyY+|PfxrR{iEm%IF1S+=c zx*18jFA}y3*TfDu2Amni^#&a1IQvk>fuISE{dpd3JDC)W6$#DiGc*hM7dtcM0hZ%zB_Qk6H3zCM?6=rbP8Zr7foH{zHq5M74APV4q=;2d%*;gdZr~Fg*rAkMW%+f^Eg(9edH; zG{RDLE1}O18wJ-sBK9;q$Bw3(v^Mcr#*+MJsdv{WVP1cIh0-~K6;!<7%MO%$a%V_@ zOS_4%8B?U%*!4&9)|6kd#|=9{a=BP^9|;5qvf-8`Vcy_DKgW9>G;6S ztbK6OQ?HCNwTPWnkvrNa!3uTe#PK)*Ch;GIp^|-VCbZiNeFUC!son-O5hA#PvG~zB zQ%tmV$Wz>Vg9vXCvrT;;h%NwtxzJx$?udqr^VLsnquoCcM1K~?1(>CsB;ldyxVg5> zr_vOSgzSm+H9Nt5?&E)tP3SyBEM1NANdr0yXE29N2SIdk(f#b!$>8{MwPvo{^cWD&^^B*4d3fxf>uoF31CIou3^7gw@b&t|_Q@2%_6Pv(et~^ql zpPY0`+gn6;;Hq4g>AFRJ==*5^7#={j*`r=mZak~K|77zW;&)W>b>$E0P_YxL*nFTc zi3uvW!t#1Rakuh1^Ca`6^mm7?hovbuo~at%yPs;xFMdA(vVZCr0tR$_R5t7y>gqbb zvGtg4Wl+52(5z&9O?q<|zc)T|Pl`-3mM8o+!S2(ka5_I* zbIp!hbr|*LYVOtpV=-o5j_&n-CV0_aRZD>Vui0f{l+OB+cr>KI)PdI8=FyPv6=M*C z{y?ol|G0fCb4Ow%PNb&8vdt6hmn5)|(c~fVP7dIs7{@3mAGw!A9hO zhn&QcPS7&>@sUd7pPSy$vQ$`Xx;J%XQO4yfACf;(zv%3yF;cWUCVWF-S+T=)Mk3VF z3HzL6TIAxhxD zTI?7m8(mRLWj6TdJYcURlT|Bvjl8aX$VRo3QoCH+c6KQXSUyF7B<^aCJFX+fuaM#> zzIsQmEef;k1Yfhr4_Rt}U}{{0>}O%1MUr3sm%TNEO^It+6bn(f8u#^{Rplund_|e% z)V4_?t<+*)HazP^OIcEZuN`ZXv5A)ie2@@#>I>QX{u3(r@R}^>0h4PzgmHA_7dYEx zU~m&7VqAf0*$6Lc|0aFoIczoF?Q2(uq;08L*SAbC`-;dQRA^z?F<|w_&FfSpIK>*v zxmgoCBC#XdNiuw{?fv7cQHmib6_}`U{(hCTIB7)0Efep9X&q-|iu`K4slGj9Y}fPs z2x)bf&;9S}E?c|~YEHXp25#6;)^xEuEM$g5sEe&>*8Rp2{-r)iB{=`-`*QHu`DE~d ziUzyRRF1Jq0!(mG;ZGRn@lHR8?&%h z+WgA%E+(o>sE5oBLr8+`;|Ya;Fsw)H45O2*@>>xD)aNACS7Ue>!l?5U;<0ecc6tB0 z^5{Pu#|iXP23H50%#EUQtoxPDw>iQ!#!yK7oPwD5bIMh~(ktJ@${N3l#>;;6UE0+0 z?47 zG2(F#vjAK_lDlMkG%!9%m+w1Qi>LKQuy%3u;{)1i@WIS-APkZ zoqNY)WdZ;N{l#T}xb@d4yA{&=Pjx}baU5sf?{xWHSIYQ+kbUls6-Jz0KVe$^*Zk!X zJsgTGI7}i$PD6ruJ~=Ouzx0sBAmJh#$z>FOy>=hLi zr?S~aLdeo)$&|O3rH-d8&3&UXja`S`ap(3kD5VJMjqI=agW$tqF3k@(V{S1w8?4J; z=n43e?n8NVNFOdAOx?ykMSD+0vd0C`2A~}xS4EdS_L{DC{!bli>6pO96Xdg2a&iY# zHQkxq27Ql=GIzCA)5=34+l9!))IHo*&*7$Kl8FKsQ#@#B$C*G<)9Ut6jNwb7WM})x z-eALP5<1t7zS^*IDehYQr{ghV!o@g@$kYbU#a9CI&&`~2MGBReZLIdS6AYVo znIJwK7~@ubXtyX#5>BjGU`swz-xxHeWvJx@jKRYy%yFZVCVjf9F6v^R!A=OxSd6+0 zR|mw~FTJs#zcK_*HE$3jl&R2#)E8-b-Pf^lJcSJzOWOVJLCzxymLG-S*oM^JOVL`a zW8MX1hyRE>EBAsxIVkvfYxqENC0L>1@LHo>qfaq8rd3bBqoQdQD$@b7ZddmHaqZDD zQ^KC>0is*E2AfUv-`bml^FF3ShX*g#FD|J5)sSYr2S?p9Gqsqe4o6f-$NxfuXnli) zpC5lW19OnMYv~!$)`UM1n8oEVy{UoP+Gj7x**&ytB-@OYhm8f#l*q?bDSo%%oe{-& zo;)i5*g&rs=SgK%Syjc>BiJxDmPP~$CJ%E}TFUpVcWqhW`fgm`dU-QK;QFfe{YF}a zrxSJEd%4R=nSWj7JErqt1?(f#pQHVuJ39)D2=NH`pvLw?c3S$OZd;I((|^L>5uv({ zC^fMuVJrJHNE%vY`rt@U8dXi3lNArIyIOqFYD2I@!;LwuRvSdVN2hJwDszb~SF6&X zTz?Uzp>RwC`}kzR^&?#CyL_ok+k#aaLYNkXPWVt)^ye#dvBi2zFi}7HiSFWnR451+ zx+MX*()Rl0tf04r@gs{8_>NLeQd0R+(Kn<5{c<{jutJS8)v1gncJ`zF{p%#uFCUV~ zQ#DK)3LDw{K@E)wavu)Sxf*OBm8l211{4iMJXnC?!z~X?^>wkJ`)^we?pK!CxO%=6 z)P_I4%nOLF)0P$qBIU;}!){bl=>T4~pyn?&<;kH?snwE&uv?i9G)}Zn!}Ce(Hv1=I zI<}?ybI?Weyew-!^9J*JoqhMp9v!oI&iYXJr-`7U)GS;e(cw+L<3gmu*ZNww{~$a< zWo*1GTSct$o`gmvfw{3&QPJsxpTPC_%bOuOd|e-J82uT}o#q*DZagLw=tx!%1u`_* zY#2!=Dg0#sR84{(^;G9-csxd#g#%+Up9HI$=1Iz03ts^dC{6Zs1e2%N-=Z@kfN7U- zS@3W&2PaV63mBY>c7CM`%W*`^FIaH1e!GbR36y{rthhg*r4fIt?k1M6*XF$HCbrm7 zufX~C<9m&G*Zr}8-6nFEKgcSi-%lnzaBXnVTyoZ?JR%U5pwX5$l}1D-jH{MCJe zikQTyRrT}y)wJMyyX=pzm2;XBGdJOmPGawC{i7MH9Roz7aqG6a(G-w@36X@Vz^&SP zLQH*1AkOngyW6+d<(fl7noiF4Dv3xrMF#I3QIhwkyRTmX2fE)6P7*=ppAad*tY8kj zlTSs;bIH8TWuG{=YJEoF%@wLXNx9k6=A|>QJYO{^WHB`6@ROGjgvoDSgj-U$^Cs_6eE1i7)=&GfK-QWFrmkQj|vRmA&0`={% z7v6aAcVaGIv`TuZG9D00;-YN*GU5!c!D_<$&`t8YvLf438RAPXcK9JM!-hBDbw_>7 z-);vT#S+Dayw`h<41TYMzL{4iL)DtGg6ckpmgzoRn7P)QjjTEh#uf+1^@o}}vov~~22|Iio zQi!&6>N_sGO=!GB88?7&FBxx|?}TH0by1&p7-#3Ayg{avupC=$l!?Wf3z+7PUbNA( za)ES0Q7JO>4JVyBW=fA}QK|g;VJWw>cw-cQR7P_#uywMEE_@hb~7aG8(4HcoJB#! z2J8En4V8#i502y|1^LoF`DBQ-->0aaZ{bO=rJ=GDE zWxArzv`cOI=2$y)`X$TE6r6&ndmnXZ(5TFOSwMP>XJ95{sM52op|a_O65lgI3G|x# zK3(C>L!~|p2qu%cKM1wTPnH7R&;k|El_CB0g0-|LI zcASvur{V{TcDf7G_%&;8d$)XOOc`nx7YeQ6MA6GFU7pt);IC|`Em9;I&Lng4S$MObr`b8AAND9 zD)L>2`{8w7%8e`C9LfDVY^(OaCY*0kP~A@=|rO!F+~&!Vq-DGI2gg=$6Nk zFSod9@n>Zw9;9YdNj&0*W5|cEy{k#pA(!7edErA3@%Yg;)*f%kdF&jrUn}k{-qcGD zJy#O)9Jul>L8KPU48g2&2S6dM%jm90{am7jndK?wllB;X`G)ju5HALA%vT&dOUa^r zBF{cb{iTz3vHLFT-+ecOBv5jMw~re{t~EnO7R^Hv=I1W16KtmAT8m}hFy+5VCB_)*D=a!L9I*iZM=I-#tP&3f%-hl%iAS8`C~LBoY&`%FG3@Hv32-E zB1S2@IoX+|P5RElOu%{m$4Hy#St$%w(P(8W&$D z2Zn4Xca3s#QV)J!;eW3P)qcgJ=R@;BcI%fg^@wrh!TtAup4^mkl|c`UQa5Xa2$+++ zH90tH!<;+0{%3l$dft>1r#5pkhK3NN?iOx9-~p@FA+PkTgM7E<{Y3?GB3dV-D2)4h z6^<^|=0IPWF#S;j;pt-6p^6e~K{13IpSn_`;sOHifC|^Qla^~dt;*dS-^zK2VnNMN zAJyCznG?6Q`_>qk)2BR{jrtQpwb4^8Jj&SjkICSb*XQ5=jhcHo&alp_vn4BDn5lxI zorubU%>L798o@w_EyV@l|D#h5d6g=m5mqPkk8X9$OfBQ>#Hm%DVPQ&prY?QC7K>Vl z(*E|p!^M?@atg=Yf`}fSU3R0!Mq8^!%jzw9bV0Cs^paIqXLr>IL9n`AA-H?*Kljd^ zx%WFW-^@4j{ddlsdEe)Ko?qwU`sH(j%8(^xi~#HSpZC`-L4|}{h3d5gr$`sJ6n{7yqWj{T9uLh9Wkh`?*;*;#6(&*UOf zYFIV@jOy9=(WuWRMTKB1XK>-FM{pbHIqB%k|os&+R)i zu2$lsR%6DYi@loF9lCxiK`;$jHA@uI zo?F;FuO%XHD`Xkvd32Y8tUOEG=N0*wbM&K-^L5>Aj>YMlYu7am48yAST6aIDO47s@t;^}d%~J19Lo?cO=iN+5umuC7!kcpBg~B7I*Uywp26^!D zQWCK>2VsuZV63V!niZ*B_OGK55@|^;cHnCA(WqLsA3FM7A`1Td$aK@pOXfqbb@O^5 zb}joXt!Un5(;T9F&h)xAcCsaZMnCU{+n~DPyTk2Il`<)(iCRx4zC*zXtf3d~gU0J0 z)8s{DucgJl9J&XLvR!*hgp%8eY`_^sNO(@$W(^ZUd!pVCYB@q`k8*h|Z4lPpPW$Yw zK+pv2bAd*!c~i^04PC7`4CPLI4@lvMWz}Yy%zsb;_;+T{XVfD+use{8FF*HRmvhp9 z8r8cri?Jx{hRR5mA@G;N9#J;j!UQShLwy3g#Jl%&YoV5S6B+>alOsj~tYTj%9m9^( znSmo?z=sfwNY(E#;uC%+p=dm}*jqVMv_@3!L z=VgqKkT{p<&FW7!2=VgsHTwWUTg$bmaOVf}o>t44=Y~pBW-97JZi<8~$U17U&}S;M z=F1E|jvxDRr6!1AVo7<-EHPM`e!k2QR=w#nG%YZg1Ao_IVFR8J>uLS{Q%cXT4ovI( znL9E27sjJ9gZtB#6DZS9BC`~IGPuS;Hcad9zbU_3KgxNqTMoK{XMQ>=Q#cQKoACQL zJil$yWpWcW<5QuJ)W!K(x=uR3uY;GhwfGWBrp!`PkJK|H_y(+kl`LKnThz&hxlMimA+Er! zVyuLY_loLkrPRX%^?cS8dlQ$^x{o&$D(`(?fH=_9VosXo%znUX?G+{I1T}y z00NaE%V^}Y(rH~@QJ_I?UD69Go;Bk0yuyzv9?&bgLSDCocR#X?naNSZc=c8{ob%>O zDj&|Q2`DN{a`(|g@6$c0|1`Z%MK<1fdm!Rt8^Zcrts)&?w4KaRZF8r}{Ynt+bVyZv zBWxYea$>;4_D-1JEXdIA-qeJ_5ym+$IbKD;&Py^LLU(=cI`IGkyUQZ-&O4Mk{PX`Yx*!XNuA6nn(U{*$o;H%aJmb?9IETzwpZL1+8<+ zV>F@p&xJzl=vXYi2-|$iebj?tu>lw=;o`H(%~kcoeo81m;2=NG??Ex}G%hfU+xO7R zqB@%BWKniJV^_1gom831UQoYJaB|S&{;qY^IOyIp7_S-nJtLU=30Rt$ZRr3`^G!|v zuCLqv0Oo;l$}73wDCnzCP*<`IkG?Uj2n*;EXyfaQGwyi)+q1cj;!EYECdNBLB9gR{ zHlUy5Dg(;SHXz?djP`6;c*5mk{sDo|g&Gq+|1Wy20YLQ$-uP+8bS{i(vX8C=oz5q5LB zZ7UvN5VQHr#g!$o`dZT^XLBDY9at{lHOQp(6RMDY?yHLW0DUU^Mb{ z?jrbSbzcqjX4Xs8l&_ctxOpOCT2v6oC?~uX&T&iBvkSX9qj(j_q;4@+Rb6fJSW6nV z3!5CFjy8Jq$(F_-7))E{a*53?yQ-!de|cJTOoO97Z}KO>8{%6I6P7BtUT+G^eU;&@ z{6e{nA=$Zx^QPS67~-sY!w7xuoW4R|#B# z2R8aZ9(c`7GAj1?_s3h1+MCg-BC1#OgiznP!`O&D&dpy`*uTJpbIHGcsR-R4a~q3e z8;qu?e49_*DY;?&$)uborB~7Mwpw- zwQCeRf+3TAM{QMO)%8?P7B-3JF2bsoG#6li$E1-hHJ%ydZJJ12MO*fhb2%!!Gw6M)FguTi&D8ZcU zvM4-wH6kHOEnpo2gWi~$ygJoU6@h;tEL;zKD$fjXpeQ=iBOxsRF212QzxI1I`xU&B zUTh_R$Nf18KjrVVvL0;bzcp0oC^2lvjTu9mr?@5*tms zTeS9q?)c3*rJ$FeW}epBfvPw@i^My-aocC_Z7){Livvq|oz>=C3ZDJJ6hV9a(>H&HFVr(m$5SZ|)e^6_0a2cPYO;EHxJ=S?>`_L@$vx&!kGg4{meXl}wkk%;4 z*0&2=?1YrPE$4jsOPC4k$mRB9!;*=9gylrltM-TS3RU`>;{0E@mZ&nQ+62XFy9XpRnbhs) zh{u8k0|Ihyc5VCUIpfa4-kme?+APrpw7ZpTaW*NrpGx6WUuwL07xdq8+4vP_Q(Yi2HY$VI=yFks2h@EV?UFXL+Xa2&TY4M34WXHuoi>nChez1$%`m!R9BzFyi-{y*y0 z|L7&W9@8z})d_R3Iw*D%kQ`2>p>z_7LZ5%PRLU3<45RV`KAYfFe~iD~39Kv~7>YSO zxTR2nDc(%0l*1V<9PX|IKB_;mTW!dd2&fJ{{n(bslTVs0S37aF7tIp@ZR;U^l>$a|6C()yCb&!W{n9!2Q zovZ6@b9^{4_?q?5P^`VFuCDIN1M#mShYNG*DToP|#muPr8JF14_O3EB4fXWKO7(~V z>?UNy*W2xt1haby^G>pzT#OUNEJ=Qgk4zo*F@HbJP$M`4p7`e=xqfmlK`?)=lFjNs z02li`^}Worx&Pa=^5vE8`Uxp)hgzes@HggUy|Yl_hcWrRz}Ynxjj3bVN^JHDC8w$~ zJ&!ltE~;X&vZ&RbQ*2%3fJuqFRH}!3W)X6D!y~NSsq4=w+h=5*2TvDM&Y-=+F`tu; z_=?>*Hzf<^!^(c({GnxcJrwG7eGmxRh2h8UAjwmNUj@@az}y+>CnhulIYGqB`j+S| zm@HB)31%;w>9MsJ+ubqxA~U&g3U_E=ZG_o$!}5h)Db5_1=xrI-2JjsVyxPuI#bk|D zqH91b1*4>GM($8Q|CV*+g(TqrYY_;61Pr6L+kjbiEdpE**M+EwV%J5###_W0U`>}Rv4Pna}T(TH(lE$p$LR~0Cqms`xbuyr!nqAO!zY~V$625koII- zO^rAWu#GdarKVb;0K?$2xKPjE@RoHk8;t-@lK_ulF!LD#XL+~_7kYd+NecORD<8cC zJ^x*^R6wS^!xi09Ref}Ba6xsk>LZP`ET+Z+H!-0VQlD@-L z3YSN_dtWYOT+F}6ySu`?&r}RXD#ai)5^aGk2yvm`nS(q^)=`68oHW32>E+$sVfcm1 zRyJPRKdlSqW;UV~HHh}HUXFJL8-f(^EHEDxc(dYlQ@cP8JpNuX>VacE?u^Ok7j1Ro zB!fHo1h3@XaBVgx;K0?-X1P0@DV!_9M8%>lmPC}U>U7`%We(0JKmO`aT*sJYoHMhn z(;UFxYz*SeV+Q)uS1qB-Q78?*S1@*jw5;sO?$Y`?Eh6atodszxCgQBSU~~7ZR6@cp z6VA|LlQckr;saCiJ93dDawiCd%?}r}w#yh%h6TchEWYHfFzGuABE4&GX!Z_q)IuJG zsSHa*JNwias+(%WHLDqL?eA4EX@vWTyd6r3`-_l4`@A<9E~@i_tQ;Aj<50OPv{Nr& znGs%@hmP8l3p}wTG6Ihuvu}aQtk0s&<_3UOCUdgBT%8X!6DB=mcrps?d6VZmrYeh% z`cBb7z{iQ<8@At@5<_#|_Z5ojI=;G8BL#9t!;b0x=&?~`#=9v z*EUG@u#7LoaW(qa%LtXIcey44awv;nz5>%6Nv={u$>jXUM@8Q z3@Z(P=738kd$M@pWz27TxqCXFNf@MnFE8xy#q!n-!RC+?g|O4Jg3R~?-ci`?sr`Om z?O0_7E~oFjg*PM|-iX#*-B-``_dsVQ^J-6y`KA}>g04zPuEE%)H$ru`OV6G>xINgF z&v!KeL%>4dYb&|sTK(^8{aMCP@?tbV2L5=6@7d3v)(RCsXS}?$wDkDl7X9o$M=?D` zY5cI(BS9mh{D*r2*#ofooz*{3@&G2%1Zc%S$T>C)ORPsmydbCs{KzW!fmtfLH&G)u znsaZwCOoQO^hhcQ6;fe)IpRt8$InT%s(leDef6=R0j>LS44}jD8^c2V2GW7IlT;kW zxWMFaLa&SE4vC2qAE>&<{Z$FL^YUITnLsIL=rLL4oHES#<@#1OKZj@i}QQcR2w zp0(`jE2acr4MdSmIjCry{xOX@u!V4@Q{W->_3)~CxEs}L2@UZ>jr}4=D`0mF{wHx( zMpMp2PP(rw;Z`5U&KK_YPNb3*q)!MzrEvzyB;kb}_n}lV=~lB(yH-0Lxt%$;I_Ua3 zXJ*v3Qw``uis|x;A06Y-KUbVA$l$S-7!pq`O#V5CTEP~BA}!v8maX8EPi?)U z`W2u(!{Qn*F`_&QZ(=^HyRpa9xM3nUUNBcrx#P3alE&+C)6>_S0|3>}w3553QFRQJ z8eQt+K`5ql!?{p3@pQyUjXO)~cr8@wT12p24i(Q{`*uOvk5(bfD>> zIL>fIjrkaY$twnN>igF3_{+ePPx6!#6J}38p;V($N5M(6n0`dWD2P1WgW&8{tXmDY z>$wTcl>~L7`FAoXsH*~AzSv`n9?ZEfw{_RJzC|94`P4=?0edrv60aO$dhnh1_kt>4 zd zpTk*nIZlD5Zy!PaJf(c6aQ`7-6YIJY9@&8I3pqc{k9;JmM!VX1uKzrx%M65$w})+U zIr5dpDVh3NiEeBZVJA3qaC5UiI5KSyeC+M)E^G!OQOD=!W-`KRwAAtz5$THtO&oK= zd174Fz2fEqYcJxX(z5c|b>7|L)ifFlH_?pUa)WKTg7XtX2Q+R+fSB~N3CDC7)eXB+ zc^s`_Y8rB1Z7!WY)6~j#%Lw#T_eWl&(u&{L{O+70?(6PpWo>t%%A5N#!A0Q50~x*~ zT6h0+f>ie&t;K}zv($n(^yj3N@&0go0axOmAg2zU7(F-#SG+eFS#72QV@f5JN+6X^ zgYJL=K1*@HT-k{iXykD~1+E^6uJJ^VR5Tw173jia@D%t??$#Jdb8+Tf9pfG(4UytI zN0HXpfbC4>Crh(C-UscA)d=i0VEe`S=}!AUMU#noC6BYGs?B#maEp^2sNzb^67&J= z-^Qkx(;|g)$VK5Cre6kDdY?I)pS&6Jjw4x(UAOf1GNK1sx_jZHXP-WFX%AW5>!Wu8 zS%{~PU55g{5hsT#-EgGrRUV;TpLShG@=o*FRGF1}46tqW?KeW4K^UqTK8@4v_wUA3S!$(aoBtKTq`-b5QS$FJ68BMiW>IT{mmX(7KdE{y=lj`jUZRFe&P{>B z>o*_qctu=6OL(1@3C{d|!*O6a|95)?-}d^w+(To-ses!;e@c&jzu$TccGNhw{`ewu zDMi`B!?76&hEKT3DZ?b<FEYeYAuh4su{cBDFf(`o^pHtDy1Qc-Nm8x+3HQ6lTAcwO_to5wm3+!7u z((dVhCSEm?_czw#>uD8rgF3*WmtbS%StN;d^Yf&wxse<_;LDYXz$V7j=54{B_|k{R z3+*h{Ew>ew8)s;V{R99mX*>ij?*B;xpS9iWXXDJL52o;8f0P@|%qcz?A?-?P$V&UP zyEymf{dcXO7**+GD4GEZ{G>k`IC?{;pIS1p|E?#=cBl7bz@Ad+>!P&ifAFwr|4o;p z3mFp#_|_pE%=X^OvqY?O_y0ue{*NO6zy29Vj9<`lv_);8f`d0H>|ZKPHQndmRIG#l E1B^`!2><{9 diff --git a/content/learning-paths/servers-and-cloud-computing/nested-virtualization/nv2_stack.webp b/content/learning-paths/servers-and-cloud-computing/nested-virtualization/nv2_stack.webp new file mode 100644 index 0000000000000000000000000000000000000000..efba4ef52c6ed864bd68d51330af149b121a89e9 GIT binary patch literal 17566 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 Date: Tue, 6 Oct 2026 12:40:17 -0500 Subject: [PATCH 61/66] first pass for zephyr uboot --- .../1-boot-chain.md | 48 +++++----- .../2-set-up-tools.md | 49 ++++++++--- .../3-build-zephyr.md | 88 ++++++++++--------- .../4-sign-zephyr.md | 33 +++---- .../5-build-uboot.md | 53 ++++++----- .../6-boot-the-target.md | 62 +++++++------ .../7-test-the-checks.md | 34 +++---- .../8-production.md | 39 ++++---- .../_index.md | 12 +-- 9 files changed, 241 insertions(+), 177 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 4f504e4497..fb0fcb23ef 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -9,36 +9,38 @@ layout: learningpathall ## Zephyr is the last stage, not the first -On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a bootloader such as MCUboot. A Cortex-A processor starts in a ROM (read-only memory) inside the SoC (system on chip), and several firmware stages run before your code. Zephyr is the last stage, so the stage before it, usually U-Boot, can check it before starting it. +On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a bootloader such as MCUboot. A Cortex-A processor starts in a read-only memory (ROM) inside the system on chip (SoC), and several firmware stages run before your code. Zephyr is the last stage, so the stage before it, usually U-Boot, can check it before starting it. -You package Zephyr in a Flattened Image Tree (FIT) with a signature that U-Boot verifies before starting the image. +You'll package Zephyr in a Flattened Image Tree (FIT) with a signature that U-Boot verifies before starting the image. -You can build and boot a verified Zephyr image in QEMU without hardware, or on a TI AM62L evaluation module (EVM). Both targets use the same signing and verification workflow, with separate instructions where setup differs. +You'll build and boot a verified Zephyr image either in QEMU without hardware, or on a TI AM62L evaluation module (EVM). You can use the same signing and verification workflow for both targets. The Learning Path includes separate instructions where setup differs. ## The boot chain on a Cortex-A board On an Armv8-A board using U-Boot, boot proceeds from the SoC's boot ROM through early firmware to U-Boot. U-Boot then loads and starts the payload: Zephyr in your setup. -The early firmware is usually the SPL (Secondary Program Loader), a small U-Boot that loads the full one, plus TF-A (Trusted Firmware-A) and OP-TEE (Open Portable Trusted Execution Environment), which run in the Secure world. Many SoCs add the vendor's own security firmware, which checks the later stages. You build the SPL with U-Boot; the rest comes prebuilt in the vendor's SDK. +The early firmware is usually the Secondary Program Loader (SPL), a small U-Boot that loads the full one. In addition, Trusted Firmware-A (TF-A) and Open Portable Trusted Execution Environment (OP-TEE) run in the Secure world. Many SoCs add the vendor's own security firmware, which checks the later stages. + +You'll build the SPL with U-Boot. The rest comes prebuilt in the vendor's SDK. ![Cortex-A boot chain from boot ROM through early firmware and U-Boot to a signed Zephyr FIT image. U-Boot verifies Zephyr; trust in the earlier stages depends on the platform's secure-boot configuration.#center](images/boot-chain-generic.svg "U-Boot verifies Zephyr in the Cortex-A boot chain") ## Choose your target -Pick one target now. QEMU is the default and needs nothing but your host; the AM62L EVM shows the same work on real silicon. Every page is written for both, and marks the few steps that differ. +Choose between QEMU and AM62L EVM. QEMU is the default target for which you need nothing but your host. The AM62L EVM shows the same work on real silicon. | Requirement or feature | QEMU | AM62L EVM | |---|---|---| -| Hardware | None | The board, a micro-SD card and reader, a micro-USB cable, a USB-C PD supply | +| Hardware | None | The board, a micro-SD card and reader, a micro-USB cable, and a USB-C PD supply | | Download | U-Boot source, 32 MB | TI Processor SDK, 4.5 GB, unpacks to 11 GB | | Stages before U-Boot | None: QEMU starts `u-boot.bin` directly | Boot ROM, `tiboot3.bin`, `tispl.bin` | | Zephyr board | `qemu_cortex_a53` | `am62l_evm/am62l3/a53` | -| Boot media | FAT partition in a 64 MiB disk image, `virtio 0:1` | FAT partition on a micro-SD card, `mmc 1:1` | -| Console | The terminal you start QEMU in | USB serial at 115200 baud | +| Boot media | File Allocation Table (FAT) partition in a 64 MiB disk image, `virtio 0:1` | FAT partition on a micro-SD card, `mmc 1:1` | +| Console | The terminal that you start QEMU in | USB serial at 115200 baud | ### The boot chain in QEMU -QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: +QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file that you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: ```output QEMU -bios u-boot.bin -> U-Boot -> Zephyr inside a FIT image @@ -48,7 +50,7 @@ QEMU runs U-Boot's FIT verifier, but nothing authenticates U-Boot itself. ### The boot chain on the AM62L EVM -On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TIFS (TI Foundational Security), TI's security firmware; `tispl.bin` holds the rest of TF-A, OP-TEE and the SPL. You build them together with `u-boot.img` in a later step when you build U-Boot. The EVM ships in TI's High Security, Field Securable (HS-FS) development state. +On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TI Foundational Security (TIFS), TI's security firmware. `tispl.bin` holds the rest of TF-A, OP-TEE, and the SPL. You'll build them together with `u-boot.img` when you build U-Boot. The EVM ships in TI's High Security, Field Securable (HS-FS) development state. ![AM62L boot chain from boot ROM through `tiboot3.bin`, `tispl.bin`, and `u-boot.img` to the Zephyr FIT image. In HS-FS development mode, the early stages accept any signing key; U-Boot verifies Zephyr against your key before starting it.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") @@ -56,28 +58,34 @@ On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first s A FIT is U-Boot's container format for boot images. It's a device tree blob (DTB) whose nodes hold images instead of hardware descriptions. -The signed FIT you build contains: +The signed FIT that you'll build contains: -- The image itself, which is Zephyr's `zephyr.bin` here -- A hash of that image, so U-Boot can tell if a byte changed +- The image itself, which is Zephyr's `zephyr.bin` +- A hash of that image, so that U-Boot can tell if a byte changed - A configuration that names the image to use (`kernel = "kernel-1"`) and carries a signature -`mkimage`, a U-Boot host tool, builds the FIT from a text source file (a `.its` file) and signs it with your private key. On the target, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. +`mkimage`, a U-Boot host tool, builds the FIT from a text source `.its` file and signs it with your private key. On the target, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. -You sign the FIT configuration with `sha256,rsa2048`, which combines SHA-256 hashing with a 2048-bit RSA key. +You'll sign the FIT configuration with `sha256,rsa2048`, which combines SHA-256 hashing with a 2048-bit RSA key. -The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`: every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature at all still boots. +The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`. Every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature still boots. ![Signed FIT image beside U-Boot's control device tree, which holds the required public key. The signature covers the FIT configuration and payload hash; the hash covers the Zephyr image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") -The signature does not cover the image bytes: it covers the configuration node plus the hash node, and the hash covers the bytes. +The signature doesn't cover the image bytes. It covers the configuration node plus the hash node, and the hash covers the bytes. ## Verify Zephyr before starting it -You configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, U-Boot's command for jumping to an address. +Configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, U-Boot's command for jumping to an address. + +If you choose QEMU as your target, there's no key to fuse and nothing checks U-Boot at all. -In QEMU there is no key to fuse and nothing checks U-Boot at all. You leave the AM62L EVM in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. You'll review what a production device needs in the final section of this Learning Path. +If you choose AM62L EVM as your target, leave it in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. + +You'll review what a production device needs in [Review what you verified and what you need for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). ## What you've learned and what's next -Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it, and `required = "conf"` makes U-Boot refuse any FIT it can't verify. Next, you set up the host tools for your target. +You've learned that Zephyr is the last stage of a Cortex-A boot chain, so U-Boot can verify it. You also learned that `required = "conf"` makes U-Boot refuse any FIT it can't verify. + +Next, you'll set up the host tools for your target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 22aadc75cb..7eb439916e 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -9,15 +9,25 @@ layout: learningpathall ## What you need -You need Zephyr host tools, U-Boot source, and a cross compiler for your chosen target. For QEMU, you download U-Boot source and install the emulator and compiler from Ubuntu packages. For the AM62L EVM, the TI Processor SDK supplies U-Boot source, the cross compiler, and prebuilt early firmware. +You need Zephyr host tools, U-Boot source, and a cross compiler for your chosen target. For QEMU, download U-Boot source and install the emulator and compiler from Ubuntu packages. For the AM62L evaluation module (EVM), the TI Processor SDK supplies U-Boot source, the cross compiler, and prebuilt early firmware. ## Install the Zephyr host tools -Open Visual Studio Code and select **Workbench for Zephyr** in the Activity Bar. In its panel, select **Install Host Tools** to install the dependencies used to build Zephyr: Python, CMake, Ninja, Git, Device Tree Compiler, and West. +To install host tools on Visual Studio Code: -When installation finishes, select **Verify Host Tools**. Resolve any missing-tool errors before continuing. +1. Open Visual Studio Code and select **Workbench for Zephyr** in the Activity Bar. +2. In its panel, select **Install Host Tools** to install the dependencies used to build Zephyr: -You'll import the AArch64 toolchain and create the West workspace in the next lesson, before building Zephyr. +- Python +- CMake +- Ninja +- Git +- Device Tree Compiler +- West + +3. When installation finishes, select **Verify Host Tools**. Resolve any missing-tool errors before continuing. + +You'll import the AArch64 toolchain and create the West workspace later, before building Zephyr. ## Install the host packages @@ -27,15 +37,18 @@ Install the additional packages used to build U-Boot, sign images, and prepare t sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools dosfstools xz-utils curl picocom ``` -If you chose QEMU, install the emulator and U-Boot cross compiler with this command. For the AM62L EVM, skip it; you'll get the cross compiler from the TI SDK: +If you chose QEMU as your target, install the emulator and U-Boot cross compiler with this command: ```bash sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu ``` +For the AM62L EVM, skip installing the emulator. You'll get the cross compiler from the TI SDK ## Create the working directory and environment file -Keep your source, tools, and build outputs under `$HOME/zephyr-secure-boot`. An environment file stores the paths and target settings you'll reuse throughout the workflow. Select your target's tab, create and load its environment file, and create the signing-key and FIT directories: +Keep your source, tools, and build outputs under `$HOME/zephyr-secure-boot`. An environment file stores the paths and target settings that you'll reuse throughout the workflow. + +Follow the instructions for your target to create and load its environment file, and create the signing-key and Flattened Image Tree (FIT) directories: {{< tabpane code=true >}} {{< tab header="QEMU" language="bash" >}} @@ -95,14 +108,16 @@ mkdir -p $KEYS $FIT {{< /tab >}} {{< /tabpane >}} -The variables are available only in the shell where you load the environment file. Load it again whenever you open a new terminal; later lessons include a reminder. If you adapt the workflow to another board, the later section, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/), explains how to choose its target values and paths. +The variables are available only in the shell where you load the environment file. If you open a new terminal, you'll have to load the environment file again. If you adapt the workflow to another board, you'll learn how to choose its target values and paths in [Review what you verified and what you need for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). {{% notice Note %}} -Example output shows paths under `/home/user/`, the home directory of the account that produced it. Your paths reflect your own username. On a standard Ubuntu cloud instance, for example, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically, and only the printed paths differ. +Example output shows paths under `/home/user/`, the home directory of the account that produced it. The paths in your output will reflect your own username. On a standard Ubuntu cloud instance, for example, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically. Only the printed paths in the output might differ. {{% /notice %}} ## Get the U-Boot source and the cross compiler +Follow the instructions for your target to download U-Boot and the cross compiler. + {{< tabpane-normal >}} {{< tab header="QEMU" >}} Download U-Boot 2025.07 and unpack it into your working directory. The archive is about 32 MB: @@ -119,7 +134,9 @@ The expected output is: /home/user/zephyr-secure-boot/u-boot-2025.07 ``` -You'll add the public key and boot command through build configuration, without patching U-Boot source. Check that the cross compiler runs: +You'll add the public key and boot command through build configuration, without patching U-Boot source. + +Check that the cross compiler runs: ```bash ${CROSS}gcc --version @@ -145,10 +162,12 @@ QEMU emulator version 8.2.2 (Debian 1:8.2.2+ds-0ubuntu1.18) ... ``` -You'll create a 64 MiB disk image when you prepare the boot media; you don't need to download one for QEMU. +You'll create a 64 MiB disk image when you prepare the boot media. You don't need to download one for QEMU. {{< /tab >}} {{< tab header="AM62L EVM" >}} -The TI Processor SDK Linux for AM62Lx supplies U-Boot source, prebuilt early firmware, and the cross compiler. You use these components to boot Zephyr. The installer is 4.5 GB and unpacks to 11 GB. Download version 12.01.00.05.03 from the [TI Processor SDK download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): +The TI Processor SDK Linux for AM62Lx supplies U-Boot source, prebuilt early firmware, and the cross compiler. You'll use these components to boot Zephyr. The installer is 4.5 GB and unpacks to 11 GB. + +Download version 12.01.00.05.03 from the [TI Processor SDK download page](https://www.ti.com/tool/download/AM62L-LINUX-SDK/12.01.00.05.03): ```bash curl -L -o $WORK/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/ti-processor-sdk-linux-am62lxx-evm-12.01.00.05.03-Linux-x86-Install.bin @@ -178,14 +197,18 @@ aarch64-oe-linux-gcc (GCC) 15.3.0 ... ``` -Download TI's SD card image to preserve the boot partition layout expected by the AM62L boot ROM. The download is about 1.3 GB. Leave it compressed; when you prepare the boot media, you'll extract the boot partition and replace its files: +Download TI's SD card image to preserve the boot partition layout expected by the AM62L boot ROM: ```bash curl -L -o $WORK/tisdk-default-image.wic.xz https://dr-download.ti.com/software-development/software-development-kit-sdk/MD-YjEeNKJJjt/12.01.00.05.03/tisdk-default-image-am62lxx-evm-12.01.00.05.03.rootfs.wic.xz ``` +The download is about 1.3 GB. Leave it compressed. When you prepare the boot media, you'll extract the boot partition and replace its files. + {{< /tab >}} {{< /tabpane-normal >}} ## What you've accomplished and what's next -You've installed the Zephyr host tools and U-Boot build packages, obtained your target's U-Boot source and cross compiler, and created a reusable environment file. For the AM62L EVM, you also have the early firmware and SD card image. Next, you'll import the AArch64 toolchain, create a West workspace, and build a small Zephyr application for your chosen target. +You've installed the Zephyr host tools and U-Boot build packages, obtained your target's U-Boot source and cross compiler, and created a reusable environment file. For the AM62L EVM, you've also set up the early firmware and SD card image. + +Next, you'll import the AArch64 toolchain, create a West workspace, and build a small Zephyr application for your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index fafa53ae01..0dba724f4f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -9,7 +9,7 @@ layout: learningpathall ## Open Workbench for Zephyr -Use Workbench for Zephyr to import an AArch64 toolchain, create a Zephyr workspace, and build your application. Both targets follow the same steps; select the board that matches your target. +Use Workbench for Zephyr to import an AArch64 toolchain, create a Zephyr workspace, and build your application. The steps are the same for both targets. Select the board that matches your target. Open VS Code on your working directory: @@ -20,7 +20,7 @@ code $HOME/zephyr-secure-boot Select the **Workbench for Zephyr** icon in the Activity Bar. Its panel contains the **Applications**, **West workspaces**, **Toolchains**, and **Host tools** views. {{% notice Note %}} -The screenshots show Windows paths, a globally installed SDK, and the AM62L EVM. On Ubuntu, use your own paths and the SDK location you choose. If you chose QEMU, select `qemu_cortex_a53` wherever a board is requested. +The screenshots show Windows paths, a globally installed SDK, and the AM62L evaluation module (EVM). On Ubuntu, use your own paths and the SDK location that you choose. If you chose QEMU, select `qemu_cortex_a53` wherever a board is requested. {{% /notice %}} ## Import the AArch64 toolchain @@ -29,58 +29,62 @@ Use the Zephyr SDK's `aarch64-zephyr-elf` compiler for your Cortex-A53 target. S In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: -- **Toolchain family**: **Zephyr SDK** -- **Source**: **Official** -- **Destination**: **Custom location** -- **SDK Type**: **Minimal** -- **Version**: v1.0.1 -- Select **aarch64** and clear the other architecture checkboxes -- **Location**: a parent directory where Workbench creates the SDK folder, for example `$HOME/zephyr-secure-boot`. Workbench adds a versioned subdirectory such as `zephyr-sdk-1.0.1` inside it. +1. For **Toolchain family**, select **Zephyr SDK**. +2. For **Source**, select **Official**. +3. For **Destination**, select **Custom location**. +4. For **SDK Type**, select **Minimal**. +5. For **Version**, select **v1.0.1**. +6. Select **aarch64** and clear the other architecture checkboxes. +7. For **Location**, specify a parent directory where Workbench creates the SDK folder, such as `$HOME/zephyr-secure-boot`. Workbench adds a versioned subdirectory such as `zephyr-sdk-1.0.1` inside it. ![Workbench for Zephyr Add Toolchain form with Zephyr SDK 1.0.1, the Minimal SDK type, and aarch64 selected. These settings provide the compiler for both Cortex-A53 targets.#center](images/wz-add-toolchain.webp "Import the AArch64 toolchain") -Select **Import**. The download takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. +8. Select **Import**. + +The download takes a few minutes. When it finishes, the **Toolchains** view shows `Zephyr SDK 1.0.1` with a `GNU` entry and `aarch64-zephyr-elf` under it. ## Add a West workspace Create a Zephyr 4.4.2 workspace for your chosen target. The same workspace supports QEMU and the AM62L EVM. Select **Add West Workspace** and fill in the form: -- **Source location**: **From template** -- Select **Minimal** under the **Path** field -- **Template**: **Texas Instruments**, for either target -- **Revision**: v4.4.2, or a later 4.x release -- **Location**: `$HOME/zephyr-secure-boot` (shown expanded, such as `/home/ubuntu/zephyr-secure-boot`) -- **Subfolder**: `zephyrproject` +1. For **Source location**, select **From template**. +2. Under **Path**, select **Minimal**. +3. For **Template**, select **Texas Instruments** for either target. +4. For **Revision**, select **v4.4.2** or a later 4.x release. +5. For **Location**, specify **`$HOME/zephyr-secure-boot`** (shown expanded, such as `/home/ubuntu/zephyr-secure-boot`). +6. For **Subfolder**, select **`zephyrproject`**. ![Workbench for Zephyr Add West Workspace form using the Minimal option, Texas Instruments template, and Zephyr v4.4.2. The workspace is named zephyrproject and supports either target.#center](images/wz-add-west-workspace.webp "Create the Zephyr 4.4.2 workspace") -Select **Import**. Workbench downloads Zephyr, the vendor's hardware abstraction layer (HAL), and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. +7. Select **Import**. + +Workbench downloads Zephyr, the vendor's hardware abstraction layer (HAL), and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. ## Create the application Select **Add Application** and fill in the wizard: -- **Select West Workspace**: `zephyrproject` -- **Select Toolchain**: `zephyr-sdk-1.0.1` -- **SDK Variant**: **GNU GCC** -- **Select Board**: type `qemu` and select **QEMU Emulation for ARM Cortex-A53**, or type `am62l` and select **TI AM62L Evaluation Module (EVM)** -- **New or existing application?**: **Create new application** -- **Select template**: `hello_world`, under `deps/zephyr/samples/hello_world` -- **Project Name**: `hello` -- **Application type**: **West workspace application** -- **Project Location**: `zephyrproject/applications/hello`, filled in by the wizard - -Check that the board identifier matches `BOARD` in your environment file: `qemu_cortex_a53` for QEMU or `am62l_evm/am62l3/a53` for the AM62L EVM. - +1. For **Select West Workspace**, select **`zephyrproject`**. +2. For **Select Toolchain**, select **`zephyr-sdk-1.0.1`**. +3. For **SDK Variant**, select **GNU GCC**. +4. For **Select Board**, enter **qemu** and select **QEMU Emulation for ARM Cortex-A53**, or enter **am62l** and select **TI AM62L Evaluation Module (EVM)**. +5. For **New or existing application?**, select **Create new application**. +6. For **Select template**, select **`hello_world`**, under **`deps/zephyr/samples/hello_world`**. +7. For **Project Name**, enter **`hello`**. +8. For **Application type**, select **West workspace application**. +9. For **Project Location**, ensure the value is **`zephyrproject/applications/hello`**, filled in by the wizard. + + Check that the board identifier matches `BOARD` in your environment file: `qemu_cortex_a53` for QEMU or `am62l_evm/am62l3/a53` for the AM62L EVM. +9. Select **Create**. ![Workbench for Zephyr Add Application wizard creating hello from the hello_world sample with the zephyrproject workspace and Zephyr SDK 1.0.1. The AM62L EVM is selected; the callout identifies the alternative QEMU Cortex-A53 board.#center](images/wz-add-application.webp "Create hello for your chosen target") -Select **Create**. The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`, and `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. +The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`. `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. ## Replace the sample's files Leave `CMakeLists.txt` as it is and replace the other two files. -Replace the contents of `prj.conf` with these four lines: +Replace the contents of `prj.conf` with the following four lines: ```text CONFIG_ARMV8_A_NS=y @@ -91,7 +95,7 @@ CONFIG_AARCH64_IMAGE_HEADER=y `CONFIG_PRINTK` enables console output with `printk()`. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, confirming that Zephyr has started. -Replace the contents of `src/main.c` with the following code. Its banner identifies image A and the key you'll use to sign it. This helps you distinguish the images during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). +Replace the contents of `src/main.c` with the following code. Its banner identifies image A and the key that you'll use to sign it. This helps you distinguish the images during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). ```c #include @@ -119,11 +123,11 @@ Save both files. ## Configure Non-secure execution and the arm64 header -`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one U-Boot hands it. Without it, the driver of the GICv3 (Generic Interrupt Controller) never programs the Non-secure registers, the timer interrupt never arrives, and Zephyr hangs right after its banner. +`CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one U-Boot hands it. Without it, the driver of the Generic Interrupt Controller (GICv3) never programs the Non-secure registers. The timer interrupt never arrives, and Zephyr hangs right after its banner. -`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The header's first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot only needs that branch at offset 0: without the header, `go` jumps into whatever the linker placed there. +`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The header's first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot needs that branch only at offset 0. Without the header, `go` jumps into whatever the linker placed there. -The configurations for `qemu_cortex_a53` and `am62l_evm/am62l3/a53` already set both options; repeating them in `prj.conf` protects you on a board whose configuration doesn't. +The configurations for `qemu_cortex_a53` and `am62l_evm/am62l3/a53` already set both options. Repeating them in `prj.conf` protects you on a board whose configuration doesn't. ## Build the application @@ -138,10 +142,10 @@ Memory region Used Size Region Size %age Used ![Workbench for Zephyr showing hello configured for the AM62L EVM and the build terminal's memory report. The report appears near the end of the build; the generated zephyr.bin is checked in the next step.#center](images/wz-build.webp "Build hello for the AM62L EVM") -The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. It is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM, and about 58 KB for the AM62L EVM, which reports 2016 MB. +The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. The binary is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM. It's about 58 KB for the AM62L EVM, which reports 2016 MB of RAM. -{{% notice Troubleshooting %}} -On an `aarch64` host, the build can fail with `exec format error` when it invokes `cmake` from `~/.zinstaller`. Some versions of the Workbench for Zephyr host tools install `x86_64` builds of CMake and Ninja, which can't run on Arm. Verify Host Tools can also report a misleading error, such as `-255 package(s) are not installed`, for the same reason. +{{% notice Note %}} +On an `aarch64` host, the build can fail with `exec format error` when it invokes `cmake` from `~/.zinstaller`. Some versions of the Workbench for Zephyr host tools install `x86_64` builds of CMake and Ninja, which can't run on Arm. Verify that Host Tools can also report a misleading error, such as `-255 package(s) are not installed`, for the same reason. Confirm the architecture of the installed tools: @@ -163,8 +167,8 @@ Rebuild the application. The Zephyr SDK compiler is a native Arm binary and does Open a terminal with **Terminal > New Terminal** in VS Code, or use an existing shell. Load your target's environment file: -- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` -- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` +- QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- AM62L EVM: `source $HOME/zephyr-secure-boot/env-am62l.sh` Print the header's magic number at offset `0x38`: @@ -182,4 +186,6 @@ The expected output is: ## What you've accomplished and what's next -You've built a Zephyr image for your target's Cortex-A53, linked at `ZEPHYR_ADDR`, and checked its arm64 header. Next, you'll create the signing keys and package the image in a signed FIT for U-Boot to verify. +You've built a Zephyr image for your target's Cortex-A53, linked at `ZEPHYR_ADDR`, and checked its arm64 header. + +Next, you'll create the signing keys and package the image in a signed Flattened Image Tree (FIT) for U-Boot to verify. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index a8a42431ce..aa8418bfc2 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -11,10 +11,10 @@ layout: learningpathall Open a terminal and load your target's environment file: -- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` -- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` +- QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` -Build `mkimage` to create and sign FIT images, and `fit_check_sign` to verify them on the host. Use your target's U-Boot source tree so the host tools match the U-Boot version you'll run. +Build `mkimage` to create and sign Flattened Image Tree (FIT) images, and `fit_check_sign` to verify them on the host. Use your target's U-Boot source tree so that the host tools match the U-Boot version that you'll run. Before building the tools, generate `.config` from your target's default configuration. Run the target named by `UBOOT_DEFCONFIG` in your environment file: @@ -24,7 +24,7 @@ make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCO `UBOOT_CC` stores the compiler command. For QEMU, it names the cross compiler installed from Ubuntu. For the AM62L EVM, it also includes `--sysroot` to locate the SDK's headers and libraries. Keep `CC="$UBOOT_CC"` on every `make` command, including when you build U-Boot later. -Then build the host tools: +Then, build the host tools: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" tools @@ -42,7 +42,7 @@ The output is similar to: mkimage version 2026.01-g5fb294342321 ``` -The version string identifies your U-Boot source tree. This example uses the AM62L EVM's TI tree, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. +The version string identifies your U-Boot source tree. The example output indicates AM62L EVM's TI tree, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. {{% notice Note %}} If the tools build reports a missing `pylibfdt` dependency, `swig`, or `gnutls/gnutls.h`, check the packages installed during [host-tool setup](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Run the shared `apt install` command again, then retry the tools build. @@ -50,7 +50,7 @@ If the tools build reports a missing `pylibfdt` dependency, `swig`, or `gnutls/g ## Create two signing key pairs -Use the private key to sign the image and keep it on the host. You'll embed only the public key in U-Boot during the next lesson. +Use the private key to sign the image and keep it on the host. You'll embed only the public key in U-Boot. Create two key pairs. You'll configure U-Boot to trust `key-a` and leave out the public key for `key-b`. The optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) use `key-b` to demonstrate rejection of an image signed with an untrusted key. @@ -72,17 +72,17 @@ The expected output is: key-a.crt key-a.key key-b.crt key-b.key ``` -`mkimage -k ` expects these files in the key directory: +`mkimage -k ` expects the following files in the key directory: -- `.key` holds the private key -- `.crt` is a self-signed certificate containing the public key -- The shared file-name stem, ``, matches `key-name-hint` in the FIT source +- `.key` holds the private key. +- `.crt` is a self-signed certificate containing the public key. +- The shared file-name stem, ``, matches `key-name-hint` in the FIT source. -These 2048-bit keys are generated on the build host for this demonstration. The later section, [Review what is verified and what production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/), covers production key handling. +These 2048-bit keys are generated on the build host for this demonstration. The later section, [Review what you verified and what you need for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/), covers production key handling. ## Write the FIT source -Describe the FIT in an image tree source (`.its`) file. `mkimage` compiles and signs it to produce an image tree blob (`.itb`). Create the source with this command. The unquoted `EOF` delimiter lets the shell expand `$WORK` and `$ZEPHYR_ADDR`: +Describe the FIT in an image tree source (`.its`) file. `mkimage` compiles and signs it to produce an image tree blob (`.itb`). Create the source with the following command. The unquoted `EOF` delimiter lets the shell expand `$WORK` and `$ZEPHYR_ADDR`: ```bash cat > $FIT/zephyr-a.its < $WORK/signature.dtsi ``` -`-K` writes the public key into `scratch.dtb`, and `-r` marks the key as required. The `sed` command removes the `/dts-v1/;` header so the resulting `.dtsi` can be included after the main `.dts` header. +`-K` writes the public key into `scratch.dtb`, and `-r` marks the key as required. The `sed` command removes the `/dts-v1/;` header so that the resulting `.dtsi` can be included after the main `.dts` header. Check the key name and required-signature setting: @@ -97,21 +99,21 @@ The expected output is: key-name-hint = "key-a"; ``` -Confirm that `key-name-hint` is `key-a` and `required` is `conf`. Leave out `key-b` so U-Boot doesn't trust its signatures. +Confirm that `key-name-hint` is `key-a` and `required` is `conf`. Leave out `key-b` so that U-Boot doesn't trust its signatures. -The build incorporates `signature.dtsi` into U-Boot's control device tree. Use `mkimage -K` only with the scratch DTB in this step. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. +The build incorporates `signature.dtsi` into U-Boot's control device tree. Use `mkimage -K` only with the scratch DTB. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. ## Write a boot command that fails closed -An unverified boot command loads `zephyr.bin` and jumps to it. With your QEMU target values, it looks like this: +An unverified boot command loads `zephyr.bin` and jumps to it. With your QEMU target values, the command looks like the following: ```console => fatload virtio 0:1 0x40000000 zephyr.bin; dcache flush; icache flush; dcache off; icache off; go 0x40000000 ``` -On the AM62L EVM the same line reads `fatload mmc 1:1 0x82000000 zephyr.bin` and ends `go 0x82000000`. +On the AM62L EVM, the same line reads `fatload mmc 1:1 0x82000000 zephyr.bin` and ends `go 0x82000000`. -This command doesn't verify the image between `fatload` and `go`. Add `bootm` verification before the handover. The verified command chain uses the same QEMU target values and is split into lines for readability: +The command doesn't verify the image between `fatload` and `go`. Add `bootm` verification before the handover. The verified command chain uses the same QEMU target values and is split into lines for readability: ```text fatload virtio 0:1 0x48000000 ${fit} && @@ -130,9 +132,9 @@ The command chain loads, verifies, and starts Zephyr: - The cache commands flush and disable the caches. On arm64, `dcache off` also disables the memory management unit (MMU), preparing the state Zephyr expects at entry. - `go 0x40000000` jumps to `ZEPHYR_ADDR` without performing verification. Using `bootm start` and `bootm loados` stops before the OS-specific boot code that a plain `bootm` would run. -For QEMU, `BOOT_DEV` is `virtio 0:1`, the disk image's FAT partition. On the AM62L EVM, it is `mmc 1:1`, the SD card's first partition. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. +For QEMU, `BOOT_DEV` is `virtio 0:1`, the disk image's File Allocation Table (FAT) partition. On the AM62L EVM, it's `mmc 1:1`, the SD card's first partition. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. -Failing closed means stopping before Zephyr starts if any command fails. The `&&` operators enforce this: `a && b` runs `b` only if `a` succeeds. Separating the commands with `;` would allow execution to continue after a failed check. In this application, `go` doesn't return, so the refusal message prints only when an earlier command fails. +Failing closed means stopping before Zephyr starts if any command fails. The `&&` operators enforce this condition: `a && b` runs `b` only if `a` succeeds. Separating the commands with `;` would allow execution to continue after a failed check. In this application, `go` doesn't return, so the refusal message prints only when an earlier command fails. Store the chain in the environment variable `zboot`. Three wrapper commands select which FIT it loads: @@ -143,7 +145,7 @@ Store the chain in the environment variable `zboot`. Three wrapper commands sele | `b` | `setenv fit zephyr-b.itb; run zboot` | | `t` | `setenv fit zephyr-tampered.itb; run zboot` | -`a` boots the trusted image. `b` and `t` select the images you'll create during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). +`a` boots the trusted image. `b` and `t` select the images that you'll create during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). Autoboot runs `bootcmd` after a countdown. `CONFIG_PREBOOT` defines `zboot` and its wrappers before the countdown, making them available if you interrupt it. `CONFIG_BOOTCOMMAND="run a"` selects the trusted image by default. `CONFIG_BOOTDELAY=3` gives you three seconds to interrupt autoboot. @@ -169,13 +171,15 @@ CONFIG_BOOTDELAY=3 EOF ``` -Keep the `\"` sequences around the `echo` text; they represent literal quotes inside the Kconfig string. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` and check that your target's device and addresses appear in the command. +Keep the `\"` sequences around the `echo` text. The sequences represent literal quotes inside the Kconfig string. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` and check that your target's device and addresses appear in the command. -Select your target's tab and add its device-tree and boot settings: +Follow the instructions for your target to add its device-tree and boot settings: {{< tabpane-normal >}} {{< tab header="QEMU" >}} -QEMU normally supplies U-Boot's device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you'll create a control device tree containing your key and pass it to the build. Add these settings to enable that approach, disable unsigned legacy images, enable cache commands, and keep the environment from being saved to flash: +QEMU normally supplies U-Boot's device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you'll create a control device tree containing your key and pass it to the build. + +Add the following settings to enable that approach and disable unsigned legacy images. The settings also enable cache commands and keep the environment from being saved to flash: ```bash cat >> $UBOOT_OUT/.config <<'EOF' @@ -189,7 +193,7 @@ CONFIG_ENV_IS_NOWHERE=y EOF ``` -`CONFIG_OF_BOARD` and `CONFIG_OF_OMIT_DTB` off make U-Boot carry a control device tree of its own, the one your key goes into. `CONFIG_LEGACY_IMAGE_FORMAT` off closes the older image format, which carries no signature. `CONFIG_CMD_CACHE` adds the `dcache` and `icache` commands the boot command uses, and `CONFIG_ENV_IS_NOWHERE` keeps the environment out of flash, so nothing saved at the prompt can replace your boot command. +`CONFIG_OF_BOARD` and `CONFIG_OF_OMIT_DTB` off make U-Boot carry a control device tree of its own, the one your key goes into. `CONFIG_LEGACY_IMAGE_FORMAT` off closes the older image format, which carries no signature. `CONFIG_CMD_CACHE` adds the `dcache` and `icache` commands that the boot command uses. `CONFIG_ENV_IS_NOWHERE` keeps the environment out of flash, so nothing saved at the prompt can replace your boot command. {{< /tab >}} {{< tab header="AM62L EVM" >}} TI's U-Boot tree builds its control device tree from source. Set `CONFIG_DEVICE_TREE_INCLUDES` to include your public-key node in that build: @@ -222,28 +226,33 @@ These override warnings are expected because your settings replace default value ## Build U-Boot +Follow the instructions for your target to build U-Boot. + {{< tabpane-normal >}} {{< tab header="QEMU" >}} -Export the device tree for the QEMU machine you'll boot later. This keeps U-Boot's drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits: +Export the device tree for the QEMU machine that you'll boot later: ```bash qemu-system-aarch64 -machine virt,gic-version=3,dumpdtb=$WORK/qemu-virt.dtb -cpu cortex-a53 -m 1G -nographic ``` +This keeps U-Boot's drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits. -Add your public-key node by decompiling the tree, appending `signature.dtsi`, and recompiling it. The device tree compiler (`dtc`) merges the repeated root nodes, adding `/signature` to the exported tree: +Add your public-key node by decompiling the tree, appending `signature.dtsi`, and recompiling it: ```bash dtc -I dtb -O dts -q $WORK/qemu-virt.dtb > $WORK/uboot-control.dts cat $WORK/signature.dtsi >> $WORK/uboot-control.dts dtc -I dts -O dtb -q -o $WORK/uboot-control.dtb $WORK/uboot-control.dts ``` +The device tree compiler (`dtc`) merges the repeated root nodes, adding `/signature` to the exported tree. -Build U-Boot with `EXT_DTB` pointing to your control device tree. Specify `u-boot.bin` and `u-boot.dtb` as the build targets. U-Boot's `scripts/check-of.sh` rejects the default `all` target for this machine, which normally receives its device tree from a prior stage: +Build U-Boot with `EXT_DTB` pointing to your control device tree. Specify `u-boot.bin` and `u-boot.dtb` as the build targets: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ EXT_DTB=$WORK/uboot-control.dtb u-boot.bin u-boot.dtb ``` +U-Boot's `scripts/check-of.sh` rejects the default `all` target for this machine, which normally receives its device tree from a prior stage. The build takes a couple of minutes. Check the two files: @@ -358,4 +367,6 @@ The tool also checks for device-tree and ramdisk subimages. The two `Could not f ## What you've accomplished and what's next -You've built U-Boot with the public key for `key-a` and a boot command that starts Zephyr only after verification succeeds. The trusted FIT passes the host check against the embedded key. Next, you'll prepare the boot media and watch U-Boot verify and start Zephyr on your chosen target. +You've built U-Boot with the public key for `key-a` and a boot command that starts Zephyr only after verification succeeds. The trusted FIT passes the host check against the embedded key. + +Next, you'll prepare the boot media and watch U-Boot verify and start Zephyr on your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index 3508887413..76f8869a76 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -11,15 +11,17 @@ layout: learningpathall Open a terminal and load your target's environment file: -- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` -- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` +- QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` -The AM62L boot ROM reads the first-stage file from a FAT partition on the SD card. Start with TI's card image to preserve the expected layout. QEMU loads `u-boot.bin` from the command line, so its disk image needs only the signed FIT. +The AM62L boot ROM reads the first-stage file from a File Allocation Table (FAT) partition on the SD card. Start with TI's card image to preserve the expected layout. QEMU loads `u-boot.bin` from the command line, so its disk image needs only the signed Flattened Image Tree (FIT). On either target, U-Boot's `fatload` reads `zephyr-a.itb` from the partition selected by `BOOT_DEV`. ## Build the boot media +Follow the instructions for your target to build the boot media. + {{< tabpane-normal >}} {{< tab header="QEMU" >}} Create a 64 MiB disk image with one FAT16 partition starting at sector 2048. Use a master boot record (MBR) partition table and partition type `0x0e`, which specifies FAT16 with logical block addressing (LBA). These commands don't need root privileges: @@ -52,9 +54,9 @@ zephyr-a itb 38742 2026-09-17 22:11 Confirm that the volume contains `zephyr-a.itb`. The partition is accessed as `virtio 0:1`, matching `BOOT_DEV` in `env-qemu.sh`. {{< /tab >}} {{< tab header="AM62L EVM" >}} -The boot ROM reads `tiboot3.bin` from the card's first FAT partition. Preserve TI's FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors; these values determine the extraction size in the command. +The boot ROM reads `tiboot3.bin` from the card's first FAT partition. Preserve TI's FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors. These values determine the extraction size in the command. -Start from the `.wic.xz` you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: +Start from the `.wic.xz` that you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: ```bash xz -dc $WORK/tisdk-default-image.wic.xz | head -c $(( (2048+262144)*512 )) > $WORK/sdcard.img @@ -104,6 +106,8 @@ Confirm that the volume contains the three boot files and `zephyr-a.itb`. ## Start the target +Follow the instructions for your target to start the target. + {{% notice Warning %}} The AM62L EVM steps write to a whole disk with `dd`. Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. {{% /notice %}} @@ -148,9 +152,9 @@ Move the SD card to the board, then connect a USB-C Power Delivery (PD) supply t {{< /tab >}} {{< /tabpane-normal >}} -In QEMU, the log starts with U-Boot because no TF-A or SPL stage runs first. The messages `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are consistent with this setup. `Loading Environment from nowhere... OK` indicates that U-Boot is using its built-in environment. +In QEMU, the log starts with U-Boot because no TF-A or Secondary Program Loader (SPL) stage runs first. The messages `Bloblist at 0 not found (err=-2)` and `Warning: Unexpected devicetree source (not from a prior stage)` are consistent with this setup. `Loading Environment from nowhere... OK` indicates that U-Boot is using its built-in environment. -The AM62L EVM also prints messages from its early firmware stages. Its log up to the autoboot countdown is similar to this example. Your dates, version strings, and countdown will differ. +The AM62L EVM also prints messages from its early firmware stages. Its log up to the autoboot countdown is similar to the following example. Your dates, version strings, and countdown will differ: ```output NOTICE: Booting Trusted Firmware @@ -189,20 +193,20 @@ Net: eth0: ethernet@8000000port@1, eth1: ethernet@8000000port@2 Hit any key to stop autoboot: 3 ``` -Use these messages to identify the boot stages and selected devices: +Use the following messages to identify the boot stages and selected devices: -- `NOTICE: BL1:` and `BL31:` identify TF-A running from `tiboot3.bin` and `tispl.bin` -- `Authentication passed` reports successful authentication by TI's security firmware -- `SoC: AM62LX SR1.1 HS-FS` identifies the SoC's development state -- `MMC:` lists the eMMC as device zero and the SD card as device one +- `NOTICE: BL1:` and `BL31:` identify TF-A running from `tiboot3.bin` and `tispl.bin`. +- `Authentication passed` reports successful authentication by TI's security firmware. +- `SoC: AM62LX SR1.1 HS-FS` identifies the SoC's development state. +- `MMC:` lists the eMMC as device zero and the SD card as device one. -The `Agent 0 Protocol 0x10 Message 0x7: not supported` errors appear in this successful boot log. They don't prevent Zephyr from starting in this example. +The `Agent 0 Protocol 0x10 Message 0x7: not supported` errors appear in this successful boot log. They don't prevent Zephyr from starting. This log comes from a board running TI's prebuilt first two stages, so its `U-Boot SPL` line shows TI's build date instead of yours. ## Watch the trusted image boot -After the three-second countdown, autoboot runs `run a`, the trusted-image command built into U-Boot. This example shows the AM62L EVM; QEMU uses different load addresses and image sizes. Your timings and hash values will differ. The output is similar to: +After the three-second countdown, autoboot runs `run a`, the trusted-image command built into U-Boot. The following example output shows the AM62L EVM. Your timings and hash values will differ. QEMU uses different load addresses and image sizes. The output is similar to: ```output 60198 bytes read in 1 ms (57.4 MiB/s) @@ -241,36 +245,38 @@ started by : U-Boot 'go' after FIT signature verification this image was verified by U-Boot before it ran. ``` -Confirm verification and startup using these messages: +Confirm verification and startup using the following messages: -- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with U-Boot's embedded public key -- `sha256+ OK` confirms that the payload hash matches -- `Loading Kernel Image to 82000000` shows `bootm loados` copying Zephyr to its link address -- `## Starting application at 0x82000000 ...` shows `go` handing control to Zephyr +- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with U-Boot's embedded public key. +- `sha256+ OK` confirms that the payload hash matches. +- `Loading Kernel Image to 82000000` shows `bootm loados` copying Zephyr to its link address. +- `## Starting application at 0x82000000 ...` shows `go` handing control to Zephyr. Zephyr then prints its boot banner and `Hello from ZEPHYR IMAGE A`. On the AM62L EVM, `Secondary CPU core 1 (MPID:0x1) is up` also reports startup of the second core. -For QEMU, expect `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000`, and `board : qemu_cortex_a53/qemu_cortex_a53`. Its board configuration starts one core, so there is no secondary-core startup message. +For QEMU, expect `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000`, and `board : qemu_cortex_a53/qemu_cortex_a53`. Its board configuration starts one core, so there's no secondary-core startup message. ## Troubleshoot boot and console output +Consider the following guidance to troubleshoot issues with your target. + {{< tabpane-normal >}} {{< tab header="QEMU" >}} Check the symptom and try the corresponding step: -1. Nothing prints, or startup hangs after the banner: check that the control device tree matches the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu`, and `-m` used to start QEMU. +1. Nothing prints, or startup hangs after the banner: Check that the control device tree matches the machine. Rebuild it from a fresh `dumpdtb` with the same `-machine`, `-cpu`, and `-m` used to start QEMU. 2. `Failed to load 'zephyr-a.itb'`: U-Boot found the volume but not the file. List it on the host with `mdir -i $BOOT_IMG ::`. -3. `** Bad device specification virtio 0 **`: check the partition type with `sfdisk -l $WORK/disk.img`. If it isn't `0x0e`, rebuild the disk image with the specified type. -4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` did not make it into `.config`; add it and build U-Boot again. +3. `** Bad device specification virtio 0 **`: Check the partition type with `sfdisk -l $WORK/disk.img`. If it isn't `0x0e`, rebuild the disk image with the specified type. +4. `Unknown command 'dcache'`: `CONFIG_CMD_CACHE` didn't make it into `.config`. Add it and build U-Boot again. {{< /tab >}} {{< tab header="AM62L EVM" >}} If the terminal stays empty, check the console connection and whether the ROM loads `tiboot3.bin`: -1. Try all four serial ports that **J7** creates; the console isn't always the first one. -2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks: BOOTMODE `0x0E43` in the same guide. +1. Try all four serial ports that **J7** creates. The console isn't always the first one. +2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks. BOOTMODE `0x0E43` in the same guide. 3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. 4. Flash TI's unchanged `.wic.xz` to a card and boot it. If that also produces no output, check the boot switches, serial port, and power supply before investigating your custom boot files. -5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`, then write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. +5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. Then, write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. {{< /tab >}} {{< /tabpane-normal >}} @@ -279,4 +285,6 @@ If Zephyr prints its boot banner but no application output, check that the [Zeph ## What you've accomplished and what's next -You've prepared the boot media and watched U-Boot verify the FIT signed with `key-a` before starting Zephyr. Next, you can run the optional wrong-key and tampered-image tests to confirm that verification failures prevent startup. You'll then review the trust boundary and the additional work needed for production. +You've prepared the boot media and watched U-Boot verify the FIT signed with `key-a` before starting Zephyr. + +Next, you can run the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/) to confirm that verification failures prevent startup. You can also skip to review [the trust boundary and the additional work needed for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index c1dfba77ca..119cf8180c 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -1,6 +1,6 @@ --- -title: Test that U-Boot refuses a wrong key and a tampered image -description: "Optional: test on the host and target that U-Boot rejects Zephyr FIT images signed with an untrusted key or modified after signing." +title: (Optional) Test that U-Boot refuses a wrong key and a tampered image +description: "Optionally test on the host and target that U-Boot rejects Zephyr FIT images signed with an untrusted key or modified after signing." weight: 8 ### FIXED, DO NOT MODIFY @@ -9,16 +9,16 @@ layout: learningpathall ## Test rejection of untrusted and tampered images -These tests are optional. Create one FIT signed with an untrusted key and another modified after signing. Check both on the host, then confirm that U-Boot refuses to start them on your target. The `b` and `t` commands are already built into U-Boot to select these images. +The following tests are optional. Create one Flattened Image Tree (FIT) signed with an untrusted key and another modified after signing. Check both on the host, then confirm that U-Boot refuses to start them on your target. The `b` and `t` commands are already built into U-Boot to select these images. Open a terminal and load your target's environment file: -- **QEMU**: `source $HOME/zephyr-secure-boot/env-qemu.sh` -- **AM62L EVM**: `source $HOME/zephyr-secure-boot/env-am62l.sh` +- QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` +- AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` ## Build a second Zephyr image -Give the wrong-key image a distinct banner so you can identify it if it unexpectedly starts. +Give the wrong-key image a distinct banner so that you can identify it if it unexpectedly starts. In Workbench for Zephyr, select **Add Application**. Use the same workspace, toolchain, board, and sample as the [trusted image](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/). Enter `hello_b` as the **Project Name**. Copy `prj.conf` and `src/main.c` from `hello`, then replace these two banner lines: @@ -31,7 +31,9 @@ In the **Applications** view, open the context menu for `hello_b` and select **B ## Sign the second image with the untrusted key -Use `key-b`, the second key pair created during [FIT signing](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). Copy the FIT source with `sed`, replacing `key-a` with `key-b` and the `hello` application path with `hello_b`. Then sign the new FIT: +Use `key-b`, the second key pair that you created during [FIT signing](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr/). Copy the FIT source with `sed`, replacing `key-a` with `key-b` and the `hello` application path with `hello_b`. + +Then, sign the new FIT: ```bash sed 's/key-a/key-b/g; s#/hello/#/hello_b/#' $FIT/zephyr-a.its > $FIT/zephyr-b.its @@ -92,7 +94,7 @@ The output is similar to: If `cmp` prints nothing, the selected byte was already `0xff`. Choose another offset inside the payload, such as `seek=32800`, then repeat the `dd` and `cmp` commands. -Expect the signature check to pass and the payload hash check to fail. The signature covers the unchanged configuration and `hash-1` node. The hash covers the payload bytes you modified. +Expect the signature check to pass and the payload hash check to fail. The signature covers the unchanged configuration and `hash-1` node. The hash covers the payload bytes that you modified. ## Check both images on the host @@ -114,7 +116,7 @@ Signature check bad (error 1) Check for `sha256,rsa2048:key-b-` and `Failed to verify required signature 'key-key-a'`. The final verdict, `Signature check bad (error 1)`, confirms rejection. The exit code is one. -Then check the tampered image: +Then, check the tampered image: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-tampered.itb -k $UBOOT_OUT/u-boot.dtb @@ -197,10 +199,10 @@ This example lists the AM62L EVM's six files: three boot files and three FITs. T {{< tabpane-normal >}} {{< tab header="QEMU" >}} -Restart QEMU with the same command used to boot the trusted image. QEMU reads the updated `disk.img` directly; no physical media needs to be written. +Restart QEMU with the same command used to boot the trusted image. QEMU reads the updated `disk.img` directly. No physical media needs to be written. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Write the updated image to the card. Confirm the card's device name before replacing `/dev/sdX`; `dd` overwrites the entire selected disk: +Write the updated image to the card. Confirm the card's device name before replacing `/dev/sdX`. `dd` overwrites the entire selected disk: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress @@ -212,7 +214,7 @@ Move the card to the board, open the console with `picocom`, and power the board ## Run the wrong-key test -Press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A; start the target again and try once more. At the prompt, run the wrong-key test: +Press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A. Start the target again and try once more. At the prompt, run the wrong-key test: ```console => run b @@ -232,9 +234,9 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure: the image's signature doesn't satisfy the required `key-a` check. +Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure, as the image's signature doesn't satisfy the required `key-a` check. -When `bootm start` fails, the `&&` chain skips `go` and prints `*** REFUSED: Zephyr was NOT started ***`. Confirm that no Zephyr banner appears. `Bad Data Hash` and `ERROR -2: can't get kernel image!` can appear for either rejection test; use the preceding messages to identify which check failed. +When `bootm start` fails, the `&&` chain skips `go` and prints `*** REFUSED: Zephyr was NOT started ***`. Confirm that no Zephyr banner appears. `Bad Data Hash` and `ERROR -2: can't get kernel image!` can appear for either rejection test. Use the preceding messages to identify which check failed. ## Run the tampered-image test @@ -281,4 +283,6 @@ To boot the trusted image again, type `run a`. ## What you've accomplished and what's next -You've confirmed that U-Boot rejects the wrong-key image at the signature check and the tampered image at the payload hash check. Neither reaches `go` or starts Zephyr. Next, you'll review what these tests establish and what a production device still needs. +You've confirmed that U-Boot rejects the wrong-key image at the signature check and the tampered image at the payload hash check. Neither reaches `go` or starts Zephyr. + +Next, you'll review what these tests establish and what a production device still needs. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 6bf1cf54b9..a5da8f6c82 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,5 +1,5 @@ --- -title: Review what is verified and what production needs +title: Review what you verified and what you need for production description: Review the trust boundary of U-Boot's Zephyr FIT verification and the key provisioning, boot controls, and release signing needed for production. weight: 9 @@ -9,29 +9,31 @@ layout: learningpathall ## Understand the verification boundary -You've configured U-Boot to verify the Zephyr payload, the last link in the boot chain. U-Boot reads `zephyr-a.itb`, verifies `conf-1` with the embedded public key for `key-a`, and checks the payload hash before jumping to `ZEPHYR_ADDR`. +You've configured U-Boot to verify the Zephyr payload, the last link in the boot chain. U-Boot reads `zephyr-a.itb` and verifies `conf-1` with the embedded public key for `key-a`. It checks the payload hash before jumping to `ZEPHYR_ADDR`. -If you ran the optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), you also confirmed two rejection cases. The wrong-key FIT fails with `Failed to verify required signature 'key-key-a'`. The modified payload fails with `Bad hash value for 'hash-1'`. Neither starts Zephyr. +If you ran the optional [refusal tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/), you also confirmed two rejection cases. The wrong-key Flattened Image Tree (FIT) fails with `Failed to verify required signature 'key-key-a'`. The modified payload fails with `Bad hash value for 'hash-1'`. Neither starts Zephyr. The earlier stages aren't authenticated against your key in either setup. QEMU loads `u-boot.bin` directly, without a boot ROM, security firmware, or eFuses to authenticate it. -The AM62L EVM has those earlier stages, but you've left it in TI's High Security, Field Securable (HS-FS) development state. In this state, the ROM and vendor firmware check boot files but accept any signing key. The U-Boot banner identifies it as `SoC: AM62LX SR1.1 HS-FS`. Provisioning your key into the one-time-programmable eFuses moves the device to High Security, Security Enforced (HS-SE). +The AM62L evaluation module (EVM) has those earlier stages, but you've left it in TI's High Security, Field Securable (HS-FS) development state. In this state, the ROM and vendor firmware check boot files but accept any signing key. The U-Boot banner identifies it as `SoC: AM62LX SR1.1 HS-FS`. Provisioning your key into the one-time-programmable eFuses moves the device to High Security, Security Enforced (HS-SE). -On the EVM, the trusted public key is inside `u-boot.img` on an unprotected FAT partition. Anyone who can replace that file can replace the key and boot command. Production needs an authenticated U-Boot and controls that prevent bypassing its verification step. +On the EVM, the trusted public key is inside `u-boot.img` on an unprotected File Allocation Table (FAT) partition. Anyone who can replace that file can replace the key and boot command. Production needs an authenticated U-Boot and controls that prevent bypassing its verification step. ## What production needs +For production, you need the following: + ### Fuse your key and move to the production state TI's one-time-programmable (OTP) Keywriter tool, called Keywriter Lite on the AM62L, burns the public-key hash into the eFuses and moves the chip to HS-SE. You then re-sign `tiboot3.bin`, `tispl.bin`, and `u-boot.img` with that key. -The ROM and security firmware then require boot files signed with your key, including U-Boot. This authenticates the U-Boot image containing the FIT public key. Key provisioning is vendor-specific and isn't covered by these steps. +The ROM and security firmware then require boot files signed with your key, including U-Boot. This authenticates the U-Boot image containing the FIT public key. Key provisioning is vendor-specific and isn't covered in these steps. ### Keep the environment built in `bootcmd` selects the autoboot command. `preboot` defines `zboot` and the `a`, `b`, and `t` wrappers before autoboot starts. -Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary you built. Check that your board's `.config` includes the same setting. +Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary that you built. Check that your board's `.config` includes the same setting. {{% notice Warning %}} Don't enable `CONFIG_ENV_IS_IN_FAT` for this boot configuration. It stores the environment in `uboot.env` on the boot media. A saved environment can override `bootcmd` and `preboot`, allowing someone with write access to the card to bypass verification. @@ -41,11 +43,11 @@ Don't enable `CONFIG_ENV_IS_IN_FAT` for this boot configuration. It stores the e With `CONFIG_BOOTDELAY=3`, someone with serial-console access can interrupt autoboot and run `fatload` and `go` without verification. Set `CONFIG_BOOTDELAY=-2` to remove the delay and keyboard check, or use `CONFIG_AUTOBOOT_KEYED` to require a known string to interrupt autoboot. -These settings cover only the countdown. If `bootcmd` returns after rejecting an image, U-Boot still opens the `=>` prompt. In a production build, add `reset` after the refusal `echo` in `zboot`, so a failed boot restarts the board instead of opening the console. +These settings cover only the countdown. If `bootcmd` returns after rejecting an image, U-Boot still opens the `=>` prompt. In a production build, add `reset` after the refusal `echo` in `zboot`. This ensures that a failed boot restarts the board instead of opening the console. ### Protect production keys and sign during release -The demonstration uses `sha256,rsa2048`; the AM62L's own boot chain uses `sha512,rsa4096`. To use the latter for your FIT: +You used `sha256,rsa2048`. The AM62L's own boot chain uses `sha512,rsa4096`. To use the latter for your FIT: - Generate keys with `rsa_keygen_bits:4096`. - Set `algo = "sha512,rsa4096"` in both `zephyr-a.its` and `key.its`. @@ -58,14 +60,14 @@ Generate production keys in a hardware security module (HSM), or at least away f Start by updating the target values and paths in your environment file: - `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. -- `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It is Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. -- `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions; otherwise `bootm loados` copies Zephyr over the FIT it is still reading. -- `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC; `mmc list` at the U-Boot prompt shows your board's numbering. +- `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It's Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. +- `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions. Otherwise, `bootm loados` copies Zephyr over the FIT it is still reading. +- `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC. `mmc list` at the U-Boot prompt shows your board's numbering. - `UBOOT_DEFCONFIG` selects the board's U-Boot default configuration. Check for `CONFIG_FIT=y`, `CONFIG_FIT_SIGNATURE=y`, and `CONFIG_RSA=y`. Add missing settings to the [U-Boot configuration fragment](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Disable legacy images with `# CONFIG_LEGACY_IMAGE_FORMAT is not set`. -- `UBOOT_SRC`, `CROSS` and `UBOOT_CC` point at the U-Boot source and the compiler that builds it, with `SDK`, `PREBUILT` and `SYSROOT` added when they come from a vendor SDK, as on the AM62L. -- `BOOT_IMG` is the boot volume `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. +- `UBOOT_SRC`, `CROSS`, and `UBOOT_CC` point at the U-Boot source and the compiler that builds it. `SDK`, `PREBUILT`, and `SYSROOT` are added when they come from a vendor SDK, as on the AM62L. +- `BOOT_IMG` is the boot volume that `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. -Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and an SPL file. Follow the target's requirements for media layout, boot switches, and console access. +Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and a Secondary Program Loader (SPL) file. Follow the target's requirements for media layout, boot switches, and console access. Check how the target obtains its control device tree. `CONFIG_DEVICE_TREE_INCLUDES` adds the key node when the tree is built from source with `CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`, as on the AM62L EVM. @@ -73,8 +75,11 @@ For a board using a tree from a prior stage (`CONFIG_OF_BOARD=y`), follow the QE Reuse the FIT signing and verification workflow, adapting the target values in the FIT source and boot command as needed. -## Where to go from here +## What you've accomplished + +You've established verification of the Zephyr payload and learned how you can extend the workflow to production and to another Cortex-A board. + +Before using this approach in production, authenticate the earlier boot stages. Also protect the boot environment and console and move signing into a controlled release process. To sign your own application for the same target, point `data` in `zephyr-a.its` to its `zephyr.bin` and sign the FIT again. To use another Cortex-A board, adapt the environment, build inputs, and boot media using the checklist in this section. -You've established verification of the Zephyr payload. Before using this approach in production, authenticate the earlier boot stages, protect the boot environment and console, and move signing into a controlled release process. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index f5615391cf..db7eb5c81c 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -1,10 +1,6 @@ --- title: Boot a signed Zephyr image with U-Boot on Arm Cortex-A -draft: true -cascade: - draft: true - description: Sign a Zephyr FIT image and configure U-Boot to verify its signature and payload hash before booting on Arm Cortex-A in QEMU or on a TI AM62L EVM. minutes_to_complete: 120 @@ -12,10 +8,10 @@ minutes_to_complete: 120 who_is_this_for: This is an advanced topic for embedded developers who boot Zephyr from U-Boot on an Arm Cortex-A processor and want U-Boot to verify the Zephyr image before starting it. learning_objectives: - - Identify where U-Boot verifies Zephyr in the Arm Cortex-A boot chain - - Build and sign a Flattened Image Tree (FIT) containing Zephyr, and embed the public key in U-Boot without changing its source - - Configure U-Boot to verify Zephyr before booting, and optionally test rejection of wrong-key and tampered images - - Explain the verification boundary in QEMU and on a development board, and how fusing your key extends trust in production + - Identify where U-Boot verifies Zephyr in the Arm Cortex-A boot chain. + - Build and sign a Flattened Image Tree (FIT) containing Zephyr, and embed the public key in U-Boot without changing its source. + - Configure U-Boot to verify Zephyr before booting, and optionally test rejection of wrong-key and tampered images. + - Identify the verification boundary in QEMU and on a development board, and how fusing your key extends trust in production. prerequisites: - One of two targets - QEMU, which needs no hardware, or a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with accessories to power it, write an SD card, and attach a serial console From 063e068358d2e94fc973bde359828e16a1a28109 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Tue, 6 Oct 2026 13:26:05 -0500 Subject: [PATCH 62/66] adding summary and FAQs --- .../6-boot-the-target.md | 2 +- .../8-production.md | 4 +- .../_index.md | 48 ++++++++++++++++++- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index 76f8869a76..c4dbd3f072 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -1,5 +1,5 @@ --- -title: Boot the target +title: Boot your QEMU or TI AM62L EVM target description: Prepare boot media for QEMU or the TI AM62L EVM and confirm that U-Boot verifies the signed Zephyr FIT before starting the application. weight: 7 diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index a5da8f6c82..b36154fe52 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -19,9 +19,9 @@ The AM62L evaluation module (EVM) has those earlier stages, but you've left it i On the EVM, the trusted public key is inside `u-boot.img` on an unprotected File Allocation Table (FAT) partition. Anyone who can replace that file can replace the key and boot command. Production needs an authenticated U-Boot and controls that prevent bypassing its verification step. -## What production needs +## What you need for production -For production, you need the following: +For production, ensure that you complete the following steps: ### Fuse your key and move to the production state diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index db7eb5c81c..1f1e9392b6 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -19,13 +19,59 @@ prerequisites: - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) installed - Basic knowledge of U-Boot and the Linux command line +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-06T18:12:37Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: d29bf65cd5b55f7b412beeb0a62873a02eec10189fb6c259f2a5f84f9d016416 + summary_generated_at: '2026-10-06T18:12:37Z' + summary_source_hash: d29bf65cd5b55f7b412beeb0a62873a02eec10189fb6c259f2a5f84f9d016416 + faq_generated_at: '2026-10-06T18:12:37Z' + faq_source_hash: d29bf65cd5b55f7b412beeb0a62873a02eec10189fb6c259f2a5f84f9d016416 + summary: >- + You'll build a Zephyr image for Arm Cortex-A and configure U-Boot to verify its signed FIT before booting. After choosing QEMU or a TI AM62L evaluation module (EVM), you'll set up the host + tools, build Zephyr, sign the FIT, and embed the trusted public key in U-Boot. You'll then boot + the image, optionally test rejection of untrusted or tampered images, and examine what remains + outside the verification boundary. + faqs: + - question: Do I need an AM62L EVM to follow this Learning Path? + answer: >- + No. You can use QEMU without hardware. If you have an AM62L EVM, follow its target-specific + setup and boot-media instructions instead. + - question: Why does U-Boot need the public key in its control device tree? + answer: >- + You'll embed the trusted public key in U-Boot's control device tree so that it can verify the FIT + configuration signature. The key's `required = "conf"` setting makes U-Boot reject a FIT + without a valid signature from that key. + - question: How can I check the signed FIT before booting the target? + answer: >- + Use U-Boot's `fit_check_sign` with your signed FIT and built `u-boot.dtb`. This checks the + FIT against the public key in the control device tree before you prepare the boot media. + - question: How do I confirm that verification succeeded on the target? + answer: >- + Look for `sha256,rsa2048:key-a+ OK` in U-Boot's output, followed by the Zephyr image A banner. + You can also run the optional wrong-key and tampered-image tests to check that U-Boot refuses + to start either image. + - question: Does this setup authenticate U-Boot as well as Zephyr? + answer: >- + No. In QEMU, you run U-Boot without an earlier stage that authenticates it. On the AM62L EVM, + you leave the device in High Security, Field Securable (HS-FS) development state, where earlier stages accept boot files + signed with any key. To extend trust to U-Boot in production, you need to provision your key, + move the device to High Security, Security Enforced (HS-SE), and sign the earlier boot files. +# END generated_summary_faq + author: - Roy Jamil - Odin Shen # New Learning Paths are opted in for the next manual generated summary/FAQ run. # The generator resets this to false after a successful write. -generate_summary_faq: true +generate_summary_faq: false # Optional one-shot controls: set either field to true to regenerate just that # generated section the next time the summary/FAQ tool runs. The tool resets From bea0ea756a130bab53eabb49e38a200a4ee59534 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Tue, 6 Oct 2026 13:41:32 -0500 Subject: [PATCH 63/66] assisted edits --- .../1-boot-chain.md | 2 +- .../2-set-up-tools.md | 14 +++++++------- .../3-build-zephyr.md | 7 ++++--- .../4-sign-zephyr.md | 2 +- .../6-boot-the-target.md | 4 ++-- .../8-production.md | 6 +++--- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index fb0fcb23ef..43b5d2a425 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -82,7 +82,7 @@ If you choose QEMU as your target, there's no key to fuse and nothing checks U-B If you choose AM62L EVM as your target, leave it in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. -You'll review what a production device needs in [Review what you verified and what you need for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). +You'll review [U-Boot's Zephyr FIT verification boundary and production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) after booting the image. ## What you've learned and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index 7eb439916e..a4b9255fd5 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -18,12 +18,12 @@ To install host tools on Visual Studio Code: 1. Open Visual Studio Code and select **Workbench for Zephyr** in the Activity Bar. 2. In its panel, select **Install Host Tools** to install the dependencies used to build Zephyr: -- Python -- CMake -- Ninja -- Git -- Device Tree Compiler -- West + - Python + - CMake + - Ninja + - Git + - Device Tree Compiler + - West 3. When installation finishes, select **Verify Host Tools**. Resolve any missing-tool errors before continuing. @@ -108,7 +108,7 @@ mkdir -p $KEYS $FIT {{< /tab >}} {{< /tabpane >}} -The variables are available only in the shell where you load the environment file. If you open a new terminal, you'll have to load the environment file again. If you adapt the workflow to another board, you'll learn how to choose its target values and paths in [Review what you verified and what you need for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). +The variables are available only in the shell where you load the environment file. If you open a new terminal, you'll have to load the environment file again. If you adapt the workflow to another board, you'll learn how to choose its target values and paths in the [optional board-adaptation guidance](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). {{% notice Note %}} Example output shows paths under `/home/user/`, the home directory of the account that produced it. The paths in your output will reflect your own username. On a standard Ubuntu cloud instance, for example, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically. Only the printed paths in the output might differ. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index 0dba724f4f..e686b5d660 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -74,9 +74,10 @@ Select **Add Application** and fill in the wizard: 8. For **Application type**, select **West workspace application**. 9. For **Project Location**, ensure the value is **`zephyrproject/applications/hello`**, filled in by the wizard. - Check that the board identifier matches `BOARD` in your environment file: `qemu_cortex_a53` for QEMU or `am62l_evm/am62l3/a53` for the AM62L EVM. -9. Select **Create**. -![Workbench for Zephyr Add Application wizard creating hello from the hello_world sample with the zephyrproject workspace and Zephyr SDK 1.0.1. The AM62L EVM is selected; the callout identifies the alternative QEMU Cortex-A53 board.#center](images/wz-add-application.webp "Create hello for your chosen target") + Check that the board identifier matches `BOARD` in your environment file: `qemu_cortex_a53` for QEMU or `am62l_evm/am62l3/a53` for the AM62L EVM. +10. Select **Create**. + + ![Workbench for Zephyr Add Application wizard creating hello from the hello_world sample with the zephyrproject workspace and Zephyr SDK 1.0.1. The AM62L EVM is selected; the callout identifies the alternative QEMU Cortex-A53 board.#center](images/wz-add-application.webp "Create hello for your chosen target") The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`. `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index aa8418bfc2..abd690e90a 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -78,7 +78,7 @@ key-a.crt key-a.key key-b.crt key-b.key - `.crt` is a self-signed certificate containing the public key. - The shared file-name stem, ``, matches `key-name-hint` in the FIT source. -These 2048-bit keys are generated on the build host for this demonstration. The later section, [Review what you verified and what you need for production](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/), covers production key handling. +These 2048-bit keys are generated on the build host for this demonstration. The later section on [U-Boot's Zephyr FIT verification boundary and production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production key handling. ## Write the FIT source diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index c4dbd3f072..09eab839a1 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -1,5 +1,5 @@ --- -title: Boot your QEMU or TI AM62L EVM target +title: Boot the signed Zephyr FIT with U-Boot on QEMU or the TI AM62L EVM description: Prepare boot media for QEMU or the TI AM62L EVM and confirm that U-Boot verifies the signed Zephyr FIT before starting the application. weight: 7 @@ -273,7 +273,7 @@ Check the symptom and try the corresponding step: If the terminal stays empty, check the console connection and whether the ROM loads `tiboot3.bin`: 1. Try all four serial ports that **J7** creates. The console isn't always the first one. -2. Check **SW3**, or switch to the full pincount setting, which uses all three switch banks. BOOTMODE `0x0E43` in the same guide. +2. Check **SW3**, or switch to the full pin-count setting, which uses all three switch banks. See BOOTMODE `0x0E43` in the AM62L EVM User's Guide. 3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. 4. Flash TI's unchanged `.wic.xz` to a card and boot it. If that also produces no output, check the boot switches, serial port, and power supply before investigating your custom boot files. 5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. Then, write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index b36154fe52..0d67b93011 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,5 +1,5 @@ --- -title: Review what you verified and what you need for production +title: Review U-Boot's Zephyr FIT verification boundary and production needs description: Review the trust boundary of U-Boot's Zephyr FIT verification and the key provisioning, boot controls, and release signing needed for production. weight: 9 @@ -55,9 +55,9 @@ You used `sha256,rsa2048`. The AM62L's own boot chain uses `sha512,rsa4096`. To Generate production keys in a hardware security module (HSM), or at least away from the build host. Sign during the release process and restrict private-key access to that process. -## Adapt the workflow to another Cortex-A board +## Optional follow-up: Adapt the workflow to another Cortex-A board -Start by updating the target values and paths in your environment file: +If you want to use another Cortex-A board, start by updating the target values and paths in your environment file: - `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. - `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It's Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. From 9f1012586bbc5a15e6b268692817fd7e51379e31 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Tue, 6 Oct 2026 13:44:07 -0500 Subject: [PATCH 64/66] nit --- .../zephyr-signed-fit-uboot-cortex-a/8-production.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index 0d67b93011..edbc526139 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -55,7 +55,7 @@ You used `sha256,rsa2048`. The AM62L's own boot chain uses `sha512,rsa4096`. To Generate production keys in a hardware security module (HSM), or at least away from the build host. Sign during the release process and restrict private-key access to that process. -## Optional follow-up: Adapt the workflow to another Cortex-A board +## Adapt the workflow to another Cortex-A board If you want to use another Cortex-A board, start by updating the target values and paths in your environment file: From bbeb0c2d939b7fce92ecd60b0406577137e75c52 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Tue, 6 Oct 2026 15:23:38 -0500 Subject: [PATCH 65/66] another pass --- .../1-boot-chain.md | 40 +++++++++---------- .../2-set-up-tools.md | 14 +++---- .../3-build-zephyr.md | 32 ++++++++------- .../4-sign-zephyr.md | 20 +++++----- .../5-build-uboot.md | 22 +++++----- .../6-boot-the-target.md | 28 ++++++------- .../7-test-the-checks.md | 12 +++--- .../8-production.md | 19 +++++---- .../_index.md | 18 ++++----- 9 files changed, 103 insertions(+), 102 deletions(-) diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md index 43b5d2a425..196a456b18 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/1-boot-chain.md @@ -1,5 +1,5 @@ --- -title: Learn where Zephyr sits in the Cortex-A boot chain +title: Understand where U-Boot verifies Zephyr in the Cortex-A boot chain description: Learn why Zephyr on a Cortex-A processor is a payload that U-Boot can verify, what a FIT image contains, and how the boot chain hands control to it. weight: 2 @@ -7,9 +7,9 @@ weight: 2 layout: learningpathall --- -## Zephyr is the last stage, not the first +## Where Zephyr fits in the Cortex-A boot chain -On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a bootloader such as MCUboot. A Cortex-A processor starts in a read-only memory (ROM) inside the system on chip (SoC), and several firmware stages run before your code. Zephyr is the last stage, so the stage before it, usually U-Boot, can check it before starting it. +On a microcontroller (MCU), Zephyr runs first, so secure boot means adding a bootloader such as MCUboot. A Cortex-A processor starts in a read-only memory (ROM) inside the system on chip (SoC), and several firmware stages run before your code. Zephyr is the last stage, so the stage before it — usually U-Boot — can check it before starting it. You'll package Zephyr in a Flattened Image Tree (FIT) with a signature that U-Boot verifies before starting the image. @@ -17,13 +17,13 @@ You'll build and boot a verified Zephyr image either in QEMU without hardware, o ## The boot chain on a Cortex-A board -On an Armv8-A board using U-Boot, boot proceeds from the SoC's boot ROM through early firmware to U-Boot. U-Boot then loads and starts the payload: Zephyr in your setup. +On an Armv8-A board using U-Boot, boot proceeds from the boot ROM of the SoC through early firmware to U-Boot. U-Boot then loads and starts the payload. -The early firmware is usually the Secondary Program Loader (SPL), a small U-Boot that loads the full one. In addition, Trusted Firmware-A (TF-A) and Open Portable Trusted Execution Environment (OP-TEE) run in the Secure world. Many SoCs add the vendor's own security firmware, which checks the later stages. +The early firmware is usually the Secondary Program Loader (SPL), a small U-Boot that loads the full one. In addition, Trusted Firmware-A (TF-A) and Open Portable Trusted Execution Environment (OP-TEE) run in the Secure world. Many SoCs add security firmware from the vendor, which checks the later stages. -You'll build the SPL with U-Boot. The rest comes prebuilt in the vendor's SDK. +You'll build the SPL with U-Boot. The rest comes prebuilt in the SDK from the vendor. -![Cortex-A boot chain from boot ROM through early firmware and U-Boot to a signed Zephyr FIT image. U-Boot verifies Zephyr; trust in the earlier stages depends on the platform's secure-boot configuration.#center](images/boot-chain-generic.svg "U-Boot verifies Zephyr in the Cortex-A boot chain") +![Cortex-A boot chain from boot ROM through early firmware and U-Boot to a signed Zephyr FIT image. U-Boot verifies Zephyr; trust in the earlier stages depends on the secure-boot configuration of the platform.#center](images/boot-chain-generic.svg "U-Boot verifies Zephyr in the Cortex-A boot chain") ## Choose your target @@ -33,56 +33,56 @@ Choose between QEMU and AM62L EVM. QEMU is the default target for which you need |---|---|---| | Hardware | None | The board, a micro-SD card and reader, a micro-USB cable, and a USB-C PD supply | | Download | U-Boot source, 32 MB | TI Processor SDK, 4.5 GB, unpacks to 11 GB | -| Stages before U-Boot | None: QEMU starts `u-boot.bin` directly | Boot ROM, `tiboot3.bin`, `tispl.bin` | +| Stages before U-Boot | None, as QEMU starts `u-boot.bin` directly | Boot ROM, `tiboot3.bin`, `tispl.bin` | | Zephyr board | `qemu_cortex_a53` | `am62l_evm/am62l3/a53` | | Boot media | File Allocation Table (FAT) partition in a 64 MiB disk image, `virtio 0:1` | FAT partition on a micro-SD card, `mmc 1:1` | | Console | The terminal that you start QEMU in | USB serial at 115200 baud | ### The boot chain in QEMU -QEMU's `virt` machine has no boot ROM and no vendor firmware. It loads the file that you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: +The QEMU `virt` machine has no boot ROM and no vendor firmware. It loads the file that you pass to `-bios` and starts the Cortex-A53 on it, so the chain is two links long: ```output QEMU -bios u-boot.bin -> U-Boot -> Zephyr inside a FIT image ``` -QEMU runs U-Boot's FIT verifier, but nothing authenticates U-Boot itself. +QEMU runs the FIT verifier in U-Boot, but nothing authenticates U-Boot itself. ### The boot chain on the AM62L EVM -On the AM62L, the early stages are two files. `tiboot3.bin` holds TF-A's first stage and TI Foundational Security (TIFS), TI's security firmware. `tispl.bin` holds the rest of TF-A, OP-TEE, and the SPL. You'll build them together with `u-boot.img` when you build U-Boot. The EVM ships in TI's High Security, Field Securable (HS-FS) development state. +On the AM62L, the early stages are two files. `tiboot3.bin` holds the first stage of TF-A and TI Foundational Security (TIFS), TI's security firmware. `tispl.bin` holds the rest of TF-A, OP-TEE, and the SPL. You'll build them together with `u-boot.img` when you build U-Boot. The EVM ships in TI's High Security, Field Securable (HS-FS) development state. ![AM62L boot chain from boot ROM through `tiboot3.bin`, `tispl.bin`, and `u-boot.img` to the Zephyr FIT image. In HS-FS development mode, the early stages accept any signing key; U-Boot verifies Zephyr against your key before starting it.#center](images/boot-chain.svg "The same chain on the AM62L, with TI's file names") ## What a FIT image is -A FIT is U-Boot's container format for boot images. It's a device tree blob (DTB) whose nodes hold images instead of hardware descriptions. +A FIT is a container format for U-Boot boot images. It's a device tree blob (DTB) whose nodes hold images instead of hardware descriptions. -The signed FIT that you'll build contains: +The signed FIT that you'll build contains the following: -- The image itself, which is Zephyr's `zephyr.bin` +- The image itself, which is the Zephyr binary `zephyr.bin` - A hash of that image, so that U-Boot can tell if a byte changed - A configuration that names the image to use (`kernel = "kernel-1"`) and carries a signature -`mkimage`, a U-Boot host tool, builds the FIT from a text source `.its` file and signs it with your private key. On the target, U-Boot's `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. +`mkimage`, a U-Boot host tool, builds the FIT from a text source `.its` file and signs it with your private key. On the target, the U-Boot `bootm` command parses the FIT, verifies the signature and the hash, and copies the image to its load address. You'll sign the FIT configuration with `sha256,rsa2048`, which combines SHA-256 hashing with a 2048-bit RSA key. -The public key lives inside U-Boot's own device tree, the control device tree, under a `/signature` node. That key node carries `required = "conf"`. Every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature still boots. +The public key lives under a `/signature` node in the U-Boot control device tree. That key node carries `required = "conf"`. Every configuration in every FIT must carry a valid signature by this key, or U-Boot refuses to load it. Without `required`, a FIT with no signature still boots. -![Signed FIT image beside U-Boot's control device tree, which holds the required public key. The signature covers the FIT configuration and payload hash; the hash covers the Zephyr image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") +![Signed FIT image beside the U-Boot control device tree, which holds the required public key. The signature covers the FIT configuration and payload hash; the hash covers the Zephyr image bytes.#center](images/fit-signature.svg "What the signature and the hash each cover in a FIT image") The signature doesn't cover the image bytes. It covers the configuration node plus the hash node, and the hash covers the bytes. ## Verify Zephyr before starting it -Configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, U-Boot's command for jumping to an address. +Configure U-Boot to verify the Zephyr FIT before starting Zephyr with `go`, a U-Boot command for jumping to an address. If you choose QEMU as your target, there's no key to fuse and nothing checks U-Boot at all. -If you choose AM62L EVM as your target, leave it in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot's check of Zephyr is enforced either way. +If you choose AM62L EVM as your target, leave it in its development state without fusing your key into the chip. In that state, the ROM and vendor firmware accept boot files signed with any key. U-Boot verifies Zephyr either way. -You'll review [U-Boot's Zephyr FIT verification boundary and production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) after booting the image. +After booting the image, you'll review [the Zephyr FIT verification boundary and production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). ## What you've learned and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md index a4b9255fd5..ecbf9a4936 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools.md @@ -7,7 +7,7 @@ weight: 3 layout: learningpathall --- -## What you need +## What you need to set up You need Zephyr host tools, U-Boot source, and a cross compiler for your chosen target. For QEMU, download U-Boot source and install the emulator and compiler from Ubuntu packages. For the AM62L evaluation module (EVM), the TI Processor SDK supplies U-Boot source, the cross compiler, and prebuilt early firmware. @@ -37,12 +37,12 @@ Install the additional packages used to build U-Boot, sign images, and prepare t sudo apt install -y build-essential bison flex swig python3-dev python3-setuptools libssl-dev libgnutls28-dev uuid-dev device-tree-compiler openssl mtools dosfstools xz-utils curl picocom ``` -If you chose QEMU as your target, install the emulator and U-Boot cross compiler with this command: +If you chose QEMU as your target, install the emulator and U-Boot cross compiler: ```bash sudo apt install -y qemu-system-arm gcc-aarch64-linux-gnu ``` -For the AM62L EVM, skip installing the emulator. You'll get the cross compiler from the TI SDK +For the AM62L EVM, skip installing the emulator. You'll get the cross compiler from the TI SDK. ## Create the working directory and environment file @@ -61,7 +61,7 @@ export BOARD=qemu_cortex_a53 # Zephyr board identifier export ZEPHYR_ADDR=0x40000000 # Zephyr link address, FIT load and go target export FIT_ADDR=0x48000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR export BOOT_DEV="virtio 0:1" # U-Boot device and partition that hold the files -export UBOOT_DEFCONFIG=qemu_arm64_defconfig # the target's U-Boot configuration +export UBOOT_DEFCONFIG=qemu_arm64_defconfig # U-Boot configuration for the target # No vendor SDK: U-Boot from the U-Boot project, cross compiler from Ubuntu export UBOOT_SRC=$WORK/u-boot-2025.07 @@ -87,7 +87,7 @@ export BOARD=am62l_evm/am62l3/a53 # Zephyr board identifier export ZEPHYR_ADDR=0x82000000 # Zephyr link address, FIT load and go target export FIT_ADDR=0x90000000 # where U-Boot loads the FIT, clear of ZEPHYR_ADDR export BOOT_DEV="mmc 1:1" # U-Boot device and partition that hold the files -export UBOOT_DEFCONFIG=am62lx_evm_defconfig # the target's U-Boot configuration +export UBOOT_DEFCONFIG=am62lx_evm_defconfig # U-Boot configuration for the target # Vendor SDK: U-Boot source, firmware that runs before U-Boot, cross compiler and its libraries export SDK=$WORK/tisdk @@ -111,7 +111,7 @@ mkdir -p $KEYS $FIT The variables are available only in the shell where you load the environment file. If you open a new terminal, you'll have to load the environment file again. If you adapt the workflow to another board, you'll learn how to choose its target values and paths in the [optional board-adaptation guidance](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/). {{% notice Note %}} -Example output shows paths under `/home/user/`, the home directory of the account that produced it. The paths in your output will reflect your own username. On a standard Ubuntu cloud instance, for example, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically. Only the printed paths in the output might differ. +Example output shows paths under `/home/user/`, the home directory of the account that produced it. The paths in your output will reflect your own username. For example, on a standard Ubuntu cloud instance, they appear under `/home/ubuntu/`. The commands use `$HOME` and `$WORK`, so they adapt to your account automatically. Only the printed paths in the example outputs differ. {{% /notice %}} ## Get the U-Boot source and the cross compiler @@ -209,6 +209,6 @@ The download is about 1.3 GB. Leave it compressed. When you prepare the boot med ## What you've accomplished and what's next -You've installed the Zephyr host tools and U-Boot build packages, obtained your target's U-Boot source and cross compiler, and created a reusable environment file. For the AM62L EVM, you've also set up the early firmware and SD card image. +You've installed the Zephyr host tools and U-Boot build packages. You've also obtained the U-Boot source and cross compiler for your target, and created a reusable environment file. For the AM62L EVM, you've additionally set up the early firmware and SD card image. Next, you'll import the AArch64 toolchain, create a West workspace, and build a small Zephyr application for your chosen target. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md index e686b5d660..80f3e76997 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr.md @@ -11,7 +11,7 @@ layout: learningpathall Use Workbench for Zephyr to import an AArch64 toolchain, create a Zephyr workspace, and build your application. The steps are the same for both targets. Select the board that matches your target. -Open VS Code on your working directory: +Open Visual Studio Code on your working directory: ```bash code $HOME/zephyr-secure-boot @@ -20,12 +20,12 @@ code $HOME/zephyr-secure-boot Select the **Workbench for Zephyr** icon in the Activity Bar. Its panel contains the **Applications**, **West workspaces**, **Toolchains**, and **Host tools** views. {{% notice Note %}} -The screenshots show Windows paths, a globally installed SDK, and the AM62L evaluation module (EVM). On Ubuntu, use your own paths and the SDK location that you choose. If you chose QEMU, select `qemu_cortex_a53` wherever a board is requested. +The screenshots show Windows paths, a globally installed SDK, and the AM62L evaluation module (EVM). On Ubuntu, use your own paths and SDK location. If you chose QEMU, select `qemu_cortex_a53` wherever a board is requested. {{% /notice %}} ## Import the AArch64 toolchain -Use the Zephyr SDK's `aarch64-zephyr-elf` compiler for your Cortex-A53 target. Select the **Minimal** SDK type and **aarch64** architecture to download that toolchain. +Use the `aarch64-zephyr-elf` compiler from the Zephyr SDK for your Cortex-A53 target. Select the **Minimal** SDK type and **aarch64** architecture to download that toolchain. In the **Workbench for Zephyr** panel, select **Add Toolchain** and fill in the form: @@ -58,7 +58,7 @@ Create a Zephyr 4.4.2 workspace for your chosen target. The same workspace suppo 7. Select **Import**. -Workbench downloads Zephyr, the vendor's hardware abstraction layer (HAL), and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. +Workbench downloads Zephyr, the hardware abstraction layer (HAL) from the vendor, and other modules into `zephyrproject/deps`. This can take several minutes. When it finishes, confirm that `zephyrproject` appears in the **West workspaces** view. ## Create the application @@ -79,9 +79,9 @@ Select **Add Application** and fill in the wizard: ![Workbench for Zephyr Add Application wizard creating hello from the hello_world sample with the zephyrproject workspace and Zephyr SDK 1.0.1. The AM62L EVM is selected; the callout identifies the alternative QEMU Cortex-A53 board.#center](images/wz-add-application.webp "Create hello for your chosen target") -The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`. `zephyrproject/applications/hello` holds the sample's `CMakeLists.txt`, `prj.conf` and `src/main.c`. +The application `hello` appears in the **Applications** view, marked `[with zephyrproject]`. `zephyrproject/applications/hello` holds the `CMakeLists.txt`, `prj.conf` and `src/main.c` files for the sample. -## Replace the sample's files +## Replace files in the sample Leave `CMakeLists.txt` as it is and replace the other two files. @@ -96,7 +96,7 @@ CONFIG_AARCH64_IMAGE_HEADER=y `CONFIG_PRINTK` enables console output with `printk()`. `CONFIG_BOOT_BANNER` prints the `*** Booting Zephyr OS build ... ***` line, confirming that Zephyr has started. -Replace the contents of `src/main.c` with the following code. Its banner identifies image A and the key that you'll use to sign it. This helps you distinguish the images during the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). +Replace the contents of `src/main.c` with the following code: ```c #include @@ -120,19 +120,21 @@ int main(void) } ``` +Its banner identifies image A and the key that you'll use to sign it. This helps you distinguish the images if you run the optional [wrong-key and tampered-image tests](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks/). + Save both files. ## Configure Non-secure execution and the arm64 header `CONFIG_ARMV8_A_NS=y` tells Zephyr that it runs in the Non-secure world, the one U-Boot hands it. Without it, the driver of the Generic Interrupt Controller (GICv3) never programs the Non-secure registers. The timer interrupt never arrives, and Zephyr hangs right after its banner. -`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The header's first instruction is `b __start`, a branch to Zephyr's real entry point. U-Boot needs that branch only at offset 0. Without the header, `go` jumps into whatever the linker placed there. +`CONFIG_AARCH64_IMAGE_HEADER=y` puts a 64-byte arm64 header at the start of `zephyr.bin`, in the same format as a Linux kernel image. The first instruction in the header is `b __start`, a branch to the real entry point of Zephyr. U-Boot needs that branch only at offset 0. Without the header, `go` jumps into whatever the linker placed there. The configurations for `qemu_cortex_a53` and `am62l_evm/am62l3/a53` already set both options. Repeating them in `prj.conf` protects you on a board whose configuration doesn't. ## Build the application -In the **Applications** view, open the context menu for `hello` and select **Build**. Workbench runs `west build` in the terminal and writes the build outputs to the application's `build/primary` directory. Near the end, the linker prints a memory report similar to: +In the **Applications** view, open the context menu for `hello` and select **Build**. Workbench runs `west build` in the terminal and writes the build outputs to the `build/primary` directory for the application. Near the end, the linker prints a memory report similar to: ```output Memory region Used Size Region Size %age Used @@ -141,9 +143,9 @@ Memory region Used Size Region Size %age Used IDT_LIST: 0 B 32 KB 0.00% ``` -![Workbench for Zephyr showing hello configured for the AM62L EVM and the build terminal's memory report. The report appears near the end of the build; the generated zephyr.bin is checked in the next step.#center](images/wz-build.webp "Build hello for the AM62L EVM") +![Workbench for Zephyr showing hello configured for the AM62L EVM and a memory report in the build terminal. The report appears near the end of the build; the generated zephyr.bin is checked in the next step.#center](images/wz-build.webp "Build hello for the AM62L EVM") -The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the target's `zephyr,sram` memory node. The binary is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM. It's about 58 KB for the AM62L EVM, which reports 2016 MB of RAM. +The result is `$WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin`, a raw binary linked at `ZEPHYR_ADDR`, the start of the `zephyr,sram` memory node for the target. The binary is about 37 KB for `qemu_cortex_a53`, whose memory report shows 128 MB of RAM. It's about 58 KB for the AM62L EVM, which reports 2016 MB of RAM. {{% notice Note %}} On an `aarch64` host, the build can fail with `exec format error` when it invokes `cmake` from `~/.zinstaller`. Some versions of the Workbench for Zephyr host tools install `x86_64` builds of CMake and Ninja, which can't run on Arm. Verify that Host Tools can also report a misleading error, such as `-255 package(s) are not installed`, for the same reason. @@ -154,7 +156,7 @@ Confirm the architecture of the installed tools: file ~/.zinstaller/tools/cmake-*/bin/cmake ~/.zinstaller/tools/ninja/ninja ``` -If the output reports `x86-64`, point the two tools at your system's Arm builds, after installing them with `sudo apt install -y cmake ninja-build`: +If the output reports `x86-64`, point the two tools at the Arm builds on your system, after installing them with `sudo apt install -y cmake ninja-build`: ```bash ln -sf "$(command -v cmake)" ~/.zinstaller/tools/cmake-*/bin/cmake @@ -166,12 +168,12 @@ Rebuild the application. The Zephyr SDK compiler is a native Arm binary and does ## Check the arm64 image header -Open a terminal with **Terminal > New Terminal** in VS Code, or use an existing shell. Load your target's environment file: +Open a terminal with **Terminal > New Terminal** in Visual Studio Code, or use an existing shell. Load the environment file for your target: - QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` - AM62L EVM: `source $HOME/zephyr-secure-boot/env-am62l.sh` -Print the header's magic number at offset `0x38`: +Print the magic number in the header at offset `0x38`: ```bash od -An -c -j 0x38 -N4 $WORK/zephyrproject/applications/hello/build/primary/zephyr/zephyr.bin @@ -187,6 +189,6 @@ The expected output is: ## What you've accomplished and what's next -You've built a Zephyr image for your target's Cortex-A53, linked at `ZEPHYR_ADDR`, and checked its arm64 header. +You've built a Zephyr image for the Cortex-A53 in your target, linked at `ZEPHYR_ADDR`, and checked its arm64 header. Next, you'll create the signing keys and package the image in a signed Flattened Image Tree (FIT) for U-Boot to verify. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md index abd690e90a..aff90c6cda 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/4-sign-zephyr.md @@ -1,28 +1,28 @@ --- title: Create signing keys and sign the Zephyr image into a FIT -description: Build U-Boot's signing tools, generate RSA key pairs with OpenSSL, and package Zephyr in a signed FIT image for U-Boot to verify. +description: Build the U-Boot signing tools, generate RSA key pairs with OpenSSL, and package Zephyr in a signed FIT image for U-Boot to verify. weight: 5 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## Build U-Boot's host tools +## Build the U-Boot host tools -Open a terminal and load your target's environment file: +Open a terminal and load the environment file for your target: - QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` - AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` -Build `mkimage` to create and sign Flattened Image Tree (FIT) images, and `fit_check_sign` to verify them on the host. Use your target's U-Boot source tree so that the host tools match the U-Boot version that you'll run. +Build `mkimage` to create and sign Flattened Image Tree (FIT) images, and `fit_check_sign` to verify them on the host. Use the U-Boot source tree for your target so that the host tools match the U-Boot version that you'll run. -Before building the tools, generate `.config` from your target's default configuration. Run the target named by `UBOOT_DEFCONFIG` in your environment file: +Before building the tools, generate `.config` from the default configuration for your target. Run the target named by `UBOOT_DEFCONFIG` in your environment file: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG ``` -`UBOOT_CC` stores the compiler command. For QEMU, it names the cross compiler installed from Ubuntu. For the AM62L EVM, it also includes `--sysroot` to locate the SDK's headers and libraries. Keep `CC="$UBOOT_CC"` on every `make` command, including when you build U-Boot later. +`UBOOT_CC` stores the compiler command. For QEMU, it names the cross compiler installed from Ubuntu. For the AM62L EVM, it also includes `--sysroot` to locate the headers and libraries in the SDK. Keep `CC="$UBOOT_CC"` on every `make` command, including when you build U-Boot later. Then, build the host tools: @@ -42,7 +42,7 @@ The output is similar to: mkimage version 2026.01-g5fb294342321 ``` -The version string identifies your U-Boot source tree. The example output indicates AM62L EVM's TI tree, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. +The version string identifies your U-Boot source tree. The example output indicates the TI tree for the AM62L EVM, version 2026.01. For the QEMU setup, expect `mkimage version 2025.07`. {{% notice Note %}} If the tools build reports a missing `pylibfdt` dependency, `swig`, or `gnutls/gnutls.h`, check the packages installed during [host-tool setup](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/2-set-up-tools/). Run the shared `apt install` command again, then retry the tools build. @@ -78,7 +78,7 @@ key-a.crt key-a.key key-b.crt key-b.key - `.crt` is a self-signed certificate containing the public key. - The shared file-name stem, ``, matches `key-name-hint` in the FIT source. -These 2048-bit keys are generated on the build host for this demonstration. The later section on [U-Boot's Zephyr FIT verification boundary and production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production key handling. +These 2048-bit keys are generated on the build host for this demonstration. The later section on [the Zephyr FIT verification boundary and production needs](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production/) covers production key handling. ## Write the FIT source @@ -122,7 +122,7 @@ EOF The FIT source defines how U-Boot handles the payload: - `os = "u-boot"` marks Zephyr as a standalone program, so U-Boot verifies and copies it without looking for a Linux kernel header or device tree. -- `signature-1` sits under the configuration, because the `required = "conf"` rule checks the configuration U-Boot boots. With `sign-images = "kernel"`, the signature also covers the image's `hash-1` node, and `key-name-hint` names the key in `$KEYS`. +- `signature-1` sits under the configuration, because the `required = "conf"` rule checks the configuration U-Boot boots. With `sign-images = "kernel"`, the signature also covers the `hash-1` node of the image, and `key-name-hint` names the key in `$KEYS`. - `load` and `entry` are `ZEPHYR_ADDR`, where U-Boot copies the verified payload and where `go` jumps. ## Sign the image @@ -165,7 +165,7 @@ Check `Sign algo: sha256,rsa2048:key-a` and the final `Signature written to . The example output is for the AM62L EVM build. For the QEMU build, expect `Data Size: 37040 Bytes` and `Load Address: 0x40000000`. -Omit `mkimage -K` when signing this FIT. You'll add the public key to U-Boot's control device tree during the U-Boot build. +Omit `mkimage -K` when signing this FIT. You'll add the public key to the U-Boot control device tree during the build. ## What you've accomplished and what's next diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md index d06296cad9..6b68fed60d 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot.md @@ -9,7 +9,7 @@ layout: learningpathall ## Check that U-Boot can verify signatures -Open a terminal and load your target's environment file: +Open a terminal and load the environment file for your target: - QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` - AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` @@ -53,7 +53,7 @@ Create `key.its` using the same layout as `zephyr-a.its`, with the placeholder p cat > $WORK/key.its <<'EOF' /dts-v1/; / { - description = "carrier used only to emit key-a's public key"; + description = "carrier used only to emit the public key for key-a"; #address-cells = <1>; images { kernel-1 { @@ -101,7 +101,7 @@ The expected output is: Confirm that `key-name-hint` is `key-a` and `required` is `conf`. Leave out `key-b` so that U-Boot doesn't trust its signatures. -The build incorporates `signature.dtsi` into U-Boot's control device tree. Use `mkimage -K` only with the scratch DTB. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. +The build incorporates `signature.dtsi` into the U-Boot control device tree. Use `mkimage -K` only with the scratch DTB. Adding the key directly to a finished `u-boot.dtb` would lose it when `make` rebuilds that file. ## Write a boot command that fails closed @@ -132,7 +132,7 @@ The command chain loads, verifies, and starts Zephyr: - The cache commands flush and disable the caches. On arm64, `dcache off` also disables the memory management unit (MMU), preparing the state Zephyr expects at entry. - `go 0x40000000` jumps to `ZEPHYR_ADDR` without performing verification. Using `bootm start` and `bootm loados` stops before the OS-specific boot code that a plain `bootm` would run. -For QEMU, `BOOT_DEV` is `virtio 0:1`, the disk image's File Allocation Table (FAT) partition. On the AM62L EVM, it's `mmc 1:1`, the SD card's first partition. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. +For QEMU, `BOOT_DEV` is `virtio 0:1`, the File Allocation Table (FAT) partition in the disk image. On the AM62L EVM, it's `mmc 1:1`, the first partition on the SD card. The board loads the FIT at `0x90000000` and copies Zephyr to `0x82000000`. Failing closed means stopping before Zephyr starts if any command fails. The `&&` operators enforce this condition: `a && b` runs `b` only if `a` succeeds. Separating the commands with `;` would allow execution to continue after a failed check. In this application, `go` doesn't return, so the refusal message prints only when an earlier command fails. @@ -153,7 +153,7 @@ The commands are compiled into U-Boot rather than stored on the card, where anyo ## Configure U-Boot -Reset to your target's default configuration before adding the custom settings: +Reset to the default configuration for your target before adding the custom settings: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" $UBOOT_DEFCONFIG @@ -171,13 +171,13 @@ CONFIG_BOOTDELAY=3 EOF ``` -Keep the `\"` sequences around the `echo` text. The sequences represent literal quotes inside the Kconfig string. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` and check that your target's device and addresses appear in the command. +Keep the `\"` sequences around the `echo` text. The sequences represent literal quotes inside the Kconfig string. Run `grep ^CONFIG_PREBOOT $UBOOT_OUT/.config` and check that the device and addresses for your target appear in the command. Follow the instructions for your target to add its device-tree and boot settings: {{< tabpane-normal >}} {{< tab header="QEMU" >}} -QEMU normally supplies U-Boot's device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you'll create a control device tree containing your key and pass it to the build. +QEMU normally supplies the U-Boot device tree at runtime, so `CONFIG_DEVICE_TREE_INCLUDES` has no source tree to modify. Instead, you'll create a control device tree containing your key and pass it to the build. Add the following settings to enable that approach and disable unsigned legacy images. The settings also enable cache commands and keep the environment from being saved to flash: @@ -235,7 +235,7 @@ Export the device tree for the QEMU machine that you'll boot later: ```bash qemu-system-aarch64 -machine virt,gic-version=3,dumpdtb=$WORK/qemu-virt.dtb -cpu cortex-a53 -m 1G -nographic ``` -This keeps U-Boot's drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits. +This keeps the U-Boot drivers, console, and memory sizing consistent with the machine. QEMU writes the file and exits. Add your public-key node by decompiling the tree, appending `signature.dtsi`, and recompiling it: @@ -252,7 +252,7 @@ Build U-Boot with `EXT_DTB` pointing to your control device tree. Specify `u-boo make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ EXT_DTB=$WORK/uboot-control.dtb u-boot.bin u-boot.dtb ``` -U-Boot's `scripts/check-of.sh` rejects the default `all` target for this machine, which normally receives its device tree from a prior stage. +The `scripts/check-of.sh` script in U-Boot rejects the default `all` target for this machine, which normally receives its device tree from a prior stage. The build takes a couple of minutes. Check the two files: @@ -263,7 +263,7 @@ ls -l $UBOOT_OUT/u-boot.bin $UBOOT_OUT/u-boot.dtb `u-boot.bin` is about 1.4 MB and ends with the bytes of `u-boot.dtb`, the control device tree with your key inside. {{< /tab >}} {{< tab header="AM62L EVM" >}} -TI's U-Boot tree uses binman, U-Boot's image packaging tool, to package the early stages. Point `BL1`, `BL31`, and `TEE` to the SDK's prebuilt TF-A and OP-TEE binaries. Set `BINMAN_INDIRS` to the SDK directory containing TI's system firmware: +TI's U-Boot tree uses binman, the U-Boot image packaging tool, to package the early stages. Point `BL1`, `BL31`, and `TEE` to the prebuilt TF-A and OP-TEE binaries in the SDK. Set `BINMAN_INDIRS` to the SDK directory containing TI's system firmware: ```bash make -C $UBOOT_SRC O=$UBOOT_OUT CROSS_COMPILE=$CROSS CC="$UBOOT_CC" -j$(nproc) \ @@ -307,7 +307,7 @@ With the long values shortened, the output is similar to: The `rsa,` properties contain the public key for `key-a`. Check that the node includes `required = "conf"`, which makes U-Boot require a valid configuration signature. -Verify the trusted FIT on the host using the key in that DTB. `fit_check_sign` uses U-Boot's verification code. `-f` selects the FIT, and `-k` selects the DTB containing the public key: +Verify the trusted FIT on the host using the key in that DTB. `fit_check_sign` uses the verification code in U-Boot. `-f` selects the FIT, and `-k` selects the DTB containing the public key: ```bash $UBOOT_OUT/tools/fit_check_sign -f $FIT/zephyr-a.itb -k $UBOOT_OUT/u-boot.dtb diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md index 09eab839a1..ce5a273c8c 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/6-boot-the-target.md @@ -9,14 +9,14 @@ layout: learningpathall ## What your target boots from -Open a terminal and load your target's environment file: +Open a terminal and load the environment file for your target: - QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` - AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` The AM62L boot ROM reads the first-stage file from a File Allocation Table (FAT) partition on the SD card. Start with TI's card image to preserve the expected layout. QEMU loads `u-boot.bin` from the command line, so its disk image needs only the signed Flattened Image Tree (FIT). -On either target, U-Boot's `fatload` reads `zephyr-a.itb` from the partition selected by `BOOT_DEV`. +On either target, the `fatload` of U-Boot reads `zephyr-a.itb` from the partition selected by `BOOT_DEV`. ## Build the boot media @@ -32,7 +32,7 @@ printf 'label: dos\nstart=2048, size=129024, type=e\n' | sfdisk $WORK/disk.img mkfs.vfat --offset 2048 -F 16 -n ZEPHYRFIT $WORK/disk.img ``` -Copy the signed FIT into the partition and list its contents. `BOOT_IMG` includes `@@1048576`, telling `mtools` that the volume starts 1 MiB into the image. `::` identifies the volume's root directory: +Copy the signed FIT into the partition and list its contents. `BOOT_IMG` includes `@@1048576`, telling `mtools` that the volume starts 1 MiB into the image. `::` identifies the root directory of the volume: ```bash mcopy -o -i $BOOT_IMG $FIT/zephyr-a.itb :: @@ -54,7 +54,7 @@ zephyr-a itb 38742 2026-09-17 22:11 Confirm that the volume contains `zephyr-a.itb`. The partition is accessed as `virtio 0:1`, matching `BOOT_DEV` in `env-qemu.sh`. {{< /tab >}} {{< tab header="AM62L EVM" >}} -The boot ROM reads `tiboot3.bin` from the card's first FAT partition. Preserve TI's FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors. These values determine the extraction size in the command. +The boot ROM reads `tiboot3.bin` from the first FAT partition on the card. Preserve TI's FAT16 partition layout and replace its files. The supplied partition starts at sector 2048 and spans 262144 sectors. These values determine the extraction size in the command. Start from the `.wic.xz` that you downloaded. Extract the first 1 MiB, which holds the partition table, plus the 128 MiB partition into a new image file: @@ -109,12 +109,12 @@ Confirm that the volume contains the three boot files and `zephyr-a.itb`. Follow the instructions for your target to start the target. {{% notice Warning %}} -The AM62L EVM steps write to a whole disk with `dd`. Replace `/dev/sdX` with your card, for example `/dev/sdb`, never a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. +The AM62L EVM steps write to a whole disk with `dd`. Replace `/dev/sdX` with your card – for example, `/dev/sdb` — rather than a partition such as `/dev/sdb1`. `dd` erases everything on the target, so a wrong device name erases the wrong disk. {{% /notice %}} {{< tabpane-normal >}} {{< tab header="QEMU" >}} -Start QEMU with the U-Boot binary and disk image you prepared. `-bios` selects the binary, and `-nographic` displays the serial console in your terminal. The `-drive` and `-device` options attach `disk.img` as the virtio device containing `virtio 0:1`: +Start QEMU with the U-Boot binary and disk image that you prepared. `-bios` selects the binary, and `-nographic` displays the serial console in your terminal. The `-drive` and `-device` options attach `disk.img` as the virtio device containing `virtio 0:1`: ```bash qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic -no-reboot \ @@ -126,7 +126,7 @@ qemu-system-aarch64 -machine virt,gic-version=3 -cpu cortex-a53 -m 1G -nographic Use the same `-machine`, `-cpu`, and `-m` settings as the device-tree export used to [build U-Boot](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). U-Boot should begin printing in the terminal. To exit QEMU, press **Ctrl+A**, then **X**. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Run `lsblk` before and after inserting the micro-SD card. Identify the newly listed disk and confirm its size matches the card. Replace `/dev/sdX` with that disk's device name and write the image to the whole card: +Run `lsblk` before and after inserting the micro-SD card. Identify the newly listed disk and confirm its size matches the card. Replace `/dev/sdX` with the device name of that disk and write the image to the whole card: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress @@ -134,7 +134,7 @@ sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress If you transfer the prepared image to Windows or macOS, you can write `sdcard.img` with balenaEtcher. Alternatively, write TI's unchanged `.wic.xz` image to the card. Open its first partition, remove `Image`, `uEnv.txt`, and the `EFI` directory, then copy in the three boot files and `zephyr-a.itb`. -Set **SW3** using the table. This is the reduced pin-count setting from the [AM62L EVM User's Guide](https://www.ti.com/lit/pdf/SPRUJG8), where the ROM ignores **SW2** and **SW4**. The **ON** position is toward the **ON** label on the switch bank. +Set **SW3** using the table. This is the reduced pin-count setting from the [AM62L EVM user guide](https://www.ti.com/lit/pdf/SPRUJG8), where the ROM ignores **SW2** and **SW4**. The **ON** position is toward the **ON** label on the switch bank. | Switch | 1 | 2 | 3 | 4 | |---|---|---|---|---| @@ -197,7 +197,7 @@ Use the following messages to identify the boot stages and selected devices: - `NOTICE: BL1:` and `BL31:` identify TF-A running from `tiboot3.bin` and `tispl.bin`. - `Authentication passed` reports successful authentication by TI's security firmware. -- `SoC: AM62LX SR1.1 HS-FS` identifies the SoC's development state. +- `SoC: AM62LX SR1.1 HS-FS` identifies the development state of the system on chip (SoC). - `MMC:` lists the eMMC as device zero and the SD card as device one. The `Agent 0 Protocol 0x10 Message 0x7: not supported` errors appear in this successful boot log. They don't prevent Zephyr from starting. @@ -206,7 +206,7 @@ This log comes from a board running TI's prebuilt first two stages, so its `U-Bo ## Watch the trusted image boot -After the three-second countdown, autoboot runs `run a`, the trusted-image command built into U-Boot. The following example output shows the AM62L EVM. Your timings and hash values will differ. QEMU uses different load addresses and image sizes. The output is similar to: +After the three-second countdown, autoboot runs `run a`, the trusted-image command built into U-Boot. The following example output shows the AM62L EVM. Your timings and hash values will differ. The output is similar to: ```output 60198 bytes read in 1 ms (57.4 MiB/s) @@ -247,14 +247,14 @@ this image was verified by U-Boot before it ran. Confirm verification and startup using the following messages: -- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with U-Boot's embedded public key. +- `sha256,rsa2048:key-a+ OK` confirms that the signature verifies with the public key embedded in U-Boot. - `sha256+ OK` confirms that the payload hash matches. - `Loading Kernel Image to 82000000` shows `bootm loados` copying Zephyr to its link address. - `## Starting application at 0x82000000 ...` shows `go` handing control to Zephyr. Zephyr then prints its boot banner and `Hello from ZEPHYR IMAGE A`. On the AM62L EVM, `Secondary CPU core 1 (MPID:0x1) is up` also reports startup of the second core. -For QEMU, expect `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000`, and `board : qemu_cortex_a53/qemu_cortex_a53`. Its board configuration starts one core, so there's no secondary-core startup message. +QEMU uses different load addresses and image sizes. For QEMU, expect `FIT Image at 48000000`, `Data Size: 37040 Bytes`, `Loading Kernel Image to 40000000`, and `board : qemu_cortex_a53/qemu_cortex_a53`. Its board configuration starts one core, so there's no secondary-core startup message. ## Troubleshoot boot and console output @@ -273,8 +273,8 @@ Check the symptom and try the corresponding step: If the terminal stays empty, check the console connection and whether the ROM loads `tiboot3.bin`: 1. Try all four serial ports that **J7** creates. The console isn't always the first one. -2. Check **SW3**, or switch to the full pin-count setting, which uses all three switch banks. See BOOTMODE `0x0E43` in the AM62L EVM User's Guide. -3. Check that the card's first partition is still TI's FAT16 partition, not reformatted. +2. Check **SW3**, or switch to the full pin-count setting, which uses all three switch banks. See BOOTMODE `0x0E43` in the AM62L EVM User Guide. +3. Check that the first partition of the card is still TI's FAT16 partition, not reformatted. 4. Flash TI's unchanged `.wic.xz` to a card and boot it. If that also produces no output, check the boot switches, serial port, and power supply before investigating your custom boot files. 5. If TI's card boots but yours never shows the SPL banner, copy TI's prebuilt first two stages over yours with `mcopy -o -i $BOOT_IMG $PREBUILT/tiboot3.bin $PREBUILT/tispl.bin ::`. Then, write the card again with the same `dd`. `u-boot.img` still carries the key and the boot command. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md index 119cf8180c..7f01b64bc3 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/7-test-the-checks.md @@ -11,7 +11,7 @@ layout: learningpathall The following tests are optional. Create one Flattened Image Tree (FIT) signed with an untrusted key and another modified after signing. Check both on the host, then confirm that U-Boot refuses to start them on your target. The `b` and `t` commands are already built into U-Boot to select these images. -Open a terminal and load your target's environment file: +Open a terminal and load the environment file for your target: - QEMU: `source $HOME/zephyr-secure-boot/env-qemu.sh` - AM62L evaluation module (EVM): `source $HOME/zephyr-secure-boot/env-am62l.sh` @@ -67,7 +67,7 @@ Created: Fri Sep 11 19:14:00 2026 Signature written to '/home/user/zephyr-secure-boot/fit/zephyr-b.itb', node '/configurations/conf-1/signature-1' ``` -Check for `Sign algo: sha256,rsa2048:key-b`. The `Hash value` differs from image A's because the application banner changed. This FIT has a signature from `key-b`, but U-Boot trusts only `key-a` and must reject it. +Check for `Sign algo: sha256,rsa2048:key-b`. The `Hash value` differs from that of image A because the application banner changed. This FIT has a signature from `key-b`, but U-Boot trusts only `key-a` and must reject it. ## Make a tampered copy of the trusted image @@ -195,14 +195,14 @@ ZEPHYR~1 ITB 60198 2026-09-15 16:49 zephyr-tampered.itb 130 643 968 bytes free ``` -This example lists the AM62L EVM's six files: three boot files and three FITs. The QEMU disk image contains only the three FITs. +This example lists the six files of the AM62L EVM: three boot files and three FITs. The QEMU disk image contains only the three FITs. {{< tabpane-normal >}} {{< tab header="QEMU" >}} Restart QEMU with the same command used to boot the trusted image. QEMU reads the updated `disk.img` directly. No physical media needs to be written. {{< /tab >}} {{< tab header="AM62L EVM" >}} -Write the updated image to the card. Confirm the card's device name before replacing `/dev/sdX`. `dd` overwrites the entire selected disk: +Write the updated image to the card. Confirm the device name of the card before replacing `/dev/sdX`. `dd` overwrites the entire selected disk: ```bash sudo dd if=$WORK/sdcard.img of=/dev/sdX bs=4M conv=fsync status=progress @@ -214,7 +214,7 @@ Move the card to the board, open the console with `picocom`, and power the board ## Run the wrong-key test -Press a key during the three-second countdown to stop autoboot. If you miss it, U-Boot starts image A. Start the target again and try once more. At the prompt, run the wrong-key test: +Press a key during the three-second countdown to stop autoboot. If you miss the countdown, U-Boot starts image A. Start the target again and try again. At the prompt, run the wrong-key test: ```console => run b @@ -234,7 +234,7 @@ ERROR -2: can't get kernel image! *** REFUSED: Zephyr was NOT started *** ``` -Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure, as the image's signature doesn't satisfy the required `key-a` check. +Check for `sha256,rsa2048:key-b- error!` and `Failed to verify required signature 'key-key-a'`. The `-` indicates failure, because the signature of the image doesn't satisfy the required `key-a` check. When `bootm start` fails, the `&&` chain skips `go` and prints `*** REFUSED: Zephyr was NOT started ***`. Confirm that no Zephyr banner appears. `Bad Data Hash` and `ERROR -2: can't get kernel image!` can appear for either rejection test. Use the preceding messages to identify which check failed. diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md index edbc526139..bca39e226c 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/8-production.md @@ -1,6 +1,6 @@ --- -title: Review U-Boot's Zephyr FIT verification boundary and production needs -description: Review the trust boundary of U-Boot's Zephyr FIT verification and the key provisioning, boot controls, and release signing needed for production. +title: Review the Zephyr FIT verification boundary and production needs +description: Review the trust boundary for Zephyr FIT verification in U-Boot and the key provisioning, boot controls, and release signing needed for production. weight: 9 ### FIXED, DO NOT MODIFY @@ -33,7 +33,7 @@ The ROM and security firmware then require boot files signed with your key, incl `bootcmd` selects the autoboot command. `preboot` defines `zboot` and the `a`, `b`, and `t` wrappers before autoboot starts. -Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary that you built. Check that your board's `.config` includes the same setting. +Both builds use `CONFIG_ENV_IS_NOWHERE=y`: you added it for QEMU, and the AM62L default configuration supplies it. This prevents `saveenv` from writing a persistent environment, so boot settings are loaded from the binary that you built. Check that the `.config` for your board includes the same setting. {{% notice Warning %}} Don't enable `CONFIG_ENV_IS_IN_FAT` for this boot configuration. It stores the environment in `uboot.env` on the boot media. A saved environment can override `bootcmd` and `preboot`, allowing someone with write access to the card to bypass verification. @@ -47,7 +47,7 @@ These settings cover only the countdown. If `bootcmd` returns after rejecting an ### Protect production keys and sign during release -You used `sha256,rsa2048`. The AM62L's own boot chain uses `sha512,rsa4096`. To use the latter for your FIT: +You used `sha256,rsa2048`. The boot chain of the AM62L uses `sha512,rsa4096`. To use the latter for your FIT: - Generate keys with `rsa_keygen_bits:4096`. - Set `algo = "sha512,rsa4096"` in both `zephyr-a.its` and `key.its`. @@ -60,14 +60,14 @@ Generate production keys in a hardware security module (HSM), or at least away f If you want to use another Cortex-A board, start by updating the target values and paths in your environment file: - `BOARD` is the Zephyr board identifier, from `west boards` or the Workbench board list. The board needs the two settings from [Build a Zephyr image that U-Boot can start](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/3-build-zephyr/): the Non-secure world and the arm64 image header. -- `ZEPHYR_ADDR` is the start of the memory node that the board's device tree selects as `zephyr,sram`. It's Zephyr's link address, the FIT `load` and `entry`, and the `go` target, so one value serves all three. -- `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions. Otherwise, `bootm loados` copies Zephyr over the FIT it is still reading. -- `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the SD card's first partition on the AM62L EVM, while `mmc 0` is the eMMC. `mmc list` at the U-Boot prompt shows your board's numbering. -- `UBOOT_DEFCONFIG` selects the board's U-Boot default configuration. Check for `CONFIG_FIT=y`, `CONFIG_FIT_SIGNATURE=y`, and `CONFIG_RSA=y`. Add missing settings to the [U-Boot configuration fragment](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Disable legacy images with `# CONFIG_LEGACY_IMAGE_FORMAT is not set`. +- `ZEPHYR_ADDR` is the start of the memory node that the device tree of the board selects as `zephyr,sram`. It's the link address of Zephyr, the FIT `load` and `entry`, and the `go` target, so one value serves all three. +- `FIT_ADDR` is any free address clear of `ZEPHYR_ADDR` and of the firmware regions. Otherwise, `bootm loados` copies Zephyr over the FIT it's still reading. +- `BOOT_DEV` is the U-Boot device and partition that hold the files. `mmc 1:1` is the first partition of the SD card on the AM62L EVM, while `mmc 0` is the eMMC. `mmc list` at the U-Boot prompt shows the numbering of your board. +- `UBOOT_DEFCONFIG` selects the U-Boot default configuration of the board. Check for `CONFIG_FIT=y`, `CONFIG_FIT_SIGNATURE=y`, and `CONFIG_RSA=y`. Add missing settings to the [U-Boot configuration fragment](/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/5-build-uboot/). Disable legacy images with `# CONFIG_LEGACY_IMAGE_FORMAT is not set`. - `UBOOT_SRC`, `CROSS`, and `UBOOT_CC` point at the U-Boot source and the compiler that builds it. `SDK`, `PREBUILT`, and `SYSROOT` are added when they come from a vendor SDK, as on the AM62L. - `BOOT_IMG` is the boot volume that `mcopy` writes into: the card image on the EVM, the disk image in QEMU, each with the `@@` offset of its FAT partition. -Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and a Secondary Program Loader (SPL) file. Follow the target's requirements for media layout, boot switches, and console access. +Also adapt the U-Boot build command and boot-media preparation. The build inputs depend on the target: `EXT_DTB` for QEMU, or `BL1`, `BL31`, `TEE`, and `BINMAN_INDIRS` for the AM62L EVM. Output names also vary, often including `u-boot.img` or `u-boot.itb` and a Secondary Program Loader (SPL) file. Follow the requirements of the target for media layout, boot switches, and console access. Check how the target obtains its control device tree. `CONFIG_DEVICE_TREE_INCLUDES` adds the key node when the tree is built from source with `CONFIG_OF_SEPARATE=y` or `CONFIG_OF_EMBED=y`, as on the AM62L EVM. @@ -82,4 +82,3 @@ You've established verification of the Zephyr payload and learned how you can ex Before using this approach in production, authenticate the earlier boot stages. Also protect the boot environment and console and move signing into a controlled release process. To sign your own application for the same target, point `data` in `zephyr-a.its` to its `zephyr.bin` and sign the FIT again. To use another Cortex-A board, adapt the environment, build inputs, and boot media using the checklist in this section. - diff --git a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md index 1f1e9392b6..85db90bd15 100644 --- a/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/zephyr-signed-fit-uboot-cortex-a/_index.md @@ -14,7 +14,7 @@ learning_objectives: - Identify the verification boundary in QEMU and on a development board, and how fusing your key extends trust in production. prerequisites: - - One of two targets - QEMU, which needs no hardware, or a TI [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with accessories to power it, write an SD card, and attach a serial console + - One of two targets - QEMU, which needs no hardware, or a Texas Instruments (TI) [AM62L EVM](https://www.ti.com/tool/TMDS62LEVM) with accessories to power it, write an SD card, and attach a serial console - A Linux host running Ubuntu 22.04 or 24.04, with about 20 GB of free disk space; QEMU runs on x86_64 or arm64, while the AM62L EVM needs x86_64 for the TI SDK - Visual Studio Code with the [Workbench for Zephyr extension](https://marketplace.visualstudio.com/items?itemName=Ac6.zephyr-workbench) installed - Basic knowledge of U-Boot and the Linux command line @@ -43,24 +43,24 @@ generated_summary_faq: answer: >- No. You can use QEMU without hardware. If you have an AM62L EVM, follow its target-specific setup and boot-media instructions instead. - - question: Why does U-Boot need the public key in its control device tree? + - question: Do I need to patch the U-Boot source to add the trusted key? answer: >- - You'll embed the trusted public key in U-Boot's control device tree so that it can verify the FIT - configuration signature. The key's `required = "conf"` setting makes U-Boot reject a FIT - without a valid signature from that key. + No. You'll generate a public-key node in `signature.dtsi` and include it when you build + U-Boot. For the AM62L EVM, use `CONFIG_DEVICE_TREE_INCLUDES`. For QEMU, add the node to the + control device tree supplied with `EXT_DTB`. You don't need to change the U-Boot source files. - question: How can I check the signed FIT before booting the target? answer: >- - Use U-Boot's `fit_check_sign` with your signed FIT and built `u-boot.dtb`. This checks the + Use the U-Boot `fit_check_sign` tool with your signed FIT and built `u-boot.dtb`. This checks the FIT against the public key in the control device tree before you prepare the boot media. - question: How do I confirm that verification succeeded on the target? answer: >- - Look for `sha256,rsa2048:key-a+ OK` in U-Boot's output, followed by the Zephyr image A banner. + Look for `sha256,rsa2048:key-a+ OK` in the U-Boot output, followed by the Zephyr image A banner. You can also run the optional wrong-key and tampered-image tests to check that U-Boot refuses to start either image. - question: Does this setup authenticate U-Boot as well as Zephyr? answer: >- - No. In QEMU, you run U-Boot without an earlier stage that authenticates it. On the AM62L EVM, - you leave the device in High Security, Field Securable (HS-FS) development state, where earlier stages accept boot files + No. In QEMU, you'll run U-Boot without an earlier stage that authenticates it. On the AM62L EVM, + you'll leave the device in High Security, Field Securable (HS-FS) development state, where earlier stages accept boot files signed with any key. To extend trust to U-Boot in production, you need to provision your key, move the device to High Security, Security Enforced (HS-SE), and sign the earlier boot files. # END generated_summary_faq From 45db9939c99848a1404b571bfbe829ef875f1bfe Mon Sep 17 00:00:00 2001 From: Jason Andrews Date: Tue, 6 Oct 2026 16:41:20 -0500 Subject: [PATCH 66/66] spelling and link checks --- .wordlist.txt | 59 +++++++++++++++++- content/learning-paths/automotive/_index.md | 10 +-- .../{Console_tmux.png => console_tmux.png} | Bin .../_images/{l1gpt_0xA.png => l1gpt_0xa.png} | Bin .../cross-platform/cca_rme/bare-metal.md | 2 +- .../embedded-and-microcontrollers/_index.md | 29 +++++---- .../img_nn_stcube/build_nn.md | 4 +- .../img_nn_stcube/deploy_nn.md | 12 ++-- .../images/{lab4_1.PNG => lab4_1.png} | Bin .../images/{lab4_10.PNG => lab4_10.png} | Bin .../images/{lab4_11.PNG => lab4_11.png} | Bin .../images/{lab4_12.PNG => lab4_12.png} | Bin .../images/{lab4_2.PNG => lab4_2.png} | Bin .../images/{lab4_3.PNG => lab4_3.png} | Bin .../images/{lab4_4.PNG => lab4_4.png} | Bin .../images/{lab4_5.PNG => lab4_5.png} | Bin .../images/{lab4_6.PNG => lab4_6.png} | Bin .../images/{lab4_7.PNG => lab4_7.png} | Bin .../images/{lab4_8.PNG => lab4_8.png} | Bin .../images/{lab4_9.PNG => lab4_9.png} | Bin .../img_nn_stcube/run_nn.md | 8 +-- .../jetson_object_detection/2setup.md | 2 +- .../jetson_object_detection/balenaetcher1.png | Bin 0 -> 112639 bytes .../4_sl_profile_oot.md | 2 +- .../images/img08_functions_tab.png | Bin 0 -> 213220 bytes .../tflow_nn_stcube/features.md | 2 +- .../images/{output1.PNG => output1.png} | Bin .../images/{output2.PNG => output2.png} | Bin .../images/{output3.PNG => output3.png} | Bin .../images/{output4.PNG => output4.png} | Bin .../images/{output5.PNG => output5.png} | Bin .../tflow_nn_stcube/test.md | 6 +- .../tflow_nn_stcube/train_nn.md | 2 +- .../uv_debug/2_basics.md | 18 +++--- .../uv_debug/callstacklocals.png | Bin 0 -> 11960 bytes .../callstacklocals_caller_callee.png | Bin 0 -> 15869 bytes .../uv_debug/gmsticksmemory.png | Bin 0 -> 15303 bytes .../uv_debug/gmstickswatch.png | Bin 0 -> 7281 bytes .../uv_debug/mainwhileloop.png | Bin 0 -> 26764 bytes .../uv_debug/mainwhileloopdisassembly.png | Bin 0 -> 17901 bytes .../uv_debug/mainwhileloopstopped.png | Bin 0 -> 26684 bytes .../uv_debug/managebkpt.png | Bin 0 -> 12425 bytes .../uv_debug/periodicwindowupdate.png | Bin 0 -> 17579 bytes .../mobile-graphics-and-gaming/_index.md | 9 ++- .../7-analyzing.md | 4 +- ...vs-neon.PNG => analyzer-burst-vs-neon.png} | Bin ...-burst.PNG => analyzer-plain-vs-burst.png} | Bin .../servers-and-cloud-computing/_index.md | 3 +- .../kedify-http-autoscaling/http-scaling.md | 2 +- .../net-aspire/_index.md | 2 +- .../nginx_tune/_index.md | 2 +- 51 files changed, 119 insertions(+), 59 deletions(-) rename content/learning-paths/automotive/freertos-zena-css/{Console_tmux.png => console_tmux.png} (100%) rename content/learning-paths/cross-platform/cca_rme/_images/{l1gpt_0xA.png => l1gpt_0xa.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_1.PNG => lab4_1.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_10.PNG => lab4_10.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_11.PNG => lab4_11.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_12.PNG => lab4_12.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_2.PNG => lab4_2.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_3.PNG => lab4_3.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_4.PNG => lab4_4.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_5.PNG => lab4_5.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_6.PNG => lab4_6.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_7.PNG => lab4_7.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_8.PNG => lab4_8.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/{lab4_9.PNG => lab4_9.png} (100%) create mode 100644 content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaetcher1.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_functions_tab.png rename content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/{output1.PNG => output1.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/{output2.PNG => output2.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/{output3.PNG => output3.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/{output4.PNG => output4.png} (100%) rename content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/{output5.PNG => output5.png} (100%) create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/callstacklocals.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/callstacklocals_caller_callee.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsticksmemory.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/gmstickswatch.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainwhileloop.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainwhileloopdisassembly.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/mainwhileloopstopped.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/managebkpt.png create mode 100644 content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicwindowupdate.png rename content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/{analyzer-burst-vs-neon.PNG => analyzer-burst-vs-neon.png} (100%) rename content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/{analyzer-plain-vs-burst.PNG => analyzer-plain-vs-burst.png} (100%) diff --git a/.wordlist.txt b/.wordlist.txt index 881d973ccf..009599e7d6 100644 --- a/.wordlist.txt +++ b/.wordlist.txt @@ -7405,4 +7405,61 @@ requantized requantizing signedness virsh -virt \ No newline at end of file +virt +Autoboot +BOOTMODE +DTB +Decompile +EVM +FITs +HSM +Jamil +Keywriter +LBA +MBR +MCUboot +MoltenVK +SPL +ScaledObjects +Scaler's +Securable +TI's +TIFS +Terraform's +UBOOT +adab +adbc +afaf +arago +autoboot +bafb +bceffbb +bcfc +beeb +befc +bootloader's +caidas +cded +ceefb +cffee +decompiling +eFuses +eadeefc +edcf +efbc +evm +fbcacd +fcea +fcfa +fdaaaca +fdbc +lastmod +lxx +shaderFloat +subimages +swin +tiboot +tisdk +tispl +uboot +codename diff --git a/content/learning-paths/automotive/_index.md b/content/learning-paths/automotive/_index.md index 0ec2943ade..ede5cbdffa 100644 --- a/content/learning-paths/automotive/_index.md +++ b/content/learning-paths/automotive/_index.md @@ -19,7 +19,7 @@ subjects_filter: - Performance and Architecture: 10 operatingsystems_filter: - Baremetal: 1 -- Linux: 14 +- Linux: 15 - macOS: 1 - other: 1 - RTOS: 2 @@ -33,7 +33,7 @@ tools_software_languages_filter: - CMake: 1 - CPP: 1 - DDS: 1 -- Docker: 6 +- Docker: 7 - FreeRTOS: 1 - FVP: 2 - Gazebo: 1 @@ -43,17 +43,17 @@ tools_software_languages_filter: - Multipass: 1 - Navigation2: 1 - Perf: 1 -- Python: 2 +- Python: 3 - Raspberry Pi: 2 - rmw_zenoh: 2 -- ROS 2: 6 +- ROS 2: 7 - Rust: 1 - RViz: 1 - SME2: 1 - Tinkerblox: 1 - topdown-tool: 1 - Yocto: 3 -- Zenoh: 3 +- Zenoh: 4 # auto-generated padding to avoid Hugo YAML alias limit # auto-generated padding to avoid Hugo YAML alias limit # auto-generated padding to avoid Hugo YAML alias limit diff --git a/content/learning-paths/automotive/freertos-zena-css/Console_tmux.png b/content/learning-paths/automotive/freertos-zena-css/console_tmux.png similarity index 100% rename from content/learning-paths/automotive/freertos-zena-css/Console_tmux.png rename to content/learning-paths/automotive/freertos-zena-css/console_tmux.png diff --git a/content/learning-paths/cross-platform/cca_rme/_images/l1gpt_0xA.png b/content/learning-paths/cross-platform/cca_rme/_images/l1gpt_0xa.png similarity index 100% rename from content/learning-paths/cross-platform/cca_rme/_images/l1gpt_0xA.png rename to content/learning-paths/cross-platform/cca_rme/_images/l1gpt_0xa.png diff --git a/content/learning-paths/cross-platform/cca_rme/bare-metal.md b/content/learning-paths/cross-platform/cca_rme/bare-metal.md index 96855f4d6c..68d15c1195 100644 --- a/content/learning-paths/cross-platform/cca_rme/bare-metal.md +++ b/content/learning-paths/cross-platform/cca_rme/bare-metal.md @@ -66,7 +66,7 @@ The L1 table defines permissions for each 16KB granule. Use the Arm Debugger MMU/MPU pane to observe these attributes: -![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0xA0000000, displaying Realm access permissions for 16KB granules#center](_images/l1gpt_0xA.png) +![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0xA0000000, displaying Realm access permissions for 16KB granules#center](_images/l1gpt_0xa.png) ![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0x80000000, displaying the protection attributes for this address range#center](_images/l1gpt_0x8.png) diff --git a/content/learning-paths/embedded-and-microcontrollers/_index.md b/content/learning-paths/embedded-and-microcontrollers/_index.md index 323b576e3e..9d3f43f7cf 100644 --- a/content/learning-paths/embedded-and-microcontrollers/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/_index.md @@ -15,19 +15,19 @@ pinned_learning_paths: operatingsystems_filter: - Android: 1 - Baremetal: 31 -- Linux: 60 +- Linux: 62 - macOS: 24 -- RTOS: 13 +- RTOS: 14 - Windows: 12 subjects_filter: - CI-CD: 7 - Containers and Virtualization: 10 - Embedded Linux: 6 -- Libraries: 5 +- Libraries: 6 - ML: 31 - Performance and Architecture: 24 - RTOS Fundamentals: 8 -- Security: 3 +- Security: 4 - Virtual Hardware: 2 subtitle: Learn best practices for IoT, embedded, and microcontroller development. title: Embedded and Microcontrollers @@ -53,7 +53,7 @@ tools_software_languages_filter: - Baremetal: 1 - Bash: 1 - BitBake: 1 -- C: 12 +- C: 13 - ChatGPT: 1 - Clang: 1 - CMake: 2 @@ -66,7 +66,7 @@ tools_software_languages_filter: - Containerd: 1 - CPP: 1 - DetectNet: 1 -- Docker: 19 +- Docker: 20 - DSTREAM: 2 - Edge AI: 2 - Edge Impulse: 2 @@ -77,7 +77,7 @@ tools_software_languages_filter: - Fusion 360: 1 - FVP: 11 - Gazebo: 1 -- GCC: 16 +- GCC: 17 - Generative AI: 3 - GitHub: 4 - GitLab: 2 @@ -113,19 +113,20 @@ tools_software_languages_filter: - ONNX: 1 - ONNX Runtime: 1 - OpenSSH: 1 +- OpenSSL: 1 - Paddle: 1 - Performance analysis: 1 - picocom: 1 - Porcupine: 1 -- Python: 24 +- Python: 25 - PyTorch: 9 -- QEMU: 2 +- QEMU: 3 - Raspberry Pi: 11 - Reachy Mini: 1 - Remote.It: 1 - remoteproc-runtime: 1 - rmw_zenoh: 2 -- ROS 2: 3 +- ROS 2: 4 - Runbook: 4 - RViz: 1 - SEGGER JLink: 1 @@ -144,14 +145,16 @@ tools_software_languages_filter: - Trusted Firmware: 2 - TrustZone: 2 - TVMC: 1 +- U-Boot: 1 - vcpkg: 1 - Vela: 2 - VGF: 1 -- Visual Studio Code: 2 +- Visual Studio Code: 3 +- Workbench for Zephyr: 1 - YAML: 1 - Yocto: 1 - Yocto Project: 1 -- Zenoh: 2 -- Zephyr: 6 +- Zenoh: 3 +- Zephyr: 7 weight: 5 --- diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/build_nn.md b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/build_nn.md index 4bb4d2bdfb..390f9818fc 100644 --- a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/build_nn.md +++ b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/build_nn.md @@ -92,7 +92,7 @@ plt.show() The expected output is shown below -![output1](images/lab4_1.PNG) +![output1](images/lab4_1.png) Next, normalize all the training and testing data to have values between 0 and 1. This normalization facilitates machine learning. Each RGB value ranges from 0 to 255, so divide the training and testing data by 255. @@ -125,7 +125,7 @@ You are going to create a small convolutional neural network for image classific Here is an image illustrating the network architecture. Note that only convolution and dense layers are illustrated in this image. -![output2](images/lab4_2.PNG) +![output2](images/lab4_2.png) Execute the code blocks below to create a sequential model and add the layers diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/deploy_nn.md b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/deploy_nn.md index d1131ba245..ffa2fa35de 100644 --- a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/deploy_nn.md +++ b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/deploy_nn.md @@ -53,15 +53,15 @@ In this section, you will deploy the model directly on the STM32 board. 5. Set `Toolchain/IDE` as `STM32CubeIDE` -![output3](images/lab4_3.PNG) +![output3](images/lab4_3.png) 6. Go to `Pinout & Configuration` and clear pinouts from the `Pinout` menu. -![output4](images/lab4_4.PNG) +![output4](images/lab4_4.png) 7. In `Software Packs` menu, click `Select Components`. Enable `X-CUBE-AI`. For device application, choose `Validation`. Click `OK` to save. -![output5](images/lab4_5.PNG) +![output5](images/lab4_5.png) 8. Navigate to `X-CUBE-AI` configuration. @@ -71,7 +71,7 @@ In this section, you will deploy the model directly on the STM32 board. 11. Generate the validation code for the model by clicking `Generate Code`. -![output6](images/lab4_6.PNG) +![output6](images/lab4_6.png) 12. Open STM32CubeIDE. @@ -81,10 +81,10 @@ In this section, you will deploy the model directly on the STM32 board. 15. Ensure that the board is connected to your computer. If it is correctly connected, build and flash the code by clicking `Run As`. -![output7](images/lab4_7.PNG) +![output7](images/lab4_7.png) 16. If you get an ‘undefined reference’ error, go to `Core/Src/main.c`. Remove `static` from the declaration of the `MX_USART1_UART_Init()` function and also from its definition. Try `Run As` again. -![output8](images/lab4_8.PNG) +![output8](images/lab4_8.png) With the model now deployed on the STM32 board, you are ready to test it. diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_1.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_1.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_1.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_1.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_10.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_10.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_10.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_10.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_11.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_11.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_11.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_11.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_12.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_12.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_12.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_12.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_2.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_2.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_2.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_2.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_3.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_3.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_3.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_3.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_4.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_4.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_4.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_4.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_5.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_5.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_5.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_5.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_6.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_6.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_6.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_6.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_7.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_7.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_7.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_7.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_8.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_8.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_8.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_8.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_9.PNG b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_9.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_9.PNG rename to content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/images/lab4_9.png diff --git a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/run_nn.md b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/run_nn.md index cec4f2ef55..4a73da5d5f 100644 --- a/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/run_nn.md +++ b/content/learning-paths/embedded-and-microcontrollers/img_nn_stcube/run_nn.md @@ -38,20 +38,20 @@ If the board is not detected, click the black button on the board to reset, then Select the model network from the list of models deployed on the board. -![output9](images/lab4_9.PNG) +![output9](images/lab4_9.png) Select the network and the label file (`Data/labels/cifar10_labels.txt`) -![output10](images/lab4_10.PNG) +![output10](images/lab4_10.png) Open an image to test. The tool will automatically launch a new pane, and show the inference result. Observe that the model correctly predicted the label. In addition, note the time taken to finish the prediction. -![output11](images/lab4_11.PNG) +![output11](images/lab4_11.png) You can also use your workstation camera to test image classification. Hold an appropriate picture up to your camera, then press `S`. The tool captures the image and sends it to the board. -![output12](images/lab4_12.PNG) +![output12](images/lab4_12.png) You have now successfully ran the model on your STM32 board. diff --git a/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/2setup.md b/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/2setup.md index d9980ff787..7b45eff1ff 100644 --- a/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/2setup.md +++ b/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/2setup.md @@ -23,7 +23,7 @@ Click on the box titled "JETSON XAVIER NX DEVELOPER KIT & ORIN NANO DEVELOPER KI 1. Open balenaEtcher 2. Click "Flash from file" -![balenaEtcher interface](./balenaEtcher1.png) +![balenaEtcher interface](./balenaetcher1.png) 3. Select the zip file of the image you just downloaded (you don't need to unzip the file). 4. Click "Select target" and choose your microSD card 5. Click "Flash" and wait for the process to complete which will take around 10 minutes. You may be prompted to enter a username and password before it will start. diff --git a/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaetcher1.png b/content/learning-paths/embedded-and-microcontrollers/jetson_object_detection/balenaetcher1.png new file mode 100644 index 0000000000000000000000000000000000000000..6318e740eac02c11d3a703fa99665096f40bfd46 GIT binary patch literal 112639 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsticksmemory.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmsticksmemory.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a1e662d5d8ba330cc8710f7b24a7674592153f GIT binary patch literal 15303 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmstickswatch.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/gmstickswatch.png new file mode 100644 index 0000000000000000000000000000000000000000..6f97e3a9ea6239b0bcc9250a7a5ca74b6b8267a5 GIT binary patch literal 7281 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 E2e}c5?EnA( literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/mainwhileloop.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/mainwhileloop.png new file mode 100644 index 0000000000000000000000000000000000000000..48728386a2c7caedf5848a6c85c916aabffac96a GIT binary patch literal 26764 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/managebkpt.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/managebkpt.png new file mode 100644 index 0000000000000000000000000000000000000000..496dc1cef968486ab8812ad1a00a1424c7fb23e6 GIT binary patch literal 12425 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicwindowupdate.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/periodicwindowupdate.png new file mode 100644 index 0000000000000000000000000000000000000000..82fafd16f18dc5c65a97f5f765d76b972b01a56b GIT binary patch literal 17579 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

oBa4U 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/mobile-graphics-and-gaming/_index.md b/content/learning-paths/mobile-graphics-and-gaming/_index.md index dd91335a71..22a4c93cc5 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/_index.md @@ -13,13 +13,13 @@ pinned_learning_paths: - nfru-unreal - model-training-gym-nfru operatingsystems_filter: -- Android: 54 +- Android: 55 - Linux: 54 - macOS: 27 - Windows: 25 subjects_filter: - Gaming: 6 -- Graphics: 8 +- Graphics: 9 - ML: 46 - Performance and Architecture: 38 subtitle: Optimize Android apps and build faster games using cutting-edge Arm tech. @@ -40,12 +40,11 @@ tools_software_languages_filter: - Bash: 2 - Bazel: 2 - C: 7 -- C++: 2 - CameraX: 1 - CCA: 1 - Clang: 13 - CMake: 6 -- CPP: 20 +- CPP: 22 - csharp: 3 - Docker: 2 - ETDump: 1 @@ -102,7 +101,7 @@ tools_software_languages_filter: - VGF: 3 - Visual Studio: 4 - Visual Studio Code: 1 -- Vulkan: 12 +- Vulkan: 13 - Vulkan SDK: 3 - XNNPACK: 10 weight: 3 diff --git a/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/7-analyzing.md b/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/7-analyzing.md index c5b193bb42..66c4a0ee35 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/7-analyzing.md +++ b/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/7-analyzing.md @@ -33,7 +33,7 @@ To compare the results you will use the Analyzer to import all three datasets bu You now have two datasets loaded, one from the unoptimized mode and one from the Burst mode. This is what the data looks like collected from our sample device. -![Plain vs Burst#center](images/analyzer-plain-vs-burst.PNG) +![Plain vs Burst#center](images/analyzer-plain-vs-burst.png) Focus on the collision-related markers by searching for _collisioncalc_ in the _Name Filter_. Select a representative frame by clicking on a later frame where both seem relatively settled (and with no odd spikes). @@ -45,6 +45,6 @@ In the top 10 markers, the unoptimized data is in blue. The Burst data is in ora Follow the same process again but this time we will compare Burst against Neon. -![Burst vs Neon#center](images/analyzer-burst-vs-neon.PNG) +![Burst vs Neon#center](images/analyzer-burst-vs-neon.png) Again, we can see an improvement, mostly with the dynamic (character-character) collision detection but together it still makes a meaningful improvement. diff --git a/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-burst-vs-neon.PNG b/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-burst-vs-neon.png similarity index 100% rename from content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-burst-vs-neon.PNG rename to content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-burst-vs-neon.png diff --git a/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-plain-vs-burst.PNG b/content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-plain-vs-burst.png similarity index 100% rename from content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-plain-vs-burst.PNG rename to content/learning-paths/mobile-graphics-and-gaming/using-neon-intrinsics-to-optimize-unity-on-android/images/analyzer-plain-vs-burst.png diff --git a/content/learning-paths/servers-and-cloud-computing/_index.md b/content/learning-paths/servers-and-cloud-computing/_index.md index a7e2bb052c..6edb9b3634 100644 --- a/content/learning-paths/servers-and-cloud-computing/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/_index.md @@ -344,7 +344,8 @@ tools_software_languages_filter: - Vectorscan: 1 - Velox: 1 - Veraison: 3 -- virsh / virt-manager: 1 +- virsh: 1 +- virt-install: 1 - Visual Studio Code: 7 - vLLM: 4 - VMAS: 1 diff --git a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md index 7a38357e19..849354eb69 100644 --- a/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md +++ b/content/learning-paths/servers-and-cloud-computing/kedify-http-autoscaling/http-scaling.md @@ -27,7 +27,7 @@ If you use an existing ingress controller, set `INGRESS_ADDRESS` to its endpoint ## Deploy the application and configure ingress -Now you'll deploy an HTTP server and expose it using an `Ingress` resource. For more informaton, see the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). +Now you'll deploy an HTTP server and expose it using an `Ingress` resource. For more information, see the [Kedify sample HTTP-server source code](https://github.com/kedify/examples/tree/main/samples/http-server). Run the following command to deploy your application: diff --git a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md index 3bded7640c..a4d26cb135 100644 --- a/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/net-aspire/_index.md @@ -13,7 +13,7 @@ learning_objectives: prerequisites: - A Windows on Arm machine such as the Lenovo Thinkpad X13s running Windows 11, to build the .NET Aspire project - An [Arm-based instance](/learning-paths/servers-and-cloud-computing/csp/) from AWS or GCP - - A code edito, such as [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) + - A code editor, such as [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) # START generated_summary_faq generated_summary_faq: diff --git a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md index 0dbe89f092..aa9951355f 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md @@ -15,7 +15,7 @@ learning_objectives: prerequisites: - An NGINX file server, reverse proxy, or API gateway running on a cloud instance, bare-metal server, or Arm AGI CPU platform - A repeatable HTTP workload or load test that you can run before and after tuning - - An [NGINX setup](learning-paths/servers-and-cloud-computing/nginx/) + - An [NGINX setup](/learning-paths/servers-and-cloud-computing/nginx/) # START generated_summary_faq generated_summary_faq:

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%0D(F!YvI7 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/4_sl_profile_oot.md b/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/4_sl_profile_oot.md index 54afad166d..613321e8aa 100644 --- a/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/4_sl_profile_oot.md +++ b/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/4_sl_profile_oot.md @@ -86,7 +86,7 @@ Open the **Functions** tab. In the counters list, select one of the counters you In the **Functions** tab, look for the function `char_dev_cache_traverse()`. You'll see that it has the highest L1 Cache refill rate, which is expected for this example. Check the **Image** column on the right. This should show your module file name, `mychardrv.ko`. This confirms that Streamline is capturing performance data for your kernel module. -![Streamline Functions tab displaying a list of functions with performance metrics such as L1 Cache refill rates. The primary subject is the function char_dev_cache_traverse which is highlighted and shows the highest cache refill value. The right side of the table lists the image name as mychardrv.ko. The wider environment is a desktop profiling application window with columns labeled Function, Image, and various performance counters. Visible text includes function names, image names, and numerical metric values. The emotional tone is neutral and technical, supporting detailed analysis for Arm kernel module profiling. alt-text#center](./images/img08_Functions_Tab.png "Identify functions with highest cache refill rates") +![Streamline Functions tab displaying a list of functions with performance metrics such as L1 Cache refill rates. The primary subject is the function char_dev_cache_traverse which is highlighted and shows the highest cache refill value. The right side of the table lists the image name as mychardrv.ko. The wider environment is a desktop profiling application window with columns labeled Function, Image, and various performance counters. Visible text includes function names, image names, and numerical metric values. The emotional tone is neutral and technical, supporting detailed analysis for Arm kernel module profiling. alt-text#center](./images/img08_functions_tab.png "Identify functions with highest cache refill rates") To view the call path for `char_dev_cache_traverse()`, right-click the function name and select **Select in Call Paths**. diff --git a/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_functions_tab.png b/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_functions_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2398617703b5a6a95e92c74ef6e7059e6d9c6e GIT binary patch literal 213220 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 OILj~MeK_kdxdH%FnUR{*}%%r!c1CKql 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

bCvn8)3$vA_bJA{i#Tqn`2rp@8F!O>TMj(0}@B= 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

nVGQ6D5)RdRmjSS%zirQh<*FLMjrjPRo-rg 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/features.md b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/features.md index a558fb2e34..4bbe133a6e 100644 --- a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/features.md +++ b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/features.md @@ -55,7 +55,7 @@ for idx, file in enumerate(data_files): You can check the extracted features with this code block. These are the extracted features from one data sample. Expected output shown below: -![output5](images/output5.PNG) +![output5](images/output5.png) ## Feature based model diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output1.PNG b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output1.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output1.PNG rename to content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output1.png diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output2.PNG b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output2.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output2.PNG rename to content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output2.png diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output3.PNG b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output3.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output3.PNG rename to content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output3.png diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output4.PNG b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output4.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output4.PNG rename to content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output4.png diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output5.PNG b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output5.png similarity index 100% rename from content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output5.PNG rename to content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/images/output5.png diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/test.md b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/test.md index 0aab5f115d..4472fff631 100644 --- a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/test.md +++ b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/test.md @@ -78,7 +78,7 @@ plt.legend(loc='lower right') ``` In this example, see that the training and validation accuracy start to converge after around 150 epochs. This means that the 200 epochs are enough to train the model. If you train the model for too many epochs, then the validation accuracy may drop due to overfitting. If you experience this, re-run [training](#train) with an appropriate epoch value. -![output2](images/output2.PNG) +![output2](images/output2.png) ## Investigate learning rate (optional) @@ -103,7 +103,7 @@ plt.legend(loc='lower right') ``` Expected output shown below: -![output3](images/output3.PNG) +![output3](images/output3.png) Now try a lower learning rate, which is 0.0001. Execute the code block. The graph shows the training and validation loss values decrease much more slowly. So, it is important to use a proper learning rate in training. @@ -125,7 +125,7 @@ plt.legend(loc='lower right') Expected output shown below: -![output4](images/output4.PNG) +![output4](images/output4.png) With the model trained, you are now ready to test it. diff --git a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/train_nn.md b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/train_nn.md index 5b4fb1b521..4017d26cb3 100644 --- a/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/train_nn.md +++ b/content/learning-paths/embedded-and-microcontrollers/tflow_nn_stcube/train_nn.md @@ -163,4 +163,4 @@ plot_single_sample(data_sample=data[idx], label=labels[idx]) Example output is shown below: -![output1](images/output1.PNG) +![output1](images/output1.png) diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/2_basics.md b/content/learning-paths/embedded-and-microcontrollers/uv_debug/2_basics.md index 09763f606d..3a4a9e5ae2 100644 --- a/content/learning-paths/embedded-and-microcontrollers/uv_debug/2_basics.md +++ b/content/learning-paths/embedded-and-microcontrollers/uv_debug/2_basics.md @@ -22,12 +22,12 @@ To use hardware breakpoints in µVision follow the steps outlined below: 1. ![Run](./b_uv4_run.png) **Run (F5)** the application. 1. Bring `Blinky.c` in focus by clicking on its tab. If it is not visible, double-click on it in the **Project** window. 3. In `Blinky.c`, scroll down to the `while (1)` loop in the `main` function near line 42 as shown here: -![Inside the while loop](./mainWhileLoop.png) +![Inside the while loop](./mainwhileloop.png) 4. Note the darker grey blocks on the left of the line numbers. They indicate assembly code being present and that you can set a hardware breakpoint on these lines. You can also see these blocks in the **Disassembly** window: -![while loop Disassembly](./mainWhileLoopDisassembly.png) +![while loop Disassembly](./mainwhileloopdisassembly.png) 5. While the program is still running, click to the left of a suitable line in the `while` loop (for example at line 47) and a red circle will be created. This is a hardware breakpoint. The simulated Arm Cortex-M55 has eight hardware breakpoints. μVision will warn you if you exceed this limit. 6. The program will soon stop at the line where you have set the breakpoint on as shown below. The yellow arrow is the current program counter position. This will be the next instruction executed. The cyan arrow is a placeholder you can use to explore the relationship between a source window and the **Disassembly** window. -![Program execution stopped](./mainWhileLoopStopped.png) +![Program execution stopped](./mainwhileloopstopped.png) 7. Add another breakpoint in `while (1)` (for example at line 50). 8. Each time you click on ![Run](./b_uv4_run.png) **Run (F5)**, the program will cycle to the next breakpoint. @@ -42,7 +42,7 @@ To use hardware breakpoints in µVision follow the steps outlined below: ### Manage Breakpoints 1. Go to **Debug - Breakpoints (Ctrl-B)** to manage breakpoints: -![Manage Breakpoints](./manageBKPT.png) +![Manage Breakpoints](./managebkpt.png) 2. You can temporarily unselect, delete or create breakpoints in this window. It is easier to create a breakpoint by clicking in a source file or the **Disassembly** window. 3. [Watchpoints](#watchpoints) are also created in this window. 4. Select **Kill All** to remove all breakpoints. @@ -64,7 +64,7 @@ When the program is stopped, the list of stacked functions is displayed. This is 1. Stop the program with the ![Stop](./b_uv4_stop.png) **Stop** icon. The program will probably stop in the `Delay` function. 2. Click on the **Call Stack + Locals** window in the bottom right corner of μVision. 3. Inspect the various entries in the Call Stack + Locals window as shown below in this simple example. Local variables are displayed only when they are in scope: - ![Call Stack + Locals Window](./callStackLocals.png) + ![Call Stack + Locals Window](./callstacklocals.png) 1. Set a breakpoint in the `while (1)` loop at line 50 on the `g_ledSet = 1;`. 5. ![Run](./b_uv4_run.png) **Run (F5)** the application. 6. Shortly after, the program will stop there. @@ -72,7 +72,7 @@ When the program is stopped, the list of stacked functions is displayed. This is 9. Note how the variables displayed change in the **Call Stack + Locals** window. 1. ![Step into](./b_uv4_stepinto.png) **Step (F11)** a few more times. 1. Right-click on a function and select either **Show Caller Code** or **Show Callee Code** and this will be highlighted in the **Disassembly** and **source code** windows: - ![Call Stack + Locals Window](./callStackLocals_caller_callee.png) + ![Call Stack + Locals Window](./callstacklocals_caller_callee.png) 1. ![Step out](./b_uv4_stepout.png) **Step Out (Ctrl+F11)** to exit a function immediately. 1. Remove the **Breakpoint** (by clicking on its red circle ![Breakpoint](./bkpt.png)) to continue. @@ -95,9 +95,9 @@ There is a global variable `g_msTicks` located in `Blinky.c` near line 11 that y 1. ![Run](./b_uv4_run.png) **Run (F5)** the application. 2. Right click on `g_msTicks` in `Blinky.c` near line 11 and select **Add 'g_msTicks' to…** and select **Watch 1**. 3. Go to **View** in the main menu and enable **Periodic Window Update**: -![Periodic Window Update](./periodicWindowUpdate.png) +![Periodic Window Update](./periodicwindowupdate.png) 4. `g_msTicks` will be displayed in **Watch 1**: -![g_msTicks in Watch 1 Window](./gmsTicksWatch.png) +![g_msTicks in Watch 1 Window](./gmstickswatch.png) 5. The values of `g_msTicks` are updated in real-time if *Periodic Window Update* is enabled. 6. You can modify the value in a **Watch** window when the program is stopped or changing slowly. You can modify a variable in a **Memory** window anytime (see next section). @@ -118,7 +118,7 @@ You do not need to stop the program execution to enter variables, raw addresses 3. Right click in **Memory 1** and select **Unsigned Long** to see the data field as 32-bit numbers. 4. Add an ampersand `&` in front of the variable name `g_msTicks` and press Enter. Now the physical address is shown (0x2000_0008) in this case. This physical address could change with different compilation optimizations. 5. The data contents of `g_msTicks` is displayed as shown: -![g_msTicks in Memory 1 Window](./gmsTicksMemory.png) +![g_msTicks in Memory 1 Window](./gmsticksmemory.png) 6. Right click on the memory data value and select **Modify Memory at 0x3000000C**. Enter a value and this will be pushed into `g_msTicks`. Since `g_msTicks` is updated often, you will only see the new value displayed for a very short time. 7. ![Stop](./b_uv4_stop.png) **Stop** the application. diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/callstacklocals.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/callstacklocals.png new file mode 100644 index 0000000000000000000000000000000000000000..afc60d58ec3996918632a0f862ed9363ef448ec3 GIT binary patch literal 11960 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 diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md index b926c46c1e..0818934df5 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md @@ -7,25 +7,25 @@ weight: 2 layout: learningpathall --- -## What is Swin2SR? +## What Swin2SR is [Swin2SR](https://github.com/mv-lab/swin2sr) is a neural network for image super-resolution and restoration, built on the Swin Transformer V2 architecture. Super-resolution means estimating a higher-resolution image from a lower-resolution input. The model uses patterns learned during training to reconstruct details such as edges and textures. -Its transformer processes image features in small regions called windows and shifts those windows between layers to share information across regions. You use a pretrained model, so you can run it without training it yourself. +The Swin2SR transformer processes image features in small regions called windows and shifts those windows between layers to share information across regions. You'll use a pretrained model, so that you can run it without training it yourself. ## What you'll build -You will use the ×2 version of Swin2SR to turn a 64 × 64 image into a 128 × 128 image. It doubles the width and height, predicting finer detail. These predictions can differ from the original image, which is why you compare the result with a high-resolution reference. +You'll use the ×2 version of Swin2SR to turn a 64 × 64 image into a 128 × 128 image. It doubles the width and height, predicting finer detail. These predictions can differ from the original image, which is why you compare the result with a high-resolution reference. -You export the model with ExecuTorch to create a `.pte` program, then build a host runner to execute it through the Arm Vulkan Graph Format (VGF) backend. An image helper connects your input image to the runner and saves the result as a PNG. You then check its dimensions and compare it with a high-resolution reference. +You'll export the model with ExecuTorch to create a `.pte` program, then build a host runner to execute it through the Arm Vulkan Graph Format (VGF) backend. An image helper connects your input image to the runner and saves the result as a PNG. You then check its dimensions and compare it with a high-resolution reference. ![Equal-size views compare a 64 by 64 low-resolution input with its 128 by 128 Swin2SR output. The input is enlarged for display only; labels show actual pixel dimensions. ExecuTorch and Arm VGF run the model on the host.#center](swin2sr-image-flow.svg "Images shown at the same display size to compare detail; labels show actual resolution") -This workflow runs on your Linux host using the Arm ML SDK's Vulkan emulation layer. It introduces the model execution flow used by Arm neural graphics; it doesn't deploy an application to a phone or measure Mali GPU performance. +You'll run the workflow on your Linux host using the Arm ML SDK's Vulkan emulation layer. The emulation layer introduces the model execution flow used by Arm neural graphics. It doesn't deploy an application to a phone or measure Mali GPU performance. ## Prepare the Linux host -Use a 64-bit Linux system (AArch64 or x86_64) with a working Vulkan 1.3 GPU driver. The packaged ML SDK checks for the `shaderFloat64` feature, even though you export a floating-point 32-bit model. The setup script stops if your GPU doesn't support it. Apple Silicon with MoltenVK needs a separate source-built SDK, which isn't covered here. +Use a 64-bit Linux system (AArch64 or x86_64) with a working Vulkan 1.3 GPU driver. The packaged ML SDK checks for the `shaderFloat64` feature, even though you'll export a floating-point 32-bit model. The setup script stops if your GPU doesn't support it. Apple silicon with MoltenVK needs a separate source-built SDK. On Ubuntu 24.04, install Python 3.12, the build tools, and the Vulkan development files: @@ -37,11 +37,9 @@ sudo apt-get install -y \ libvulkan1 libvulkan-dev vulkan-tools unzip xz-utils ``` -These packages don't install your GPU's vendor-specific driver. The later **Install ExecuTorch** section installs CMake 3.31.10. - ## Get the ExecuTorch release -Use [ExecuTorch 1.5.1](https://github.com/pytorch/executorch/releases/tag/v1.5.1) for both the Python package and native source. From a path without spaces or an existing `executorch` folder, clone the matching release. Keep the checkout folder named `executorch`; the build requires this exact name: +Use [ExecuTorch 1.5.1](https://github.com/pytorch/executorch/releases/tag/v1.5.1) for both the Python package and native source. From a path without spaces or an existing `executorch` folder, clone the matching release. Keep the checkout folder named `executorch` as the build requires this exact name: ```bash git clone --branch v1.5.1 --single-branch --depth 1 \ @@ -52,13 +50,13 @@ git submodule sync --recursive git submodule update --init --recursive ``` -The `test` command checks that the checkout matches the expected commit; success produces no output. The recursive submodule commands synchronize and download the source dependencies, including nested submodules. +The `test` command checks that the checkout matches the expected commit. Success produces no output. The recursive submodule commands synchronize and download the source dependencies, including nested submodules. Run the remaining commands from this repository root, in the same terminal. ## Configure the Arm ML SDK -Create a fresh Python environment to keep this example's packages separate from your system Python. Activating it makes the following `python` and `pip` commands use that environment: +Create a fresh Python environment to keep this example's packages separate from your system Python. Activate the environment so that subsequent `python` and `pip` commands use it: ```bash python3.12 -m venv .venv @@ -72,7 +70,7 @@ Review the [ML SDK license terms](https://github.com/arm/ai-ml-sdk-for-vulkan/tr bash examples/arm/setup.sh --disable-ethos-u-deps --enable-mlsdk-deps ``` -Remove three developer packages installed by setup that this example doesn't use: +Remove three developer packages installed by setup that you don't need for the Learning Path: ```bash python -m pip uninstall -y \ @@ -95,7 +93,7 @@ python -m pip install \ python -m pip check ``` -`pip check` should report `No broken requirements found.` The CPU wheels are for export; the host runner still uses Vulkan. +After a successful installation, `pip check` should report `No broken requirements found.` The CPU wheels are for export. The host runner still uses Vulkan. These commands replace `install_executorch.sh`, which uses nightly and test indexes. If you rerun SDK setup, repeat the package removal and installation. @@ -110,7 +108,7 @@ python -c "import executorch.exir; from executorch.extension.pybindings import p vulkaninfo | grep shaderFloat64 ``` -The output is similar to this selected excerpt; paths reflect your checkout location: +The output contains a snippet that's similar to: ```output [PASS] Python version @@ -131,8 +129,9 @@ The output is similar to this selected excerpt; paths reflect your checkout loca ExecuTorch is ready shaderFloat64 = true ``` +Your paths might vary depending on your checkout location. -The `[PASS]` entries report successful export dependency checks. `ExecuTorch is ready` confirms the imports succeeded. Confirm `shaderFloat64 = true` for your device, and keep this terminal open for the remaining steps. +The `[PASS]` entries report successful export dependency checks. `ExecuTorch is ready` confirms that the imports succeeded. Confirm `shaderFloat64 = true` for your device, and keep this terminal open for the remaining steps. ## Prepare the input image @@ -143,23 +142,26 @@ python examples/arm/super_resolution_example_vgf/model_export/prepare_demo_asset --output-dir swin2sr-work ``` -The output is similar to this; paths reflect your checkout location: +The output is similar to: ```output Prepared demo assets under /home/ubuntu/executorch/swin2sr-work Runtime input: /home/ubuntu/executorch/swin2sr-work/runtime/demo_lr_64.png Runtime reference: /home/ubuntu/executorch/swin2sr-work/runtime/demo_hr_128.png ``` +The paths reflect your checkout location and might vary. -The script creates a 128 × 128 crop and downsizes a copy to 64 × 64. You use these two files: +The script creates a 128 × 128 crop and downsizes a copy to 64 × 64. You'll use the following files: -| File in `swin2sr-work/runtime/` | What it is | +| File in `swin2sr-work/runtime/` | What the image is | | --- | --- | -| `demo_lr_64.png` | Small image you give to the model | -| `demo_hr_128.png` | High-resolution reference: the original crop before downsampling | +| `demo_lr_64.png` | Small image that you'll pass to the model | +| `demo_hr_128.png` | A high-resolution reference: the original crop before downsampling | -The helper also prepares calibration and evaluation folders. You don't need them for this floating-point walkthrough. +The helper also prepares calibration and evaluation folders that you don't need for this workflow. ## What you've accomplished and what's next -You have the example, its tools, and a small input image with a high-resolution reference. Next, export Swin2SR as an ExecuTorch program. +You've set up the example, its tools, and a small input image with a high-resolution reference. + +Next, you'll export Swin2SR as an ExecuTorch program. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md index 932777111a..77fa67e048 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md @@ -9,7 +9,7 @@ layout: learningpathall ## Export the pretrained model -You don't need to train Swin2SR. The exporter downloads the pretrained ×2 checkpoint—the saved model weights—and converts it into an ExecuTorch `.pte` program. The pinned checkpoint revision keeps the model weights consistent between runs. +You don't need to train Swin2SR. The exporter downloads the pretrained ×2 checkpoint — the saved model weights — and converts it into an ExecuTorch `.pte` program. The pinned checkpoint revision keeps the model weights consistent between runs. Run the exporter from your ExecuTorch directory: @@ -30,16 +30,18 @@ The `64` dimensions fix the input size for this export. The model produces a 128 ## Keep the program and metadata together -After export finishes, check the two files the runner needs: +After export finishes, check the two files that the runner needs: ```bash ls -lh swin2sr-work/swin2sr.pte swin2sr-work/swin2sr.json ``` -`swin2sr.pte` contains the executable model, including its VGF graphs. `swin2sr.json` tells the image helper how to read the input and reconstruct the output. Keep both files in the same directory with the same base name. +`swin2sr.pte` contains the executable model, including its Vulkan Graph Format (VGF) graphs. `swin2sr.json` tells the image helper how to read the input and reconstruct the output. Keep both files in the same directory with the same base name. The exporter also saves `swin2sr_delegation.txt`. It records which operations run through VGF and which remain in ExecuTorch. You don't need to change this report to run the example. ## What you've accomplished and what's next -You have a floating-point Swin2SR program configured for one 64 × 64 RGB image. Next, build the host runner and use it to upscale your image. +You have a floating-point Swin2SR program configured for one 64 × 64 RGB image. + +Next, you'll build the host runner and use it to upscale your image. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md index d7ece22141..b7cc98a9d5 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md @@ -11,21 +11,21 @@ layout: learningpathall ExecuTorch's `executor_runner` loads your `.pte` program and executes it. Continue from the same terminal in your `executorch` directory. -If you opened a new terminal, restore the environment first: +If you had to open a new terminal, restore the environment: ```bash source .venv/bin/activate source examples/arm/arm-scratch/setup_path.sh ``` -Use the repository's build script to enable VGF and the runtime libraries it needs: +Use the repository's build script to enable Vulkan Graph Format (VGF) and the runtime libraries that it needs: ```bash bash backends/arm/scripts/build_executor_runner_vkml.sh \ --output=swin2sr-work/build ``` -This builds a Release executable at `swin2sr-work/build/executor_runner`. You only need to build it once for this walkthrough. +This builds a release executable at `swin2sr-work/build/executor_runner`. You need to build the executable only once. ## Upscale the image @@ -39,16 +39,19 @@ python examples/arm/super_resolution_example_vgf/runtime/run_super_resolution.py --output-image swin2sr-work/runtime/demo_sr_128.png ``` -The output includes a message similar to this; the path reflects your checkout location: +The output is similar to: ```output Saved super-resolved image to /home/ubuntu/executorch/swin2sr-work/runtime/demo_sr_128.png ``` +The path reflects your checkout location. -The helper converts the image into a tensor, a numerical representation of its pixels, runs the model, and saves the output tensor as a PNG. A successful run ends with `Saved super-resolved image to` followed by the full path to `demo_sr_128.png`. +The helper converts the image into a tensor — a numerical representation of its pixels. It runs the model and saves the output tensor as a PNG. A successful run ends with `Saved super-resolved image to`, followed by the full path to `demo_sr_128.png`. Your input must be exactly 64 × 64 pixels. If you see an `expected (1, 3, 64, 64)` error, check that you used `demo_lr_64.png`, not the larger reference image. ## What you've accomplished and what's next -You have executed the exported program and saved its 128 × 128 output. Next, open the result and compare it with the input and high-resolution reference. +You've executed the exported program and saved its 128 × 128 output. + +Next, you'll open the result and compare it with the input and high-resolution reference. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md index fc14eacea2..ff4523e6ee 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md @@ -7,7 +7,7 @@ weight: 5 layout: learningpathall --- -## Check the image dimensions +## Check the dimensions of the upscaled image Confirm that the input is 64 × 64 and that the model created a 128 × 128 RGB image: @@ -33,17 +33,23 @@ Twice the width and twice the height give you four times as many pixels. ## Compare the images -Open `swin2sr-work/runtime/` in your image viewer. Compare the low-resolution input, the Swin2SR output, and the high-resolution reference. Enlarge the input to the same display size so you can compare the same text and edges. +Open `swin2sr-work/runtime/` in your image viewer. Compare the low-resolution input, the Swin2SR output, and the high-resolution reference. Enlarge the input to the same display size so that you can compare the same text and edges. -The high-resolution reference is the original 128 × 128 crop, before downsampling creates the 64 × 64 input. You keep it for comparison; the model receives only the low-resolution input. +The high-resolution reference is the original 128 × 128 crop, before downsampling creates the 64 × 64 input. Use the reference for comparison; the model receives only the low-resolution input. ![Low-resolution input enlarged for display, an actual Swin2SR output from an earlier run, and the high-resolution reference at the same display size. Compare letter edges to see reconstructed detail and remaining differences.#center](swin2sr-result-comparison.png "Low-resolution input, Swin2SR output, and high-resolution reference at the same display size") -The example output shown here comes from an earlier run with the same checkpoint and demo image. It illustrates the comparison; it isn't a new measurement on your host. +The example output comes from an earlier run with the same checkpoint and demo image. The output illustrates the comparison and isn't a new measurement on your host. -Look at the edges of the letters. The output estimates detail that was lost when the original was reduced to 64 × 64. It won't reproduce every detail of the original, and a larger image doesn't automatically mean a more accurate one. +Look at the edges of the letters. The output estimates detail that was lost when the original was reduced to 64 × 64. It won't reproduce every detail of the original. A larger image doesn't automatically mean a more accurate one. -Your end-to-end flow succeeds when the runner finishes, the generated image has the expected dimensions, and it shows the same scene without obvious corruption. This visual check doesn't establish a quality benchmark or a performance result. +Your end-to-end flow succeeds when: + +- The runner finishes +- The generated image has the expected dimensions +- The generated image shows the same scene without obvious corruption + +This visual check doesn't establish a quality benchmark or a performance result. ## Try another image @@ -61,4 +67,6 @@ For a different input size, export a matching program first. The helper doesn't ## What you've accomplished -You have prepared an image, exported a pretrained Swin2SR model, run it through Arm VGF with ExecuTorch, and inspected the upscaled output. You can now repeat the same flow with your own 64 × 64 images. +You have prepared an image, exported a pretrained Swin2SR model, run it through Arm VGF with ExecuTorch, and inspected the upscaled output. + +You can now repeat the same flow with your own 64 × 64 images. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md index ba401ed631..51cf86ace3 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md @@ -1,22 +1,18 @@ --- title: Upscale an image with Swin2SR and Arm VGF -draft: true -cascade: - draft: true - description: Export Swin2SR with ExecuTorch and run it through Arm VGF on your Linux host to upscale a low-resolution image and reconstruct finer detail. minutes_to_complete: 60 lastmod: 2026-09-14 -who_is_this_for: This is an introductory topic for machine learning and graphics developers who want to run image super-resolution with ExecuTorch and Arm VGF. +who_is_this_for: This is an introductory topic for machine learning and graphics developers who want to run image super-resolution with ExecuTorch and Arm Vulkan Graph Format (VGF). learning_objectives: - - Prepare ExecuTorch, the Arm ML SDK for Vulkan, and a sample image - - Export a pretrained Swin2SR model as a VGF-backed ExecuTorch program - - Build the host runner and upscale a 64 × 64 image to 128 × 128 - - Check the output dimensions and compare the result with the high-resolution reference + - Prepare ExecuTorch, the Arm ML SDK for Vulkan, and a sample image. + - Export a pretrained Swin2SR model as a VGF-backed ExecuTorch program. + - Build the host runner and upscale a 64 × 64 image to 128 × 128. + - Check the output dimensions and compare the result with the high-resolution reference. prerequisites: - A 64-bit Linux host (AArch64 or x86_64) with a Vulkan 1.3 GPU and driver that support shaderFloat64, as required by the packaged ML SDK emulation layer From 8d2617c1dd4dcbbdc482a733dc83d526142e6a64 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Mon, 5 Oct 2026 15:37:28 -0400 Subject: [PATCH 48/66] Update _index.md --- .../mobile-graphics-and-gaming/omm-mali-intro/_index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md index 2831a2cccc..316ce4f7f8 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md @@ -1,6 +1,10 @@ --- title: Understand Opacity Micromaps and hardware OMM on Arm Mali G2 +draft: true +cascade: + draft: true + description: Learn how OMM stores opacity data, follow that data from baking to ray traversal, and understand hardware OMM on Arm Mali G2. minutes_to_complete: 30 From fd5b474f4d0ec17ff1e8d4cbce0727a0ddc3e769 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 14:58:43 -0500 Subject: [PATCH 49/66] adding summary and FAQs --- .../swin2sr-vgf/4-inspect-result.md | 2 +- .../swin2sr-vgf/_index.md | 47 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md index ff4523e6ee..36b5e4ce54 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md @@ -67,6 +67,6 @@ For a different input size, export a matching program first. The helper doesn't ## What you've accomplished -You have prepared an image, exported a pretrained Swin2SR model, run it through Arm VGF with ExecuTorch, and inspected the upscaled output. +You have prepared an image, exported a pretrained Swin2SR model, run it through Arm Vulkan Graph Format (VGF) with ExecuTorch, and inspected the upscaled output. You can now repeat the same flow with your own 64 × 64 images. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md index 51cf86ace3..2f7ac8d2bf 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md @@ -20,9 +20,54 @@ prerequisites: - An internet connection to download ExecuTorch, model weights, and the Arm ML SDK dependencies - Basic familiarity with Python and command-line tools +# START generated_summary_faq +generated_summary_faq: + template_version: summary-faq-v3 + generated_at: '2026-10-05T19:42:27Z' + generator: ai + ai_assisted: true + ai_review_required: true + model: gpt-5 + prompt_template: summary-faq-v3 + source_hash: 1da8efb1fa123c1aeb23cf8610070bd13ebb38d1fb191f33bd83b284b7b0f266 + summary_generated_at: '2026-10-05T19:42:27Z' + summary_source_hash: 1da8efb1fa123c1aeb23cf8610070bd13ebb38d1fb191f33bd83b284b7b0f266 + faq_generated_at: '2026-10-05T19:42:27Z' + faq_source_hash: 1da8efb1fa123c1aeb23cf8610070bd13ebb38d1fb191f33bd83b284b7b0f266 + summary: >- + You'll set up a Linux host and sample image, export a pretrained Swin2SR ×2 model as an + ExecuTorch program, and build a host runner for Arm VGF. Then, you'll + upscale a 64 × 64 image to 128 × 128. Finally, you'll check the output dimensions and compare + its reconstructed detail with the high-resolution reference. + faqs: + - question: How do I restore the environment if I open a new terminal? + answer: >- + From your `executorch` directory, run `source .venv/bin/activate` and then + `source examples/arm/arm-scratch/setup_path.sh` before building or running the model. + - question: Do I need to train Swin2SR or prepare calibration images? + answer: >- + No. You'll export a pretrained ×2 checkpoint pinned to a specific revision. The export uses + `--quantization-mode none`, so you don't need calibration images. + - question: Why do I need both swin2sr.pte and swin2sr.json? + answer: >- + The `.pte` file contains your executable model, while the `.json` file tells the image + helper how to read the input and reconstruct the output. Keep them in the same directory + with the same base name. + - question: Can I use my own image with the exported program? + answer: >- + Yes, if your image is 64 × 64 pixels and RGB. For a different input size, export a + matching program first. The helper doesn't resize or tile images automatically. + - question: How do I know that the image run succeeded? + answer: >- + Look for `Saved super-resolved image to` in the terminal output. Check that your generated + image is 128 × 128 RGB and shows the same scene without obvious corruption. You can + compare it with the high-resolution reference, but the visual check isn't a quality + benchmark or performance result. +# END generated_summary_faq + author: Usamah Zaheer -generate_summary_faq: true +generate_summary_faq: false rerun_summary: false rerun_faqs: false From 4edca4627a727366dc6fdc4488003c076b30f42f Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 15:11:55 -0500 Subject: [PATCH 50/66] assisted edits --- .../swin2sr-vgf/1-prepare-environment.md | 8 ++++---- .../swin2sr-vgf/2-export-model.md | 2 +- .../swin2sr-vgf/4-inspect-result.md | 2 +- .../mobile-graphics-and-gaming/swin2sr-vgf/_index.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md index 0818934df5..7c72ae1aae 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md @@ -1,5 +1,5 @@ --- -title: Prepare your environment and image +title: Prepare your host and image for Swin2SR description: Install the Swin2SR example and Arm ML SDK, then prepare a 64 × 64 input image and its high-resolution reference. weight: 2 @@ -17,7 +17,7 @@ The Swin2SR transformer processes image features in small regions called windows You'll use the ×2 version of Swin2SR to turn a 64 × 64 image into a 128 × 128 image. It doubles the width and height, predicting finer detail. These predictions can differ from the original image, which is why you compare the result with a high-resolution reference. -You'll export the model with ExecuTorch to create a `.pte` program, then build a host runner to execute it through the Arm Vulkan Graph Format (VGF) backend. An image helper connects your input image to the runner and saves the result as a PNG. You then check its dimensions and compare it with a high-resolution reference. +You'll export the model with ExecuTorch to create a `.pte` program, then build a host runner to execute it through the Arm Vulkan Graph Format (VGF) backend. An image helper connects your input image to the runner and saves the result in PNG format. You'll then check its dimensions and compare it with a high-resolution reference. ![Equal-size views compare a 64 by 64 low-resolution input with its 128 by 128 Swin2SR output. The input is enlarged for display only; labels show actual pixel dimensions. ExecuTorch and Arm VGF run the model on the host.#center](swin2sr-image-flow.svg "Images shown at the same display size to compare detail; labels show actual resolution") @@ -39,7 +39,7 @@ sudo apt-get install -y \ ## Get the ExecuTorch release -Use [ExecuTorch 1.5.1](https://github.com/pytorch/executorch/releases/tag/v1.5.1) for both the Python package and native source. From a path without spaces or an existing `executorch` folder, clone the matching release. Keep the checkout folder named `executorch` as the build requires this exact name: +Use [ExecuTorch 1.5.1](https://github.com/pytorch/executorch/releases/tag/v1.5.1) for both the Python package and native source. Clone the matching release from a directory whose path has no spaces and that has no existing `executorch` folder. Keep the checkout folder named `executorch` as the build requires this exact name: ```bash git clone --branch v1.5.1 --single-branch --depth 1 \ @@ -108,7 +108,7 @@ python -c "import executorch.exir; from executorch.extension.pybindings import p vulkaninfo | grep shaderFloat64 ``` -The output contains a snippet that's similar to: +The output includes lines similar to: ```output [PASS] Python version diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md index 77fa67e048..5b8687389a 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/2-export-model.md @@ -42,6 +42,6 @@ The exporter also saves `swin2sr_delegation.txt`. It records which operations ru ## What you've accomplished and what's next -You have a floating-point Swin2SR program configured for one 64 × 64 RGB image. +You have a floating-point Swin2SR program configured for one 64 × 64 image with red, green, and blue (RGB) color channels. Next, you'll build the host runner and use it to upscale your image. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md index 36b5e4ce54..b5daccdc56 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md @@ -1,5 +1,5 @@ --- -title: Inspect the upscaled image +title: Inspect the Swin2SR output description: Verify the Swin2SR output size and compare the generated image with the low-resolution input and high-resolution reference. weight: 5 diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md index 2f7ac8d2bf..940b3ec100 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md @@ -6,7 +6,7 @@ description: Export Swin2SR with ExecuTorch and run it through Arm VGF on your L minutes_to_complete: 60 lastmod: 2026-09-14 -who_is_this_for: This is an introductory topic for machine learning and graphics developers who want to run image super-resolution with ExecuTorch and Arm Vulkan Graph Format (VGF). +who_is_this_for: This Learning Path is for machine learning and graphics developers getting started with image super-resolution using ExecuTorch and Arm Vulkan Graph Format (VGF). learning_objectives: - Prepare ExecuTorch, the Arm ML SDK for Vulkan, and a sample image. From a73450a34d927a3032f34a8cd9fb453c78015c20 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 15:18:16 -0500 Subject: [PATCH 51/66] nit --- .../mobile-graphics-and-gaming/swin2sr-vgf/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md index 940b3ec100..c6018a6dbc 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md @@ -48,7 +48,7 @@ generated_summary_faq: answer: >- No. You'll export a pretrained ×2 checkpoint pinned to a specific revision. The export uses `--quantization-mode none`, so you don't need calibration images. - - question: Why do I need both swin2sr.pte and swin2sr.json? + - question: Why do I need both Swin2SR PTE and JSON files? answer: >- The `.pte` file contains your executable model, while the `.json` file tells the image helper how to read the input and reconstruct the output. Keep them in the same directory From 595373543ef5e490e74669da2eefd8f40ce7e3f8 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 16:02:10 -0500 Subject: [PATCH 52/66] nits --- .../swin2sr-vgf/1-prepare-environment.md | 4 ++-- .../mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md | 4 ++-- .../swin2sr-vgf/4-inspect-result.md | 2 +- .../mobile-graphics-and-gaming/swin2sr-vgf/_index.md | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md index 7c72ae1aae..3c10e91642 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/1-prepare-environment.md @@ -7,7 +7,7 @@ weight: 2 layout: learningpathall --- -## What Swin2SR is +## Swin2SR and super-resolution [Swin2SR](https://github.com/mv-lab/swin2sr) is a neural network for image super-resolution and restoration, built on the Swin Transformer V2 architecture. Super-resolution means estimating a higher-resolution image from a lower-resolution input. The model uses patterns learned during training to reconstruct details such as edges and textures. @@ -70,7 +70,7 @@ Review the [ML SDK license terms](https://github.com/arm/ai-ml-sdk-for-vulkan/tr bash examples/arm/setup.sh --disable-ethos-u-deps --enable-mlsdk-deps ``` -Remove three developer packages installed by setup that you don't need for the Learning Path: +Remove three installed developer packages that you don't need for the Learning Path: ```bash python -m pip uninstall -y \ diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md index b7cc98a9d5..3320fbaaeb 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md @@ -11,7 +11,7 @@ layout: learningpathall ExecuTorch's `executor_runner` loads your `.pte` program and executes it. Continue from the same terminal in your `executorch` directory. -If you had to open a new terminal, restore the environment: +If you open a new terminal, restore the environment: ```bash source .venv/bin/activate @@ -48,7 +48,7 @@ The path reflects your checkout location. The helper converts the image into a tensor — a numerical representation of its pixels. It runs the model and saves the output tensor as a PNG. A successful run ends with `Saved super-resolved image to`, followed by the full path to `demo_sr_128.png`. -Your input must be exactly 64 × 64 pixels. If you see an `expected (1, 3, 64, 64)` error, check that you used `demo_lr_64.png`, not the larger reference image. +Your input needs to be exactly 64 × 64 pixels. If you see an `expected (1, 3, 64, 64)` error, check that you used `demo_lr_64.png`, not the larger reference image. ## What you've accomplished and what's next diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md index b5daccdc56..d83af6af94 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md @@ -67,6 +67,6 @@ For a different input size, export a matching program first. The helper doesn't ## What you've accomplished -You have prepared an image, exported a pretrained Swin2SR model, run it through Arm Vulkan Graph Format (VGF) with ExecuTorch, and inspected the upscaled output. +You've prepared an image, exported a pretrained Swin2SR model, and run it through Arm Vulkan Graph Format (VGF) with ExecuTorch. You've then inspected the upscaled output. You can now repeat the same flow with your own 64 × 64 images. diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md index c6018a6dbc..d10b58be61 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/_index.md @@ -60,7 +60,7 @@ generated_summary_faq: - question: How do I know that the image run succeeded? answer: >- Look for `Saved super-resolved image to` in the terminal output. Check that your generated - image is 128 × 128 RGB and shows the same scene without obvious corruption. You can + image is 128 × 128 and shows the same scene without obvious corruption. You can compare it with the high-resolution reference, but the visual check isn't a quality benchmark or performance result. # END generated_summary_faq From b08e5d5032cade030363ab8200188cade5a36995 Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 16:04:03 -0500 Subject: [PATCH 53/66] nits --- .../mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md index d83af6af94..63fa2090e5 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/4-inspect-result.md @@ -43,7 +43,7 @@ The example output comes from an earlier run with the same checkpoint and demo i Look at the edges of the letters. The output estimates detail that was lost when the original was reduced to 64 × 64. It won't reproduce every detail of the original. A larger image doesn't automatically mean a more accurate one. -Your end-to-end flow succeeds when: +The following factors indicate the successful completion of the image upscaling flow: - The runner finishes - The generated image has the expected dimensions From ebcadce98b6558a7e18fe806fcb47e372fa35dbe Mon Sep 17 00:00:00 2001 From: anupras-mohapatra-arm Date: Mon, 5 Oct 2026 16:05:36 -0500 Subject: [PATCH 54/66] nit --- .../mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md index 3320fbaaeb..4632d50863 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md +++ b/content/learning-paths/mobile-graphics-and-gaming/swin2sr-vgf/3-run-model.md @@ -11,7 +11,7 @@ layout: learningpathall ExecuTorch's `executor_runner` loads your `.pte` program and executes it. Continue from the same terminal in your `executorch` directory. -If you open a new terminal, restore the environment: +If you open a new terminal, you'll have to restore the environment: ```bash source .venv/bin/activate From 1f452cc48f873da52722b6e71de371e616e74780 Mon Sep 17 00:00:00 2001 From: Annie Tallund Date: Mon, 5 Oct 2026 14:50:32 -0700 Subject: [PATCH 55/66] Technical reivew of OMM introductions --- .../1-decide-if-an-asset-needs-omm.md | 71 +++++++++ .../1-why-masked-geometry-needs-omm.md | 86 ----------- .../2-choose-an-omm-representation.md | 102 +++++++++++++ .../2-understand-microtriangles-and-states.md | 103 ------------- .../3-connect-omm-to-mali-g2-ultra-nx.md | 86 +++++++++++ .../3-follow-omm-from-baking-to-traversal.md | 107 ------------- ...build-and-validate-an-omm-adoption-plan.md | 93 ++++++++++++ .../4-understand-mali-hardware-omm.md | 96 ------------ .../5-check-support-and-tradeoffs.md | 140 ------------------ .../6-review-the-omm-mental-model.md | 117 --------------- .../omm-mali-intro/_index.md | 35 +++-- .../omm-introduction/01-masked-geometry.svg | 2 +- .../omm-introduction/03-omm-lifecycle.svg | 11 -- .../04-mali-hardware-flow.svg | 4 +- .../omm-introduction/05-support-stack.svg | 14 -- 15 files changed, 374 insertions(+), 693 deletions(-) create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md new file mode 100644 index 0000000000..888b6bff66 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md @@ -0,0 +1,71 @@ +--- +title: Decide if an asset needs OMM +description: Identify alpha-tested assets that can benefit from Opacity Micromaps during ray traversal. +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Identify the ray tracing problem + +Imagine a ray passing through a tree filled with hundreds of leaves. Each leaf might be a rectangular mesh with a texture that makes most of that rectangle transparent. The ray can therefore intersect the rectangle without hitting the visible part of the leaf. + +The renderer must check the leaf's alpha mask before it accepts the intersection. One check is inexpensive, but the work adds up when shadow and reflection rays pass through many layers of foliage, fences, or grilles. + +Opacity Micromaps (OMM) move much of this decision into ray traversal. OMM stores a simplified description of the alpha mask in a form that the traversal hardware can read. This can prevent the renderer from running shader-side material logic for every candidate intersection. + +## Separate geometry from opacity + +A leaf often uses a quad made from two triangles. The geometry describes the complete rectangle, while an alpha texture cuts the leaf shape out of it. It helps to treat these as two separate layers of information: + +| Data layer | Question it answers | +| --- | --- | +| Geometry | Where can a ray intersect a triangle? | +| Opacity | Is the intersected position visible? | + +![Relationship among geometry, the alpha mask, and a candidate hit](images/omm-introduction/01-masked-geometry.svg) + +The figure shows a ray intersecting the transparent part of the quad. The geometry test reports a valid triangle hit, but the alpha test shows that the ray missed the visible leaf. OMM helps the traversal hardware make that second decision earlier. + +## Compare rasterization and ray traversal + +You might already handle this kind of material with alpha testing during rasterization. Ray tracing solves the same visual problem at a different point in the rendering process. Rasterization creates a fragment before the pixel shader checks the alpha texture. Ray traversal finds a possible triangle intersection before it knows whether that point is visible. + +| Rendering path | Opacity decision | +| --- | --- | +| Rasterization | A pixel shader samples alpha and discards the fragment when it fails the cutoff | +| Ray tracing without OMM | An any-hit shader or ray-query candidate handler evaluates the mask | +| Ray tracing with OMM | Traversal resolves known regions and keeps only unknown regions for shader-side evaluation | + +A shadow or reflection ray can pass through several overlapping leaves. Without OMM, each possible hit can repeat texture access, material setup, and control flow. With OMM, traversal first reads a compact state for the small region that the ray hit: + +| OMM state | Traversal action | +| --- | --- | +| Opaque | Accept the region as opaque | +| Transparent | Ignore the region and continue traversal | +| Unknown | Keep the candidate for shader-side evaluation | + +## Identify suitable assets + +Not every alpha-tested asset benefits from OMM. You get the clearest value when the opacity pattern remains stable and most of the mask can be classified before the game runs. Use the following examples as a starting point when you review an asset: + +| Asset pattern | OMM fit | Evidence to check | +| --- | --- | --- | +| Static foliage | Strong candidate | Stable mask, repeated ray hits, and narrow alpha edges | +| Chain-link fence or grille | Strong candidate | Stable binary cutouts and enough subdivision for thin features | +| Animated or changing mask | Conditional | A defined update or rebuild policy | +| Alpha-blended surface | Poor candidate | Continuous transparency needs a blending path | +| Rasterization-only asset | No benefit | The asset never participates in ray traversal | + +Also check every mesh level of detail (LOD) separately. Its UV coordinates, triangle links, and alpha data must match the version used to create the OMM. Otherwise, valid OMM data can become attached to the wrong triangle and produce incorrect opacity results. + +## Decide whether to continue + +Before continuing, choose one alpha-tested asset from your own project or picture a common example, such as a leaf or wire fence. Ask three questions: does it participate in ray tracing, does its alpha mask remain stable, and will rays cross it often enough for repeated opacity checks to matter? + +If the answer to all three questions is yes, the asset is a reasonable OMM candidate. Keep dynamic masks and assets with mostly uncertain opacity on the existing shader-side path until profiling gives you a reason to change them. + +### What you've learned + +You can now distinguish the geometry intersection from the opacity decision and identify assets that are reasonable OMM candidates. Next, choose how microtriangles represent the asset's opacity. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md deleted file mode 100644 index 916dddb9c5..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-why-masked-geometry-needs-omm.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Why masked geometry needs OMM -weight: 2 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -Opacity Micromaps (OMM) solve a specific ray tracing problem. A ray hits a triangle, but the renderer still needs to check the alpha mask. - -## Separate geometry from opacity - -Foliage, wire mesh and grilles often use simple geometry. A leaf Quad contains two triangles that cover a rectangle. - -An alpha texture creates the visible leaf shape. A cutoff value divides the texture into visible and transparent regions. - -You can think of the asset as two data layers: - -- Geometry tells traversal where the triangles are. -- Opacity tells traversal whether a hit position is visible. - -![Relationship among geometry, the alpha mask, and a candidate hit](images/omm-introduction/01-masked-geometry.svg) - -The figure shows the complete Quad first. It then shows the leaf shape from the alpha mask. The final panel shows a ray hitting the transparent part of the Quad. - -The triangle hit remains valid. Traversal needs opacity data to accept the hit or continue through it. - -## Compare rasterization with ray traversal - -Rasterization creates fragments before a pixel shader checks the alpha texture. The shader discards a fragment when it fails the cutoff. - -Ray traversal starts with geometry in an acceleration structure. It finds a ray-triangle intersection before it knows the alpha result. - -For opaque geometry, the intersection provides a clear answer. For masked geometry, the intersection becomes a candidate hit. The hit position can still fall outside the visible shape. - -An engine can run an any-hit shader or material code to check the mask. This path supports detailed material logic. It also repeats similar work for every candidate hit. - -## Follow a ray through foliage - -A tree can contain thousands of leaf Quads. Shadow rays and reflection rays can pass through many overlapping leaves. - -One ray can follow this sequence: - -1. The ray hits the first leaf Quad. -2. The alpha mask marks the hit position as transparent. -3. Traversal continues to the next Quad. -4. The renderer checks opacity again. -5. The process ends at an opaque region or when the ray leaves the scene. - -One opacity check is small. Many primitives, overlapping leaves, and many rays increase the total work. - -## Add OMM to the traversal path - -OMM stores opacity states for small regions inside each original triangle. These regions are called microtriangles. - -After the ray hits a triangle, traversal uses the hit position to select one microtriangle. It then reads one of these results: - -- `opaque`: accept the region as opaque; -- `transparent`: ignore the region and continue traversal; -- `unknown`: send the candidate to the shader path for more work. - -```text -Original triangle - + -Microtriangle opacity states - = -Earlier opacity decisions during traversal -``` - -OMM keeps the original mesh and material. It adds a compact data layer that traversal can read. - -## Identify suitable content - -Start with alpha-tested content that uses stable masks. The following table shows common patterns. - -| Content | OMM data pattern | Main setting to check | -| --- | --- | --- | -| Foliage | Large opaque and transparent regions with a narrow edge | UVs, cutoff, subdivision, and deformation | -| Chain-link fence | Small, repeated holes | Wire width and microtriangle density | -| Grille | Stable binary cutouts | Triangle size and texture frequency | -| Animated mask | Opacity changes at runtime | Update plan and shader path | -| Alpha-blended surface | Continuous transparency | Use an alpha-blending rendering path | - -When you review an asset, ask how many opacity results the baker can calculate before runtime. OMM works best when traversal can reuse many resolved results. - -The next module explains how subdivision and OMM states store those results. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md new file mode 100644 index 0000000000..898d7725f4 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md @@ -0,0 +1,102 @@ +--- +title: Choose an OMM representation +description: Classify microtriangles and choose an OMM subdivision level and state format for an alpha-tested asset. +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Turn an alpha mask into traversal data + +After you identify a suitable asset, you need to describe its opacity in a form that ray traversal can use. OMM does this by dividing each original triangle into smaller regions called *microtriangles*. Each microtriangle records whether its part of the alpha mask is opaque, transparent, or still uncertain. + +This subdivision changes the OMM data, not the mesh. It doesn't add polygons to the source model or to the bottom-level acceleration structure (BLAS). You can think of it as placing a finer decision grid over the original triangle. + +![A leaf quad, its microtriangle grid, and three opacity states](images/omm-introduction/02-microtriangle-states.svg) + +The figure keeps the two original triangles and overlays a finer OMM grid. Opaque regions cover the inside of the leaf, transparent regions cover empty parts of the quad, and unknown regions follow the detailed edge. The closer the grid follows that edge, the more opacity decisions traversal can make without shader help. + +## Choose a subdivision level + +The subdivision level controls the resolution of the OMM grid. A low level uses a few large regions. A higher level uses many smaller regions and can follow a curved or detailed alpha boundary more closely. + +This extra detail has a cost: each step up creates four times as many microtriangles. For level `N`, the number in each original triangle is: + +```text +microtriangle count = 4^N = 2^(2N) +``` + +| Level | Microtriangles per original triangle | Typical use | +| ---: | ---: | --- | +| 0 | 1 | One state for the complete triangle | +| 1 | 4 | A coarse cutout | +| 2 | 16 | Large silhouette changes | +| 3 | 64 | Curved alpha edges | +| 4 | 256 | Fine detail with higher data cost | + +Choose the level by comparing the size of the source triangle with the detail in its alpha mask. Also consider the intended LOD and viewing distance. Don't map the subdivision level directly to screen pixels because the same triangle can appear at many sizes on screen. + +## Choose a state format + +Subdivision decides how small the regions are. The state format decides what each region can say about its opacity. + +The `VK_KHR_opacity_micromap` extension defines 2-state and 4-state formats. A 2-state OMM must call every region opaque or transparent. A 4-state OMM can also leave a region unknown, allowing the existing shader path to resolve difficult edges at runtime. + +| Format | State | Normal traversal action | If forced to 2-state | +| --- | --- | --- | --- | +| 2-state | Fully transparent | Ignore the hit | No change | +| 2-state | Fully opaque | Handle the region as opaque | No change | +| 4-state | Fully transparent | Ignore the hit | No change | +| 4-state | Fully opaque | Handle the region as opaque | No change | +| 4-state | Unknown-transparent | Keep shader-side evaluation available | Treat the region as transparent | +| 4-state | Unknown-opaque | Keep shader-side evaluation available | Treat the region as opaque | + +During normal 4-state traversal, both unknown values mean that more evaluation is needed. The transparent and opaque variants only produce different results when a ray or instance forces the OMM into 2-state evaluation. + +This gives you two practical starting strategies: + +| Strategy | OMM setup | Main tradeoff | +| --- | --- | --- | +| Shader-assisted edge detail | 4-state with low or moderate subdivision | Smaller OMM data, but unknown edges retain some shader-side work | +| Hardware-resolved binary detail | 2-state with higher subdivision | No unknown states, but more microtriangles and possible silhouette error | + +Use the 2-state strategy only when you can classify every region without damaging the image. Marking visible detail as transparent can remove a valid hit. Marking empty space as opaque can create false shadows or reflections. + +## Classify sample microtriangles + +You can practice the classification step without OMM-capable hardware. The exercise uses an alpha cutoff of `0.5`: values below the cutoff are transparent, while values at or above it are opaque. Each row contains representative samples from one microtriangle. + +| Region | Representative alpha samples | Your classification | +| --- | --- | --- | +| A | `1.00`, `0.92`, `0.87` | Opaque, transparent, or unknown? | +| B | `0.00`, `0.08`, `0.14` | Opaque, transparent, or unknown? | +| C | `0.05`, `0.62`, `0.91` | Opaque, transparent, or unknown? | +| D | `0.42`, `0.45`, `0.48` | Opaque, transparent, or unknown? | +| E | `0.49`, `0.50`, `0.51` | Opaque, transparent, or unknown? | + +Classify each region, then calculate the raw state payload for one level-2 triangle. Level 2 contains 16 microtriangles. The 2-state format uses one bit per microtriangle, while the 4-state format uses two bits. + +### Check your classification and payload calculation + +Compare your answers with the following classifications: + +| Region | Classification | Reason | +| --- | --- | --- | +| A | Opaque | Every sample is on the visible side of the cutoff | +| B | Transparent | Every sample is below the cutoff | +| C | Unknown | The region crosses the cutoff | +| D | Transparent | Every sample is below the cutoff | +| E | Unknown | The region lies on both sides of the cutoff | + +A level-2 triangle needs 16 bits, or 2 bytes, of raw 2-state data. It needs 32 bits, or 4 bytes, of raw 4-state data. These values describe the state payload only. Record metadata, alignment, and implementation-specific storage can increase the final size. + +## Interpret the result + +The result should contain large areas of opaque and transparent microtriangles, with a narrow band of unknown regions around the alpha boundary. If much of the triangle remains unknown, traversal still needs shader help for many hits. + +A wide unknown band can mean that the subdivision level is too low. It can also point to a mismatch in filtering or cutoff, texture detail that is too fine for the grid, or material logic that the baker can't reproduce. + +### What you've learned + +You have classified opacity regions and compared the accuracy and storage implications of the two formats. Next, connect the baked representation to the Mali G2-Ultra NX traversal path. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md deleted file mode 100644 index 9b15ee5bd4..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-understand-microtriangles-and-states.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Understand microtriangles and opacity states -weight: 3 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -An opacity micromap divides an original triangle into smaller regions called microtriangles. OMM stores one opacity state for each region. - -## Treat microtriangles as data - -The microtriangle grid belongs to the OMM data. It does not add polygons to the source mesh. - -The BLAS still contains the original triangles. OMM gives traversal a finer map inside each triangle. - -![A leaf Quad, its microtriangle grid, and three opacity states](images/omm-introduction/02-microtriangle-states.svg) - -The figure keeps the Quad and its two original triangles. It places a microtriangle grid over them. - -The enlarged area shows three states. Green regions are opaque, white regions are transparent, and yellow regions are unknown. - -## Choose a subdivision level - -The subdivision level controls the number of microtriangles. Each new level divides every microtriangle into four smaller regions. - -For level `N`, use this formula: - -```text -microtriangle count = 4^N = 2^(2N) -``` - -| Subdivision level | Microtriangles per original triangle | Typical detail | -| ---: | ---: | --- | -| 0 | 1 | One state for the complete triangle | -| 1 | 4 | A very coarse cutout | -| 2 | 16 | Large changes in the silhouette | -| 3 | 64 | Curved alpha edges | -| 4 | 256 | Fine detail with higher data cost | - -Each level increases the data by four times. Compare the triangle size with the alpha texture detail before you select a level. - -A large triangle with a detailed mask needs finer data. A mesh with many small triangles can often use a lower level. - -## Use 2-state and 4-state formats - -`VK_KHR_opacity_micromap` defines two formats. - -| Format | State | Traversal action | -| --- | --- | --- | -| 2-state | Fully transparent | Ignore the hit and continue traversal | -| 2-state | Fully opaque | Handle the region as opaque | -| 4-state | Fully transparent | Use the same transparent action | -| 4-state | Fully opaque | Use the same opaque action | -| 4-state | Unknown-transparent | Keep the shader path with a transparent default | -| 4-state | Unknown-opaque | Keep the shader path with an opaque default | - -The `4-state` format adds two unknown values. Both keep the shader path available. Their default opacity behavior is different. - -In the rest of this Learning Path, `unknown` refers to either unknown value unless the distinction matters. - -These formats support two common game-content strategies. A `4-state` OMM can use low or moderate subdivision and reserve fine alpha edges for shader evaluation through unknown states. A `2-state` OMM can use finer subdivision to classify every microtriangle as opaque or transparent and avoid opacity any-hit shading, or equivalent ray query candidate evaluation, for that OMM geometry. - -Treat these strategies as starting points, not fixed presets. Mask detail, triangle density, quality targets, and OMM resource cost determine the right choice. *Check support conditions and tradeoffs* compares the two strategies. - -## Understand the alpha boundary - -The baker compares each microtriangle with the alpha cutoff. - -- A region inside the visible shape becomes opaque. -- A region outside the visible shape becomes transparent. -- A region that crosses the edge often becomes unknown. - -For a leaf, you normally see opaque data across the interior. Transparent data fills the Quad outside the leaf. Unknown data follows the edge, notches, and thin stem. - -If unknown data covers most of the Quad, check these items: - -- subdivision level; -- alpha filtering; -- texture detail and UV scale; -- material logic that the baker reads. - -## Link data to each original triangle - -OMM records data for each original triangle. A record contains a data offset, subdivision level, and format. - -The engine also keeps a triangle mapping. This mapping links each source triangle to its OMM record. - -You can use a special state when one complete triangle has one result. For example, a triangle can be fully opaque or fully transparent. This saves space because it needs no microtriangle payload. - -## Balance accuracy and cost - -Use opacity states that preserve the rendered result. A wrong transparent state can remove a valid hit. A wrong opaque state can add false occlusion. - -Unknown keeps the result safe when the baker cannot resolve a region. More unknown data also sends more candidates to the shader path. - -Balance three settings for each asset: - -1. Subdivision controls edge accuracy. -2. The format controls the available states. -3. Unknown coverage controls how much work remains for the shader path. - -The next module follows this data from the baker to runtime traversal. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md new file mode 100644 index 0000000000..d4467e6011 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md @@ -0,0 +1,86 @@ +--- +title: Connect OMM to Arm Mali G2-Ultra NX +description: Follow OMM data into a Vulkan acceleration structure and enable hardware traversal on Arm Mali G2-Ultra NX. +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Connect baked data to hardware traversal + +So far, you have treated OMM as asset data: a grid of microtriangles with opacity states. To gain a runtime benefit, the engine must turn that data into a GPU resource and connect it to the matching scene geometry. + +Arm Mali G2-Ultra NX can read OMM data in its hardware ray tracing path. Your engine prepares and links the data before traversal begins. When a ray reaches a triangle, the hardware reads the state for the microtriangle it hit and decides whether it can resolve the intersection immediately. + +![Arm Mali G2-Ultra NX using OMM states during traversal](images/omm-introduction/04-mali-hardware-flow.svg) + +This distinction matters when you debug the feature. A successful offline bake proves that you produced OMM data, but it doesn't prove that the GPU is using it. The resource build, triangle mapping, and traversal controls must also be correct. + +## Follow the runtime lifecycle + +It helps to follow one asset from its source files to a rendered frame. At each stage, keep evidence that you can inspect if the final image or performance doesn't match your expectations. + +| Stage | What your engine does | Evidence to retain | +| --- | --- | --- | +| Prepare and bake | Keep the mesh, triangle order, UVs, alpha source, cutoff, filtering, format, and subdivision on one asset version | Bake report and source version | +| Build the micromap | Query build sizes, allocate result and scratch storage, and build the OMM data | Successful build and resource sizes | +| Link triangle data | Map each source triangle to its OMM record during the BLAS build | Triangle mapping and BLAS build input | +| Enable traversal | Configure the ray pipeline or ray-query shader for OMM | Active pipeline flag or execution mode | +| Keep resources valid | Synchronize builds and keep the micromap alive while the BLAS uses it | Resource lifetime and synchronization records | + +Under `VK_KHR_opacity_micromap`, the micromap GPU resource uses a `VkAccelerationStructureKHR` handle. When your engine builds the BLAS, it attaches the micromap and provides a mapping from every source triangle to the correct OMM record. This mapping is what connects an intersection in the scene to the opacity states created by the baker. + +## Query device support + +Knowing that your target uses Mali G2-Ultra NX isn't enough to enable OMM. The Vulkan driver must also expose the extension and feature. Query `VK_KHR_opacity_micromap`, then enable its `micromap` feature before you create OMM resources. + +The driver also reports limits that you must compare with the data produced by your asset pipeline: + +| Property | Decision it constrains | +| --- | --- | +| `maxOpacity2StateSubdivisionLevel` | Highest usable 2-state detail level | +| `maxOpacity4StateSubdivisionLevel` | Highest lossless 4-state detail level | +| `maxOpacityLossy4StateSubdivisionLevel` | Highest level available to a lossy 4-state build | +| `maxMicromapTriangles` | Maximum number of triangles in one micromap | + +These limits turn device support into an asset compatibility decision. For example, a device can support OMM while rejecting an asset whose subdivision level is too high. Confirm the extension, feature, relevant limits, and engine configuration before loading an OMM-enabled BLAS. + +## Enable the traversal path + +Vulkan doesn't assume that every shader is prepared to traverse geometry with OMM data. You must opt in through the path your renderer uses. Ray pipelines and inline ray queries use different controls: + +| Traversal path | Required enablement | +| --- | --- | +| Ray pipeline | Create the pipeline with `VK_PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_KHR` | +| Ray query | Declare the `OpacityMicromapIdKHR` SPIR-V execution mode with a value that resolves to `true` | + +For a GLSL shader that uses ray queries, enable `GL_EXT_opacity_micromap_ray_query_mode` and redeclare the built-in constant: + +```glsl +#extension GL_EXT_opacity_micromap_ray_query_mode : require +const bool gl_EnableOpacityMicromapEXT = true; +``` + +You can use a specialization constant instead if the engine selects the behavior when it creates the pipeline. In either form, the value must resolve to `true` before the shader performs a ray query against an acceleration structure that can contain OMM data. + +> **Ray query correctness requirement** +> +> Traversing an OMM-enabled acceleration structure without enabling `OpacityMicromapIdKHR` is undefined behavior. The implementation does not automatically fall back to shader-side opacity evaluation. + +## Define the unsupported fallback + +Not every device or configuration will take the OMM path, so preserve the renderer's original alpha-tested path as a fallback. The two paths should differ in how they resolve opacity, not in what the player sees. + +| Path | Micromap and BLAS behavior | Opacity behavior | +| --- | --- | --- | +| Supported | Build the micromap and attach its triangle mapping to the BLAS | Traversal resolves known states; unknown states retain shader-side evaluation | +| Unsupported or disabled | Build the original alpha-tested BLAS without OMM data | The ray pipeline uses its any-hit path, or the ray query uses its existing candidate handler | + +Both paths must use the same alpha source, cutoff, filtering, and material logic. When you disable OMM, the amount of traversal and shader work can change, but the rendered image should not. + +If you have a Mali G2-Ultra NX test device, record its reported limits and compare them with the format and subdivision level you selected. You can still complete the final exercise without a device because it includes a saved capability report. + +### What you've learned + +You can now trace an OMM from asset data into a BLAS, identify the required Vulkan opt-in, and define a safe fallback. Next, use that information to make and validate an adoption decision. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md deleted file mode 100644 index 505246676f..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-follow-omm-from-baking-to-traversal.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Follow OMM from baking to traversal -weight: 4 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -OMM uses one data path from content authoring to runtime traversal. The baker creates states. The engine links them to triangles and builds runtime geometry. - -![OMM lifecycle from content inputs to runtime traversal](images/omm-introduction/03-omm-lifecycle.svg) - -The figure shows five stages. Each stage passes data to the next stage. A completed bake is only the middle of the path. - -## 1. Prepare the source data - -The baker needs these inputs: - -- source mesh and triangle order; -- UV coordinates; -- alpha texture or material opacity data; -- alpha cutoff and texture sampling settings; -- subdivision level and OMM format. - -Keep these inputs on the same asset version. A changed mesh, UV layout, or alpha texture can make older OMM data invalid. - -For animated or deformed content, define when you reuse or rebuild the data. Also define which LODs use OMM. - -## 2. Bake the opacity states - -The baker reads the alpha data in each source triangle. It creates the microtriangle grid and assigns one state to each region. - -The output contains more than a debug image. It includes: - -- packed opacity states; -- one subdivision level and format for each OMM triangle; -- a link from source triangles to OMM records; -- sizes and counts that the engine uses for the GPU build. - -Keep the triangle order stable after the bake. If a mesh tool reorders triangles, regenerate the triangle links. - -## 3. Build the micromap resource - -At load time, the engine copies the baked data to GPU buffers. It queries the required sizes and allocates result and scratch storage. - -The engine then builds the micromap. In the Vulkan KHR path, Vulkan stores the micromap in a `VkAccelerationStructureKHR` object. - -The engine also adds the required synchronization. It keeps the final micromap alive while the BLAS and traversal use it. - -## 4. Link OMM to source triangles - -The engine links each original triangle to one OMM record. This link tells traversal which data belongs to a triangle hit. - -A mesh section can use several link types: - -- a link to complete microtriangle data; -- a fully opaque special state; -- a fully transparent special state; -- an unknown special state; -- the standard shader path for selected geometry. - -Treat these as separate milestones: - -1. The asset contains baked OMM data. -2. The GPU contains a built micromap. -3. Runtime geometry links triangles to that micromap. - -## 5. Build the BLAS - -The engine adds the triangle links to the BLAS geometry description. Scene instances can then reference OMM-enabled geometry through the TLAS. - -The runtime path also checks: - -- device features and limits; -- ray pipeline or ray query settings; -- instance controls; -- resource lifetime and rebuild rules. - -When an editor reports a successful bake, verify the BLAS as well. Use a debug or capture tool to confirm the triangle links. - -## 6. Read OMM during traversal - -At runtime, the ray follows this order: - -1. Traversal searches the TLAS and BLAS. -2. The ray intersects an original triangle. -3. The hit position selects one microtriangle. -4. Hardware reads the linked OMM state. -5. Opaque accepts the region. -6. Transparent continues traversal. -7. Unknown keeps the shader path. - -The ray reaches geometry before it reads OMM. The colored cells in the figure only show the data linked to that geometry. - -## Find the stage that causes a problem - -Use the symptom to select your first check. - -| Symptom | Check first | -| --- | --- | -| Missing leaf edges or false shadows | Alpha source, cutoff, UVs, and baked states | -| The asset contains OMM but the BLAS does not | Triangle links and BLAS build input | -| The micromap builds but traversal does not use it | Device, driver, pipeline, and runtime settings | -| Most regions are unknown | Subdivision, format, and alpha sampling | -| An LOD change creates artifacts | Per-LOD data, links, and rebuild rules | - -This staged view separates content errors from runtime integration errors. The next module shows how Arm Mali G2 reads the final states. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md new file mode 100644 index 0000000000..4dc69c4110 --- /dev/null +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md @@ -0,0 +1,93 @@ +--- +title: Build and validate an OMM adoption plan +description: Choose an OMM strategy, fallback, and validation plan for a sample alpha-tested asset. +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Make a decision you can validate + +You now have all the pieces needed to evaluate OMM, but they only become useful when you connect them in one decision. A suitable asset still needs a sensible bake strategy, a supported runtime path, and a fallback that preserves the original image. + +The following exercise asks you to make that decision for a sample leaf asset. You don't need OMM-capable hardware because the exercise provides both bake results and a saved device capability report. + +![Responsibility map across the OMM pipeline](images/omm-introduction/06-responsibility-map.svg) + +The responsibility map shows how content, baking, engine integration, and the driver contribute to the final result. Use it to identify where each piece of evidence comes from and who should investigate a failure. + +## Review the sample asset + +Consider a team that wants to use OMM for a static ginkgo leaf. The asset is a two-triangle quad with an alpha mask, and it appears in ray-traced shadows and reflections. Its mesh, UV coordinates, alpha mask, cutoff, and filtering remain stable for each level of detail (LOD), so it passes the initial suitability check. + +The team tests two bake strategies. The results are illustrative, and the raw payload sizes don't include record metadata, alignment, or implementation-specific storage. + +| Evidence | 4-state candidate | 2-state candidate | +| --- | --- | --- | +| Subdivision level | 3 | 5 | +| Microtriangles per original triangle | 64 | 1,024 | +| Raw state payload per original triangle | 16 bytes | 128 bytes | +| Resolved regions | 82% | 100% | +| Unknown regions | 18%, concentrated along the edge and stem | None | +| Reference-image comparison | Matches | Matches | +| Runtime behavior | Edge candidates retain shader-side evaluation | Every OMM candidate resolves during traversal | + +The target profile sets a budget of 32 bytes of raw OMM state data for each original triangle. Profiling also shows that shader-side evaluation along the leaf edge is measurable, but it doesn't dominate frame time. Your decision therefore needs to balance storage against the benefit of resolving every region in hardware. + +Before choosing a candidate, also check that the target device can use it. The saved capability report contains these illustrative values: + +| Capability | Value | +| --- | --- | +| `VK_KHR_opacity_micromap` | Available | +| `micromap` | `VK_TRUE` | +| `maxOpacity2StateSubdivisionLevel` | 5 | +| `maxOpacity4StateSubdivisionLevel` | 4 | +| Required ray-query execution mode | Enabled | + +## Record your decision + +Use the evidence to complete the decision record. There can be more than one technically valid approach, but your choice should respect the data budget and explain how you will preserve image quality. + +| Decision | Your answer | +| --- | --- | +| Should this asset use OMM? | Yes or no, with a reason | +| Format and subdivision | Choose one candidate | +| Fallback | Define the behavior when OMM is unavailable | +| Image validation | State what you will compare | +| Runtime validation | State what proves the OMM path executed | +| Rebuild rule | State which asset changes invalidate the bake | + +### Review the suggested adoption plan + +For the stated constraints, use the level-3, 4-state candidate. It stays within the 32-byte raw payload budget, matches the reference image, and resolves most regions during traversal. It leaves the difficult leaf edge and thin stem as unknown, where shader-side evaluation can preserve their detail. + +| Decision | Suggested record | +| --- | --- | +| Use OMM | Yes; the mask is stable, the asset receives rays, and most regions resolve | +| Format and subdivision | 4-state at level 3 | +| Fallback | Build the original alpha-tested BLAS without OMM and keep the same cutoff, filtering, and alpha source | +| Image validation | Compare OMM-on, OMM-off, and reference images across shadows, reflections, LODs, and camera distances | +| Runtime validation | Record device support, successful micromap and BLAS builds, triangle links, state ratios, and active pipeline or shader controls | +| Rebuild rule | Rebuild after changes to triangle order, UVs, alpha data, cutoff, filtering, or LOD source data | + +The device also supports the level-5, 2-state candidate, and that option removes all unknown regions. However, its 128-byte raw payload exceeds the asset budget. Reconsider it only if the resource budget changes and profiling shows enough benefit from removing the remaining shader-side work. + +## Diagnose a failed validation + +Validation can fail even when the bake itself succeeds. Start with the symptom you can observe, then work backward through the owner and data most likely to explain it: + +| Observation | Start with | Inspect | +| --- | --- | --- | +| The leaf loses edge detail | Content and baker | Cutoff, UVs, subdivision, filtering, and states | +| The OMM build fails | Engine and driver | Features, sizes, buffers, and synchronization | +| The BLAS has no OMM links | Engine | Triangle mapping and BLAS input | +| Mali G2-Ultra NX does not enable OMM | Engine and driver | Extension, feature, limits, and pipeline settings | +| Unknown covers too much area | Content and baker | Texture detail, format, subdivision, and filtering | +| OMM and reference images differ | All owners | Asset version, links, states, and runtime controls | + +## What you've accomplished + +You started with a familiar rendering problem: rays repeatedly testing transparent parts of alpha-masked geometry. From there, you qualified an asset, classified its opacity regions, and chose a format and subdivision level. You then connected that data to the Mali G2-Ultra NX traversal path and kept the original alpha-tested path as a fallback. + +Your adoption record gives the team something concrete to review. It captures not only the chosen settings, but also the image and runtime evidence needed to check the decision again after an asset, engine, or driver change. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md deleted file mode 100644 index 8f3b504274..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-understand-mali-hardware-omm.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Understand hardware OMM on Arm Mali G2 -weight: 5 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -Arm Mali G2 supports OMM in the ray tracing path. Traversal can read microtriangle states that the engine links to triangle geometry. - -![Arm Mali G2 using OMM states during traversal](images/omm-introduction/04-mali-hardware-flow.svg) - -The figure shows the runtime order. The ray traverses the scene, hits a triangle, reads OMM, and follows one of three paths. - -## Prepare data for Mali hardware - -Software prepares the data before traversal starts. The runtime path includes: - -- original triangle geometry; -- a built opacity micromap; -- links from triangles to OMM records; -- subdivision levels and formats; -- enabled pipeline, shader, and instance settings. - -Mali hardware reads one compact state for the hit region. It does not need the complete material graph for a resolved opaque or transparent state. - -## Follow the hardware decision - -The acceleration structure first removes geometry that the ray cannot reach. Traversal then finds a possible triangle hit. - -The hit position selects one microtriangle in the linked OMM data. - -| OMM state | Traversal action | Result | -| --- | --- | --- | -| Fully opaque | Accept the region as opaque | Continue with opaque-hit handling | -| Fully transparent | Ignore the region | Search behind the triangle | -| Unknown-transparent | Keep the shader path | Start with a transparent default | -| Unknown-opaque | Keep the shader path | Start with an opaque default | - -The `2-state` format uses the first two states. The `4-state` format also uses both unknown states. - -On a Mali device that exposes OMM and the required format and subdivision limits, either content strategy can use hardware traversal. Select the strategy per asset instead of treating one format as the Mali default. - -## Keep more opacity work in traversal - -Without OMM, masked candidate hits often run shader code that samples the alpha texture. This work can include material setup, texture access, and control flow. - -OMM gives hardware a compact answer for each resolved region. More resolved hits mean fewer candidates reach the shader path. - -When you estimate the value of OMM, check these workload properties: - -- How often do rays hit masked geometry? -- Do the main masked assets use OMM? -- What percentage of hit regions are opaque or transparent? -- Does unknown data stay close to alpha edges? -- How much memory and build work does the OMM use? -- How much of the frame still comes from other GPU work? - -These properties explain why results vary by scene and camera view. - -## Connect Vulkan to Mali hardware - -`VK_KHR_opacity_micromap` defines the interface between the engine and driver. It covers: - -- feature and property queries; -- OMM formats and build inputs; -- links between OMM and triangle geometry; -- controls for traversal. - -On a Mali system, the driver connects these Vulkan operations to the hardware OMM path. - -An engine or RHI performs five main tasks: - -1. Query OMM features and limits. -2. Create and build the micromap. -3. Link OMM records during the BLAS build. -4. Enable OMM for ray pipelines or ray queries. -5. Manage resources, synchronization, and shader fallback. - -This interface lets you use the same Vulkan behavior while the Mali driver handles device execution. - -## Use OMM with ray pipelines and ray queries - -Ray pipelines and ray queries both traverse acceleration structures. Both can read OMM data linked to triangle geometry. - -They use different enablement controls. Ray pipelines use pipeline settings. A ray query shader uses the `OpacityMicromapKHR` SPIR-V execution mode. In GLSL, `layout(constant_id = N) gl_EnableOpacityMicromapExt;` exposes this mode through a specialization constant. - -> **Ray query correctness requirement** -> -> Every shader that executes a ray query against an acceleration structure that can contain OMM data must declare `OpacityMicromapKHR`, and its value must resolve to `true`. Traversing such an acceleration structure without enabling this execution mode is undefined behavior. The implementation does not automatically fall back to shader-side opacity evaluation. - -Gate the ray query path with both device support and shader configuration. A shader with the execution mode omitted or specialized to `false` must not traverse an acceleration structure that contains OMM data. See [Inside the Traversal: How the GPU Uses Your Micromap](https://docs.vulkan.org/tutorial/latest/Building_a_Simple_Engine/Courses/Opacity_Micromaps/04_hardware_traversal_with_omm.html) for the Vulkan requirement. - -The responsibility handoff is simple. The baker creates states, the engine links them, the driver enables the path, and Mali hardware reads them. - -The next module shows every layer that supports this handoff. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md deleted file mode 100644 index b77effb3b9..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/5-check-support-and-tradeoffs.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Check support conditions and tradeoffs -weight: 6 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -OMM needs support from content, tools, the API, the driver, the engine, and hardware. Each layer passes valid data to the next layer. - -![Complete OMM support chain from content to validation](images/omm-introduction/05-support-stack.svg) - -Use the figure to find the source of a problem. Start with content for image errors. Start with runtime geometry for missing OMM links. - -## Check the content - -OMM data matches one mesh, UV layout, alpha source, and cutoff value. Record these inputs for every asset. - -Check the following items: - -- Does the asset take part in ray tracing? -- Does its opacity pattern stay stable? -- Does each mesh LOD use the correct UV layout? -- Does the texture contain enough detail for the selected subdivision? -- How does animation or deformation change the asset? -- Do the baker and material use the same cutoff and filtering? - -Use different settings for different asset types. A fence and a leaf do not need the same subdivision level. - -## Query Vulkan support - -`VK_KHR_opacity_micromap` defines the Vulkan OMM path. Query the `micromap` feature before you create OMM resources. - -Also query these limits: - -- maximum `2-state` subdivision level; -- maximum `4-state` subdivision level; -- lossy `4-state` subdivision limit; -- maximum number of OMM triangles. - -Store these values in the device capability data. Your engine can use them for asset loading, quality settings, and pipeline creation. - -Extension support, driver support, and engine enablement are separate checks. Confirm all three. - -## Define the unsupported fallback - -Treat OMM support as a runtime capability branch. Do not assume that every device or rendering path can use it. - -If the extension is absent, the `micromap` feature is `VK_FALSE`, or the required driver or engine path is unavailable: - -1. Do not create or build OMM resources. -2. Do not attach OMM data when building the BLAS. -3. Build the BLAS through the original alpha-tested geometry path. -4. Keep shader-side opacity evaluation active. A ray pipeline uses its any-hit path; a ray query uses its existing candidate-handling path. -5. Use the same alpha source, filtering, cutoff, and material logic so the rendered result remains equivalent. -6. Expect performance to return to the pre-OMM baseline instead of changing the image or failing the render path. - -This device-level fallback differs from an `Unknown` microtriangle. Unsupported hardware uses no OMM data. An `Unknown` state occurs only on the supported OMM path and sends that individual candidate to shader-side evaluation. See [Seeing the Difference and Knowing When to Use It](https://docs.vulkan.org/tutorial/latest/Building_a_Simple_Engine/Courses/Opacity_Micromaps/06_results_guidance_and_tradeoffs.html) for the Vulkan fallback guidance. - -## Connect the driver and engine - -The Mali driver exposes Vulkan OMM features. The engine or RHI creates the resources and links them to geometry. - -The engine handles these core tasks: - -- query OMM sizes; -- allocate result and scratch buffers; -- build the micromap; -- link source triangles to OMM records; -- build the BLAS; -- enable ray pipeline or ray query controls; -- keep resources alive for traversal. - -A baked asset needs this runtime path before hardware can read its states. - -## Choose a format and subdivision strategy - -Format and subdivision work together. Choose them from the content and the amount of shader-side opacity evaluation that the frame can afford. - -Two common game-content strategies are useful starting points: - -| Strategy | OMM setup | Runtime behavior | Good fit | Main tradeoff | -| --- | --- | --- | --- | --- | -| Shader-assisted edge detail | `4-state` with low or moderate subdivision | Opaque and transparent regions stay in hardware. Unknown edges use any-hit shading or ray query candidate evaluation. | Complex masks that need fine material evaluation at their edges | Some shader-side opacity cost remains | -| Hardware-resolved binary detail | `2-state` with higher subdivision, approaching alpha-mask texel detail at the target LOD | Every microtriangle is opaque or transparent. OMM candidates do not enter opacity any-hit shading or equivalent ray query evaluation. | Stable binary masks where avoiding shader-side opacity work is the priority | More microtriangles, build work, and resource use | - -The `4-state` strategy can limit OMM data by accepting controlled unknown coverage. The `2-state` strategy spends more OMM detail to remove unknown states. It can fully avoid shader-side opacity evaluation for that OMM geometry, but only if the binary bake still meets the image-quality target. - -Do not map subdivision directly to screen pixels. Compare triangle size with alpha-mask texel detail at the intended LOD and camera range. Each additional subdivision level multiplies the microtriangle count by four. Although `2-state` stores one bit per microtriangle, a sufficiently high level can still cost more than a lower-level `4-state` OMM. - -Do not confuse compact `2-state` encoding with Vulkan lossy micromap builds. Lossy build support applies to `4-state`, is bounded by `maxOpacityLossy4StateSubdivisionLevel`, and is a separate quality and resource lever. Query the device limits before selecting it. See the [Vulkan micromap data format](https://docs.vulkan.org/spec/latest/chapters/VK_KHR_opacity_micromap/micromaps.html) and [VK_KHR_opacity_micromap proposal](https://docs.vulkan.org/features/latest/features/proposals/VK_KHR_opacity_micromap.html). - -## Review unknown coverage - -Unknown keeps the shader path available for a difficult region. It protects image correctness around alpha edges. - -For a typical cutout, unknown data forms a narrow edge. Large unknown areas leave more work for the shader path. - -If unknown covers most of the OMM, check: - -- subdivision level; -- texture detail and UV scale; -- alpha filtering; -- cutoff value; -- material logic available to the baker. - -## Account for resource cost - -OMM adds data and build work. Track each cost separately. - -| Cost | Source | Control | -| --- | --- | --- | -| Asset storage | Baked triangle data | Format, subdivision, build mode, and selected asset coverage | -| GPU memory | Built OMM resources | Streaming, LOD rules, and resource sharing | -| Build time | OMM and BLAS builds | Cached data and batched builds | -| Scratch memory | Temporary build storage | Pools and buffer reuse | -| Update work | Dynamic geometry or opacity | Rebuild rules and shader fallback | - -Static foliage can reuse OMM data for a long time. Dynamic content needs a clear update plan. - -## Validate the image and runtime path - -Check the rendered result first: - -- leaf edges, stems, and cutout holes; -- shadows, reflections, and visibility results; -- mips, LODs, camera distance, and animation; -- OMM and forced unsupported fallback rendering against the same reference image. - -Then check the runtime data: - -- device features and limits, including a forced OMM-off test; -- successful OMM build and BLAS triangle links on the supported path; -- no OMM resources or links, with shader-side opacity evaluation active on the fallback path; -- selected strategy, format, subdivision values, and unknown ratio; -- active pipeline, shader, and instance controls; -- `OpacityMicromapKHR` resolves to `true` for every ray query shader that can access OMM data; -- OMM state in a debug or capture tool. - -This support chain turns OMM into a feature you can inspect and maintain. The final module maps each stage to the team that owns it. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md deleted file mode 100644 index 4a8b5e459c..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/6-review-the-omm-mental-model.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Connect OMM to the Mali hardware path -weight: 7 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -OMM crosses four areas: content, the engine, the API and driver, and Mali hardware. Each area owns a clear part of the data path. - -![Responsibility map across the OMM pipeline](images/omm-introduction/06-responsibility-map.svg) - -Use the figure during design reviews and debugging. It helps you find the owner of each input and output. - -## Prepare content and OMM data - -The content team selects masked assets and defines their OMM settings. - -For each asset, record: - -- mesh and UV version; -- alpha texture and cutoff; -- LOD settings; -- subdivision level; -- `2-state` or `4-state` format; -- animation and rebuild rules. - -Link every bake to a source asset version. When the mesh, UVs, or mask changes, regenerate the OMM data. - -## Build runtime geometry - -The engine converts baked data into GPU resources. It keeps the triangle links and includes OMM in the BLAS build. - -The engine also: - -- selects settings that fit the device limits; -- enables OMM for selected LODs and ray paths; -- manages OMM, scratch, and BLAS resources; -- rebuilds data after streaming or scene changes; -- exposes debug controls and capture labels; -- reports build and support errors. - -These controls make OMM visible to developers. You can tell whether the problem starts in content or runtime integration. - -## Connect Vulkan and the driver - -Vulkan defines the OMM interface between the engine and driver. - -The engine supplies features, resource descriptions, build inputs, synchronization, and triangle links. The driver validates the inputs and creates the device data. - -The driver also reports supported formats and subdivision limits. Your engine uses these values to select compatible asset data. - -If one package supports several devices, prepare suitable quality settings for each capability level. - -## Read states on Mali hardware - -Arm Mali G2 reads the linked OMM during acceleration-structure traversal. - -After a ray hits a triangle, hardware selects the matching microtriangle state. It accepts opaque, continues through transparent, or keeps the shader path for unknown. - -Hardware receives compact states and triangle links. It relies on the earlier stages to prepare correct data. - -## Follow one ginkgo leaf from asset to ray hit - -The following example connects every stage: - -1. An artist creates a leaf Quad with two triangles. -2. An alpha mask defines the fan-shaped leaf and narrow stem. -3. The asset settings select a cutoff, `4-state` format, and subdivision level. -4. The baker reads the triangles, UVs, and alpha texture. -5. It marks the leaf interior as opaque and the outer area as transparent. -6. It marks edge regions as unknown. -7. The engine builds the OMM resource. -8. It links both source triangles to their OMM records. -9. The BLAS build includes those links. -10. A scene instance references the BLAS through the TLAS. -11. A ray hits one triangle and selects a microtriangle. -12. Mali hardware reads the state and selects the next action. - -This sequence shows the boundary between software and hardware. Software prepares the opacity data. Hardware reads it during traversal. - -This example uses the shader-assisted strategy: `4-state` keeps the OMM at a moderate subdivision level and sends only unknown edge regions to shader-side opacity evaluation. - -### Compare the 2-state alternative - -The same leaf can use a hardware-resolved binary strategy: - -- keep the same alpha source, cutoff, UVs, and target LOD; -- select a higher subdivision level that approaches the required alpha-mask texel detail; -- bake every microtriangle as opaque or transparent with `2-state`; -- compare the silhouette and shadow against the `4-state` reference; -- measure OMM resource size, build time, and shader-side opacity work. - -The `2-state` path has no unknown regions, so Mali hardware resolves every OMM candidate for that geometry without opacity any-hit shading or equivalent ray query evaluation. Adopt it only when the binary result preserves the required image quality and its additional OMM detail fits the resource budget. - -## Map problems to owners - -| Observation | Start with | Inspect | -| --- | --- | --- | -| The leaf loses edge detail | Content and baker | Cutoff, UVs, subdivision, and states | -| The OMM build fails | Engine, RHI, and driver | Features, sizes, buffers, and synchronization | -| The BLAS has no OMM links | Engine and RHI | Triangle mapping and BLAS input | -| One device does not enable OMM | Engine and driver | Extension, features, limits, and pipeline settings | -| Unknown covers too much area | Content and baker | Texture detail, format, subdivision, and filtering | -| OMM and reference images differ | All owners | Asset version, links, states, and runtime controls | - -## Keep the feature maintainable - -Store useful OMM data in asset reports. Include triangle coverage, subdivision levels, state ratios, resource size, and the source version. - -Use these reports to find unusual assets. They also help you estimate memory and build work. - -Start with stable foliage or cutout structures. Build a visual baseline and resource settings. Then expand to more complex content. - -OMM acts as a contract. Software prepares per-triangle opacity states, and Arm Mali G2 consumes them during traversal. - -Keep the asset version, triangle links, and state meanings consistent. This makes OMM easier to validate, debug, and extend. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md index 316ce4f7f8..81771f4a71 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/_index.md @@ -1,39 +1,38 @@ --- -title: Understand Opacity Micromaps and hardware OMM on Arm Mali G2 +title: Evaluate Opacity Micromaps for ray-traced game assets draft: true cascade: draft: true -description: Learn how OMM stores opacity data, follow that data from baking to ray traversal, and understand hardware OMM on Arm Mali G2. +description: Learn how Opacity Micromaps reduce opacity work during ray traversal, then choose an OMM strategy and fallback for an alpha-tested asset. -minutes_to_complete: 30 +minutes_to_complete: 40 -who_is_this_for: Use this Learning Path if you develop game graphics and want to understand Opacity Micromaps and hardware OMM on Arm Mali G2. +who_is_this_for: Use this Learning Path if you develop game graphics and need to evaluate whether an alpha-tested asset is suitable for Opacity Micromaps on Arm Mali G2-Ultra NX. You can complete the exercises without OMM-capable hardware. learning_objectives: - - Explain why alpha-tested geometry can require extra opacity work during ray traversal. - - Describe microtriangles, subdivision levels, and the OMM opacity states. - - Trace OMM data from authoring and baking through triangle links and acceleration-structure traversal. - - Explain how Arm Mali G2 hardware OMM handles opacity decisions during ray traversal. - - Identify the API, driver, engine, and content conditions required to use OMM. - - Recognize OMM tradeoffs and distinguish it from general transparency acceleration. + - Classify microtriangles as opaque, transparent, or unknown from alpha-mask data. + - Trace OMM data from baking through acceleration-structure traversal. + - Choose an OMM format, subdivision strategy, fallback, and validation plan for an asset. + - Identify the Vulkan enablement requirements for ray pipelines and ray queries. prerequisites: - Basic familiarity with triangle geometry and alpha-tested materials - Basic familiarity with ray tracing intersections and acceleration structures + - No OMM-capable hardware is needed for the main exercises + - An Arm Mali G2-Ultra NX device and Vulkan capability tools are optional for device validation author: Patrick Wang ### Tags -skilllevels: Introductory +skilllevels: Advanced subjects: Graphics armips: - Mali tools_software_languages: - Vulkan operatingsystems: - - Windows - Android further_reading: @@ -46,12 +45,16 @@ further_reading: link: https://docs.vulkan.org/spec/latest/chapters/VK_KHR_opacity_micromap/micromaps.html type: documentation - resource: - title: VK_KHR_opacity_micromap proposal - link: https://docs.vulkan.org/features/latest/features/proposals/VK_KHR_opacity_micromap.html + title: SPV_KHR_opacity_micromap + link: https://github.khronos.org/SPIRV-Registry/extensions/KHR/SPV_KHR_opacity_micromap.html type: documentation - resource: - title: NVIDIA Opacity MicroMap SDK - link: https://github.com/NVIDIA-RTX/OMM + title: GLSL opacity micromap ray query mode + link: https://github.com/KhronosGroup/GLSL/blob/main/extensions/ext/GLSL_EXT_opacity_micromap_ray_query_mode.txt + type: documentation + - resource: + title: Arm Mali G2-Ultra NX + link: https://www.arm.com/products/silicon-ip-multimedia/gpu/mali-g2-ultra-nx type: website ### FIXED, DO NOT MODIFY diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg index fdc2ce9bbe..efb4bc6be2 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg @@ -2,7 +2,7 @@ Masked geometry creates an opacity question Why masked geometry needs an opacity decision -1. GeometryTraversal sees the complete QuadTwo original triangles +1. GeometryTraversal sees the complete quadTwo original triangles 2. Alpha maskThe mask defines the silhouetteLeaf plus transparent area 3. Candidate hitThe position needs an answerOpacity evaluation Geometry provides the intersection; opacity information decides visibility. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg deleted file mode 100644 index d4b6e2f869..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/03-omm-lifecycle.svg +++ /dev/null @@ -1,11 +0,0 @@ - -OMM lifecycle from authoring to traversal - -OMM is an end-to-end data path -1Content inputsMeshUVsAlpha informationTriangle mapping -2Bake statesSample opacitySelect subdivisionClassify regionsCreate records -3Micromap dataPer triangleFormat + levelState storage -4Attach + buildMap trianglesAssociate OMMBuild BLAS -5TraversalTriangle hitState lookupOpacity action -Baking creates micromap dataTriangle association and BLAS build make it available to traversal - diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg index 82f09427ec..f180e6e910 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg @@ -1,7 +1,7 @@ -Arm Mali G2 hardware OMM flow +Arm Mali G2-Ultra NX hardware OMM flow -Arm Mali G2 hardware OMM in the traversal path +Arm Mali G2-Ultra NX hardware OMM in the traversal path Scene traversalSearch accelerationstructure Triangle hitLocate intersected region Hardware OMM lookupAttached triangle dataMicrotriangle state diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg deleted file mode 100644 index b0ae2566af..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/05-support-stack.svg +++ /dev/null @@ -1,14 +0,0 @@ - -Complete OMM support chain - -OMM depends on a complete support chain -1. ContentStable alpha-tested pattern -2. BakerMesh + UV + alpha → states -3. Vulkan featureCapability and properties -4. Mali driverTarget API path exposed -5. Engine / RHIResource and build integration -6. Runtime geometryTriangle association + BLAS -7. ValidationVisual result + active OMM state -Data moves through every layerEach stage prepares valid OMMinformation for the next.Validation closes the loopRendered silhouette and runtimegeometry must describe the same data. -Complete pathOMM ready for traversal - From 095b2c690d42055c264b3d5562ed93b5971b1199 Mon Sep 17 00:00:00 2001 From: Annie Tallund Date: Mon, 5 Oct 2026 15:02:08 -0700 Subject: [PATCH 56/66] Fix images in OMM intro --- .../1-decide-if-an-asset-needs-omm.md | 2 +- .../2-choose-an-omm-representation.md | 2 +- .../3-connect-omm-to-mali-g2-ultra-nx.md | 2 +- ...-build-and-validate-an-omm-adoption-plan.md | 2 +- .../omm-introduction/01-masked-geometry.svg | 9 --------- .../omm-introduction/01-masked-geometry.webp | Bin 0 -> 28202 bytes .../02-microtriangle-states.svg | 9 --------- .../02-microtriangle-states.webp | Bin 0 -> 138332 bytes .../omm-introduction/04-mali-hardware-flow.svg | 13 ------------- .../04-mali-hardware-flow.webp | Bin 0 -> 27658 bytes .../omm-introduction/06-responsibility-map.svg | 10 ---------- .../06-responsibility-map.webp | Bin 0 -> 35618 bytes 12 files changed, 4 insertions(+), 45 deletions(-) delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.webp delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.webp delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.webp delete mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.svg create mode 100644 content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/06-responsibility-map.webp diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md index 888b6bff66..25da316bfe 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/1-decide-if-an-asset-needs-omm.md @@ -24,7 +24,7 @@ A leaf often uses a quad made from two triangles. The geometry describes the com | Geometry | Where can a ray intersect a triangle? | | Opacity | Is the intersected position visible? | -![Relationship among geometry, the alpha mask, and a candidate hit](images/omm-introduction/01-masked-geometry.svg) +![Three-panel diagram showing a ray intersecting a leaf quad. Geometry reports a hit on the complete rectangle, while the alpha mask shows whether that point is part of the visible leaf.#center](images/omm-introduction/01-masked-geometry.webp "Geometry and alpha provide separate answers for the same ray intersection") The figure shows a ray intersecting the transparent part of the quad. The geometry test reports a valid triangle hit, but the alpha test shows that the ray missed the visible leaf. OMM helps the traversal hardware make that second decision earlier. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md index 898d7725f4..f6f790ee0c 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/2-choose-an-omm-representation.md @@ -13,7 +13,7 @@ After you identify a suitable asset, you need to describe its opacity in a form This subdivision changes the OMM data, not the mesh. It doesn't add polygons to the source model or to the bottom-level acceleration structure (BLAS). You can think of it as placing a finer decision grid over the original triangle. -![A leaf quad, its microtriangle grid, and three opacity states](images/omm-introduction/02-microtriangle-states.svg) +![Diagram showing a leaf alpha mask covered by microtriangles. Opaque cells fill the leaf, transparent cells cover empty space, and unknown cells follow the boundary where shader evaluation can still be needed.#center](images/omm-introduction/02-microtriangle-states.webp "Microtriangle states follow the leaf's alpha boundary") The figure keeps the two original triangles and overlays a finer OMM grid. Opaque regions cover the inside of the leaf, transparent regions cover empty parts of the quad, and unknown regions follow the detailed edge. The closer the grid follows that edge, the more opacity decisions traversal can make without shader help. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md index d4467e6011..bab0b9d876 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/3-connect-omm-to-mali-g2-ultra-nx.md @@ -13,7 +13,7 @@ So far, you have treated OMM as asset data: a grid of microtriangles with opacit Arm Mali G2-Ultra NX can read OMM data in its hardware ray tracing path. Your engine prepares and links the data before traversal begins. When a ray reaches a triangle, the hardware reads the state for the microtriangle it hit and decides whether it can resolve the intersection immediately. -![Arm Mali G2-Ultra NX using OMM states during traversal](images/omm-introduction/04-mali-hardware-flow.svg) +![Flow diagram showing Mali G2-Ultra NX traversal moving from scene traversal to a triangle hit and hardware OMM lookup. The lookup accepts opaque regions, skips transparent regions, and sends unknown regions to the fallback path.#center](images/omm-introduction/04-mali-hardware-flow.webp "Hardware OMM lookup during Mali G2-Ultra NX ray traversal") This distinction matters when you debug the feature. A successful offline bake proves that you produced OMM data, but it doesn't prove that the GPU is using it. The resource build, triangle mapping, and traversal controls must also be correct. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md index 4dc69c4110..950383d6dd 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md +++ b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/4-build-and-validate-an-omm-adoption-plan.md @@ -13,7 +13,7 @@ You now have all the pieces needed to evaluate OMM, but they only become useful The following exercise asks you to make that decision for a sample leaf asset. You don't need OMM-capable hardware because the exercise provides both bake results and a saved device capability report. -![Responsibility map across the OMM pipeline](images/omm-introduction/06-responsibility-map.svg) +![Pipeline diagram assigning OMM responsibilities across content authoring, the engine and RHI, the Vulkan API and driver, and Mali hardware. Each stage passes its output to the next, from per-triangle data to the final opacity decision.#center](images/omm-introduction/06-responsibility-map.webp "Ownership and outputs across the OMM pipeline") The responsibility map shows how content, baking, engine integration, and the driver contribute to the final result. Use it to identify where each piece of evidence comes from and who should investigate a failure. diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg deleted file mode 100644 index efb4bc6be2..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.svg +++ /dev/null @@ -1,9 +0,0 @@ - -Masked geometry creates an opacity question - -Why masked geometry needs an opacity decision -1. GeometryTraversal sees the complete quadTwo original triangles -2. Alpha maskThe mask defines the silhouetteLeaf plus transparent area -3. Candidate hitThe position needs an answerOpacity evaluation -Geometry provides the intersection; opacity information decides visibility. - diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.webp b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/01-masked-geometry.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c61e099a5b8d73bec9dffd62ea88decf9f57cc8 GIT binary patch literal 28202 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 {CJ$oJnY9!A7eSc26>X%f6g^wLHY1 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 ZHZs@-2ZvCK@ZWn7TT21|=leeg{})Au%QXN1 literal 0 HcmV?d00001 diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg deleted file mode 100644 index 5cc5c39ede..0000000000 --- a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.svg +++ /dev/null @@ -1,9 +0,0 @@ - -Opacity states at microtriangle granularity - -OMM stores opacity at microtriangle granularity -Original Quad with OMM overlay -Boundary cells enlarged -OpaqueTransparentUnknown -The grid covers each original triangle; alpha boundaries commonly produce unknown states. - diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.webp b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/02-microtriangle-states.webp new file mode 100644 index 0000000000000000000000000000000000000000..a1374ce8fc2338a18c7e2588dd8ea98a7a6a6261 GIT binary patch literal 138332 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 z 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 -Arm Mali G2-Ultra NX hardware OMM flow - -Arm Mali G2-Ultra NX hardware OMM in the traversal path -Scene traversalSearch accelerationstructure -Triangle hitLocate intersected region -Hardware OMM lookupAttached triangle dataMicrotriangle state - -OpaqueAccept -TransparentContinue -UnknownFallback -Content, API, driver, and engine prepare the OMM pathMali hardware consumes attached states during traversal - diff --git a/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.webp b/content/learning-paths/mobile-graphics-and-gaming/omm-mali-intro/images/omm-introduction/04-mali-hardware-flow.webp new file mode 100644 index 0000000000000000000000000000000000000000..a982daf9d080be8321edd69d2dac90b4856a67e3 GIT binary patch literal 27658 zcmY(pb95lh6D~ZlZQC0s8)IV|8{4)w*w`C8+1R%2jcwa@Zr8b8| zo~mkNECy6#dK+!vWe=WuEiKm4X`%QAN5 z8Ie1{s8!@Dc3o2iP7|@>&yGQc3T9=C#QTWYF8K^G+nc>qBnpiQxv=<-ZLxUh=)A6(r?|#N_k587oS@FRV|g>+HFY>==~My zPdJ-;PPo))OqK-96@2QxYf86?%-RI6g&pA^-6mHpzdfUq`H&teFRyNU3)`oKAUB^^ z;NZxsv1sk->#utwSk^{}sAV>Lbmx%iqqmmwA?Z=4sS)apZbiX zp_mL;8rZbKCmt8yTjEIws2M%&5p>NLb(AN4#DzC|{9TbQo||eyF^3>=v{e@&;nqNL ztT$ncml|zWlioK3az8)S@0rCY#DqjpNlE>|a^T%;WKZ)S>W{sr+ne- zZQv~GtTq~}M(omjCPnigpP4Ke?SB6G)LZ^$RAH$W4PZ@E(N1RLr~CR zXR2@~1#KB)tn&Ty8?m`o@ZV%)IbPP^eX5b+xK|F&-|hFiL3_u;BB=%(wNvPu5NvYJ zD?C*N-3A=gke6x4`&eo5$Hv2qMf@Izpex_>DMCIEiUhO1wCFZeDu z>eSh+4r6b|I#k=Pe&5JH4@qf2S#`Y_t|~o$7`ceI`L7-JdoqM%ZQ{@Q!{%>v8vxja zv{t6UM2ODuXR@@?1+3e``u|hhs!XxG*kl!C2y_&6UOl#G2IAsd^)FRfYD(x(h4Gw#>lwp=B6dc#^_ z-K43~w9JLvej?Nm{eo~}q)Nx@b_t)#oJVeIfSa1IPl5l}TAD|amIjT$Avy~)UC#)d zVz>EeEGoxur?v3ll>9>|mk#&B0td4Pm#k=5czO7|@lk^R1y9@eL^og<8*ML2enKIJFz2ks2jG0ni(k{{o(T%wTe0188p$@T*??897 zhIg8zh*zw|ZV+5q62p)hOOwR@D#k>&W@%s7n5Z)Iw&x;O9Fxo~;wKa4zm%nJmt`f0?s>M)KB&Dvrg6yyzCED&kR1 znoPh=HfELDRVQeNzc?UkCbjBw6hauLw^#&Xw`@iPEH$dKM?(OnC#)i%W~S#gCCK;CPIP@x=!t^g#Q~N%2>Qte{Rlq zIl{3FjvE!9-+6nE{l@jhc7#R_)8)y~riH%f_$w#9_Y|z{l*Qj+Yy$jKjeep*Gnk>X zAfBXXh=YFq3lVVRFc$;3FVwr&I>{nnm$Wb zJuap?z0U5EBdMdOtfR!i2O(=Uwp)3=O?i-R0cNL)tK|U4o-H~u&W>)41@YbD6^w=( zS$9?%gjIHPWh!Hn+WLIBp=q1c^@vNFj-u|}sMUdC;Rx&+UXNaNG5eQM=xrYpcO&jG z(0*C!n_F8YXc~Bou|&K%m}Fv{i6eOvu8sKpH56rLLSV{rFbUbBv1J;iN5H}(l^+=9 zoWN$)fdOJ|%z4L$BOR!#lr82A@*+swG&^qha<>dKc;l8uYoZikEAfZt zYt2H$j&`<;Ee zZSwl!`-yEd$KH4j1~u4!#x&O9RAf`I*$~V;c%7UTRDO_8W{r@J!z|Xr2@IQ?${4Mt z3CZtRbDZ7QX9cNY#4Ve+&{i2)sBD7_N)oWv-~mj94<@Gh$|* z)&GXbK_LIe;I8x?I*Sn_-7BRg52rB}N5A}0PX@0}ogyR{=*q ztqTn?<#Emm=o?bLq5`^Xyl*>nIRNsf<6|V3?U8&42sVxn%Hw)e96T^!QwHj%XNsBn z9RsNbBb#!5mJ?^F%pPH_J!vZ)8SbZVj%qwjZv>7q9a<5UgcYW5*10Kh-n=3?`x2T$!s1IUai zEC_%VP7t%|QAo>c{`PNxxMUIxzsmRyerXgL%kDrh6ztHESxKiK|10|Zd{-*8I%ENu zTJJF~aMJp6bGYT?f|MuE6s!}cnf8I4a+H5ifEEoxnA6LE5-V|iPTinR)QnKxH$*|A zcwKxTw^38X!NW<%(c+kov6?_BfWIaTl&RGQ+FI21TEC1vn=J=M-o5(|^6Jw?me{~H za1|s&a619)?Ci6uO;-G9pyZ2MjZfhsLbF*-=dKlUTbJ)N6=>gb;3BeScCpdntH9c} z-&N5KnxXF9i9Sim6Ra<`!FW#v;aZeYe|R2k37LQ>HtJNSlrFLZLimnz za!B;S}%-DVx) zP*WplpJZybII_e@08<*6M|4wAYh9M4NDTz>OK8JWkN9Ir`4|h`Qb2E*KocErv^~cK zpEYWpLI41E`qpGXPK@HoALSQc1|U{or7YvOw!L|t75e`?AAJJS&nWVl>9{|d;fUsR zmQJ>_yg98Xju<&_=RF>{V=)cpUgbrtyZ8ejt2!y@L9aVAN)vc|sQLu+7y4vWG!AW^ zu?fjSVcj`1M1>E406s<;=WfWv;!2pR$I{Ov>;HRf}*m(-a}(GA(lS&1gY(ln$;8E?&bb=aJQu16je z@bzdQ3}#~G0U2Q1!hWVL|t_pB@If^0sQ(<=Dr9xD#`}U z#U&d7!|Cs3$YpvM5+Ht+QkYniW}g}Mwn_Kp*RSObFK%dRVb$|4c1}Pj%LHAy+#ojB zQmc^#$v1<+=PvVf9(gZQdR{%($y*#VTecB!kPj2Gjl4w2sSrCEEff3Q`_DV{$M3-6lbIy&-NeE<#7eimQ zK;$L`lbxDc0s}nVNWq1k#*M)+3j_MGH7hj8j4#mfAwgp_Ba9Ya*XTe$%!uZ4FpWpC zP3heVFqOh>6jpKQK*kLh!|rfd2LQ0xCWYR@fZ$21>sbR<^6IW=8TYb+1E1>94Q+y0 z*fLfxHCLwsJ)$ArUuy^9HSzgw>ie%49A(|nKUz++yzo#E$t69rc?afqKHs|CycT($ zC?JGgb9xx(2_opQq8OlY_@AcC@l@V&e_t4J8XH(G>8whl<2ASESa{&GPR#LX5sQyg zDRmu7?m~6J18F7Q+Ew&UVfdmHPh)tpMP*ic)kKfS4_o(?0-kHC@5kP==38MG{wBmq zV12)Nnn#DP`R7_fekcs<$EYg$b2WqaHYJ?OXTPQc26^?z#XXicn2G5lGx8FsPKm1M zz)LEn;W>V#{k_WG&#(AejME7P=<`tZgMFfYc;yv$<?rRFTzGhNuSQA z|LrAe1p`Dto|vv%M-(mB?X_)Ztn*fBm+29K(KtvDK_$^$?@3>T|NM4*4~7Cf1bSXQ zpZh;9cbd^lq6dBL#;6%}XT$#sMz^F_vV!%$8$Tt*EE3k2#o3t2lEf%#|Kkur@cVIp zEmdq>;58lyunN~&#;OB69fJAUjOdBg=kgqG=s*xaEHZMj?hj-al%sKZ(F0FB#$yr` z%6tD!7RAh)g3Z}4nR!P7M`S;foIE}IsK`qnWxZneY2Vdsa>p zYF4^vkO%d14ak~5`>sO%#*5jzKD)U&r#OWO;117#5dTP3_P~(J6Z;S$9KKiiEOS?| z3CxWLe;+udq2)_(Npw~tYkwynw*U@aC57~Wt%gX$p0A;sPRNnHe+JZoD^nu^JCS1p z67=y}#`ikP62&T8M0m};`KoInEj zsI#zwaMwm@nmzb%X#mi$K&r_t+L{ktZe^Shs7`B+a!r?sZsXV9?_91)BA6LV(3{S4w%2xsU>*~5(9)1`Js~KvMZaK z6%v5u-u(`d8TMM}*;yxZ2DbCa>Ox+n^usnHwe}8yPFeY>J}ypJG6w5w=!yih(_tQ& z=r6bw8_a`z1%#szu?ZNZ6f0TPnE4Oy|3qw`UwXcaRp>`U5a@sbR3-fXtZ$={hm=no z>(l~F{zIKcIcrP7J}6qmz0jz=3!1#ga^4$xi0gZ-C&mH@S` z>Z$8OoMA;Jo?);R9a$(J46x+VkoJD_W3GJ%hb>T49U2#B4bl|U)KSqM0S&=kOz@<} z608-tPLZt>M%_jr$HJb~o9Qpc7;nkx2z@>EM66gfzJ0B-k$4p}@90-$==A1V((G^6 z`QiYA&QVbzPmQx+d~d5oBXWGDAK?&tp2PvSwt=IHi=3u3r)I_1g(CBOh2}qoQ?=UZRn*jrG%WEH#9~}mdX5HD!jvH%-;W} zao?MB7_;Qd&Y&CwMp85mX98boU}-X+@ue7qQ?xH(V!Y2qBSW0&Y_s&6V$5Zg&;Y^s zh3PUu&%H2~7Z7LKb4>%ILaCk-Rfk9|qUegc65;p>6d3FikrFoA{+_=ncCjR!qY5KD zL(K&X!eP5qec??KpabRPCyYo`3RBdW z)8!wgp5Muvbd46|Vk;?|^XG)kf`SEY!xAnjHOFh?a;hAAGJN)E?>N1whWuYX)MvOf zi;5gNuuF_#b@y^}#7gYLQ)wzO$!6;^a*}UiIbT02G6-=ioDr1{rv~c>sTqikM+%@F zj6s9o6OH+=`+LfxOP~R2iR_vQ%8Tk^1i-ftYL58;1Vq#DH$fm2MGKkt#j(Q5QKOyy z$<&@WDo}i6KcPeug?e006HlnyGTIp2sfpjv=pbGa^0jSH$C)J!<1WGYYbLm{m*jl8 z1-&1@RchpVBrKt@^sRQe1Ixzv?qjf7?|-OzDk`*AD^O>6n&vKDV3Il2Y>{IL@1%6n zJ(KMlHUteO&KftQ;|wTGQ6v+~u!d$+mk1wIn;U}yQ!;ae0BC@}h{EkeuO}kn%jl{> zIHVtI?WQKL` z6io}vQ~x)?sa{v8fou`2zD_uu(~0{;*M_zuR-&kx50y1jrx*#y_)Dfdk!z*0e|jad zW;5GO?5W@s=AR}kMP-Vq+2DauCH@5izH2U0*c_n@dgAdjieiH97|_6?C_-zea4 zgxyjYq9U&C2?-7Z5yKLpWE(;zJfd)Pch@c(|E_Ta&9u;eodQHMyM0npaDU`m4i+=` zG3&@n$*g_CoJTPeYDQ`^@G`{FF&KUA>ZF7cds`;YT$x!eLPSW^$A7IBJbv0*VX+L} zQG@k62N2O)c5WyoYRmsRjLFoT=% z0SVfcS7rx+QOlEJpCuKo74{U4p&gQ}_NTH_0q*=CW?B{coHQgoX~?arfybei9iNY$ zZX4WY9?^lyO^tdipvt#WibW@Psr-OG_*l)i639-{jad?IzZ!&vV-L*==N)buZ4r6MzD z<)1^(;{IjnV|w>W(MOtd7(d(9GHLnhiiQzn2*(=3eXzDwNyJ)I!(#{AG0Ho09aW?z zkCV!0Xp&cz(+1+5jTOf=_6+Hfu9LaV{uX1h?qR1++007zF|xu2m8s%F=j43*>s*OABFltVDvr3z zAV#KSZ#WAl#JqsV8hCMPLQ$1aWNFeXndykrjQ2 ztF$nut|ciXIv+Z}po7vGJ-;B&)OOZuYRiLH3TJ32EJHjLH;zRC&CkOn*G5$9gCK_8 z&xHr)hY++!zYkzK;RUJ_iux6C5j9bv{qlH!kBa~t6)@G*y#5};qA1<~v86W4;1x(I zX{>_10+hWf1^^^YkcLW;{m2;L9f+r$kI*1U zhM{fdnw4q*e63v6jR5Q7Kvo5;H>Mm~6a;i=l3r zm%a(^<#vEvk)6;C!oY$RP{0=Rae!bdxE;q@QWc$mck{x1tL`Qj6eAVGX23;iu6SC` z3<3-NOB+*sL=$3fRZ$}W2MqBFih|!jNwJU?OcWZZmP@ij*2gELFpH_tcFz!=Qf8_= zf^U`3BIX|vg9)xhE%~hxGr!&ZF3zS714jo}@@&-vL1@e6$}Vk9>E8K}M$l$|QYxYh zU=}mV0t#ChP*er$!9Mc2ZM}1E!M14-neKmtv7oAM-h!&tpybv{1iS+ZnoR|k|AaX^ z6G7oXkdS+j`$Rv0Z`osD8F4B0M}fd`*hVp1ABx|q5-*^um<#F-d2aCPH#sfE z6B}h2dE{y!e%#}?HQc~l1Zjwa9(X@3&1-?wLL^39f?i`Nl4KGP7a4cp{Y)u!$o+=u_J9Y&sK{;$j11`?hW7DU7ULOb%qU7yih+k zpx4>ekPiF!J@u9>>>P*LlKRKta{NF#Cg)mz$*~I04aUV_W50kG&7$z~hoV4t=WGb6C^pND?kA-#@Yg+g8Qfi^$$Z#F{GbO zcE62FPk5*X2rLT6)j~Eh$WWz!MKF!gRz)kXRHyLyPV+zcWiY3Hw?B5fw!0d^`bJ}t z;ViXoNk7tf@LWv#29dB6_sCW_#WuKFn%;@zgQBd=y{Z5~zRmc#eJo+txhC*itL2&mnxWku6cz!2 z^u*#BK83WD0!(!T)Ipe_srfv2p-Blk=`O)0(U4Q9KBv&zlp=t>e|A-|!p(TXYqZ}8ZSImm^G zvwT_YbHM|d##UeZ*0hUz!kdU`SJ6EZ4yzt3qW3Og2I^ry=jMHr z>oqz!+BC^H^y}Yo72%+vI|{gda6q3B7Di3@U<9hXPwSPJaqk1fXhM7i7c+MRTFrD$ z{dv_3$toml>iT-LlAwMKiMQ-!+gT4nPk%r-3K`@?!fc&&b*?_80?_N$xUUd_!n|J<|7(gZFnQ9UK1@bX2Mo zkAnz?gUoVd$c;UZfqNxiq-eFJ7IJo05#2uj)G2oh>l%U9G{yT++l23N`a%A_ZZh4v z{$nqWA@-=%QZ5wfyr>PEJn-x=$CLZB%J7yyK0UJ9Bzo_YBEw3E$2v{BdtXVCQBJ3o z>*RA{{qy&~EjN`vb%efckDps|TQ9a@`FcFw<3!966=Z=-PNkWr z*XAdfhi8PU=$(d#j6dV$+Lu!8QO6B&N|cC9PcjDXQa%&s zi~|{1{|?E`(ZGaG@hxu7&7Z_}#l47+q$w|EFpQSixb_TeqtVG}4l7GjOEFJKQ%EQ1)r%{T zt{a~N^Cb0OqPk29pAHgy3Us%Z#pV#r9+MhiP#%-al#7lJ3o580l=uQfX((I8{$rK)*xwwTQY_Afqc+$RI1whgYkq~&ivN$0Il~EI2!MZFTICgL( zx33PjRkR~FKGWJYAII}|SFT(p?9N<=sIw_d!z>R+WQ3*l5a8kQIJM@)2%jC$xtm&B zpYe!tyUGDCB3*D|$eShdGH!aWJSP;C9SxlO|_ zSf*WGRjI0913Sm=1M`{HJdIVA3~MF?wXsDHkMdc*vgsUp4qd1>v_8`_IC0kj8xZi6 z!HX@+Cv$l~WvY}dGfQU&lj(E+h?6=rmo*Iov+vnUDsaiqA_3J$AD7yoLg*d~%rt^# zHX8>R3DnNhI|&iS@n<~PQ{8nn9>$hlJ7#?co+BUhI%eMuk(hLs1RW+*G`G~~$LL49 zo7J#PWuc(>#80HK`@hq2dug2F^aA#~2@AKN-FV!C$p0ijX2la^u^>%H12NmRIln(p z`eYzke2Q705k$GME6ksTx`~7QPSVUz5R@S$-jQg6Q$@3+|NP~Q-dySm`LaLjd*zP1 z#cJWyAd)S5I!T&iSWMhIhGJ}}eAKkC!R9nJw6w&N;tk^zva}>H>23f90jin5tGDK4 zat@aXVUTC3H;z_y51%?KFHb0&%v~T##1v*W_NQiX6t#wp=lw1{siCv={!X}lB8~g~ z&H_j0*fn(ui_>ej?O#$MDg$53A=;(Oi;7G;rYs(a+@dQFcuEo`LGFDsE(nIO|F0*J zjpq6?3$q*-V{()qj(u0hMKQyQr7kbWb;kAlw|BFb=7%Y6d2@8Ri&qQt8}(hZ-ybA1 z33^78av`NjJzfvR}>wK=%!-#TIw{gc>N5 zxTG&JlhZ*`feIivcNmX$U>ycyN0mAS8k+3-2tnDnG`K+e*JKR*?H?w0FxtB(@`@*S zTsUzG2P}@+iI2a)&r?%DBA*Uuy^>cPo#N?G_rP)Bhif(4NVx**>QWMwR6Qe*!$}7lr`Vf`(s7 zHY`Y}ny%on%RJ<;c*jra`E)0(F_8Qb8P&8bCnsJ-ImzZS=*=1$OlC0Hs#ad^=!I7@ zJ)|ewU!cU(eCs~1C)h?Y2G@eU(s0ht!&XYPh(T**kTsi{-Qh_U#zu|CtnyR^yy zw#GGP%XHRga!d{lm*JHt4V1Z89_BYwi)sOOrmJP!6o*UfviSz8{@ z>Nj0|-SE{wbBGEA$MscYy3TJEju5V#%3Tr?pj{fqjwXysNYWgN2_%V%BwjYgvU$C4 z$jVA$oBiXdn(sM%a1;^cbLbuA79ADE^5xPXj=~Lo@5u`x#L#Fe^^sK&h%+z8y_!fJ z0Qe5;UtqA#;$85GaWSTD7)BWdJNN#qBxy$S0&eZ})}jJQ3hV)MjoQX5BPw#+oKGLD zq6?iVAX48;#6h2Ldy=No1wxXm!cIe~d%fNKA(dROualT{V^Q!&Z1 z!9v0OtZkO*B7808!MUVxx?L=E@FkW-Pp{boi2;37HCIh!$S41LFX^mi+WyA<)zCZW zEo2)qBhK*bDcHYJQT_2K{r8=Qeyhh|xqk41iI_r>Z#3gq>dSO>x>~s( z2F8EQ%+2zNC*e&}|KZ)H5OacJWMbvRFKb4|QqN1j!E7)_)iAeW(1tAF4MJNJF+2Uf zsJYqxw&z|!b_|Ue^WjnZ6MGf%<@SAAQ~coZ;KNXvA}k`xvPC|(0r4Qp#iC*!jtu!F zktogmOiJ?4pY39m*22S~aa}~aezM2MpfXgPukv5|na@F}_i_^JKUtktIjh10dQ6gt zbb)d1$cav96cYjw<%+Dm#7;94=!Y9q9Zd)PU}Aya_^-jBKwS9V8*)Z1f8?0)W^za> z8@x;+EJ_D7LTQJ)2B8?xxy5ivtX~@E)L1xsV3XA)*rDkBl{4Gm({q@%jc%;v-e&51 z7Cr9#0lG*7;y)tH8tqCj2C82;wiO@h-H@6#U#3n3u0NV^j~Faz`@W6qyenDUvcIob ztIclvR{NMzL__lFzamIxI?=*-gq}i5ugjcj!nxbA8%e#`dBm>u8VKBvnAIi~1Yjp_q+O&R zlpO>x`Z-H4vWASKDzyz!8#?hDGZO}c>CV%o+c+Tq8Z7GFF zp%gt#B)dr$wl-r`b`UmJp@A?)A%L=p7B6`Mcl4%F8k3kL>fxvq+-E}u1@WDrwuBC>rHLtq#JQ{RYY6QjYq-GKK)qH$72JpMwTT~P{ zQ1i!P(2iMx|F8EWQf~Ma?VGqj|9h9B*j;Ijr6F$y`|~(XaNRq}_L6tXeXpiRzFJ{n zz#w6vf!_S*}AWRfh%4`+DzF zPV>DT1O>PmQ5gZ5qwKvq*~`>2U|*+x z6rEhq2G``Wv8?Q=`A@FurSkoZ=T;fyYwv3>CEX_4sDAROervUCHuLoHCf2j_KWr^v z1DH$?Y|&-_1u+>#*yeCoY;@25R-Y|Y5HBDy{=J27rgJLYbMfJiGXvE)PBNCqU?#uxm3uTAIiM=FhP+#x`HE-(at!@1 zn6I0~R^_w4q6jA{XGkQTBTs}N=CtIjwBN|gINfid=qkJ-(A5x{ob_ZQOos`tlS-VP z-~3Zfn}32n3~4!)`(iFCj^sl%zHRb3w61RA2<`;zdaM9P-QM7S5PG$2rIzJa-O2!@!Y1uwVG&?BCjIbXw?@~z!1oa3 z9&d-7-R5KKp`7?N7eq6zC8V~v8439P?MvZmvE~8>hz7=A0j=4wdJG$L$^s6I+lygI8vFg#o>!py^weG-04U5*`))PV=BiD&OaQY{4=qeKjRzQxcHh^G5`dt7DS-tZP zcB0`fku18AcgLk^vZc7jn!~ap+@J1&7&LLbQ(`m4FaDR_HLsuJCp=B26J}n^Ox0EI558=)=I^3IQ#2*1rRMnm zsKN;&CaF?0xca{`rY%39*Yahab5(_nZ+YX%T>rsV0zyqf6t1wp0`u%w+}y=;-9R?MgvvLqd{QlcB+jVOQ5ZO4{{yvJf418R$tf&NMkgVy;Ap4dNU#-2z>53+I7zFymW8G;^y(OEG*bx zxidGP3!Qb&|1}D$D4#y(H5Ru({~8ruSn((d;pxeZ(I(&bP3OK}zTB&0m@n(^{kK$M z28orM8qF@R`EWY$%&1^lyqeyLHaGp@u*qWm+3T1Okx$inu!gzAV=_7sdbXA!(npn} z#thy)m0->>1S1ISRvbf(vwuwk@Tpo&J3Bk~83p&%LP2O%euc6<LJfcWq|@L zN;FtP7U$(j{#I{EE(ZSwmk4!lUP{LRrN6IJkXB~oWojr`AYk^=*rbQ%kvMIGu+=CH z!!fVuLj5p*KgutssaWidOdZ-X(415QdF};~NUzJcTd(y_%1>q0Tz5JRgX+LjRkzl7}cmwlVT8cGt2J!S7xYZ{qtl*_6r4R!I8LxZI8 zc#=l6#y)(Tv3G(qYTQ~~WXOD&i#!+Uv*N1I?{j~+HyDe78j95eQ3z>PZ@Jte*QSC! zl9I1Z%$T;fE<=q5*VbAwk{<@jU9nVhBEwDJ@-XU}Xme&}+*6|Gp!h0H{;5p+hNAe^ zuQU9F7g+n%iGjF)BHOc-m(KS*@^k2hQ?XB#o}T1MkXKD&W5yNa18uBn;E>$Yk}NJn zK1UDhaZ2;l%glP&4CD1(JOk37rq()v^N5*AQ=e-T~<%@1FPnGS)}4M3fj9 zQ64jx%B5t^snF%x%O=w}mt-;W=z(po=d%ti_k>1kye5n$C(?IJHlSSPcR)Q5bETKu zxeG0!i-hC_yPc-1^0ZBa?HnAUxPqVhaAam8Vb>@$3WH}I^4?G%ZfSZM)$7ZA#kKqY z6D6&$32D$(jtM%BJqYs>Nd9eoJmxqRhXo1p!++&R4sbb03Bd=l-+Nv5`KSw_J7%L4k9iLTjTfW?@oS(9>1=T7E;+9m64M%6slVjX+$tpxGqi3`oxhPf z{=(la_u{#9YSZEtw-ABdvOC!3-ecTu8%z9Hk8`{B$Rus3On+p%dQ1Iy zeb1rzG`oy{5*Is&nYot|sN<_E!=h#RD!vH^M%fwy6-0Vn9_}>po@bk@Rb6hJG#tfs z@;r(6dbOJjd|mOWnrd*3U#TzY0+A1O6h!rVPes?)U7`0>K1bbevXq16nAQ#*SnGp) z8aF?rqd)4tYc@SctNH1)1|dj(7^x-e(H&Ui+SxPq-?M&p5#8(jrmMu-9awufpTr^K zW>MN)m%Ae93vLhAfHW9YIoi}Yha1A0wcLhxCF1GR=?nbUR9~+vTVK5~ksQ*(3E!Q8 z^bj>!mf3*b(7saQ6JM|KbGnQwpE)=&wFug!#q~Jjk6abb!O>%9?t*}?)=72J2Y9B;Ok&MgoLqevetk8bakoV7RhA=C(qkgB6)0u*P6Q0ceGQOsN z<||(p7gd(WwN5#zl+JCVyd=Bgn#rSoy=1GRzdh$rh`(N%%3B@dKcsi1V(iM>;uacP z0n`~zBo|u;!tP1ZIq-p*-?G@?%RwSfQ?&@~kbrKk@eTmEb>IL5N95xlo%x`D69IDj zbXFkxsZ$*#eGl}L-y$g|4D}`^rYXutP})ohGI)Hmqu?TQ`_vlwICK%+B|6Z{C#Huw z-J*leL#0_~1)ZORO%N;8!3(T^Ea`QL+*}`dO_zbxA<+BZ(k%`!dt2bMgqRVLhn)DJ zy&5{8W>QWXy{<}jN-o9K1y!s&?W@iUed@EwY`mxF6r+)ahLs*yHyj1DNb-WEEJ(+KHp?fRiao>6g&x}@6TF@I!7^WV2S-K}482Jy_ ztB07jI*2qN6dMnjkRTyVEHuymB+-s*1wo`R*lZqTEaVbQnsh~Gnyyxpqp>70q;&rS zJ0W#SiF2`cr?kdKV*Jf_rv7>FH1>MxkGFy6kKXq?)|@A$MGHANdV~*GPLN2-(tm_T zk6L%pjNyxMD(;baN6b&XpAK2e?2(dW}Dv-B^a&kO4?l@ zHLZh)trP+%B)5iJS(p^G$FkZ}A3Ek1Qu0k65S2I58liT@H5)A10J< z07K?i};RimI2=Mrha{mR~ahWZlONP32R1c9iG(g0xw= zy&XQdTyWBKwyQ`uX6flFf;NS{itDbqa}S=wU$ zjFnH@Ll*Orsh*`FId6`GYdeZX{P$-zi(z+F`io7y0=>o)w#ZgSP1TzV)$F}d2=^pc zJnaqTr)se{_4q{6cM+rwA2lQ&2 z+Pp{Dy7MCANov27VRlX(#=(5+K6^)5bfD~B$GZ@y&m~%=-^Qus$`JA**t^SRb^|?R z@=drGEaOmo=E4U!$Mr$Dui1t7t`@UQ#dD~S zQ_>v$q4xpR!A-V4TI3aJ5A{`nX6^Zh(?6x*c=molv+z5Bp5CFXiKFpA>Y>r>T5$+j zwr4Fxluk*}?O7Di| zA+1enYzO&TBrmvc^@S0M>+E{1|APFGg#iAoIiHs3*Aknt@P2iRA%LSFp;vSBBlgTD zgdn_0FK0)xcegWz%i5^p$3EP5*W=E}zA)cN zsD0sDpy{J=71h5B0OSosm&I`R{c}DQI9R$RNo0^V@{H9pyr>cB5v6qZ- z2mg~S(!PW%H*V!QaV!(1r?rwV%P&L!rq|XLmc&b%L+0{!`mwf&nOL6{+|!()CL8GDJ68>AHcKJAKj{8W@6-FLbY+WwtXw|;N5^xuPmI(PePP;L;oD_mhQ}}b(=e#rBoVk5`SdU4Ck2%^Mn;XoEY<1h zZ&daL(g>~cjYg(>G8~w_zf^!=Q8J8 zL-VDev+W$JMxVxiwr$?nBwZADnfh*#|4iKlPqhP)y6Da69ldzRK%KI{Cucg*VI|CF zJpQ-LwQT;Ph8<@7Hg?euP^QD+^eCwA?1hSx-j81sPU#jDao{@Z z)D~}D|IC_-a5EW(%=?h3;TcCjwD905D;2DgOwH%fz82hIW$q$S^G}{TS{_1VuE1OPzvbFbR#NsB|>5+FYCMMwJ?`FlG((;q@eb)(M+cMC58&8RSpgUMf z+3$vc%AsV=9QS9D_yqIz(ZC{i&BbD-Eo)-KC-NH0_F~`m@5*qi^u~VdD?CQU{?k)@ zAII&58`c+^8-_C*F7%uFDtEeP+g~H~Wqld_{r)OR%ZFYObfYSpJTm3feof3%kNL6i z#irBu1k%iHJnFU6*c7y%oo=w++%r|Ct~Kawp~7>mmSatdwZ@In$DJHte_13Vs7^F; zMTBC*{5#bPDkg{l?RKw4iRJ_by%CoFWSflL*ws_%qlDUp^IGS%YVZR>OkO>^I&blA znd@pVeIER~<=Q>GxbCYOf&iPGna2H-$6d;$jk9y5rP*1!BqLNw}d+ zMP=BVz#^d>)$61@Qm%_UHJ?@%G=G2ZYJ^!qP9l2ODsHn9?aqu1qEQ3mQ>rT`61EQ0 zw;?zqB{3&vH#`^~Z#vBuI~bHUzEm|db2}3ZZWm+oOKR&yxzKp+R6P%m{k}E3364RP zjQZJpuux+nMDRZkB+VaR7T!788aLW6Mz`+L$60^x687z!9BLZ-!&=Yd96$sVL#MZt z#_5feasXmWIg@a~*eMSejDlSF;$+*atz75AYQ`rqBDSG-l=X(d9Gbrv*UWKR+2Syg zTr@E7R9hO9zQz){4!Odz33*&)bcDHinE*w(mFP_Z6PzX&t}8{QEQPZ8d93JsIQMui z;wy*v#mo%GlIr{uYTv#XAEoo$XP9FeQ$;senoRIBD?2U}ebO~t{n{*U_0U85!@j>r zLwo3f^>>Sm{Ndg@1u@WDnR%v0kRgx%Zv^4h4`EOTjDm!%NE*cv#WY2~%*K?`m_lPF zmWanX9crwGYtyMab3(~96LvTdCMGDHerAcnWru0U`h_ifk`oi&f*7#*Uq59w+1v%Zdq zuObOBGu48kn7#mkYyFgYj+M??V`fh5u~?|YkAjiD!0EQ?^4~V37GKb5hQU9ym$xQk zn$q)&P%6*SiwbPL(#yl-e?`V{BUz-h947l60D0LU*|(=5L-y`_ojjfFGUl-TrtrDH zU_)g=4FSrd2!_cGey70<(d~4p_|}gF4BH`chTA?qB0k%lxe)H^CciNH>LxWfhH-n6 z+J+0OVT08~T1sH@46w#*aAwet-qm$04jp1++!t3AyYLBl=adT9bgCnQUV+>>>1mIL zX5<6?iPH`bo8I!%sWAiE7`aT?PW4Ur;#h7}#6|W+4L+|ezSmuVz|u#W_l)0TDb89~ zzhGLV@@@#3^o22%H24G>*X%#$Bt6Cr+hzRk)?%`s+oHbP z6&xAFO*$ge6JJ^izRFDA6rCpMI%f^^@r7bEYk_DTqB^y%#o9u**qMOTDRV5=HfcTI_H=xV1tbC z&ARq_)V?v-+xk+=8JF)o6K(Y!77EuJ!l+j!bLydbiuBzGKHd9BZYsN2yM~G%Jyj@3 zpMQ#=H;AuQIkUo|MCqf=_Jq3UHc-6?qkJJ*&-b{>z0CYO%SGnfgw1M=pRU-|_zoI` z7Zik#qdd9Z@+ZIg(s`y4Cd&t+Tn0|A zMCHg)9%SkkPN^2&#Kh|lcN-P(Jn{K$>i^Qc%h_`=yhCmN-b@Z^ONyAZ zSSPy9c(dKv>NrE2fjuxwuK?v_+&2U-IPSW_1%b)6M_M;WBo-y}y9U}nl;nf6U_ zP8vkzL{a`~V!O&Wvoa~O2q$)+JhvU=af#VO0gB=Ig{9qvqH7)!hP`bhaSoHcK3;Gp zSR);i2_U}qGtg|L7^8@l$q-muz+3@dg_o%>=R*&4$QMEdklk4BDRCY}oZtGs^8y8Q z#p+b+-F}fYX~!P+lRM45?Nd zkt2WD`6{cuBl+B(ekpFCWHT@OOoo66>PjZxkdF04r}GxFFgHtvkBodEuR`08<>|9#72&iQAMiq$hqV{FW z7_OMSPWj~(B5WkM0Vh*BfH>?Wi5qaW8&^d6jF(8K^E^#QApmd50XFuP&3+(}NQ3*# z@Y_P|fHffuT8hq-9IP_o(yrcmU*VCeVkw2lyxhWm8-1F+MH?$BFJu?OlLaddml*2c z?)^m|+bEa&gTMG7-l|dyb(fLRVc8lx26x9#5rRbZ;ltABoU<@VX_Z1O0%fUfKk8s} zLpn6*swQ;K3x4A6$l-9rt6Nh3XXAq-Ts%t^Ls0KdWu{46jK3FKk0kl#-(Sb8At5O# z6L)=O|7dpWw_e70x&B)xH6NPFNdL+Ei}w86cXoUF%DLRaK^IyE`1aT66&r#gN>j9P zTO&rPL1#!ra*pqdw^M{r%v_Hftbbd!wN=;v&GvJey~`9Hst2XXpa;g8!p)9+TY6FI z_LwHiG*kJ-a_EXk0m>((;S(oy4!=3tSt_r|y=3lQ9VoZ+wX1muUAK(WFqBdkjtI58 zJ$-+GJJnmsA%hPAwb|)*y7HSj-pal#`>7~}MoorEyzM;8Xna95Gw1h?%at2%Xv3`E z%2)2J_`Qf1NZ@=5{tB+hn@uj8=z)wdRo2Zr^TW-KG-^SF-3k54YPFr=V!$~JOqNA( zh62|t`WNARDo2xsM8L_pKBl(y=9K->#hlh%jrWW*u>F7j9EF*TNwkJ$WAOY%Rh$j< zBi>sVF5JI&O309!cyY_B4Hx**6nk%n9gCYH7_F8|OVH$pDXgGlJy zp)t(bX(?aMlnB}0XioRD8;894ixW>GptT9!@^=X#Gg>PSHdVc2zAS*<-g3#rq*v1X z5uut2ezN)^ma1WbBU&wC8Drt$8j_st!dE$WD&@Dzl2tn^0ZhP0)bNbxZqj9aQ6=zy zr`q|kH+_kZ&B(Z7;iHI>>d1<^uc^daEe;8hL%fUp2j@7?C~o9qpu2CZ6OkR|#+!I+ zC^SqXJvuian4T>jj~~XG96+O+BTD5j;VTO5w1uNao$jI>hEkyG-YU`vhN zzNYml^h~jEt7Ru(EOxYTLDnADo5r8G>QA&G4j;2{*0STOC-u{tB3K20?;UD@HI=avETecxN z_Q$5}ii&$eJgA|sy=GYkpz^Vf!;r5`K-(7bQQJkGCQQhtT5mlL{rttAte5zVQ%jN( zh9c6QqhP~fy8v%}Y2|fhZjTws*1thIUOD2gMjH1mP3{UCefQ>^wQ?DlGDgw@z8g@H z(x-vJ@fpfHqfLL_io8+trQCo=NVoHtim&=P7M>80*D~)M2#>VNlwAX;7=$2GEm=&{ z{MqJg8iJGXA+uv7ULM{sN6S5TA-ed<)ZSR1e55|PHO-nkU&M0-;-F@AWHx?!H~*zR z$hkR^5_|LR#p!k3DN-Q#lAHQf_m5A>G83zCmW)5=NXW%l2WA}>1y!dy{6KoVq^GUI z#SC%nV8yean(@o7gTigl`;k7?PEV@qh0@O8ZZ6_ZRo&K4zMRoxu<^KD6)yUTYZ>~V z>}LZdC9=Iw&6L5yN+)6zLpg%!dgk3JF<<^h7ldX!z`)!G)tvSH0O=tEWEe560c-Yh z=t;Y>HT7WKRof#O|_x@>O*FUK?7T+PCadodC2S69T2QorXJ~nU>(^2p+7?i z|I^v+D+gh37D#Up4|A~LA-!3)?b?NC7|{b~KK7o3ZS(vfr6w*ZBP~tUq@V2UW#d^| z7oUGLj8*|(=wlkH2Qk&eyJZASA|q$FA(&VCGdz(2|lVMWxN9D9JXjzuJ z+X|QfsW<4@*0|I$Gmj3NbsDvx-vv6#*R*!hrr2glSFp(s9>03qZ+o8Hwyy&0GTQHu zu@jo^l}}8_D};TEY@8zly^c@bAU(B%F1m7b!vEkz&KboK-*k8a!fx?6zjYt!GyT2l z=s~w&IlK@tU3H76kELwhZCpxAC;94?W&7ZJd;h8#`<1Q?Bek@r%`CA}h=n`a<_h&JxP$ZMI?urT3$<{+}B{vPI&x%SF z$4y6GaCE*ZX70*7ig~tuH*M#~#cj*U{zi`Wy8!|3hXs6MOKy^k=8>^KZUk>nBv8Ch^EC4%X2&fLF|$@G z7vO9%Jx`H~3MDvG+#PS}_K_X>#JOx9IVY5gq^2y5!risd$vUwlg(}?1e^Y~JLWP>Y zFzI%mizKuL_?g1Zbo z1=~ui^)a?*tP#D%RO`Be-IgiWzILJ5Z0whm%0L_4l9{SePtOsl!o1T%q}Z7%)*y)j zkD(JdOL;VQ39>;MM9+~^db3qq93FXZ!+0ESbnn#$99|Z0!(|+vBd^t05S*3OCy>CW z(PDzr7I}EMG{=g@!I6LnUONk(O?}`P&a^beEoU>Sl}-7&&r(twWwW{|7@Q(*T#I;y zC~7JH<{FR~!k($#v=j2JN3Ch68bgt@z9l=1P3A@XN1?I^zVabZztQx3^qFOFW}gV|I`y%g`zKzJT*Va^Td*@n}@j zPv$&p@4vM)>;YH=Lx&K#-aXr)sRKUC9Odh1zq6LZ{sTxLDlGEiWMo8d&?a~H@dGeR z5ZJ1L9$@>ZHcc(whRAlF!z}Brqz9`OI4OV#t3Q;DEaj&jfFcL$a4+@q9tIAu18Q_bC<83w>qMWiPgcMZas^VS`SGwg@ee@E%3cnjJ*oc>(+n}rhWybBH%z zH4xDAC{P0EG0&fJIPzTe3JLGkhWEL{tE5iXR9!{)a+Amq|0IM6SRYcJHXWmkr4(1` zjuk_~s2(h|%>M{YdvmA3-xINGde%bi5Sqclon}W#Tms&z5Ld>6XH`{HmLOdrOp;%# zsW;Xm`0Atma}u+8)V-_w zecn4vM9!@-ceuK+F~COIXoq0ewnpGoL^Y}!%Bk~1!xjyK5M))oi2+FI>_hDvt~fyf zIMn>mznThojn3x+&CGA69>LLRlJ&x&sQ}SALwqw(X+8+G#(F72-uK+Z>*--qQ?w9Y zWdSCBDW?*XY4B$t=-XFq+$;x@S(TLG7b|56SJ@`8a|Rkz$q2`O)ghTJ&S2s$b`eaI z3Gxc&Ols@3-h3Ra=?`L^Ftph(GyU=|FB>IhEB5mT$8bixL|e~(UmRTA)1`;r787!} zX_7&$HGjmEK-Jjv?@!@dN~vECic<h53QBQ9yKig|2W7jEI19@@aKjDD+ZIUDc8{ zUNNS!2DiA~HKi1K!aq>#DoM4B;D&yeS35Mg+r6e{C4k?Zn!YPq0m{G>=0+Ny-LXca zWR_qR%C?-yj;nQM*bUUf+ubFtRQP_m89nhD&EixjY~snw`_RERf{OBbB!jo@!*wTH z7)INmoym5<)zy`x@9LxlybkOZo3vXD#+|h-?eGzo#orr#67Eo85R!$G3#~K183}2j z6Br+P3S$j#d~umzEh^6M03JaoC9*X*Z+WXrE<`8jag~e9o9mNmnmqNUQYMPS90b`6 zPROOCd0!kZi}U9@sBsKV^`pHxPMH(IdKY9wUZw-jIO9`N7^snGc8?E_ofl*pIrlD~ zrc^$Z;c*=+SKD-&_!U^nc=*R*ig9svZQPAX6@*c8rDTb@_dL73`xQbJ=(yJ`tuMZd zm%~+2_em(AxyURrJyz5>)V(GM;a18lgX{g;0EW;<_q_xpEloj&C#zpZ-_&icbqbzbAn(|P%S)kKBK z7hS(<-hn7@)t-aPvR1g*TpP7uUz4a zh?j2p=Ws%20_fer**Xm28{mnRv=L|VeHrCLzVs{Q(i`$$KAoCRn7bWiEH7wLS2GnZ zjF$sLl#(a%p3jW`pA}92TjaEdV5?gY_u=&w%(_+aLJeTHP#k+F5GfGBzTbgS@4)_= za@HxQNYeZIdF=cwyUIDPEptBHrzu|UalNk(HP9lWIjbNgAt9mh%QwGQ`FqbkHiP@1 zy%nd#goJZUeJnmRxSHp6SboR4&PhtwkXcTZO(S1Z;8my8a}9URT|#F@g3Fbkh(Juk z^%FQOtnIZLZ7=svEI#yCMe3MYF?;JWb;|i*pHk_I^?X-Y<{T-Oh9lG%EqLlFKHUhf zj@RT6A+olK2U~uTp5gCHkO3^#*osI2U2eKZMq^j9dES4AhBhvM(Zr)7r`sPkbCP&I zPrknaFBb zZ@^iY5&u{d?D0;iojMbSCm*xsmyR$5$sJLqJfFoXC>k{Z*)1ks6Iy$tQZFBB>|+$7 z$s)T+uWZ;LJsn--n!K_cYW5E2D$!QAX{zWk{1H2Nx2 zL|T?u^Rp%Eh$2-S=_T8BegTT_V$Z>WuTT9?ssqoGC8~;Kk=8~P&NN{^!*5H-i)hGi zS_=x?N9!pa8B706pB`l(|3S#B%2mM0lKqN&Ekz+UF>sX)m$pk3#V{&v7hqt(3vbL_ zd57i+Kte@=6&z#IC<1-zqe?~BoK$!oY2HK6Xj$g&Zo#?Ne;#!s%;WUyD}g+Zbe zz}>Y}=heI4m+}TZv@G5L&bT7SROoIVF+UO{<4;ZV=Uy9~SuS@pl_hvHuvHsk!q}M1 zBp?I=*UJ+6W^D0KTMT!2cd`54jy$1aaU34zNMs7~o)kr&E6#FVU99d8zdiR+4NcSO zY`<@A9F?{RO+jUsUJEPkufEr9AL=QKTbIpBgLSv2uY)t+T506Q2#fQ!hztV%LLTI? z02yg+nw`Eft+zjASJZZ+zhBo{>>HkQMc%BWS7T&M*RswssYfOv54^+yAdyDVNF#7Y z{)us82oh5EP-Mg+Ne7DOIR(s$%6TKB8UG$#qKlVnhPi@FE@CB0Qlx~%QZ9E9@L5G8 z+*H3Tg(qP$HY*H1MtA_|gcy0gQktGP%|I=$WRVS5Bz#yd(%o- z%qnGB*aj=&4vO(8dND@UG?SR7+cY&OlNbLWN_@a%4{+!o09^>f!EmJ}D6AV)wLj3B zymR3^bPVp7Oe02yRG9|=>WiYkx}y)-M5xW*Yeuk9gIa_7Jc#!DnxV0Lt^`m4nb zu&a+wfpg$F-_;IVE+ei3M^f|0wW31ED<~t#n4GXyF_b`xi+iDraS5g9ZDNDKDFpHT zB0_;`X@YZh-D(m&YKaOR10R3B1Xo-=(su=tI=gCx*z}kzTY_-9v2DLrrOvl{nz{h_ zUMVMJ;UH(7O?wRrbTw{(CUuJq0i;9U`&u>R0fiCUXX zQ-!OTu!ZqzzDKo$@0-5bC)y9jsl^U*YTM({fa5C=Z%-XdWFB(lw*WpAC*%w2(lS^M zqZE=6^$sZoGDvh2s49P-UQ&TDZ(3&V5rBA|!D=lT%<|bXDn{OD3I5=~gUMDEjgJK6 zU*KV8Pk=-pEYc2dy^yR`8?CoPVhW7bc73{$5RmsUi; zd@>@aDWq5}Y8fVW0)(Yh;R^l)Lz26x-j{Lg0C1JQx96`(DkIulQr{UIg+kiEMALOV$(ript(CSrKLiO#zEr*IYr+oVnS_&vjF^@F3~q

2`xX($5(6fC`3)(gVdswj|IBZ{g~1p%PyrqZJb*yF%I4dK84 z5Te9(io;C*Zdi$&-5_?Tq-=4ygjeF|zSxo?C0Rk9UWcLn`;b{Yl-fD`eAyHTTFQ&T z-Dod-4nGHao-t#U8Jcm zIjJcRGjv&ffPsNQlBZnhsHT|&7>ru035AeAdIjP9Ttty|)9gZTJArrC9Wdv*x_ReR zbC{7uypW|3iVnazdX>)r@&gN_;mbX4J{WBa_KsyZc)Emk3=$78Zl(gDd-It7YP>6G z1QQlOrNWY*8K#A{)SNyCl}3*6zW}{JHrocEaPf7mmISp>xa~qXNaxu&UI-Ue$rSrp zi)w_m0)Mk*$M1+qr~wpLrkf0?hLb~Icpx|710x{pjry6`F(C3w2<2lqPMyA~IwNk+ z1zA=Sbf`eC0}u`K3&rhs`dOSb|G}PyZmRi`QikWNC%?MmY#aXD zp#OY@5YwN4PEMcf8#zEv?TxSfpsAa%dQz7SgpZzCea6cWD?EGiy<`fs##q{vNNQc9*#mI}x z1-!jnj-b*JF5>zE>W4NZxihMeR>L@E{Y%qn0~%5G-YC_MlmWA!sV-MX_hL~n{E9hb z1Pne}07$;(?9nTU7{D2U7S8e5L8@Bv+4=$?9Q&}BjiBuAj%dg{Q|y|^CA+}{kTB_g zuLFE*E6cFb(1R*ShMta~0s2I0*QxD80Mhzd*iShgEEX!7kRIw$fizSG77#5;C4jQU zG5~)ZC?%rJ7D_=caLhEXBjC5I%#i-u(x5`Gc0J$Vvx`2yI0XbJ+h>64`|8$SVnaU4 z!Skn~{MR3Ts8EZ>&n;E)+Q{dC(=W;Z$DEnZ;vPV)MW#D73~D^m63FWqIVPo6RtDI# z;`BeW-a@LjQzn#|Hov9|0~QAM8k{l)ZQ~Vlm++bPnVGGIw~$$gj$o8I$nxwqQur`Kz^%7Dh0p(wN_4 zqSS$T)=Q~ny#exj!gdOW?0+rXpMmZE3l&iNCcpjMawQ1^I5ZzRRk<~AD@ImTc-8_# zNG&9pwTWmh0mC$kwV!>{0z*Z%%m5oQiM@OmYUP0yaaXc8n!x+Bf~9uunUnnhYu42y$h+t){A3ypSLG3j# zuM@AzcqOW83wdvK=Yd&(K*2x-bp*meP6a5Zxe3%SAe!2N29t9&1~?F4o%?`R2WVeD z{;j0#=RXAG7@(o&%!}vzTpjOg@wNys-HF0^R+4Jvbzm443D+ zQf#BGaTUlBEWpxVG=a_-Cr)vIm2m6l|I<_zzN$H*_s{#QQ_)X=*N03{@Wc3LErx71C} zEeHsml80K=9^}tM0l|P(2Tb6CeO*b-B!}rqc0PS8OMQHBW5wqikaZ*7Pe2!s0S*V6 zBXR~nIA$MS0X+BGKLkr7kl{Xdm}HwvgK>HzwED_tyEH(vqA>@$DSKM@-&FlOqBa=fYV{!BF7;o@EfDxDW3O{%Dj=H1!5;XiM};e+KLRlJ%!5E%v_L-|IZl?fVy+WR;+-f)|M|<1Dcor z-y{d3hI^%v)}rhT|gK$F1<(_x*TAwk5^6ge+>1+IZ4301GOoL3fe}NRwMe#IcyYX zYL`x_J|zq?-FFE7?9y=qdPTd;1jrzmk91*vsX&t@Ty(EMvWX#}XASyvphP!T*T?%j zzG{|Bg$1_Hz1kmh@R7U}qoBK)^P|^6*pV{U+U+zN{e-;q7IB_x^ z=b_^e<)>y(hi(`&O+|{7OaKR|GBdI$MtrR@eCZNn`*unAH;FZaD1)Upkq5o8SCYs3N!7igCm!zygbN^X%jP0hy;ZcRXwzH7dObI!bvx&yjzjF@xm= zprJBj$59~n}7#>!^QyTP&2_H)J- zrh2^RJ0za+lu(mKAE>RFiq@-H<&aa8o|{{`R`srRD_2bU;g1b-u0PftV8qdSAyz7aK;X3L}wv_(cVm~`} zqd28rNKE)p1;P01G?&-n=k>lMD=RtuE4FZfh42eS69UFP;*epR;TRR-0Rn1qGT@rd z%YhCbIFJxasQBABkr&N*&jwLPefa@IP=0$T3BxJ~bS*2>wC z)B@LIYAR$3C(fl#>R$(kjQzp^%6s1>3RTsCj{{|YBweg7;D2sgZEqRoDvIBvr)L0+ zBSH8al^>{m5q1qKU!OL+Ba`0&61;SRv{lo2398h*pX>%ymTtEW$Eq&=LvTGrB{((Y zuGAG0TT>^jww6bY<<^e>iTA`rv#&xL&{MWo>@2lEo`?x`ssv5KJfS)dM=6s=y;%m9iCpdfvn4w-?1PS7gQO3fkDDV)QJwPVG;7TGTQL9a2OKR+tV*)1k+$4AtII~SOMILqOl+F@2b zNVRw7-#cbI53SClKTk)fspL$GySp-_9 zOK7X)1pI@T@huf3*YS>4Sy+n#c_~PD4E-$g(=N_)kXwG0D*7CiP@Q>y2wuZfG0MvG z3<(nCFjX$aEcek8axqlk2R5Cg_prGL->P! z=K1)-LK5I#2aSzyHzLdO-$5FjCnG4XKtD4vO=9trT@eaMCl~0|Jm5er`r00{3)W*y zqpBLqdlWM_cmou|Q;cC=S>ak|qe`e<-Z9W9w6@d@g(RA0fg+Hr=<16vr9(+L#nt_} z36#4Wp3b%bBq~mE zd)K?Jgz0fbnH8!^5>9^PF&$+sXkcK_LQX!#3+19JK)nfMyhbH{79Zuek~lwC#p4ul z{<#BXf_%B&pA3h*PKa3Cb|bbM?^l~`{s(O%Ga&bDyI1zwk;L^t3<`l?>g{@{)ql&~ zGGNy*-A+3R9G}MLmAg+ik!AR^A$5z4r_YMZ$lT=G``VHi=sRH$JUs-@RS=@#V?Fc? z$rw)TFc+Io3tBG(6MCAAw!j@9J+D_F4T+ARdguOqaT-2ceErIfu0MsF=mzFwaTm}c z7QhjUA@tgfbX2!ee$e#dSSx zcQ2mgG6`QO#VKsR@7fS+C>RS^bhQH)7?2)lXh7z878$KOVA2XU-auCrLBQ$7x3wYT z6L5;zUVQR7isHzMjGdf(FDvqM0(8?PQ<+XzX*Z`lXm@?xmz#XQ zc5ecPjr7boMavy749LXb1smN(;%4fk(aLCLagb16X9_rv9D|a8LI()BV6SP<&rfVY!gT~se)tk)?;IWaumKhDVxMym6-a{B^;ZJ(VI*2nmT}O zvD*Ip>dIo1$3`{Ua%**Rk{Ra^32i`BvA(V%K3>jp@Tt<~NjtddZC&}rvGek0ADv?t zcM>rxFG0Dl!mzIH^%cUhD>WXArPWD+E47-5;R29J_I}49+c!4D<+<3L)+4p5i_MA)j~#Mg`s!B<{D2ZZ^TKlvOYTzFg<|yok8iQ*+ybK%2=rs%x2+ddAat&Xntwj zaJG9fesDB+vn_pDdR+fJn(J!p>e5AA#&*tnc@nPQbUQ(Qr3SS$QmL&NYcqckl2-DI zKUBfLVe|dbekpm|FInoq)hP&U9ukg9Tl*>y|EWa;3A74#Q%cI=zNRd|{UhkL7blyh zWz$!ezM8rbW-YM@r9f@qfg~&#{1WWH;)$>h<&*bWy0AS_kJ&VhSrIYUB*_O32c`{;K$aNa0?VHcc${1ki1V>Mbn>s~AD zt#z@m{MzGk$F;0pxy77w>90{qAbgnKN)*j7ZrWO|$2go{y-+<~S+77I6G%*IS~3JA z_H8U0>q?G$4p|6AI1NkD5@w*!+S`3@ET>O zg<@R0CS)xrfC$i#b@|k8rf17@@F~+rM&EHyV_=3CF?uFevzp?z6U5!z0k=xI7H(;z z!qz2i%q}j&V)j#p@A8-ddET=+-h5@uAW>McsbMMs3C_2BI43{nX@%+EhYi8%7cQFx zZY}9s&#GAr^6$qjYa&*mR{1U&Z*4Nkb&|6ZUbOo?tpr`ndW4ci>2QS9E$kh8SWbi|e0m zPmUEV7p6JuJ6WF}Bzv$Fj-3s}WWdtPJ?7T1QxWht!j@ISk9czFfA^3p9S`(LQViTm zgzaq&bi|VOHmZ`1g-}{~d0CFno|nO1Uso#uAD6s3+sP@sf$NO9)7rp6 z=cLYZ_UP~JU4g42h@FoDn3<1B?QQw#rd5>+%;Eu|cfDrE47jWL%7~#GaZnMP zXPy<^IuV(9VGS|5W8?qp?vb(ansd72N^ITDaPmSW@#xD|W?KBf4&NyLv*>K++P z-q}q>oLpy98=IZl&~*F=SAu&hOX8LE1|3@7O|HutAQbUc+Y0Tt7u^Uv!;O<2I6Z_i zjJ&xkIl;Ct`g@bX=c$dPZfhm@E|J}RzY-kha19OLAqfRv`3w)H1k9n~Ht!wA= z)^o*zUyp4LaPqTw7}-8aGt!mch-^J*YBKw&!kD(y=h^U^cFW1y?4`+ibOryu8DIk! z4^6M>j5xL^n6ck-awTmemx&)*D3wGEu1UY?0cIRq^CT1-8Fw-%zf9(}aQN?w+ba|1 zN|b>!SaaVcA$cEfzV=>GgT1XmjYMvEknFjra6hptq&_htmdY^F>bmQ<{beP? zdpjsowDZPNHpSG3s7P7&?rW$^8PXxuXAW7z5NqVVK*}b05f_6%E5T>F84>6puxRpd zu9>NAW;A@4)VDfGCigUOcM&anC#@G^!bL;T%Da21Xm}TKX=ycvOy0ReA-`hNk;;|L z%et-Ep;aj_q2RN8(Ra0`e(XWZG8ikY$`)j;@`*k=}-!FjAsm z-4peKw-&KoXX@_`mL8Q-kB$(mxJxL>-DqF-9XD*uR$n$J#up%sy8Kee}&$ez`BV{%~GV!3l{P>h6o z6^PkaI+3V4Ir#1B=@%`VUG=`Hn)ohs^<)SRzLYSO>tliLT(Bij#7oVm&A9L0Y~1ps z%nI!(^xRg;n78f>K4%ppxw_5KDgBVPWyXwNEU<4J+g8c{!X&?8k*haw3%gji#VK#c zjY|9~jhmA1fo~|ia2;4vj4AZRsaxy_={V*nYXfTS;--+w~KzjIvmk8h{1a zQ}9uudogf)%}NuB5Hp?EEuE4&4yTW)LleD6m2XpIOF|nL{aa`!Z&2`b8v!j}%Sp0( z-3%KkwjTot1nHp*+Xxgz;k@FM4}oZ-7}##ZK^eI}E>PV)b_IhDv{1@Wc3en{9Co+B zt-4aaJWxvFx=mT5eY4jf@3+LfNDTCgnIdnRwN_Gt&}S%MB$<3 z;%eC7qO!&dm{JXS`gFZA!^$M(Ll9*iMJ~2m$8BUOQKsa4+?jWzhpHxGT8=DE!if7w z(;S1i>sFZAbvM$Z-)SQ|z{s75 zKO~iyhZM6HlS#8xb$VnX22V_E@md{ny_9FMP_;rR*)EqUVs}!kx1VI6POWOa;;cGO zDlgqh;qt7yRp0J%awvP$xiM;apt@S`O6=a2o2L|9xwZS~u&+C1iGOwQ0j_KO>EiSa zHrcRQ<|O?06(z|sSA_}r4*{8a)fQ7ahWv#G4jyh?R#M!DU;C_rwr- zi~c1;+H@XDOY=jwK*o#teYDqYB*>Ee%qnG@mx%)P1;uX`1D$U8~FN3zXo5@ z#w)oqH{4=i`AF5va;W7c{+L39vW;R)aZ4V&1a}MVARnVb8OFUsv>X|SGnKXUpRryg zqS6(*@41Xz)H`2=KhjoT+o3>dK;R}7p7u7@B1RV%<+(7fePMl3-iSlHvhrl?qLh2! z^gN8*?#dADdZdhGhaSF9G>(~Xhf{r^yw|COim54F z^f%|6pBMz*Gh$SMK%-{xtD^X?CfzuLKD(*}hN1KMEe3lrxLfXN_}yL@X}jxEOzJSK z>dRh3`l4*uSoKx{r^kE-t^{Yj(OR-k2Lay{hv|-QxQ)z3*JikQ!fr`+SCicm8gcLk zIvX2OdMMevAxot};ZFblxVFP@{p%X_Q=AjL{W1y-N?*q z#$^?CM{41VN#s6Gx#8VqFkF*+54Vhsh^vlIb#JT}e$Kop)NNvBl=ikn*y^jO^yJ&( zpk2=G_|>s-!NB~izWp1E@uuL=hGR`gyMU=EKG4@dy<_={spZ1cv@yY|fgAo`>fHk* zquqbVOMNXDqZMWKV~>>mKu^zSAvr$o)qMl;<(^W1B%fRMc;Sx9mxkIFhQ||e1*3Y= z0}HWdz;PXzH112G_%|BRj}oRZ{W#V|C#0^-ecY@jjrQeQ+cv^!xN*(w-Ma; zzUaZSW;m}`f0#e%P&MS@_W9Q@H|{#mzc-{s_MF40i{a9CX3@p+9;^-K{vLCCvU~qh@yJtL?Jm-Mex{EBn|V zcO>;a@_WF{tX!7n*Lz^Cu9cZhA0?nHJn*@EV8Xd?LI-Kly*4Y06O-AMbDJQh>K1uc zzg{pJ4L+E%4hpVaB;1_wL> zCq7N|93rfYoViyW)zCJ*k(PR{>tdN9%z9xLC-$aRq$RP_E44MwZN)*kk<39MRIyJN zYI=>9?QM;OkB;2g;yOIIv8XiYB81q+6ErEiej9}6M(d<=c+|U{K~6o-CXiU=y!PDd zy3;*n=ZN(r>3!?7Ob+SKaq`W-{l>w3P3`J!N|PU1{TO;z{AS>CG=IwTutizyj!iCZ zJW`+~cDiFc05()#d#))9Ig1{d(3u<_QYIkD{^Uwb9UQqjVzeDXAYvAeZKvYybG@K= z@2&cbE-Epw1b)0Rq`dl336(+dCy$c@X&tTLweD3x&Gp+?H^Mi$eHw=*?<}KtZM3$A z7ty$pwBRB6(v6_0D~k5A-reYW?F_#l>`LQ?9x@1#vPMwu*zF#GyA>~g+Ed3DD9%*R zDNq(Uq=(3vf^0v@9GjTxE-G(h1*Ue(zU^`e7+cT9uZ;;<3rHg2 zN|UKJeP96T&{7;u$>rI*%MOz}(nz#@jH)6futmD*i<>J7ccywRIDs>DF?rhot#`Sl zWr;+UV|3u`*#hgfLj?$@xH98(M| zsqPaR-(bc}cob|Plydgy3d$dtbZ3LAS!R-9VOJC0sS?<^tj9(_Eom8GSUqdPGVGz-h)*v%%E`sYozwJz@tk)bXY#Ab_ zXf~w|SvOwrR~m*ZaiiKy+ylBNdeO4g0Rk&S8>?H0y)(VaM|9iA&`y#oGyBH(c8M-r z-A|dnz!fXFZZpJ9&*Qm^z1zsCAl@V3<8BM&PAS)nQ2(F_celU~PDE6`TtUM#^GLux#W%lQm1FYi(dURxQ7um$uXHdR z%v#;+RFo(lR$Wk0H?&u)8FibTWX*jQ(=FbZE=!k861SeQr&EbW*wX#)Y@c!Zi!0 zA~7d^pr7QYX8A9@3XC$=91}i8@koy)_LB^jBZE`YytNxI1$2%l8*li_@BVmwW@Goq zmZq(O>qdm9BVj8%stVQEcjO53$oKDmY}FIL&PS4Ut*U2&_%g?NF*N#agI7idZn&Hz zhRvtdD|b%@50&Zaz3IzR48RwiX$neSzbJNR|z>ylB(B z_q|QohI83EurSq&%_S|SN~ofxuZ6h(^s|_1+a9!a$0+f`HS;uUjl9zF<*yr4OSG#J zI7RG+HeEs5@{TjSYP_n$x>XK6o5JP4n(4d4?pqa1wv+c;KSfCG@E@xPTtKq3Sy-k? zRcOPL$zM(e-obR1p7C@2gPXwU=!kI4Z|JQ=e)l^(zVfWH9xN&t8=Kn zs^F?>!{)ynQMMXh-29FI!LXMsrE(wt-BvjtzVHgmk>h(GHGk}6O(+q(_G$X6Ni+rnoo6Q#V z*>Z$?gRaY1(Cg#e-Fj`NTSe%~wMcH}!Jv(eKA-h1y=4+&qM|gtv8u(Ls1!gr9V{;u z+-&{C{J{g{_pcq6E}Ds%tvEzZS04Hy``V2IezR$W5=Dq@nZY7%k0GPs&*}R=5O6yNC&^2DS8Nf4 z$qYnd){y?@QOzr@>xFB+OPswUuTRByJSj*Eo{ios5V)&zaLs?#)lpzVB}-?!;?VR; zN)R05F5TBUdIE_b?w@Rq=W67xj6%s~G@KWU@Qe~W{;p;uPw&;2!73kL8s9~CMK<^b z3Uwvl-SkB^pLlr(@v8F(j{GINN_%C3@AKw6n!2P-<&!gesO{Bv=&64hyHpP8b?AAI}=IG*3Pj6X1eW%lPG$Bl}_k7dsn8*7J4-vx6 z?_OEgx1L5U`1T=ny|knMh;SV6j`O(^9$=gLs`JYF@Pz%lk3%;2Q!j&eXnlz*mV0YY zeV4I|#>;cpM6$G00(?Ir-po=e;pBXDJ!KC~DpG`%Pfj!`yHnOzDFfu??a7MOiHxcb z>7`o(8>FpKbWleT#w-vXkTB!`ga3~6t-ty^j%0D(F!YvI7 z(qs$nF1C1Uq|+G8K5BmS?$y4WZ=#VpwAe2GDkiZPb;7-Dx-Vo7G}**iGjS2$v)jF` zcxW)*e4W=?NP#P@wE4Kf!A$2jVMc8s;+AUjCMOE?Hc&@`5bqzTIDfm>yEd4`nE0ry zE(%t7M7jNWfWW9LA8M|Y{8c@j-(3368@0z}K`m#m(_g25{XS2w^&PX{b=id)*)!I? zKAaDW124#g8uFZdwd2^M9~oldV|LDVz!~Pn8Gy-lSI?Rg#us0YOS^njz>NM(!XI<8 zj<#aYu1d>{IDRv>n@OVgc=F_@A z(3xFXeB|FI|F~eI`^Kvu5pKoAXO%yYCa0D@AvU9rVzbLTU!nule3r}fzDYTTUs;oW zdZC&aGH@i8J$wqOqrDs9t6$_Xo&94x^&3{G+nL{vQ})P#gGk5oPo2cRVU8?)8q!F7 zaN6PUcVoP!eZotP-OjdSJH7kjxyGx;Cwbo)JNhQX4|mlPC-FV@>o}XBk^(Vb_650i z7Zp|*n{@Bm-RH1s^pDT)^)^?D1IVR(vR(C5A^DRs%`xpcCQ4GIw^d6qnX}2@c8qcL zj*|NE?DeR|-=fFbLpoF$VzARE21r>Ku&47}eNB_rtRLJYY=>yZhRfmiH!={!rnN?L z;oI;Up@$O3C>-L~Xi4zH%Jv%6QLc{7EW=Bl6EBUs^ zRol>d^NgmTK`zg?u_4)4Y}vZ_A5^$^aqpl<--YnNKR;k;#^fze$CRg&ukR(f5x-7z zrw}x(;s{*GA4#^GPg`D~m-dMg$KMxkm}ewuF_VyE=>k6xTky-Gq!9hG=kVzxrkX@{ zhVTDh0OSrE@lTn)L&yM zoxk|85dHS;_--Fl4CA769F>SCb2iivh`Tm!>dmc zI0>0{Joc$)VwMS10Hgd3buNIM9iOoH!Gr>zlMnCfM@g@k>`$9#9)P1@?GUGCZ54a|EHZM`;<=#y!;mFV-tDO zcCYW+)d>^*?^wK9FhK~fZDhW=U9^kKb8PgkEts>YEZo|RIT9B`wlnF%Vu%Y%Oky&N z({`D>e)8oPOfWtxy^zV9KNn2IJ5haeJ#Y8)2lRGb5Ap}}Ha2IO2Qik^x%viV$M?7L zhQ>M*P#gERZ4=p*(a($tBj*n^R>gI1hh2YT&2rnMn+qcsyrSgf>?DgLr%a|^uz2MH zz-*5geEfv>ush+uh4EY4WrB2%SkO*4=s72LF1~+5Oy0Jg=P%lZF$=DfP;R!B(VkEu zF_}2kacudnL(cSs`LFzsS)$)eUqj~(nORy%ln7~WX)3gB+O{QD`A0kH%kF>h6C?76 zHePRcOiKH?=YvH=jg9Mw#XJ|R;CT(sCi)xGi9O&JEDX(A3}M11ZE~mELpj9LcUvxw zv3Mv>#jO3W?Us+T=Ez`v3uDia7wN*s3DHgL?cL4`+TrPsKeV@h{BQ1-WaIS4)NS2@ZB5d>`WlMn6m-4E@UMU_4LbL2v+uased)A-uJ&@+xVwX+1x z*WG^OhT|HK*#8-)WBe(w{Kpry(8#!@`@Q;svcGuN7edJ{Lv3Cpw16}^fA-V(2i)WZ zVL#??AcR8Us?&%&eNypMb0;GwhmlONm1Yw?F_I$qCRXI%^C1Gf&~=f?_HaYHS}-nL&=(j_n=DFfIr)w4hYZq9+`>08NPlrdjNX!a zgmEEcgCCl90dAc=#zF`d3oluqqkp*~uedmAj!{S#OmZ z-485;{78(P1a^;`wT{SDTi|W5(0xOWaS_DD5N%Yx(r_iG@^;f(86Roy_{|Dzwav{x zo5a`#_R#*?Hiik6<=13?V3N0Ew-x(yE|avO5+TTme|T9W?-BnREWWa5fv5duY%65P z_gpyTDgI~}zuCH$ab%t4Zt7O;RkR+nsUr66|DYFIlC>Qvcc))8gnKjqqx zetDNX<3}CFVu%k5=;K@YuoqFlgR`_z!>8e)pT# z?Zvah=IgWm<3HcDfBpR*+9|Kfn&H5|`SMZw;>BJ&*xlp@*8P$7%l5~2mDp`~VI1K@ zKZJ{VSUf0{2Y2->dw!286~(AaUzc38t(w`1XCL zQFsX0X@p6~FXaFvUYszfj@omfia>lFq~%vSR_eux9>lyIU2Ly|sPnEaJGH0Jj@s*2 zFWOgMeIAM?pJ9*Mm%o>T0LAINq4dB`%I%*CpM)7};&0`)?MOQv*5IMNl}ATVuVmSV z{wW_tgN~h0@sBDKR@W79c{q@;UcTy~OoM;Lq;&xMWqq9lR+5ukoEY!9_!iFdv|sUL zR`QK+@%)T-R)e>quia|#q2i@rWk2|rDWp{w`GczUKh@vbh|L}n{n&QKMUnbjKiR+R zHtb)*m#pz~*FS`US9Xzzv>)oRlD~!k7(?5*4f}gqb}M@t6As=TL=J(=p6Vx4Z7Ut+ zu49fk8~PWI;8W@rKe1oxFHih$hi!dg5xn>x`~O+~K=VKGk1P_9_^SS#elq?I2JOi= zUk+--js1Zi@t47?_+4P(m;N6*m)(rJ5SjGXr_fIPQI%Q+jELbad`$+y980+K=}Car{fCa1)DCNx@I`mwvTB;lnNaK>i>2k9IWTCGjVn zPw?0N)|YP8euNwOXOt_zpyzSfzuJiQu0h{N?Qhlp`bWZHr6$H(B^D>_o#6WZTP`eE z9GP(;{Nm*+?)2Hqqrb{9XTWyJ1z+LSMz_j?W%l(j{BwmB`!_$u-!!7o_}(x z(E<|lSugI#`8V;0-j#nV{|LwbitNkwH}R)~)ea+$g*&AzJ`3sEy79wxDD=fa-zaTk?5=clxea*z?7Aa z;E3x`g}?Auw$X1wQ#qFU3)Af%mNG38uweTc`>*gXJ>^*Rm0SGcuNv}+Iw4;Ehp*+` z4r!etWmAcwA?}oar+%~SpZtsb@)6FzA&bJKTuSmOk}Leh`LzE>TaiX=O{@t!@=f`_ z?j$#UCjQ}B{8S^d$e(zRUo7J@+7YD_42L3S7hyT}Ec$mFRle`-e%N3Cb>j~G#rgl& zzvust_(#LY-hI(^7&cA&qdt>J)D0VTkC*>jz8sJ<5=6FxyAT4$NMD6oI88Z&(3qfe!-;G zBG-9$c^g1IZNdAonWS`4%T1~)>JwZNGi|2HgZc2x1CU^{VAwA;py8g zw^(^Z9Cq^>(;M&3m_RsZ^4rfTcL%#@e}RlnZ0M7%851z_vz1eyg?GVHhj8` zahf!>DhI()8Y*%Z|0Rnd=Zm_df6fyY7fiZc@=owICI$~*z06YvGxUv+=poPL6CzUO z;|_i8SJWbYfWA6ue^*MxbDQFb<6)zc&Ipne#N-ikU@PKpWzG{b%7h$SOfK#M8#!=)KTDeO% zpA^CTId@{v7T}XNIi`QDHfcMkIEnz#TAbR#Uwy$>E}sm!r!8za3}>^-SktH84exvH zZz#M&pACGONj^YsS)jN+KjG<+A7k?w6WZRXZ#??s&%#9#uH|RgY%_R$4o92#r{3z& zV_qK^OR*Kl>sbhM!khNbM?1P8@}8$~oQvBdrXIh19f2J$xVbozd=x8tE+;^UA1A+$ zzk8Dfk#iP1pYlV)PhY%X()&qb#kS-^h3X=JyfDvG=2LM*4{=g$Oa6)|?456bVG+b9I3fn^ z&!>aEA;wRjdj8RNE;Rb2hEJ3D^p|l}eLy`Kw+@asjaz2jEwSq2s!w~kc;Y7AZF4pY z*gGud?wEhW_>H0TR=0WQGweU`6ak3B7e{-;-y=_H z8dldahuNSt#-9~`C5L`De~$5M2L>Jbg_w3Lu`EcY{b`GycZJiBk)zsR&Gkiu$f(@% z@QI(xvs3JUnMMEo1Nw*=IRn4C7-B!{97*($H+0o4v?GkiC3mOJdF7T`3;_t7u|N~? z)xv*dh(Fm6JC1$ykNktS%+L#&%~ir}_~~&j9c^hW#_Ew%T;*NTSo5xiVxBtn5GMJr z!&zqj5p{!3ZN?a6dzUss?5w+JC_%Q!0RQ|(2&ET1;bctPreA;Y1>=_#rY5)KL07*qoM6N<$f>B)oxc~qF diff --git a/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_Functions_Tab.png b/content/learning-paths/embedded-and-microcontrollers/streamline-kernel-module/images/img08_Functions_Tab.png deleted file mode 100644 index cd2398617703b5a6a95e92c74ef6e7059e6d9c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213220 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 OILj~MeK_kdxdH%FnUR{*}%%r!c1CKql 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

bCvn8)3$vA_bJA{i#Tqn`2rp@8F!O>TMj(0}@B= zdvo)@`i2TL{{8905z)i3J3PxlwF)SZ`CDelDBMK&2VME2pTO0IKaE`f3I7EivVQ*q z*!+h|l*gcs1kLg41iwme$LWR(-P4|k%j$X_8xn1ho<&c{aS_JV-2Ln+guyP!HiW z^awAq%Iz_O&9YTviM!#808l3op*tO{Qf@R^M}&loLCM9XTI=S$ZpdaadF6ycRu+|5 zZ9Z6Q!VcF#ORSjLOlP8WJ)E~e!%BE`2IR)2u}&}IM(C(5HR&_$FyhiwVYFL=FU>Oo zJ{JyaJq&V1d8cHcoYp7EqqQ~w4NhbLkrpI(d@e2={|8FvI>LqI8Mv!VL7=Aa9YA9q zp`z)!z(Ub2a|Avrzcd>Q>#=lKRTUdg{)5YG8i>#^iANtdxvsu0Qm;MpAqAY!>7Dk= zqTU3nBQ347-N{x^p?sk;iHZPHxYoN(L1HoPZqSxmZKTJd$!?E{7R7#jd%$V6^DtkD z4qn|($Y*_0KD0LCjzbB!=t+wC7fW_bax zXRn?=O&42kQ|EC=&}(8?jJ-sgY&0lllKR)p+A{eYwUP289V#g_Q961?*L5Howz0R| zlKTLyrrgCLD<(eW>IngXgsm-l_uWNEH(p<<)s1R{!=CQ6)-)nKu?xHit}Ui;fLVNZ zpq_+Exjl%#cV(((!sbPX1=V2Pn2CmIlHu^_iPagdm>>=KnU;_2p^EnQLT#;I%nd)h z;Z{SpTYe68ND+4e&u=K-fh13{SgfV3mt)I?w)6I!{|USy3$SUp>I;Eu7=lQ`P+U2rc0){!AF%H)kO%)C{*@_xeaBAf$SOvlMWTUxk^-W|3(cc^m>up7s zIiPaxiqtdL*&9oXm3=_ddhDl19%p;pw1LZy7cM~JP4;K#V^-=HZ`c%e8iQCxbZ7^E zYnH$rfpx;#Kn4;f6VNz5p)>CP{(-P;-Amz`Wp|Gsco<)~v3S3pAM>1Ba&y-o?=h8E zGgns=w8dFzjufduUXRXRI8QwM_U+q9x3{-9ll6&m-k4>&T=W(?0VAp>$m2lq`69Mh zO+eu^H~)3bhvhuqkuw=*m=xaB+1(DO&7{Y|OEeF4A*3)$3k_asA^XUaKG*yC<0)QkpJmlmWZCl7p&qqCb8NHi6ZmFwB5}fSx#3zuZWwu178y z)~j2e0E(n_w(l1n{-m!@?>Up>k1Lzk>2@+3(%{f4MoUY3aT;q^Gg^?k|51ob^8$9f z(S!e@KP4nS--k1&RtbXhYKJi zOsndSXFE;_H)0xBi<{B$n)6pHxx)$$`ROSbn3&o2vscz=5$7M^kvOY0TgrP0dg81! zFCxChUw4h90y!I>+arSfD(QiF&4vC2H6alp0A_IN9d;KwN|$rj8m&)Xt5usBgq_pV zYw@&O5RA#Ei`boBLlld?j0Ua(U-*{2BG~FUKV$2LeSeeJiYy3XG(b6-tdhJ=uUrfS-_6hm(n&`NlGRX@;*AQW6=x7 z;c|7~-u`lf|1;L>XjIQvT9}}y$8u%Cz3EQGrTv=J!a<5o^=Wwp|E0W*D z1uV<e%k|$z7U7-X;6>83Fi8l0K;PBy0nOOP~ccP6vd9o15EC_3~)-;PkZD);&|M6Sxi> zzTl4m<`TxV7KXY}J3(DS=#SAStK3jBfq6K9m?%b#c!dGp+y?p*^~RyG=;Yr^fw15U6REX zvp=BRMAOweN#jDGlS^c_bhcQe2#eVe$M7`6(4Uy|1zav~R%E;I@qO~*+2z&gw}Fli z*8(lnrh4gimjH(~pQ~%#2ycN~t4vKL6eDANU@dk-bouf{XR^$W0Awz4Xw;wk=~4;L z);pwIE($y+AUGCog03*KukTFSSQKUhI~3O=F(*L7!85_DUD2z9%LuBKrtg0T;i)$` zKJs*fVSX$Vdi1(haiorDs%vj5lR1RI>9d(x@A3NkBv4a)xZM6lPtT{emJ_=zYfC4mmxxQcoTf&!~jc{Nt@$ttycP@vmpSMUTL$mx- zXNg5+#=HW$D0B(z?Z4(y_VKQN=7F>Q&J@My6*1U3d>=P4>XxX_rlw8jpX)4|E+{Kp5H5sn0@oE$uFcY;p%2-4|tT)R6u%LRB5QBfBO za$Wcw{+y#k`D~f>S)#yIrKCiF;^fM9%l8UZVm03Ewjv9IXKSkoY~hqU3M8RoP2e7o zu3E{mvA2@m-_Ply7XaQXr*__uJDm^Uv@a&r-~ z>h*;fL2y9&;-Zwjd`@0^T)yoU%$Q66_Hahu&q+?`%-3wn|U*@Zbj?T{f_V9q;f!JUI6TCn%PJz}P zhpzSJ&5Q7yUq-)sKVBtyb+}hLHHdXp+~nMF+@hi_WAEBl{udt~u#cOxU7qj;!$WJ! zDH8jQZT++Nr53?^d|?#~~7ohvPz)w3-U8fy=y&o9dRDR%}`tL03i=#y6> zNZrvNKi=_FyY#1vvu0&ym95V516_0N7Dlp4G1WZ+0_kiOJoCvA^p^$>B`hpiD&_Ar zSx$xA0-7bx?Ew}YNPY8C_&-McL(crXQVJfy+68&tM=6vw*G})L)mVmcvgU4$)31)! z=uk{`M&~kUrpwJdw_;34&~jxp2;)#6w_+y0ap&nbhV|cp&b34@K8YcD{u<>)Z39E4 zSD!t9KHq+(X$cWp$L^EpHalFAQ;rFt&{0k{!pVWXee4mT23YGproXe7h#@)bZHp>q z1$_Oo+4r8Jsp2weP~xIq>EKc;IK-scIh|bG2P&t&{;cvn<=td}EXZ_E}1fY=S;_ess~1iY3b+FKm9UcI)%} z8OQ5jy?uBaChz)DCJK1lFGI-SN%wZIq9L8YZP8LbT^-o4G}qO=?TY2NC`#cmD-@u8 za((2LYVmnJJdDfBFZ`#WeO937jfwe$g;_3k|FrqmeJZ&g9XTVW=g*V* zuH1#G>6_KOB_H3#24Vjvus4_IrIkJZj$zB`ze4p?#Ab8%XlHSyCfD1W!MoMJ_y^^7 z%3%D!5SCP?gc*$MyFo!ThgxJv9z?^}Fv9DD&cv1T1J0Fk|V=cicEo)v9db)*d!hXhL=(j z5;v(mG-8b>Q>89BEiIzIg`g0yzam@M#9+#X7988_Qz+IRQ5f_)qGXV%{xxqFMvJ? z7}gf@{U?;&m9<_hrFzC4JgTy1h?6TYl>`L_)~S<{im|avXB*?`cSI%DkSf1^jg19v z&JKSDyO;$xc$`kSy9Mx<3n%~FfXB77aIt#;Yg|-BT1 zp85`kHHlUK6CWLnN^xghj$N0&cdEh&i zZ`vev>NbBP{$TmmlEQ(&0;+3E7s{>}GAV)>{!+1Gd=fXw91zw+qjQ=Oh;$-9-HISCr_TZ@;ac>slZ(bVp!h!5(^hQ z^&h;FkeEB*Wx0(@%pc29{4Qx{2|ngU(YxQXr#3U4%Xg21$51OndbY)_XI6c8R)*3$ zle{&G%m=?(Y2XfYOX4a^0X~2YNS4uL6@j<+)rlHA&+*cYzzD+^{VA{VN=k+t93SFY zC&o*t44Bh=8T0Ghw7z=vDvkOsxooP3I1D3T85xc09sT3kjua-nysp8N@bD?yJpjGb zVAb?p?jP70FEwe0)o6$LSs;$2hwdd()!`zHbtX>pjV9b78bcL6L{Q}L( zbHk5f$=`#7`SEGh>fm&CXg=v0#cU!9QY_~FzApjySDDA+DdiqT>#XX@rEv)#(1FPm z$QaJ*49vZ{1)CQF4d`WoNaUH0c-C-&LVa9({LiqKK`)iwhC|_?6AJMwG$#(GknGV( zVsFVJ=#PA6#R%KIA8ma;P=e`6aN~TiEMA3imri5Wz%@@G zUE&d9^+$?y?n#!X|NZIRNG7zk$wI|yOcN6maA)|oVGPf)n6XR28 zJbz>FI8`dL0}c`Fwujfk!orG-264p2#b3C1@MOD}l`!_Ns#=Uyg>s%x=po`c-zA;c zm4bDw-Ks~z`CTMq(K;VzI_V65K~YiCOQiD{lTX0=oP#D2T1^$BtLarzJh9+hPUX@d zH%Wvh)OtqvB$`E%#Vo|MMzp|ab~twq@#?Eocg%Aa{YXZ=8+M3=^nU+CC1&HX7;lYP zqrS3U&RnqAcB4_L3TZ$;Shmd!$)Zv9ny8zaBBh|9aP!>y;p7sZZlgMdoTt?<_@{Lh%Y` zc5RD`%Rejtd9GRC-DlCIrpba|@Re^Xe5O$?p|Nb66O~14S`Eh$5n+fuMMfWax2A;V zrsBP&8ZBZREn2Y~i&m9Na?KT+-4ohg4%zv-*!%d^2es)qKfR`IcQ7DS&a=F&d5iEH zj~B(GM?LB7t2 z7xwW@94_`PQ|GsdIg45fS3RVvSr{0!VD{n`3fr@uVF4c?N0(Z+N*XeOeR33z)Oa$G zp@*STe7dQqwZgB0v?O~0$3yl{utdm0ZP#_tZf&GO*+LJ4%$leC$|r304{#Mff*z?` zLP}?i{0ZNt2 zt=q?2zqN+4#g|~C3c8{reHUq<3(uFBM1?OCE~lzX(Cuyj68&wZl2^Hu@Q6oeycZ^hdu2{_Kc>|E=+YtbY+&Yq1l`N;`=2= zXHm^%EZ1u@Fsf+TV zGpy_q;5HYYc#Kb(=`;#It}eOx+oju+EdC%xG<(I?Xw>)I>{nKcADa^g9sLd>7NQ6y+QdED;@LEK z=(cL0`Tfbw5th&2($MVf*XjeQ;&JZa)x9;-fpY?8FIV?ESO9_|ICMw)-dDMCqZS+u@uu3k;JDahS@x=9N-ufOV ztb=)G_wGnsG0%A!$Dd>*cQMW8D(VZP0sEYcp9uO+~;(BTN4*+D3i&dX^Uvv%T#1u zIJa5FC%?L%3bzm-G>+TTS{*S1V%15KNkI9W4b*q zj@dp_=zxWGK2@4;>7};zL$J&&E33Hp#!Tmx(P9DgtD(Ko)%} zm-YzkOZI3sDOqzhw0iQUl~k0a$I5A9D-Lvr_fZm=@^9HN6NPVK z@v5uu`+A*8e|kpcx{i*HSg2KV(_rYy`DDL?;loei0jEy(`!~&*^mUANKBx;SQel#` ztv}D)C601I}6RsExX?QW9AJ1mP7a)AC-$!edO!axkI^DvCS2{2Co-02O1XcuMpFs~uU+GJ4Jf$2r zJ#xLUsW?XR=Vr8Ghj&(^!u?m zUy!NY`MRCXREoKA`W?&jQkkdk1$}-$H@oUV!r9bK#5!H=Mm+%=+&Q>C$^+9>+PO07axaB!l4#(<5%Z< zJnB)87ZOq`fGl^jr7dEpl@;Hrm7E{v*A;H z%+F`|b+Y?dio}L4o;NjaDn-X&<@s)1+gMcKw+E>3*T7yK5K|rol(TCFkhEOV)I2M< z3w|pcQ09cBB5#&@V8O%LK}+*gVM5eI`DkYxm*{T$2JyI;kMH+43H5hG?E6AxRF3+o zYs+M>$FzsH!10t%&_@PFl+?wG1FLJlNBy*$Vo?Lg?!+HRQQTdcXXNKNWCHkxBSq{- z7$b$+y;!Fu=C{l^?L_w+vB6@dWXfZ9=YqAJi+)pc;~Oo#Zq+jka+H%+tJpr5ehl%XP%F#}XDB&nl$G)im6ueEK~R zY+lwXqejPYqSx*YkX};nmg>*2SSA)``mVl6H^Rw=lA|cPHvs!F-u>18RpGqcst_M) zseEo^WBL5(PdDV=OHnBds4VQ%)!DXOMXMoX@Y&pa)_jw=qv7P>NZ)su)2vn`9>sbZ zqwL_K!ZSLMd6xHglx7U|MPD*e!z*iE=JyN9RI61amAZ<|1kgK&Sb72RKpfcs0IVEz z$6bL>kz{2Z)G`qR))Ti0arg{HEc;v`S1VK=fE@*ki4LR(qPJLHcEOF)FI-yMs5wUA zY`2XU#!%u_EZrBm<~NrHW6^8Qzec3Vbvsy|BE&9%%@G<74o;u%%WFY<8bX2$b32no z%Ol>|E?CaUz?p$cKE0l|)I#sa z&~>-Ip|ET-(}+^rE2^w#La7UW%4{xA>?T%ce=nsi{`_;#PK9AW8?5L;+(^XcIt^?- zWVFmJ0v-z1((^Fl;EHE5haGO(a`V2*tT6%!@uT|LMZ*3oYtK(MqU2T_jP~MRNxU-Z z&&T!H5UKESsx4(*=Wys%5?9ePCL%(6#_&A3Wl_`etiy=Q<$x@}DXzo3qUVou-=ABh zUmWF?pZ`3SZjM!fI#w;L zq)bnow&r_sm60d-3g-B;q-^Ep-xJJc` ztO$zr^v_>fEaq~blNyXNKfb}<0={ypB>mr z^453kE6$*qBePAY~-d3BAJbojcKhz zwB+PycI|fuqB>mPka&`_1ZQ`RAkdcan;ccTMy6zj6UJRyp+Q3PETyuyaOpIfn)0=K z`P$0mz7-WRNj?^r9%}l8$4m2DPwtM-$II~G8q%&hy?GFDibTsR$xqf@W`yRpBmx_l z3#oXSA6EQWh$R|1(w3>U@o0FkWbBRPCtVhT}&?>P2| zmdHEqlS7Yt*`UqhqMo?-7r%z{=}Y#eqXJ*-*9V;zx?{S^`%`V(c-=N!SrDV$^y3cO z?fbE=rH+(OQc_L}+$ij1Pjm4*qZ@`3o3%|%C13+|$SqRwtC3$*6LubFFI-+!(N`4d z&96#os+rzjRYW!d8oD%=S*kJ9DGJM3kgXcQLFa4e28>{~LCGy(ax$Z>vqu~y@}oZg zK~q%m@0n6r>BdIvX`67>Ooi7a4y10LDJknruT82^zk5c`@&#Dx8Ik+N4WoVydgMw&cGdYjdCB z+fguMtnP**j&ScxQzVxO-Is-~CtNf)K~jLZtF18-^b*vwW7NR$IUxF5i-?Us7*Fl| z8fYytS3(!Zpysegy!^tljwS-?Ra>$+;UzuT3prgpV`Rh;A?y*~fGu)FRHSrf94DH& z-Kv%DIZv}2)8*8!kDqELJbdWVpG0D$gzIg3IspV}&86NV%I}Pp3Xn#*oeP>f zY>(Wgi{ZXhH|^#!xU4WVbpLeqeN8=%kzt-IUJLr(V)*y{2$k{IT0Pip`==69TIoh7 z68#EOw%q>4I?!#U*dWZHzw{>V3Qw}g)=Y_o&3~Ud&U>geWGVL{>lE& zsga>4?s2E9Q8Gc&HqVi5+i-N|+AUcp3$%NWPfQ|A$Jj=TqzjIow5IrJ)_$#J73JZ! z8Cr`3DVB1eIvPqLnnqIuh_*sIn;HTp5{CdG_6#`Tul#kO4&L`=?>M?dkv_=x2bYTe z7cS)%ghb&|=b=0$TR+d-vXpB=UR53#O~@#?x&kh>t80fWv)jK6qL*8$-CXgjji~^}A_U8D{bScR7C~)5-ur?b=wym&M*1AoYE;e*j9QH%=e-rHrq>Lk1>Im<&WXDl=%<20i+2N)UpkG zHN(*yZrDHdIo}-V=gd{*MXK|E+}t5AHP_{Ai$24ex=rFqB-O;po!N z9WU6`TjRD-{cqmA1z~^59u~T2{3w4QK;Py}`W3IV-&P*J0o_?L(wYvu%k_+pgkDA49RBR3@fZ91W_)yv<~jb>hv@tRNA&?570J9& zr!8Sn^nKgM-Ip^@X=)k(w6I8KJwm#ic;h5LV%~QEBrt1$p?9C`$I+>s#qMRO+ic`7_8mG)=6a-ovTc<<66M5DSD+`Mg58!xq5LVRy~?-^K^3@#_O_#3R2 ztSeVq%_Ih?s9t4rpLz7lWj{rK-FYBQK3qKfe2CwcJpc}uUoT(2+yju*@h*~YD#6QE z0N7JRw#rs)@pIlgRE?TD3(K5I61{s&wAtMP@ZD$J0zt1aEVa7%Qu@N$+Q=s|d7j5l zsovTXwJdRF1;o93S3{1?XK3^LH<|gb8l-}=rN}iK{Z0sO%v@1yx`DTgt=08RdshkK zAAXMZQyl6c30X`J{bng7^{K!I;3kSrsvKo1cb~^GQOwnD$R$E?ENB5F+zVhovbKLl z3Kc^L6+(NPshGP3$qp5^8@p$$O0Jeh#q;FC0SpkQ^x5@!#EwVoOy5y$nnrd8$-@q( zKP%JP^5iO$&mGF|h}R$SIi2?#Qw*hr;QJbQVp_RxX`lV71UW;`D<|H_$nD8WThC?# zR`gQh-#S$~5J@i+_vsralthUP475XUY)41;H<#aBXciM%*G%i@sIRZT$JF%&g|j7B z5NSf*79=t_yMsDET6&HKSxnyn-mzU82yOS!>{U98o+eM%C}b&Ksn}@<_yRNefYPMP z0SSlQR^wj3F?h_&q{iQW4&p5ltHqX6?O9owdt0%|aB-O3LWid9+L|bo4p61HnDVL2 zMKCMxfnS0mgtTV$W4P>8QjxegIBh?Bb<$ND{KVulm`oefZm#n~P5gV4csimt0??uU zG$Wh+jq%+68r+AhF5A15HjAAGYfGi$Y9f}`K4IK#?&y#}G6ur3HxJ0qDe?eMDBw?k z2CzfP4!LorV+GG;kAUwzGVh{6S@gg;Q7<+&U9A<5G~Na6@P9{xLNrw4YTuAeNk;Rz z9XPL?R~OAYP^_zXJ;KMwKRs^em@ppdad`TWnEn*$WV>+F&!D@xqxmYjqM|V-aofB+ zNE|Akm$oCrCJnyl0OuwWZBKkuq|#Y>ypR*G&>!LN>-$}T{Vt5sIQ`lp@lp~n#g|O< zohBD%f@dTaP!D=nDE?+t4oXXTdV0!Mn!A->X?1yo>M9^)C+hz8_%4=g?+?uQ&EMx5 zx5?ye^K@F98aT3b8q*lkaB$gOElCZe;_IOPibTH&c~3>2$rSw=K@*X(rc(vpovJ0)U{(b}*VIkYPl+EcEq29dALJ0< zXSY{NMKaB;YC##=|NcbxQLQ9{@!aOk^#*Fi+yc9C`+Y~m%yyH_X^9p$n0pL6OpAFbB7cYoN{5EDeWqEiA-vyZE;RklMg)YW5`o9`5>;8*`~PshDfL zmM;=xNVqGc>szlw4iA*GMZn+$PIW4?tN%iH`ctKf!{h<);W~&0F`s6}$d-U=L#v);h)rE-q1fSoS!?DSa22u4fw=U#&uX z{ON~Jt1Nc3t!LC*rJS)-4a8bwZv%>|5agw+JL&$Fr4(76^Zr-~#80qB0qMld?3JP6 z25=DwFo&XG1jJTy3q%$ERp!0k+Z!=zxUar5GKLeo zrZ`N>sm{}16g#z&5p8hyJ~1%^cm^p3Y=GQq4XJ(E?a71mW`hM+ZqsX^9Nf_M*Lh#G z;yg~9Q;{}_tnj7qC1&#J0aEfl+da*x6N%kz=hXjl$NyJshxgXa#-Bg0dFm?Sg6W4& zI6dhPGP0GT)7BhEMldD#mU!vqj~`qvBp;#7sa|29`c4>^(2;q1c*=d)Q3?M=!uxZ# z4;I?m7hkyYy&pOh3#CbS&lOkxZ<(IU{}4hA9t?O?NyVq%e*aEF2Ah_L6s^60%Sk)8BC(O*gh=mTBR8BUwo>T`54!h;g#i4i( zZmvtc*+dCi338bVC^;oVKC`|vdK-IUO;S}=QpBqT;=-(Sgo7!hNIE)qo_#yNduq48 zhVIY281$$2i)L-zJHV$;#08JQ+sKFhBCq}!ProgD?V$X-i&vOai0^+rUPzbTn#vvO zUkQ);hi0nrIr>90jSA{;L%qG-@qKzarRM(mdm!-o4|aGWq8D3Fn=!KgI+g!FaU5ZE zmk_b!X6|tqme(<`h8@d#b{5Y&;rYGH<@6q=&Ha5*^dWAKjk&ok@)$1nkA()31v=yS ze%6dGh_1PVs(ytbSZxVlLBHKlqu)|Oi>m8!zp>D)BLN=@r4bKB#>m3je$*^G4*rGy!U2~IA?*m3`~K=h0~j$VZWkT~ zF}ui*A1~9;((+m+vGaR>eS8fAqyMnAFdzU6Xjw*xQX+c?YZfj6L2E{Qn3l0|M!tXd z$*z8PJm>N`3|EZ`f!Z23h?>7g1U^Q(x-_NN+Acsv0iuM!&i$H{LO2xH1xc8e4Xdd^ zp!8aMl+5MK`yIzqI_kttV zl!#&;S{Nf`-o|lPSRMY9-awwvmm($-)GJFkLes@H4+V7}VYn-a)OMfbfrP=w$9Eg? zCnyP}aN+vzYWfs@U~1@!(XEWqU7%*NQ8k`;VV(5}-lc9)J34h?ye(&oGOy;$JXJ$M*Vwf&%O?6%@iyyd*T3)xPVl zcF8R*db2)|&6mEDlqykfWrMv(%bA!0__%c?cJ_l81-T35M9e;W|&A zEPUADBr6F1#M`m>GXc4_KiO)Ih&?TGrA$dlfj@Z*H(Uj?AuHJBe*gX*F1}i=Rq&w6 za34SnZk}5o8au|A*+SIGKi9nW)& z`N{xBW0Bhv{l@4TC#ZJSp67cX0#)aieNLkVYfP<-zPv19(=8Axz`E1zu+p1|0(=I-?AvM zE|1+;cyh439k|s0VF8r8zuW6D6|EIK=DmpGQNSAVF}M%LhtUs~QB{MJk1M<7Gx?0l ze2?>&?i$4xiHJ+I|&Q)eg!NtaY(K%+fgjCk7aM+Racn4hV&rcZP0NUnD9$^u) z*Do^}j8q%Y!?%=97qbJ!N0Rv9Goc;{hbtl6RcD^!T~ew?><0~J-%uw;>}H^n#gJgYyvjBthvSP@x#Bg1!_0bS+I#!DsrUs#MF;pp>` zi1~T9HLHJg0Blkfa3RFNr<=)qc}e$~d=<*paWwvB+2TV`7hy6?P8b+f<{8iB4SW~U8b|5CK%%}0cSoMdV`KhV4eoFh9c9Z@@@E`}eqF5T*ol4BR(shKH z@T9i&m{i^E11EX@*4?}ULU#{}+B=cl>7--x3&&*EtiTn0Tx$P9IcP^1?76GG9jFnq z!r>Pl9=60uvxRx}7LlY=_>J-sS2s?Vl}G$Mh*zsu_YCE0>4tMpV~uP6W>*r#%5ik_$DlD@e zs;sLFGi&s0OYDiBH@^ehQnZuS-E3#V7^|5qlkZW=8gFMDAnZqFYdYk$m+9W8ryvaRbbmdCMGiY&Do|kf?*b%=XJtWEjad8_miQ^(w77OcA zPm2t-@P(r=2z1@0OF8!P@{2nwlpgSJRfTUCdiS>kpi0%d1Z)w%TBPz31DbLfGJDys zfAcPIVOp?AXEJNzrSmLt9nDPe&ZvL2Yiid6^Ab4q%&TygjuYYu`$zJBb zdQuhaULK51+P#!}Rk}No0sXw9?lhTNsoM6sFxJ|z&D`j4(Uy*tC5;#02&acTge7LD zeudy}LFEBeh+#T)?fOzCcGnFY-Yli2k||c})1H@T|0{O0jI_u*e2_%D8V)ORAFl@v zX*ju?v$lNF(|B%2zUXStvV2p9fPKWEgVN}i-2>aN#3wGwd@G)k)@Dd-b`)~_`ll=} zRdFVI+B4SY_4OV1N*HUAJk<7ETj{Ee-2b)O%>7ahF;mYOqYzwtnQ5Xg{8 zJ@UBhNOJFI-6Xf6Lh6%W<3)3gK@BTTytFDmmqcaLxOVX(nFDdqhJ z*BU||pItb94$)|eK^@p=S%av1sB`d==-7&^*aAL2jdHa=oL;M*=PFrIZ2YPgNBFOg z9G_TJ`Fs&)%?XGNEq?yN)2}XFmlAs2AR6i3Jdf41Xq^t4xkjxIU&1$oDR)$BLxBVV z59zblIli4q@Qcfx_HKOme5<9e&8M$RZ+W1a0xW1c<=ipE#h-LUeEMSYr(I3Hnc%LX z;>NiP7Fz8|O$enbCWr%VinjA-+@v_TxJOnS_l2Ba$(3>jAw^Y(NKy7zqKH#bS1t{n z?Zweirn1fmzjVJ__IT>)fI62BXZ1N4l0IKX%*UN+=!+l&k0G-Z`qwUqD&|rD_=*30 zgK;BT$d{xKTjTg`5bX{5?~;n;CoqMql=XJR^58)|IaSSX-zV&eU;7Rh|A6FSNJ9F6BJ7HtK{=oq>!T>+tXk3~pPDQ-}QgaO`DvAu-I=nSd#c=veIjTq= za~dFDzUcgTzifWqxvDr?t;0!FvaWr;Y(t}57}qwKd1-k#RqjCVmosDzF%Hrjt!*zF zbRBrLK}3+$6}U- zQyMU~=AdM6&^zQE@Tq7XOB|)T^>M=V6p&YW{$}I1NZiGJ5II7raL>AlxrO$ug3mNI zRuFn216WW_LP4kmn`=Sz@|An<^WHrD-8GTiqExfMe8J6Dc~Az zmG<8ST4iW7&#Cu_o_7t%ix6{FN@tbfLNj5J`BYHElHvQfD;bNzHC}H<-k$BAub4y? zn8bjwf}`ac_U6)U6f)L$cpbnk&+<=KntV8o{2p(LqB&ShX#=eXwNWjAf#T0D z4XnBmZbq1d(=#|Wihz$&UVA(wba7g)?MdZK*`22((Z>0<86LH|J=eZ7J+0+Sz!3pe z_npprxy(EG4pi@Kj<&&u`gNL!v>0djyy%O!@I0Au*r#alV`XJ!Uw7SpG{4Ny z_&Vr2T9IMDKh(qHcwK}xcOJlpFU`@^8O-&_vsyHt(SUxA4vWF|oWJR$XQSalMy>Hv zaU*3)_J|Q7Io&%~Fz`}dTyV+WqbxMtS(yEj`??3xkWOJLk?)8;t%gdeaI)c7llI_FLLMl8^aqyPIV8kypzt?6^oKx+LNWbV0vmR4x1kn*_fq`r8ebjf6BBp9IB~CjlRi>7f&p`eH zoGh82#KvZOp;OpUbn$rnL5@|(YpfiF{wg?XbMh_rXym6`o_u3u-nBX&;I>)RLy z{b80BTc;)V&#CX8Uwe@(mAT!YOH`QW+Ig&{Z7dehUHhi_qZPP_#Bwb-_4!UWPV=9Z z>u^d-)1zHFC7GaLkiH(c!S#0Lu~^1b>Yj&d!({JP_PX>_9FfO1h;+TIcRW$y6$Zz3z##686%GsThFtgA;_r)Vg(qrztADvD7Z+FLC$ z9gf>quh4f^C;b56M*CFi2K zGfX9qvUZmVr8>1a!3XL^uUFxQ+t-rQX$aYaR-T3Z{iol*GxtH2nIXSOOvihTJ`tH8 zl2jYcdE!z5fGM0@P$!T}A!2wJ!V%I%pQ-QNduF#aajw6R{-Uml=qax3IlGuOT~3Y! z(wt;kOUuz>yzQ;VuOpB_o^+pKqT%A|$hDng>L&d7VUf*0F2ALDlR%88^0Xsrt*N4O z9F-V0q_@7lE=?8s@iKZkR>)r@RVL}3X@yb}MSAs_(@0t0d%U+>_&z;dm}}f32NKjW z9xQT}?vuZmbUk_vKlu4`Ag{-TSRHT?dy()O`!-3+8N2;{&OswRHq z$-ZYR4?NsYY-f+M&e3?<>sTk2Lvyp;As?&2dW)}OZ=<0CuN_R^80?RBYVjJ@iH0K? zTEFO-c>HK8#z8~6I2y+u2yLHaB=30)lyHMB66j&rTMzk=(|6BT@bpteDXw^&7Wh+K zxL|AEdl@a6G3YP;iphB9j-Tq|>S?)*JF*KMkGBOcPf6bE{_Zrj)$}{JXlUJcvwE>1 zOH@N?d@fnMTf;Y=L z{|5+G*UYjk-g|Q3`cyeZB4vjf2Pb0Td6+=*S10kXYP%-uVU6nLu}oI?0|b-Pnuw5Z zd|k?|RR(u;i(7uaq7wFMw@2guUW1^^(~eHuRODH1Js(41JJyT8u`U~3gp|;U4yC9E zy~ExC4}GlJG-f3`QP zoa0ye-vANP*Rj1>lj*+61sC)cR%3}wd*VnoW45ha4I}jw%U*4{?CEBoPZ+TH&daOa zr^csEiV?pe#>sg}^wI`|F+Kz$Yj{}7KW8}awnvtxr+AZ?(zvdvhMS#@zK&Ez;eeyPiH7PV+As>}$@D`_8kH-GyWl*_Cr) zvm1BvQYAlpK7D3#)hgc#KEcfJ^Gqv?nB8|A|1;*b%8K>|X8IUTw;LkP_u9!lc+s-V zOevKsZbA*0V{m3cfGhP?PZqx zsaCk!hAHgeH)mmIf?o_ed8c%-;+UaI_d$v6F)A7oH8vYZ*|N6ij^ST@m<2P+x zwLEok5Rt|fe4)eqbSU0OsELkBVXa!o&pTfLm#Ab!+q8E?oLR`PH)165vJ1U8cbL*c zADKp<2Y?Nf*7DZ1zYF0Mkot|}>gJi)=;*3(;Vf+FTJIF|tPB$KJ*McSBxfePWw*lG z)9K>={9V5XvPpPdwZGQD!H1nQm{Th5W+=B|qX>kxMR2-hygW+n7C-csu6(j#YdrZe zk0Qaf(lUR8sMYwn$+X7_zWIiqZLII!1ktohgD0WgivH7PWsETF+gmaFuZU)*6~1UH zWQ(w(_R0gJJLS0dUaWpL-(4B;f6}R{ZKRh>?a=&Q5Y5(XFsAvr`q4~qK)KtF{%388 z0J1IJu%eZg{m$qzDJ-%+mA7WN!EO7tpW;mSJSUbpQ}zQ~10%KmP>9TYG`i6H z0sUEN-Zy=9)(6uVa)Q$Lkn;~>eD0#GQ7!bQnxe_gMvMML(SJRjqF;=xCFQ+q^*bPC zBV=_vzK`2Ek|WC@Obs!gwaTp{`q%L)W4ACVioRGc+|;;FuBxc(2tJ1j-&06h_Lr z_{;Ps)}%LJ&lFc@wWG|dkqj>y^5Wfx%=4oo=R2j$gh_hln}di$?8yx)y!S zQ*{6SeID-dKcXPsXay)t8@er5Kz6Ok`xiC#5LX2CUjL!@@}aIx1Cn?kPn2n&l+6(J75@5L zult!=!TR?(TpI_p9+4rhATZ%b2lR?vJiWRk~Xbq7gq?OeAryF19thx`$R9A z+HwXmWCP}@6`qLJ+OKQUX_jkSI)Ot#vT8saD)7zt`Ksmq#1!QM5$~2sTe<6@N+QXsd z&*g~f7R^HaNRCHv#~zLcVjkQyEHr-yir=aFg zW<8k42;mZ%kZoen6*E7+EL#pPo&Wr#HO8jiy#+88lvsTpGyd zUqHOU{5s@_fS#U&2dSRXwJ{R`%bM^6EDiQK}&q-&ws zkMCdaQlIP&rS3FCIFbAay-WX<2E*5HRz%>@q@-Y;eC85_01|#NR7=Q3Sf7=v-g5)6UE~L3Ep>1*Ly!y3Hm&n*-&?0A8$$jgi&5@ zlbZeqVJ*0_Y{}Z^^=l`O@k^?Fx{N?mi*#L^k3zDTwjO>r{QsL&`ZGs zWTgYh3FTy`{lO&n+1UwKT!W`JU@DP)$;(I5SVI;Qm+N*3n83)4erJLHTaC-CE#g5W zw*kqND|e8yxt(+-E@rh@va?<^lR>9`$l|pR`-0MU@M+W}xDSNN6mkU{o^*}?7#Uk( zZ_v~h|8s#_lAQTau)NNpFUwgm9s+hF&h8Z>^LUqH?O znE;|W>m8l8=cdOA`qSjnA3~g12%Wr-7@qp(R{4du3YqgqJJ+b>Z7)2q&>(6Hp?f8u zyFx7d&~7<)oarmC!^T7w@`%D%E_c7}xTXd?5@fFytN4BSf-&so+GAV{49*8g#98LS z5@=4^o8%vhuV!IkfrfuyoUX34L1Ui7Z%^mjL&-P0V&zH?*bW&`FkgK=AM3J5Sn6FV z=jHlmgrPSus+T`0OqZs1A5PHmqB+dY9C99CiQBhV${Y+~U`;jPQ5{OPN_8^#`&=w| zL$;xfagYoCQ3S#L`m~GoqG2cC&#r7^GeCt$7Z#=#;Qcc5sf5#RgsA_1S}?MfqA}X? zto{nBu%CsXFk~ha3#DrP_6|8uci_;|{}%1y`Dw6Ff2vLpE4@D*og67wgiU*RG)Ixc zm>Dnc%7BdlbgI8N9^ShZ%{&|5u6TGDToYn*6bOCO%VDW@w5En0?;J}}CC8=UOjB}N zj>7mG{`QAl*Uv0&xJXXqds?(afMb&MoW24oQ7v{;R^z z?cK$ZQKW;ke2FQ6tDD<}d%Wf}^KHlgNbs}*+ZLXcN!md(9_QU_=Wo$q0yO-UbLkc# zi`Lvy{>M+qgPjF%0sI_ruL%-c91+!gSJ&H*Fz${NIbm>CmDp@_h`K8mMi~#PEsrL; zeAT)E{pu*^EOictK3dg^UG#;{*v{k~gCn>$zW2Gq%Am3NsvE;c_%G(#ug>&Ze+KQt z*B@qX^HtTPr5Wa^Rf`Q~gkE@^Ip|Bwjnmz$gEF*(n&JWoi@V680HaHt-}^XA4IX)L zmsYUdrH`B89XIw9Dpiv%N|QGRM?@c+E$!2M9SZQp(3;N}j4X0smr_Aglf_rl3knL( zR_jpQrPD})RG4&gdM>W}-O`EaYbqa_Uqu%hwjKbjLUbp9Z26(i(8o_(3CWM=X=%~Q z@NmCWtN6tVCAP~B)!(1ebx2vw3?IK?U}Gc0$+%Uw>4HVD`ugpGb>w4F*-W{Ly*qaX zZkSHkqow@A0=VP*7dp|MUGtDUdHX=&a|&;gA9gM|9UVz~Bg^L3;9%S{_p_AiB1u$- zQy#6dc@N5o@7uQDP{d^Be4$c{km9yB-LIe1N%m{}?#p+bKjVCH| zuFr<8+|o#yDCTiHL}RZt?R!`OzT!)CY3+?v7SXv)Ute z!F)2xThk-4z3@%1c3T*2_Q~64A3s!I3IfC0iK0k@?s}(MOD%ASGwhxCke4dOZnHpx zR%wq&aLm`18#uvUo~)*Biiv^yYrEDH2PPmJQ?*hrUOZT&S9>#an44EvNDgzt9UE&# z=lD<9&9Zksd233gNM@^)4Q6MmZuDjm_+w&%@ey6SVpfv)q9ogjdeZd<0vB_SU)}Gm z&#Bu1PVw^go(5+M6io=b37Jd<+Ee7Ekpd&`@e&uS)&2Ed3|t|Gxx%}3#X@FkJX!U_ zQxaM~?|z_^FVM}2;?5rnk(zN zat%4huA{LK-Xhx~IRCEmV-~wjC2CeHb}_Wb8h=5}ZR`C#!D(IHJAyXz+D=Qj#`9f% z9uhRFF+O?g%KwM5w+^d%-`c%Vmm-Q_Aq@i3-6=?mfJirpG)Q-=l(e+8v~-JfcXtU$ zcXyvLU3wcADdFr$ffn~qnD)gXg0&LgIL+SK_)yJRMa#XK*X^z-!4hDM>fAUe;m+_K(#*3S?lTQ)O-iJl|MYmnLVyP|m`tC(z+TFS-_aW)i-Vs4xXPHd- z8lU~~?eJH^>D^b80RUNwnZ;kYxxQ{s@E}-c4E*?Qq1;E*4g(->x{D-h?Ndluk_O%z z&)Z6O-c{y9dL7Tz6-**JR@nA4!P#}2U;2mXcx~YV-|W=BIPS#K=mTQGC6wr^h38Nd0L^ zh1P+Iqqw83l_F3`sBpoZm@$njcjHb5m))pEVam}y+{-5hnWrtlvpm8aacI$SaNgRe?$XX50f)&#x;)2PIegYG6jH~^KAdapyw&vx#J z?$}o;4U;da$Agl0GU+*=Uk&KieB`$+gcJD%VrSPB zntU-4iw>Y|?k6sd4>cuKi+lwl*)-)>7rPYq1r7d^$DTq16z@aY?Ok zS&UQE$Zg1iQ}nDMzn2#4{jQMUg`^;%?TO-{m-+V(#ZuW0l zJEDalZSeQn>0s`NY{e6{w3-){xPKFg1tE*?W3?aUf|4(h8-cE$8&WEsxW%`vckaWq zi}ON55W~S_a!X4p;W~xd-R+UiMrCzFN=W898vO@Hv@ zPH9Y-o4w&1vfP@i2ui5oLxQHKFdF5M)<$H?CzLWCt3zs0`v>eS#{F0ml`H6FH{R5b zMeQzhFs@Z_Lck0RHyt*Fgzm!_0$B9$_kfHTO07s&9mDAk>jh#G5+7gR>)(WY9`e{9 zf3R{(Kz_(|4BXum0k&!ir%+VRQmJ!CCfH6ebJQfJy-uhb?Mr50W=@t^=|7%&g(b4M zD5(kjuW(Lo3hVx}^(u#fNaz??ZJtNHeOsqv*aV~nWyNN9WOSP=dLYpj>TmJFYDW68 zr}&kcUQ?!gvGK&>##SuS?-6n-Kp%QJ#i!J8So9iv*N^i)A(HysPxZ^!M@xNFc6{k# zYu0`?`E8&O*5USw!xqN;iyicBTPk1Z2#vs?^C)}e39o*I-eY8DJ!aJ2xcl~2SV4X* zJK2*DG4$^!;@&%(5HU@3(3>SEB`FtLW4k5r^}r1t%|R6$Ym+Dtw!i&*J4LKfL}d5) z)TWzG{Z;Bzl_dT+cUxayFj)X@UxAC$Ef>x(=rO{wQ8)8vm(R7g`uj$~2fW|6E{b<# z8?*i2hG-0!+rQgH(kcJ-VlJ&KLuo9W;5px7b3hE`VjLUThxqwn;~f)Ub=sR_9Qh1$ z*c}<|_b=cLs8l`S%Ttb7v|Vy#hl_>_+wPPMQSm9a8U|RSTu0%%W|Ln!B1!Ltwg47R zPvKQeeJ#k+xO_*E%W5Q>9?uQAmG6FyGM4WLIa)9MnqFE7dCw8G54OLD@qBKtA@?)` z@h50BwFXZGZZ|-k^240lrO#1doSbbAKPUxq+3T-NN^c=?aJtm4D>K8*&1JJzF#tkD zeM18C-o#4UJ)XPbYrk@bj5u9RX<$jgNKumruK5qppmMNQb`1r+NA9sF++Z{7YN(NS zF#0L^b%Y?PW~Qg%-Y@8!e!+2lKgI?khevQ(s%?aF|_cd5?@d{If!~#LbQB za8-9Tf67oBj0E-dpW3D+Zu(c`vNy+2DOM^Y8cR=6@n15fI%m+zrf#da@t*7#4rs>J z8)JOyJIfl5VIPPYSx#N*k6{;&-Pc^|Pe|Z0IUNik6|Wx2F~)SCx~&z9&uv%mcIMsT z)}-$CHoJfhJG5+YEYu=jIXd8{noJD35s?Tf>=e?~Z2UN1?jr$|V!O|rsC5HM)ThW1 z>G9lH?ZOQ|JCD-R3=(^7iJ@jIuK%i#Ar!ygGyhin80s6n0%Eqew_E-5{XtX=IeSFz zpK!a8^!3h*_k|7@BlH6$j(a;kdlny(*a`F4^PbT;an6hGj=Z885I@~(8`$5&Dx^Wd zZg`IC6A+Lpn66mE(HcsQj_b;Np2!d-zX?wNugqrG63~~)<2DdVR&e))OZ;$-N_24% z=zf2zTNWws`L=LsOc?B@d@Q+bS43d_x-n6bDy~2075YFxhfqU9R1*KwePso|MS^03 z%fqdgVm>4KB=9o^R?dXK#YC<9E9RJHjl+_-67bggMjZ}pqC#X4{r>(tS{y6pQj04C z>5vK%NG68Y?uA1T6fo`_pO#|9y;PNf9YsPDS!<8#g^EqJ&*#s<=F3hBUFi%Crp$!)lGhu-JFdcq(gP$*Xj#P2O8OUP*}w2uouv4GJdao_wfDz9T5||a6x@JAYb7Gk zI6ulUlO6y0M+Iz^Fp@qlY#z*8Y6e_g#VRhRja%Mk>} zN}D=#LYee;ob?HwxK*3!lU!Dd^C-z9YyE}TEok`8si+qV|NK*h1Z7i?48hI^J@eK8 zvTrQ&Wx?#oBgie86j`{69pxV(t>1Q?h1XE?~ZP8Zkx^+3<9E{I^3(*Oza z)8;CIHCL6B@sk0r-07YeNpN9du{+;}oSgCn*=ij3qb*epH*d?&{y*YOV%Xq#$`r|t zjKY~KtBO~JtmPhOMYu>UJ?S!#OTM##Q?b`je_~KFJ~Db1yOwl)5(A^8n99glUgC|M zPb7RPlbj3r!1vt-^(!l3>8RuT4MDD9?OW& zPIhBsKW=8Nn<%aA6JRcNGTFS`;`!%H^@3_G;#g2}_rU{c^DC^f&OxQG#=kEaVSaWf zC=vH+cQ(Hw=y=lEG5^x)TXCNDfLyYz`tJC6_3&b7WTHY1ch}nSjG!~SE>qPRdgIwP zqb>fKpKo{;lKD!#!{ums6xcr>iBd|eKx&lpR63^TotmpxD&S6xPeA{c>qK&RX%ju> z7g_jjhZt>h%;eL{qUz%A6U`uOPwhGZdwh=ib3(;Jhe`Ta4qKL?!v2ngVT&rKB{cFt z!nvic8g1>+NcXctB=d!S;p^uY&UC*KHDp&gjSGDpbgEpe zHyR8Kf~n^67t?ZewfisR@c2DTRq7O^N5eLeBY>YdVAse zz;Uu#JS*<(Sieo+y4@CwjnYuIgKLAhIpT)q%sB)8D-xmSL&tv@rEp%nPr8~vk40{O;d znR}0;b)s}YrnT`9&rkyO&C|2K+yZW}`!E|!LTye0pFILV(%?6|^@zuNhvWDGQUmg# z_Q9@hd8MCTPm*i6Z#j{ghLGq$?SY`_=`j|DHn>khTLSBoP4D51SnJMyf3VVg9mQ@0 zm2eb2sGN0qu#z(Uk|#dp7vkHoIAfv2Ww5c?yxVkFrm8{Yid?g~F7%Qw^RJBO zlE#Wl1Ez7Icmson$_Ysn+2^i|_|dFMWvaC0#qZPBQpC2Z#7xINIRHuYWfzx?4dFSJ zeEpDJA9^gJ%=dhvRBIrwW}BF+eF3}TWE``?F(sW8*vfxc}I;C;5NCPD0O+oCQy&RzVofXb9>GIvXCg=9jDfc zuy^!fy1~8jj>#i0^iUBeCac|NzkcBs+IHBg*e&bG(HOg)f6UYG*1KvevfkQ5k!=Zr z4I!Oayc5427Ta&;TlbC{tHfm8hc6uWUp^M@aNJUd2T`E<`~(|DJKv-?MX%K%GsLIOI&ZeG$X8eHv^TWxbPQ zX*TddfRxK_40X$kV#v%U&r;h$89>-;yUAeix4*wE9-d3cZ@@5G!DzKZRITZNw?6s1 zjYO^DU|#xdJ3a~hh07v~3zywDB@6v(&8i5;d$_vGboI9C$OnyBX(xV=GZB9h zMc-WOPk4S$`(;h_{>Ay-=pXNOd&|+crk8%L$fEAz2@@C_)8u3y*ITiay11Miwd+DX zWUf8cPe@eQYHpnMv2dbfOE;d>`IDpdw$Q=vvMs-{u6?==w#t?34N#e@KDSj`=$3?` zp+8{Za`I`eW>x(MB0=BPBI_f5Kw^}9!kkA^g|tSm#&X$jk^8(f?8!l>@@I$JZxD`&Wp(`=rzmebvcwhdfGSNvR~CTe5jbX zRylY_bkO{DPX3FW-=4myzFI2_a^~{k47O)tH+`>nV0=%NnaQhtQc}-$(^R)R_iiv5 z+)8J&#Kf)P>}DalPawM>)xta5US6SM>X8{DliZRG6l&img9>l;t{GXqdspls+Vp80 zk0s(;p^*5vos(RShCAVi$x{l3FG1rai;?owsLOZ`2LfHd6`C|IQY%CHJcR3h=6!R| z;gAItJQAoHM|JLJP<&ZG*tE_EK%Zvyxd)G{e`pc&;USt@xp^Ro_n~b1M{b+d3aiyT zJ|BmjPrwR%lV$oG#-7^_c(M7C$Su!02K*Lw=H5c{TS&HIey>yc2rSqDfwVlGj0;@U zH0`41_a_^QupVIWASy_2$^GCG;^2fVO2CKq+9n~?2?lnB?1|c(8205~Nhn3tC(%nY zGb`2XZB5Nh--ZpaSbjYMLp)6m&B^zk^jK~iVzFxD$SbYplpWNSGn7rq=t83lk>o=~ z9ZfceJtpHF8Md4=PqZ!^Mzd2nql%%1g17v#-iO`Hi?L?<`l32Q{nsdo=Ga5oc3UoHtQO%gs?;w{`QgJ1kzr5!(lrQ;l%*QS` zL8$4$&1PH+SqI+QJH1F4AF6A$n)0nhzp?l7XVu^OiDs>sahpFe^A-OMIeAL82=8>? z(ih!~TfEfB$g}kgp)`IDhyH2~*|N$cYiGJccP1O!__ijQW!pQAMx16hz!v%UAoDp$ z@iv#;4ZQY`slH-&^_c+vnJ@QI+u_sYA(2MRWjG)&Fv(oF{k9bINO|evT?uWp$B*-@ zSIR7-5*x3MNM^tM{;k;lax3>(3i+O1eX&^-n-X5$d~;C!<82;lcGU-qMW z?Z2aZQ;S$k)W@HXSfoz-=;|kI&-~Eq_!Ip)T!p;NWgUi5gEQ-~x_uBT?C&K5A zb#;tGF0XyywtS@DsWZ_1oX7F_!_A^<)@6 zO?wJ&?q$eM$7#AAB`Hq3&X>3xbl?PA$!Ds0>Kcy}m`oErIsfU){qdSyhDO7nmM+Q) ztY)a7aYIW=AoRR)Z}=XeZ=}RY_Y3X4^prhO;8f`1PV!xP__-ydiswyH_-K1=WzdPg*)#v%+gC&%%xyOOf0%Dn_q!*cMQ8`O@ggDE4qHj872`R?-8>ImD0@b@{NX5o7I1x%GPi>+Zo{-IbKUJ zrcte+gIk1Z#HpSIlq^Vr^R9RhE2=@fz03dly!gYTti>9pn;N{Ii3^fI(l{^EnYz(#0k}>k&#g{qmVZ zZ&xZgVRG3a=88_eyC|Ke=I|gF@+p9wIWd}#@?5OdD7nY?xH#NQ71VJgWL%pEN|({Ip;MPuaOZvw}+y+?nLteIA>>7iWD->P#K(7bs*^CRxLm< zQBb#$YsvCxo5aJOQBn1On@iCQtg5;JffjE!iz(qh-{awlEumKYJ^Y;!=}AO{^To#d zCwVH8z(VbNW?KxK4&H(RRxYaOp^nI%9?w1NOA4z^w024v?xh-pp^bI5d}l7C3BKsj zZ@ZWr+>yDyv>du1*9o>~HHl9;qw6q9M6~quM0{jYcWUAo{QVR1=)1xCY#wwIYuMIx z`sX!dQBk9jtgH4@*oLq2w)BT;#BJ{#G%bzGPcngwsK4TXU`KCZX z+8~{YMtxdN&R?F?x;XNh^CRubj2DL3&FYo>mVs?tmY6g`eQ5--CwdPpf`dIy)Rx+J zQ^PjLz?`8=sl4DQ^%Vg||1%BA_()%+aO!%%3=fg^t_SbL_l)TLg{Zv*={>d4UOa(G&V6 zGK=iSutVjnAJXpdK#ZOb82POSVLInV&>enyC>TX_G z@yGf&H^go0*=nRQyihtBL5R$kB)gY(Zn6DY%=?6^WQoG01&w9wP`G<{d$z{RB__>i zjx(-uT3PfphXSV-p>Q*h?+x45Pc0T2A7mNhk?+S}Xf2*@=ngHU?m z^Qc+sui1y`_77bjXY%D;o$8h=nDO#j@CJGiIyA4PQaiep_&lPlRFH|%=ueP}PfKX| zqAS+=N9Tja>u+w|3F&Zi?n>PImk8P_(AnQZ44RxyXU6k?iJc941T60l{}wwt2|?9t zrJT1C{G;vZSo9-oma_q0W^_DS3I1)UoB=TvyJPu3RL+a1wSy25z=Xi!6|x)7nMMBB z!v(c2BoysP2ck#{01WiE%K7vu5;?g;Yv6t5xc~8kaGqwICg=y+AEuG~En(iKr^ohI z)FCvPSp20WpF-;w`;@%Y;?FS#m;KA@NrI0>3|2^e$PaJ|W&7JK$`m?2c5txFsuRgkuxyBG{|0&?WKaS1f*dx%HUi_`UUka;Ae+GAYig1d1yUfC!57fol zsYwWjsNONTLu488?b}nx{dl#-n?R;~IdK{Qe_}H{!?~%Q%$McN@pzla1=4-r=_(ox zWwh*KP-}9#8MR=%U9|fXHR@iCB_JW;Z(0Tw-1p;^3kP;Dzj^?=%&*uucpycduc?CM zd{f=kr0im#2!@OI8Pyf#(NSLe4hmLQO@S9W!5q${J%s z;_#TD@yB5tmfVRTfhTgG-efC#xg;N-8&w#65Woe1jAmx7nkSyhWb>E6ZS9S*iXcp+=yZx2s6QNWYK;`}yWo<>_V zYmGVJ3gtRp(YvX%u>RldhM)sxFx)ikNFxF^+h2x5Qah$&pCoA^HOM_(Z zVp>`)y_WUX4g2U`Q=4ok`})$xAKC-VCtJJ;6|jGU|ri0mY&Hho-*BI)_M`^CYixwG1cF@CU zilfb)qv@p`Jl@CPUPc)EdV(DDUFXsscQ8MLQ#~{?5?QF*{!JkZRGpdfAas?S2+9FH z2E%%e6H#7>i9ff6E-B)S;?;C}JDz*DpKkZ?8G>Z+#9?oCc~;<{&YiQ=8TP=;U;jG` zVG93B^G}zFAO(~0J*}bD;V>^ZHbILY0 zFBmlHQ`&BsFoV+p=yNh)4yLLY{_RK9V86fo00~Y=3p|yR=THawE}tHc%D;OH##ez9 zq02S4{v_tJjNb;{J)ys^((+s6%!{@AqApf)-N5_DW-?WembU?cmLZzM*=Z`QibzxR zyS&V4k~8xOEu)1N&vDsIXCW2V9*t0>B@o|Wv(G=-8@;z$T@|Ssi!1h588q?bX|HdO zcgH_JQ#x96bU)Pox%ATUXtizSQHzB|2EcbSn$jrlXrkfs^NWhUzH~r^zFtoAW%FB8 z%0wQNLsnUSfML7kVpzHusd=0)Lkcd3qbI~2r@3dx4Awu%=g1|JERwy}&$YS1n&(J5 zougV>K>r2_(kmwm3w1kwudV%Cp2C^56z)q>$QY~Cr3Q1!PD@~1@z$tkc$R{`b*ZP% zOI25H1ZR>-yPLn>`qR}#B+t#eArp1{rP*&GUre(?ul~C~=$zQ#1By>>$%i^R*iAdb zvlLg(3<=%)17;4q*|QYRYp3;J_m^3T-a^F_8XZVq$&DN@aqA(N3`O0+ARs_Qt%W!T zrj&GPk%%N2l&nuz_e48oozvSCJWuo#0U+dnwGRGDsoxk=h zA6Jtf#+=&~wI5_ey$mJ}qm+%V<>sf1umT5OcPwYe%buC}_VBw-XV<}r5(uPGtYX4A zZkrToLA&?w-~Y7R(kRzWeWD7~rpP?CI;-P1kouZmPyj(17pT4nG(0c>^YyyuQE@2j z8gXX9rB-Y@@e#bN!1Sk;#9@DRfHu(D`V!bTp)^GW1w_xDvB>U{D{i{!A~HT9d;y4; z(MiI7h0aZ{fJW$9gEfDRg%Ifch{(9mNs!^dbKK?M+ ze#BT|=KpZdl^Yui_TL*S5hn*sDQH|X$(xg{+Hu~G$X};bXc&!L(ndSoKisDTtM|>f zV9tI_ui)=XhtWT|SmkuYX|elQyV<{fd>n_Gnz|Z?IU1K8T9*?#ko<8tKYi(a!@I_J zUvpa3AD4T0+2x7XAO4_^^-tW4C@WG^Pu|3Dx&(Jr<`chovfiZKGpBy$uh$*kuYTo@ z?ptUxaLd{BS8bIvEL_eJzLTd~oeff_hv{J2w_fiLz-2d08fs2g>UIaU4QxTHzXDD- z12SM(EU7tj;_i_)ZN|P<(iA1 zi-$6m-DzXk?%&7yEb2FWzCGtF$K8ErbZm!*n7FNQsV5wYF35hDeb(2Zc{LgrKv8?%?W16kjm1GjGj}T{Irv@Jue8TPH?S{D$+km zkurNMTqluy?L{&p2`}#gy{qsrsmaN~pSD}wo3A3th&jG~|8jq_5aFrPKG`MnZ|49{ zv|y?XBF67&;+`cK$bOt(R=_l3zfWPfw9?>>PWjcoK{;1V&)}dtqpoc?&3Xg9H`z%M zI$K%;V%Yy=?2Z?+8N}Sg$A@^=k$}2;C<$wcQt`_K3g`P{%+L|iLQZ(3*EdVbw8S$<)L3C`E@C9Xy4Bm3Z=r^1HYLaSw39Ssx<6P)hXPU}Lbn2(b3ApSs zwCP_%AA$Ezue}(%yr7)mxnm<3$CHo9s|x#lbAY%VMt#KhgiZz4YN)}%!EpcHN!Es@ zpflGClN<2ATEGfvFi}VB=ABVS``#C5n-h{&L3(*9+@lk+dGWY=m~>=dwNfoLE7~kQ zC||NglK8)ws7z=7WumHk{$z{Fup>$oxC+G7g>-VCLkI});#qt~TVE1r)^v}hif0T~ zKw+F&$>$-d{r2|9O|4*X_1SOz67y`Nzt=C$-s~kA^V97L)+`a4ZmLo`LeBt1*l)7b z^N1V?B=jNU;niXBjd8+nFcQnb8rnB@W)6uN{lz9@@Fac z>V?&4z&5(G@vlq4iB zWuLE*-$MJM&r(STB}l=eTa;;%F-%dgQqLU8lns}WVHIRGAufvXv%(SeU(C6gZ*dNm;4{BK&XrJ``3!} zyL8%%R|a#oUPIT%ZFINpPP25}FjF8qHc|9Ea2|Gh3KAG1{G8@WD zaukYO8_04moZ_H^;|9u{&2)tuKqs!=pU2Sjlm4L(%bzOCbVZIc$=}I4SPGS*=e`(% zP3Se8sv4sz2j(h=01ZdFDu<#*u`3(8i<69jG$~r;!g;63a$Cmb0N5pI0}lH4{JhR8 z!xR^NUUIPswOy}o_Li-xIo}JV74Z4Klq=W z9T6~<9O`2o?jAe8;9HTv$V1fDhQU}d_9j=YZ2NFr57A6_9ggWgTM(m?wIfY|W8M!7 zN5FxHUEU!Uh25~wA?z!`(K2-#`x9_4`N1Cqt$6?w8VAErBR7IvKjsc=z`gwySul}H z;CtOCjzPJ7o52Ri^%4kj{W_5ACrG#KhJzmk%D)~J4YmM4nhIEo=3##xWgxCfb9XHI zj|=JH#Z#mXfw41wS%LY#{{Q)j7!&^A{6ylaPr%;vuU&Z5U>e$se{Z4TRV&(m@dJ6Z z{`E&)_{YjyA^YpuRI&eRUtV%1&F$ z@WdyT;&|)lhnzXqV5+< z47CdRj_PzPKRuRAX;0gL$rG&^=VFzd48cc~pMTm##+j(*w@-PMyxy{~=%$hN4)aJn zpsc!*lEUL|{}$xbU+Ai?GMLqny609Cunm2q^XC0C@z*Zcg65^|?@x@|y?e8O4*PPU znl6%i8hpLe358eGL7u6k(Bo{zAVcKA&^dE)2I0r_cQ9P}1Xt?K(Kn~H!G}Sa=JH(c zap29nGd90(@42b9E!xzW&yN1H>E76ktyFx)L|ThIDC%Y3gqD}%*2t6isJFIAh!sbXXZz+QBT!=>GEppYGBSAeP=SP zZGV&R{#HZFsLeV(l|t@2YnuONx2}gD{on4^_3&T8Zhaa|E8F9RKFQu_y#>nJwoXph z?jJr2%b06M7`nPv2j6~LVjw`~>(3cM7}BaNJ+&^*`oSoZdug>2UU=i;!eC@H4s`rP ziaXRbniAf60S222esr`k7Un&s>W~t*h3KM>9?pGTs?f!0`L>3R7WCyuB53L0e^IHZ zC~)4nUdAl^`F%H)o#~UDV;`#AA*L|8e$3^qmVKW&Y)<>9!o0_@K}SB?vN)-CxCKNI zD566VL(<#y`DnGStnUJL2w%?JqFYBKghRsyol>>VQ28?lamgZG5}Raw;u6 zcJVyUthzW0YEA0*e~mfTV!Mp@a3hDNZ_Ts8X|-LibWJ zu!7%C0$NxW9o{0LzdjcWpd4WAiNUP6LnnvD@imJYdf!;^1y^MquM+4~8PI!n9%U$} z=Wd<@2h=~1w6`ZHh`S`+aAVbZJcl`wE_Ni9HB*|k&H1>9kB&+I)r zuAy9K#K7B7vet7eUqe5(#G;+BsjU)Y{;~P|1w`dsJO1xoEX%`jJhso`9QSovX6C|Z zHHpN^jy`QNysyXKd|@Mb}=T`w*5n}UZ@msPO6mx)wyd9~(z{6Dy7^!5*r zHuv?q`w2%~&Y$IQS?hF0y4xS_8Sg1$;m#=7}9dmzd|MD~`*3EAx;1lSAsW7=J5nq!qt=)qN^oIX zBjP%(A)EvlYGPa_tD16!1NF7b%YB0h-vl?M$o0mk@NkR=W>e2zI_;gZ>ZR#Lh43-r zs&aGLuC-xKR=kaG!Aq!^D&83N#7ra#%TvP!xVmS1_{q_*WKR2|F;S=rSfxuX2pdp@ zR!8TonHS=(j0mK>zgj7Z{plRAV9Z{4bTpZ*R{Uaw$VW&5x&r&KaIXthIeKal?CJdI zjobf`zWkM9ALGugARPAs9~8(x-(Mbx>{#kaS#Zk%W{At`qmjzmx^%k<48BqaOQ^b?;O0>dGt z)x!y=%aj-U#*MqLPmtdl8gx#Kav)y4HRxVn3>}b9%gLdIl`l&C7(s^I!zYKtb?CLv zjw;Kl-MtxX4%s{7xq``YdWx;gt#!tKIlP~?`|wR)N}1~l_n>?}x3RF$=j!*R;gYE> zK2LqFyXZETZHP_HdvV1{;2M-#QEJAoOn2%JHA{kHufIlAQBNvrpT9b($?wr2F-u)e z_tBQ4Y(3=)by;A864Iri-ugc5u&rsS4uxFG-928**cg*ACh;0oK+oV8 zA%{@h(9*SEo?xKdtz9CRvNIhh7N*WQ%;@^Xf1IW0T=Sk$-SJSbVHL1j9#44*{yF7b z=lxbUyKTEs`K&_Xs$DrIIQPVRFjnaD%%z<&YemV7DD>2|~iD zPJ4D4#BO}^|NK-YW6;K6EMni7=yI>O1$k?t6rRCrPivE@o2hT6?wuCVcc`PSExvJjPl@Hsm^eJR5)EB{;MC?Pt5NKt zQl+g4`SOY^H0Y03ncQvvd^>X}`{oBoAW(C*8>$2lAb9jvH)L=^5m|e$kR-VTTP@SvkLx3=D1 zV$#K8xA9U~=u|I{4Zn-o3oFN@30kxH8wR_EcB=T^+=a;VPqICHvWAb4wsWgA7<7eo8fcW4!*moYSr$!%By5tJ9DOn~FW)&L+b zBn>amR1Pw;=~Ub~FITZEt%iZ(p0GtU*Xe?|3cJmG7#f~lI!q?mZGarf*S}HJGazRd z%!RlV^Up5)A8zcDMy5qJI(02H<{dG&pNdtE+<1%w$W0nt0~%_UVO%2`+)5|IYW6|3 zcvh!w8glY<0rd*&Tfe~@g6;+Kknp@LpTr%mWiEfI&GV0;gZtTeYYZN(`9~(or++}~ zTXW^aEr^h}rB|3XJcUmm>EWYVzOX*;2aGg>h5@CyBP_&e>g`g9Rd(H*TP53 zIW;C~%Ar`67)X4P;_^8RPKZw%d@LdY%q=Rb2o(Wsc4^7mU9kHyk&?*r#{c+99ow^Q zhiwL^*O!w#LI@nZcj)OI0CdDTUffm{Bp+N&W9k0uSIgfKcZ(q?2wV|ifW+I+u`kGC zQ|bL;B~Sn9MLI42uQCFPPW}Ja)AdJ|Y5j}o|6oBynfG|b^SXG+8e(cx-5F`SOioV5 z=Cx!QQZt?#{ze3PtJtFP1T5??xz2o&AN_Mhm~yoqp$FpgC9W|%G#G7kZx9WH1OEso zS!h?M{&`$8p^{hMNLR+sQ!99xwr0+o!FRacbhfG99m~@U_yMT&%p7jGm09fReR75# zzHe$}gtVdm*W&zwNY6x$Lw8eHWk4A|!Xx zNhVoAJ#!?xA+^J8?df=|=xJUnZHRH?tJIJMYQ>qUQTN^O%s0@%2?4M~babypgMGt1 z_*^^byJGeNJa75|SSasg&jvpPAwg-w?ZQ<&#S`&u8_BkGt@U?%`0YFB-wqZF65d}q zIwrhV6mvZ8jkMJ5fR6l6fWbprV}C#29H5G_TQ-y<&MPji?m^-4GWiBFdS8hsJ)r4A zat{QYf)aSN>gt=sa&bBJ@NV9HGQYm^==`U}bH0mx<`$_~i67a6yKoN9F9~(j-zFYn zwHR$qC2qNKe*Pz7PocyYExDUB<;wTh(^OmRM~?*M$6;np5oEwJP6c%L4*Tqy+qygs?Aj{XV&-;h|@xXSVIL&)nLiGE2(gCC;JD~jSq%J zbie+J)5zrL*8hkC8w0X65?n7bWG2IJ1w>o!4zB#Q2Ga>Pw<|HiR$l-P6Ig<+YB4+hdX-j2`Q4 zzK4XI50K)K8XK3Pl*ltRWjEx2C?YE|r%CtZa2Oh`yz z;PTp8h;r6WD-)p$)#K!50a<`bO91W+J3Lp~vS*aJ0E7;Lbz~lT9 z1b;k8Ao)zlj*iRdYs6|KT@;Ax7eOOwE-EUc{rhMIE^L3bwtl-}<|}BEe#mqES&60a z@UsnQs1duwkxE{G0KM++J6o7_S5@`#@X{B4qJMe`Pg;YBf7*vQd_;C#&sGJ8<+}YR z9=NrHF)&+Z+}$h>_ffL50j7KPLXJwla6zNYF&w}(g(GW_*3Q$?!)KD>cwm$f!LB#> zlFQmaidhOBe4qk=z5UAMKukw>rM>?>7!m43Fj-Dk)+4Rm++U$61%bAbFtK3szI$xD zwR+I98TWpo;8ChflmoKV?ZgsbLRrvA6OZu?%c#Iay7LGzeORQ7CG2Yks~Vgg zeSkF~f-MFW?i`gL$3lH5CO5Cn=pF7nuI(IFh*S9XPWY4A^sttk@f}*yDY@S@CfbwWeB%6zzFnST{fy+DtbYk?h(M~%JwkxOH1{;$`1xJiC(-TFt_~TmkDgMW9c>UXF@+d1 zSNB^KBd!9`rEFIT+XA(`R}Hm8oZ=3RbAuZzu*=Cd+LSf4bi| zJw1hA1+tq>-N(ZE4i{kU3*rL!e$2hmYRZF0ZArgO*Y%3y)17^!Z~`@lhaTSAO>hO? zm@_~u;ON*`#=spYbh%zVW4P}r@G-7=2nF(~loooVw)d9WB2?jlhq!@-3RYtav%$Zl zq|nI%31c>Qi)WOQ8odwtM}zeKoapcJ1L1KKrG+a?UG{8d!WFhA%Y%tGhKCgh=SzMR z&K|_Dqx5UkxWcl!=vl{WW!g^djO925( z2(z{xENmvG29}5}jMNBp#9~GG>i+UFgk9a7YYC|9?Y;j2g6eipFn2xeM8vKzX8EAg zkQCAzosOKpa=DPXUIu;Tv8c>#c!<;a-o)pQ)G=01X`Y5w*s@=3?EG2Dn$k}Lls^QR ziHI&0vkLRRhs0s8c9(k6Upt-BAhZfD+taPhO`z$(iTe6hwTm%7P2lEL$I<20{P$%8 z0YOaz`P^16Si}*95I@>9EY6+O!MS4am%Y4JY)K<#o)WSr6_41%m)nLiySV*e`vH5i z`#3n6)f*fv`!!h!V2F5#iz|*udX>?Djs5AYa3-IrQeg_o-I_R2B_%Ax5@R^l42x~P z!#X^@YfqDP@0onwmoH!BI)Fd9p7zdjmqvvl;memdKTIcHdv~j6Xyj1cU33e5s=4#9 z3FY2BL_C)B$?VnJqr=1IG0qk08w0S1PdM0Y)30)xowG{NA`xXYX@52hsZezl)bAhP zxdDwh0~&^j%urYL$6*c}h1?kD(uX9F>dfWjOz=sIhyFRcj}ps%|5wHdwIMyGPze<MHi6mHwBSagS{?HJI|VT@@v-X$SHQvHptX(e zW$9gMs&L3!-rcBg3Zqtx=m&@)?NM9k3xdu(JWeSjARF-I$OJ?-tjs$20V>0Qk6 zp_wDmHftq3RIt3bfPa%wXZvX&!8lA9LFmI1Q>3Xw`%3rOja&ENKK=r6 z5eU=|kh>1Hl1InJX8{j`&0Hgr;r|R854MK0lf^=txdM64LNBR>oMS2+)*?FXaOu=6r>OOHeI9fWNS|^bZ+q*8IMJnW_z1x~9N2C2;CTinO>rm%=bahErsTPt9n+rZZ=hPAS81N<9#1xGA7SGR4#N#<0kI&!6WBJ^Q zxR5A(Sa`UVDq)l!VPeXzQeXx-3|uON*nmlPz(T)0j{mgOY=4j$pw%xzStGlv{a)GX zT)jmSCXdcr+iu;b+X5eqtZkDOxRb$&B3B)cf9K+Z10=Ox`fzRbw^Ho(d`q&ddlMDL z-`QzkeHWHdDw}ANt-urL9kbx&XZRY4yd{n`@7vRhneLFd#~<(q@k zZHLD9SdIG=-@pd6-W&0dHJ$kt5qSt{p-TS8`UgQv`}!J_MmWA9`V@H zVPs>|Ur@|PQL41!L=qd4_~(snHjeP@Hzry)-FOvBXJ&(8zwQb>wtgPm8KD-ffwjRJ zfn7b(IkQZ@rGY7Jc$$%u`}Rw2W|xxr_uRLe>&ZtG($o7#X!mY8pCk)1k6`QN@Sh*DZ)JQZs>7+Eqr6AAc9z73Rjo+6<0NIxxy9A~Y~&m1qfUzp z4`{p?O>WhByFx-8tV~{!PH+fOMf9IHsuhfD3bo??Q{y42-dm5O;2{u`Gdx?!-M9`t zGpwC$uC$duHXYC{`0IBKg~`SQ!)1PGU2>@~UqKeYWI@7UAj~YHdGGIMTSHdJ5ZL#W zhDLl)`}$+62Yh^d>d1(+D?JgOO~c;;5h_*{`GI2=*;WFCg2%6*%K%pxtdJWAFG(b5 z7%2_Yph*GwWq+C%ErF}ogT`NJ-Xk#x;XOBM-s<4Bsw-`|ZHu!+z9#VPY42#`2d^l_ z@GiW+EB;u%N1ZPBIE5uT$4-=Rms&~Ko7!E~{=nk8bbtL$chi-RO;9sK69oC^{Gqyk zYWtS6g7WX2cYb8)jr1h`^VmQC0K?!<@&2!0gGR&+d*E!B+s(|B=5zTcTHnG1I$ZQL z(>a$TiNvU`XW2hY`oqH>X8qG4CLJ0YCNJblw?eM;dxV-F&rTOu&Ze#5%RlAw`#NFi zhUCobx-Rd`*9YYn=dE$7?6!m-n_gTdM(e5;zAv=95tF?~GVA^!o>71E`NP3XA(I2A zw-Y~j>yG5O%roxMf3f!}5+`Df{r#Q7_INOa?8jm;vS9AIvDB*UyK54px;jzi&xNbT z>rkqglZkAGO+0gKt72Tld#b+TxgURx zce*^;H$;tHrB0+E$WqERU-XvHj^sPeF|U zA}*Al?JI+uJFX(WMQhATa*4NkB5VbY3-5H52?z&hmPJqX=WpEa%U0AJO!R(AuryA% z1KxOhQ;f6+gfj_Yt(#!UIH-LCnkk&_;w7owr#iljte=vT^O;+Q9%M>L7%i=Oq`jco z2_)s|>QPv{M|A4EL-qu1H|a&8=-BZh*Zt0O!D_QOqxp3qYI}ACn$vslWIi0{TejOT zn?}$_N}W;RUPs_!{2Xl(dH6b`p2vLS=>ce)l&X!duJJtVZp*qCr|Mv_`_s*qpb>-U zi`3#iOSZCql{&ZO*>czw%c^R@G?+2KBWS%p&fVKoNTsgI*1No)ER-#e9f}7y8w}EQ zw|$!S`Hz*?^#0`Qu5rXKAbcYVI2FG=8KpsonhprODriI1Xg^5C&4 zez`Tcx8ux8svXoXt{6>WH=q-Jg5Tm|J(z0qo&{tqotOTVDL@UO5Rr%cL$k)lmGa+E z0>%CL_M*{I@eZI`k4zM4l0OLRxQ$lHXXpeCocWH`^|krUudqoctL)ii-A~&&aBYe; zl6%0ddq>b07s}?|pX6gDPM$D{KR1rW26rSIP8M=kZ;Zw3I*!aqEma&%9Mq(}Hrn0W zqm;{j1{eqS{rioe}N(Vn-5C02H zRg#>uGY6-A^lZ(}8VYlb%$Bg!u`iFuRH}sr6ZMR|8~xJ!lY$>QS4v44Wm3=Puf7`b zx&zwL{y3pldZLurINS+(_X}rFo>ce}zSCiG#7rKL45p#0JZ{lUdaW`)MDCJx97gj6 z#JyQtpmkUq>i~@JyK*WW+;bJp?U#Sw6%D0n9_}SaDY2Vp3J*WBpi}2+J{v1>3j=U; zyEkBR7;#L{I%xjwO`-AfUd%v__IaK>0f%)wS$j0I_K=naFky6+`LfR9@pkT69FCEe z?H$D`%aK7r7c#ArXj;nL5Ga`JqthDCx5Z`U4pLoayG^L7aZy5qG05S@lI6Ugzc@sB z4IMv7>xBGL-~-OhTS%-7aC;*knH`rfJIdCAT4waaaBTkD#M3R|?OPJHBEfd6Tx>I2@{$% z=J3fCxd@7umi*?z2@?4ohhQwEe&_9<#noQMFQ{?qtm-ABXZp$?uMkg|l*qX?L6bi9yf`_2qLmZ->KhJ8+iM}?E8xd;V(Pru|ee2q)G_&qm(1W?WRaN;zU zisS9>?jiwf(m1g#jz3Jt634TLK`kQdutNfK9>@u?ZU^m)$<~V&S#spVa3dZ4>i0U& zU=X8L(^Kw;wDwz;^C{!;v|Cqi;vy4=vMW!t-n?m<-&qW%$uM1{8@g}(TvIdQp6STl zt%ch!q)?e%XbLC~l(ingbTZhCw47sPZ>;YNP1I@F`Pt}&FrPqzMfig`Ojfl|;ghWG zYePSIgR#8!pW%3MYrp74>fc6>ip|HqT>O}RfQPSRru|~W?M!ZLL3s*0TfM6OOHdL6 z1516&Nc4i~h}G&i?NnM^Y5{@o?yBbXAV!2{#q$KoHA;=zAbEUtnH=pT-5dsap_f|v zX7P{OK>>L`F%b#;0;E%NvSA9Y9VNim@$?5F*%??EQ*5CXc;5|^*ib(H zPN^rrUb6S$ZF0LEMRgvx_OB_+w8gMLSdiebV=XFpnPzE_c_<~T(*Sd};316OWOc-t zlHw?IpdLd9DhLNv9qseD1Bb$#MwfbYn8g*`-D%}bGSQPnQ3v($r~&j6JV4HBiDO!2%MxBAVt)i?9Ge^R`0Lf3#HxAbwHfm3Z^v@zB1cwseb#;na*?a#hIG#Y1 z!&q78u@l{FZyX+g0r@+-Yxwv&dJQx3AeYU{AS3I2n;H-UGvHsK^aBsY7C${(8b z>Sq;87`J_2U(?j|8ER^N{&*cz z)18`qS2WDW)nTj<7phw~5Qjr&oRH#V7*B6vq6($5JlO3LZEP~B1(x==|Tr=B!nDVL2&gXIz#zgPxuT0YbIsc~GkceVh$45|=G4yKK9lMSSPIiLgh^Zbt1#K(_XZ}o0JZ}La{u%gVEZQ_mBI6Lm8 z_AU=B4C;%N8MS;p!#L{P>~E{*5`G4775`H~BFYeq>Rq+>`Eks3ow2&9Im7_I0|qac zvOzv~WW7Dt{K0yO31zHm3-e%OTt3G>OD+QF8+W%)IRPfQ^u-Kfipnfe>E@}lg4mBR zrwrb|KRh|QtQ9mEj71tJP4%R2rSdOW8pZ9*5*7FoX_8Z^o=8yo8RFijgs#aVN4c^V zO0~XtXu~U4Iy?>%B{hHYM7h$2F0iD1X0k8DS5tzVjKrN`gL_OZKU$W@d4;QhhBA$Dw(+5G z^C8X2f2^h6r-7EwqBqICj!kug8%qN70!Q|i1sjDejv2G=-O{>?$N1k4$!zn?rMa#wm2TEyS`bW(dZE2B-#NUubsP7rLeDpA0gBA zK(1_{3V$|N%$Bsg%$L<59^K+ueg0LrTmk*}u>VXzK;(RLNOs-=O+Yp44^wP=E;bYX zAz$e#|Jq!Oj2Q{6s19rRD&4f)x4slZS=M%(qID@DiPnQGCsnQ9oQB`m4SL`Gqns^o!0 zHBCd2NU{DQy|p|Q?yT4ChQya(z&!QTLnIo`qnS!zlC(DIe zzUZ>q9&?nxFn?v0nSVya`LFiC?iuySycnGXz4t+MtGDKc!R5UWha5Btmh=8WCAKal z1;b4CJ|#AXgB}<2@1@U7_G6VLB_%z}?7R`LTl04{r($(%%%*F809o87l9bo$OgY zY|Y&W*ZFiY-KgZhN9B*0ov0LGXV{gIg2Kd`ww(JleD=VY{2UqnaPeoqv450zaRQU=ubQYj) z{f`g5sUJuXOPjkJoiLJ;dm_d8gPW!P4{PPvY3w+xsrFB z+U`Gj875svMnu4C^?KzLFHH{UHjTo6w>0vo@ix4XtOk;U&+y_7){b}qarz9l7MLj* z>+f|^@hYkc)CRS^(H}57U72qQ>$iQN98Qoh_W04Gci>asRW3D&Il$w*@8@=ghHUL2 zwfE4wwY{U=5iu~EDRCa!u~K1vzw4{K>NQM4$=9z#xm?>yZoCEi;aOZPVnL^qblEiB zqZauR_Wds|$y9x5iygIsVnB~S37uY4B2K!fV%Hl%S8Gue{Y-YIs4GwDD&(E{+4w%5)g^9sLg$(}`1V8UGvdKQ5qJ$3E z=0%}(S&Pf*+zk-VbbzNPF;C^L`HDg@-4P8fGkv6Za1fVXN*fn%#6?wY(Hi%sfPfB< z?=SVakSQR}yGR-Bt8C)`5vf0|msvokbX`c@<46q$WN~@p;uAKxRBq!6JI&6*eCHV& zN{Q3nLrkJ)-*mk8@iNm6A29VO>OcgZkB|P@$OhngOsZ_=wI-cJc4y(X>piUZPMxN?_@NxmR zub2Cz@EPo$deh^o3|@U5`H+%unz0;7@JID+V|223kwR!1=UQW zg7^GY!)=d>Ahn0?nd>q7r|R3yCY>6f+!sF*l{XqIP|hnRMWWyXNGJ%=w zPG7>P3(p&8qZ9H5gY*mKcz3056@fdNc7aXkz0b17eQ3} zopJU%@BwayWiYzT{eG?U{xHJ;9w!yHoDFU4(2!I~ate0PUV&U%CQIl~a8P$}aVLOq^T3_;3-8uYbryGr4D9Tw03z(J zcE^Fw-^!z&RqE2t(}NzT*uv(79>=|{twiu-M$2|d-n^7Y zCdCuiesHbMO%j&v>Avgg>gt1=pPK1=>pYOib=i2113Ae%+0D-{H~8blJyQQO%*V)K z7USbP?Tk(Aj^%u?*zT)-wB7fB$)nX|;5XbK1RI=y$pxnx(0Ej68bl{m1M4>hBDR2r`{0D}i| zFK3%-&LSft@8A%ie||%Qf@BrE232+(ry%HRbsD6^rPsUeCjFpS3AIMV%|MJ7NQ`f( z;;Vv#KoDi)0fgtk{t<$TSSK~txJAV0=$@FUowu}MI$Y$xXHu19*!^{NsMHtoH@dqj zF9GD5Ht~%*Jdm0 zb* zp9#61?jTKe^RIwSEtTC&Q!S>$v9~~WDKOSXw-(y*0oLzdsr!@BLR{yCkqi+-DyAoM zuO1n6#u?OlSVqRg=olNfe7iAQ>fGstI4^y{!wxB;l^@~Vff)m&xZ5m^y*e|UkE-qf zic7!%C-?23w-Q!-lDdpyBS;BpsW zRIt@wM|X)fj>8f&<4f!3skB5*i@$FgsCf=9uDoxr$GDCCe2?m7*kANPVNvk6(94(g zXqumtl$7pZVWlU1$_p%TL2l#*yA>s;Iq1b^lOQYhv0kLtGB@vp^DRw2<6c#j+v-@A z=XkZVN2Vf1OF#;x2J8%-qY*wOH-DESIon{9XDh!=Zvo$ZgyhBpEG7c6UoY?dZI!x2zu@kum6cj4l zcF10gtPJKf>*%Nar{My6MR&P@6r5S^o~4}j6_rZ^;MMb2h7O1nkQq9bvndMmH^u?V zRI9QGA7#(p+6lxThS0dlHqA}Sy0#!VcH?20fNunoo@|d|5l|fXbv>f8Xl1<5I}j(! zxI&zV0loD)l%}u==qp z*LqTDjJ*ez;k5MyQt&;%C4@qqaSCgQ?9gI>>>g~S$OgylGxHhIoyx4N+bGT#L+#D8 z!W@pL*A1XQFo>~6W>;9b@T@Rt}4`Cq|2 zw$a7K>>V9e@|kS1Cv6D&tVT}ej#l7C^0@Y6|^Mu8#1XpCyT_ZE#dvzuZb09{~AZr*~&4YKRapglgdZ8jU`G0 zF8q^X$A5(8^U)kl%_C+h3duAF%buB-P=7=xs_zy!F5rE7sNmS>)hKXM@T5K*i4t~1v(b?H;7j}<?R`V^gWueS>F4P*} zqImc8loL2Ommq}kW2S2Ldmmh?&+IvZ(K9qlzeR@g=#Y;EyN#E^!q$zW-2FXU7h;bxq&xTN?D0s}^+J0>Orv8Cb!d>E*xsKA)?>^wVc zlpZTz6riL%E^2xxYl3~Seq;fBI(VsfhmB=xe-kN~RtX;GpKJiXjl;^2&$+@bzY!K> zmdg8}pu6zD*@-W1?yh365Wj`}zws?#1088}F7+fUynksO4m&_7cx_zL=Sjxd|2U;?m2Icj@N~4po@UQE7&~C{4BcvAjv&%n9p?tiPa? zR3NTc#MH{7Ft}c^nD>V((5h+~8>iFR@3qXMu$Ybb!QHpJa?xO{(wSbJkqk)~dMqF; z4cs-`)iTt{8nei`VKAxlnRFU@&9|2>3;* znXPtAMP);h%y##jD;7_){VOo9UuVk30VP{DNywH=f*@!1yYrNp6*h zmtV5{Z^P3qGyPdu8U4|$6;KsiEh;*lTbJy=g!;WJBLe;uSvb-5;Y1_(>qP5reO@)! zvm5M?QyP1?SEcyBL$>g^V>FMX*?;(uU3WNFQ6brrB5~Hod^6}*rFkooR1jt5OgxDD zU+MZly612@y#j_K&C+;BG_!~Y&MQT04o*(`LP|z?u>O7;$)$>;zL}_e^ZxhC*65AN zoWNeC0M}vy)bA|eI;`RH8$A;jU-W1Gt6qVc;@=B%Xm5aU2AMd_84)q~>OZIsf0yq6 z^bpD-Isvac6P+HP1LAjQyFVEF!fg(Y4Dn!z%itupaii3l_Jc=cYUQhOP0E2ooIHL%9R|345jF1G5t4)ee(;U3*~ zO;I2*&&=wQ+-b=yI}OdY)o#}%6f=$Lj|m$BU^bsn6YY~JbiCd83YJ{1=kpWc09| zujqf28eAy#pk~!0=f-3VJ09m3;@j!+GXs2sH=OUbz-%#GQ1De)H_KGc4F#L)J+}Ww z>rkkq+q6VUy0+JtpG^(+=<}yhy(+)%KE$d8vczWQis)=~ev*c-g#D z!;29*ufmLCHod9ih5pqr_YH9-;^CnOzG4o8#o_hs$QZevQk=DNyTyaJ(GVJ`n9~$} zeHzW;_f-Aqh#!?3uEepTVM0*iG0nGFUu3fb&4VV2JwgVXyp?#H^YiX}8##=ahpce| z$%@0;Mq_WjfyJ288<{H)e#AB|@GF0IH{$^eR*Klj zR#@phK8nG*@WMRG)ZqrxhoF?)Tu>yQrQ;SH7`|jKRzbGIyHQW@y7E=iXGcT#@ql}x z975hRQb|N)s}{wj|FrYN2NVv(0!#ataYlsZ$I35-&ODA+nuU?_gdm)w3~v8$&1d4A z+|(7CS1t~2I!nTr@SRLs&i_o|VAN})5SM5lvR=jETRV-z_QKd29iUx4y$b%9Gk!To zvqO{vW)tp%9cyakE;qn12&PExUu20x%M&`u1deQZ^#8`SNYp4cI(xW4ulnmf^P*8t zCMWjC+Y9}z5hKJDw6_V^g72A*&Q8>SP)7^wvhUJTFg?5h3fzSprC*@^{oPgQ?5_Gn z)62{H_>fVha3gYQ3q)Wz*x0_guWGp^eC}C4`Z=h`eo2p+*S<1}*A0C~U$PMl5@PJm zWiDo`l8?ypaH z3T({~99t8gmDw%~60@fikC5C7u8MU;;)(^KBdJYX{2QmfY3i56-@ffP8o;I6o|zow z@}trN1gye*@~g{yi%OQ%%A&a_aFgn4`zP}+cEK}!BFpOGhScW+-n_sv;ov5tQ71gwO6kK5KiK8H-7OG^ZSS5|}^l zuSAuwzC}8h_o$gC68@2&BDF-gY@NQq*LXagGf}C5wY`j6^*9lStuw=x6O1jsn4#LY z(b72FJM=J#pl39kqd-T$otsyb;uupz;B1f2@SM?Wh9iRV17Pi*J~+wWtSO1muG~4~ zcn2wcOt4J+{QMy=|+6aaMnNeR~ zNCds66{s>%0tmT~FLj!u#u--+TB4omy!lTKJ0EAgFuuyBZ656C)g5FovM}}78Y)jr z-ly+Mm2>uqu+Rmucb~}+#W1ya*xkF4Q8DBq%*8*Z1Pu*S=A_zyjIw_290R*G9Z)l- zzwQI0FFrlH@cQPC4iJ$DhGsoMr>qi2p2xe?8igdmk(B#7?p&*@xY3y15FSo3slFH8 z|DW9uGWPJ!p7r+uS?=xH%`egvhLfe#`i|R%tZYR^MS^%~x)5vc0UMWAV(rk-kTGkO zgjoUzt4m#`pM7ZbdlFd6NtTj=PRJaO#>)%TxN9hy0R-*7_Y(n5{De$ddb?WBGN^0_ zRMtBrlt}UoQ2=f!@v-}5GDixnSTFa61#md1JNwK4!U$t^NtmmB8&KeO0iF5zK{mJ% zh=VD?>gnG7uSpjti5U=5!06P4a(wWcAC6eZDeJ(J5~X-POlUcvfB}K+#O15ElFKeW zFV;}t_*@w^%Ihh?dJY{CdUx+&g3em(f`;M6H{h*e94#Y9XzZn>iqqWpsgbVN{-SGSP|35wm$_cQk zK0Z?c`f3!|Rzec)BiiMDYV@5*@_f&AD9D-Yk6#0MfN3dXSS6?P_hK5^-`)lz{{Fs0 zqxoh#3hR^QVyO!fkr(~w8eU!|e})HmC=G$Ltm~2tjI5-8vOy3S^??cH|GOp!n~42& zZW^E2+f#@4F>pe^QVa>o^bOte@%cXVb0QaCj7A3WuspZ%o_|Aj_s~~HI~~8ug9)8q zUvOlC$lP&^4o*-jr7<|}JZm{|jCU;=kBf7(H(w};8vSZsAFB|;+952wSWO-ijq7*z zW30k}*f}sxcOy4smCrT67O{F|YMSpLl2s3D5}mlFjL$A_J&-W{(#hqkZIFvfvblyJ z!13kpy$w`{}#>&p*@NFoc2kAB6oLgFGXli2W*%TO8R-4OSi1$bdFPb6Q zB#YS>Guv}_X;q5bH<>)|T%;)^kyXDPZmF70RX$$1rs3cuoga`@RM&zmBGK#t<5u+vVhTs6XDW@xV&+zN&r3}np-`SZLcvo#4b#aDZ$WVIa zD?@q@7q5BuhK?gKLB0DtHMV+C*x2#z;j^=P`WJ}7!A1WDR~<2G>Xi1F&TIkUEyvmR zo~wM9DG$s;sCvi7VnGno&r@=#wyqYMn;A|@mKM@?Ou}hXR5z;Ls#OM~AP_Gbknw-g z!q>)nrvfLae-!=DpZjIKYI*Q;q&Aw*DM!TGjZ{=cw$SNzIJlsfZG(!rDmdn=j(u)tC}82;eW7GXQEjdk@g^!fIg3Iumm~wBQGWt) zza&pAU6;SAR3kR%Tq-Ir4egH#0qHz9P4!~7NDuBtOn0~+R9mlvvuu>7_~1}W?y0cR zM4zDoEx&H)<<95<9D$m%?X|4w4NI(rHZ{+L{O|%{``62C zoj!lIZ-;G`ovjpBC^<{y+a@w%bsTI*>(S)1jYB2weNR&DLYqq_G4V>-v+0_V{?L_i z#nHqxczWh(L>=fl4O&(mk$#N#9*R0BMGCF-?(FQ!O>zJM)0Mjz``$wziE*dr+pe=f z%$i-A#(0SRloyC`|LSMEYH$KK z%+R?FMeBw2$AE_t&9cd9lRxejt_-A_m?TB`?g$_&nAi;{8BC#hhuHhvXf;n=&T^fXznn8=TKi}u4gJ5yaN7Jq&5Tq9>J zmtCk@sg>L(l(?9GxBwZFgl@wXxVwP!9zWxYN_N)yKyh|x~i11{}43JS!_3lm?e9&(e+er-g&!88)@0F zkLoo$9xVK+jc#ld^+RnqC3%~EHW81odaBR}hQO!J{WLnTA|!EcSu#~qopV4YrdIYe z@QPlrt$ga(yN9g~rP*v1;vA(6b^+zA%yV=U1$zQP?Aoei)_ z9HpdMf1L;GNWHy1NpIuwWS;(!?6DiO$ocT! z6a|l_yl)8V;3sQr|Dg}i0)vb&QkQ`s;4iX z$qAfFBB>%CcQk{?{>^&Q?Vnd)eQ|9Jo8dY_SWD|mQ5{%MFi%eqjbMNgHU?xs1XaGm zzsURhlWn?IP=hZ*!4y@VV(e?DnxX@4H}goubpNkxAHP2xrnwg_@iLfFpr zK-a=$RqGsvy)W}E4jvV|n@ybEIo?A{pUA^B1xXDg0;`ks2QK%9g-`Z54~nRI!UZKi zhm8K^2_d5S*YDIdp?qw@(EX`Al7|e({Y%)g`z>SbzX)4apI`eg!WNrHs7P0ef6+}| za(%vJPy5NwPj}8<=SOaq)Sikh2V$B8y8D9;CqVwN+Ul9t?PW1qZvv2pm%R^y(8q#$ z4LaPqnOHgLmcQ*QB^MI>^MuM?Y{!L^-FBLqr@~<230K9bcp>Znx+jB~3a?ei6K)7c zBpZ)bV-nQQFUirxbGOIE41SlXd>BF&0I!y-BP3I5mE89+Ge|g)$oit@19~%e(k~u5 zyi#I3$5TF_rQJqFyPar!8-ID2Rd=my4^Jij4rQtH0XPgFB*&`@EVCQd_boAl8S0>& z(y*lQXcgH~WktpBu|j-^jSwj?JD0j;G+u-XVDwWG68=J$)kE*qk;=s#dl6kODK#}@ z286uHP*;i3t@EKOfzii$&OOYJ6i`P#*8K%SZo{HFj`(( zDpx8?3XVfv-Q6`qLy;f%Z?jBHRJ}mmj*3np-Nnh8Eb%@$Al4U|z@uHaY;HPhYMQ-h zw%2KtE3wd~)8uG1j~U2!+}Vibbfyz%#UbGo@Cy8yCU`4bjjI#%6&QN)WTL z_~5vI+{S|&B>{dDs8x9U`6&{m);kYZ1~T=Vd*%taTwadCWg6^z-+lih2UWgUp&u)E z4Ovqy{&Dg1(*Aj=)M(-j*8Tle?^jzhevU`Myp4g@w!=*4JT@Yuf0R1I?&u|{J&{j* z8T))w{0mvNyJc_~Sibq&Dx>dx#j}3tDomZ75J95{Ksx~#eF$N+4;>7;b!e7+QWrpz zk0xs;97aq%iYw!gOLn3Kng`xS@E56w>y%-lNYaRaSISUdnsCTM07&I>G%8cXiiwaB z>H4%PRxs+iIx*blyutxQI^ZqAVr7`ZwX!zzOU!0vkwP)MLWuszo9?>#9s9aAHaTR;@=y5gzfd4tWF$SJgQnIknh*0G()(Mq7#LOq*~)^=SfoRR&X}`g;xhw#)W4U`4#LN)ti9CB z4=i>!UqBFyo<&Mx;QkVOH#z+>(|Qdm&S6R z@HpGZ(b6kaJlI)i`^xXRUEy*RtYFIBmFbOolSeRb9<{<@%iRsNN_*xomxHrNWV_^P zAw4fIZ!Cvx^xe9ut5fyfAxaUnbzt{yG?`5cJ`7Jat6W^<6J2~x7~j^5+{DeBn#+9x z9fzselS${u5uN1bEm)2OA>?^+{d+NG*Cx4+W3D_Sl%s&v( z`>MLUGBVu{9?S(4w*ic3&u+hVCDaoced4ICJq>XVKHT;jO!~VNre065HeF96D?D!o zHIAtjW`fDU*l+=qKze4&$AwRX{8L_T&8U^y#M^JU|L)GfT)5i4G@2S=T<+moD;2!5 zVG^9vq=vi)V+HrB$)>1L&kRs`n*rX_Cdl zW-@Z9z9c0aUL!nuff^do|zRH4zVcAUOJW0Lcli z&NkNT>BpW2Gs)B}1;t{P#6WH+bzQ{hO>qeX9}l?fB!(u>8xUrM?pK>cbg-DtyaQLD zo1P@FwxtaXDTIWCw!-o7@n<)PKhL<`43dc@Ak1Z8UrZI`%eNbMiY>SER-E(%3ulca z(-X z<9_w`SQ;wqnf}G5wY<~hul5dD+ZA<*kSlq)32!}Z&QRVT;TqqQSAa|L0!@1P=b9of zhl;#du@$(AWICNKWiEYcYH~1wy`*MBo%>L4Er)}}G$178NeG!=-O$j3ceS3kNL!vT zQMnOCb2zPXaNDmvrua?x`}frHv0r55Z=6=m-5o6cy4t1$K20CJr(udwObSYoG1fZ+ z62LDK3?ai{v9y><74$vYoJNhHQ`bNIkx03)F}vam`&(@-|Jrc@0gTin(5D=hLbw8M z;4(1Jx{8QY=xt0^lbgqCR(Ku;yMOqw1Q&rx3_|fmNy4pNmzu~eY=^yV+}TD_guIlb zVoo-#v)!6j>xQbOaesIK;b?E6wZTms2C-1KLemRtK5B?i`8`_B9#>|QBswqp%+fMZ zxY+Cv?NBa5;Wnrp3yu4y&d<MI97_CM8J%tVnsbpJ1@}yLQHb*IX@jdIE$6OzG;x&FR;pb-0&e>24_d34~r_}lNHDSSe zxn8ECvNDS2pz-zM-H3ny$%>e-#~+KSa~J}27x;R(Inn9$ z$kmx+6MmSkP6TLLzJE#m8F)Qu&U(*T#6BeK#@5So@JjU^K}8lwL7g z?REO=ppG~$@bAGz?uZo9*#wWPsyvQPGQum57Kv%7VK>_(bukz87aBxHdwC2)GqK=QlS`H4IUE8DCOqv0tc`r7v){A*IP>*q=H~_D!1!o9m3X|Ivp3PT9A_4nxbC$3QCl=~ z#5I2cLn!8^rViRJEVGLQT7zM4k|21Pp&p_3=ko`8Z!r8-4_OP)-XP{)Q-z@uaiLRZ z$i7Zf<22=_VoD~~@2r8h7F}dfyH<)1(eR{*^V1Ow>ediD+ACM8G4&fT^V8%y1B_Ws zdW$DfmiyA$53IPO#M9PB3M*`_brMTCV+aYpvpO)ypX_$qDMhK&x~(mTwO%qD_)3Z_ z#PSaYfup`*5D_ACyr^@CWa4PC#I#LylD~uTKG_K>cZ*^hNz!>qKjnklTKGZZ4EaJGrGL zj9ODFhD-0^ojpsRYb4lhjjm@#uHvyrzXNw<-Z6E!*u*-{H|jAG`$`_FMAh%U8awh> znMvu^RerYJ)kgs2^k7MKtc#M*(4Dn=D>h!ankPH_?{#`mx9(3KFX&Y+{ycZ(%zpdW z!)|pFAvp@MlRe1T$-fHvEhs1^xHjt_Da{DXSt{HQKnFrhK z^mO7HSbi)$AIZA|(G^?tVgbk~jfsrdAAuxm$QTU>p1INd&iV56wUh@qZ2flNo%#0Z zpSIKXXTryMT=49=<~|RTHl*3RXv_3EfD(Ce$f4tAv_=7NpkXiCDhtHgTz#M z?h0q=KV1vbKMe^cKXk26(5{G0ruBtnkH6a;Qe`9m)dCY^4*h^dmUpPpt2_gxN!^u$ zD~#KiljNTU#GlV>wT`%1_q~%m*#+%Ks&>ffNZtE3qgRY2G1WKdi$$ z*NAJuyH`D2nFCsGJ*D|07_+`Rt~=Mt({XQL+?3oa0y*#eaae2GL`P}ilSQcn(NN*B z`F}P5z~xtZXMzA_nMhjH6z z^4nd$_ULA>O$$@6u(iYE3hmV&k6AKI1h~CEz8x<)&+n~vTlxj9u?MV%&%fG&H^?{h zMGVkW1~+}W-oLFpDK+;q!I>A~^)ls&=@D{$T1C$-r#3y~*QlJ6K2dl}Vc2%Bm1Io4 z;5l?XoO&k3G$c1RUY&_(NahfeECyXVczyh1FzWMX1_xInR~~h%McJP#I}m-ft({{X zy}j#p=A#)-C%GtM{V1-$+*q~x5&((`@-DT{Y;2i@cSfr8umg#C`|KVd8|`>_&0pmq zZ=*#5Nb0q@0%#l+eEZ9vo$bwb4kpGSMB12BHnHQI%o7X40r%?8Sc4T!GyouKiDUkB zG$=utfrs6wBlDf%L@HjdIcH_Ka?hSFfiFT=gEE=VdWK_ie??&W>n|+R6Ue@RZb_$k z`9=NEkOz2JU*4RWP=7WyZaALUYp|Zyl2mRLkMZHdzse}xO`3HTqxlNEM$WDz=^PF|5i&huQm-CrUWo%n5D(Af}l8_OWLml2ToQsE8A4%-a^%qNfo#)nnlZ%rrIoXvbR+Zao`FGIk zMIGI@ZCyc=+R7uymV-|i#fzgHs_mYYt0;hHZSOW?JK4W&%;s~8V5VaZf>pxL&;MO1 z`6fyOSwm({~VOmWTN{LZ^g=Hc_O5Ge^oXnfo$pa z&Ybp9nSWnFTAZQtfkAdCts)V;AXrw_=BFatBtLY|p9x7t#~N|nAUP9Jl|(?N>l1zH zF(p&rK|GOzX4R*)%+fg~#+pnkTq;b$j=DXQLPC`kva`z0l|OR?irTvoE-R9rL(D@- zFSKvgNJVZ|llc)2JeVkdR~t&9=O<)PTFz^$ee9775hjGrUSw~FckY{V+rE;gff$)O zzoT26mh;zmj`s}qLtnwF`6af~vT}9u_R&Y}q{f-93QwWYjz|WKWTua6Xc+kybIRNE zot-7x0#LH{6`K5PH&K*7isiEn?tz4bqgrJYFuL$gGvdu`jTqz*de=PZ4_WL!glGX4 zQ@f7WF3ey1Yz*W^hJ30+a%7x+S5<@U|%%s<;+&HnDmXGiN)`@)~x0w4X83DPNG z1pGh5y>(QTZM!{+q5^^#C?O>wASodoN{C2zgMf5*g8`zXh;&JJcZ+m)m(tyx=UTk) z`<-v^-?#TT+KC1-)|nF=v*6^P-fvdx56gf(MU0HRR4eoyYow( zmxILyeFuyR|IB=TrBOV*aWrepf%ty?J0kTX*E&xA$r{N4OPnQ1Ma9s&I*p9R+k%}j z?48H*G!EN`Boj63DQn&N*TngDCSv)T+B1=kwjmBlKH|4S#$C?5Papece&Z-jARyO8XUjAgXmXX;(qY#C`RcG z9HUEh6HOk!>8oPnjalZBiXAU^^K(<@l1?vtkilvirv=_GoMWjUt=V3GFBF8&Hn_%h z@8P`<0SCqd$3N`f`x3BxeLv;@LuiHdq3Ox|p0SxmMQd)}OpEbbkN0sTWQ`KP%Q9#J zh{sd1qj_$xPdw(PjY>qxy8s0iCrgNL-1szJ=_F*T_JnZE1AsRrEw?YS zvpv{vi2WfIdZN_LJ#ggG+gr^mZfd-}Q>lz`YR3+gtzXF`i>BKR7p^GX6;`YHddp)D zdkMHl@DePog>T+x(ckNhJ#w9K8ns*IuVs&BiPJFR-KpajXwi9l-#k1pkI@|YYVTuL zexM3Bcelt$LD&c;GC=>nS!vws&(HD-^+KsJo9G1f+m?lMwzM0m@z>(hBM6=)$uEa+ z$6ax;X}UI3qt{CJ^pkJyCDx>9ygsXn;$QZ1g77j466E!?d&uRVeuU!NSVOl*z(R?9 zasI03l||e;0^9o5{pmVwIjZ)*=axirFijEn_$^N9FYbheRB}ptDw3MS@0!^Usx=C1 z&|Yj@W$Xx*oH4Dc(oB$|nzpTkl#rHC2EKDQHzgHi>D(V2a1zae3H9(ZyPw&C$chZ= zJdeQ*p)r!d!0df&togT-QxTx9XF66ET7@G0qYs_US93;% z_cv117Y_A%!W%fSB!q=gcKGvj(}H^Q#8V-5F>|c^qy7bNl5xg7?V;8U*fM0JyC{X} z)#g__Drhfku~05Xn_6RW8dWbA&-vOTc|8M>PiDF+uj3bQh%qs2=~mvx)EgeEGVII4 zs=y@F8Pi1JI6iQ5-1oR4vlDKvr}xqT(d{AGmVC46ZyYt#@<$Fs4AS-|fDUar5jE;^kFe_C;OG<@$R{2uI zByjJnT8q$5o<L&215DN)S}Zi) zqL1Yg4VtF|`yK`44)V?Imi%3HtPal^cChA71iZIVqhmMtt&mAtGgq&W56KUx6z zh2(C>#{Y*>NBrx7dy`0--1hODXgl9IvSe5+#fCM1h=PJxBwMVym;dxmV`LJ#o0u$b z>>}JUW!?`AC#pX#huRON(C@B{2112d3pZ=cMOiE_GK!XV#Gx?RmhMD_Ef(C6AhtxU zcUyY6KY@#RwwD5hz(W}*1QH$6WUf`;dbFti!)OE!_wV!>=a~Wh$%-k)Ig=)n1p!2w z2Mg<2`0NKuh|Z5>9MW^eIAO7<3t>{@pyDXE%ZHaqcE!r$=xCedr)E+6#W`P?d}d-p zDw9I&`;Vo&U1aoUJD)X+O~gaFlWIa)Y~hi9xh&j^Sal#^WowO~XS5MJz1^6kHknJ_ zGwXP9UqNTXFiO*nnfdq@UTfz^VGDylsVZj5RfGEQmf=&9?W|5hCee$-WMKBC4chkiKJSZQC%{BQQ|4S;fu6aX7@Au8?!( zxfwFD-f8LA2l%W#sfNt=iBWEN>?^AT*ETh&?rlb=HouY};1E1A8Gq7-D&jitF7rPs ziNwcQlSG`v>C~SFKw*%Ok|GS{VJTlg)r3c6291JlR$ploX#u2CpI3vNdV@J;_6*t1E=i)_gz6Wt?dareWjjiq4WgF7pXR>W(Wz2KyAsO;aR3 zdeu12nF?t0m-4xPsuGYLcxM2FW+|_2?O^tc2yKM8hlFHfX*eEDVt?<@wXXcW4m|u? z`@bGnZtngt#d1EjS%1D0lEwIxMQ)A@L`6vDMTR0!kozuPJnOnRV-sgg4)OQLobrEI zSNcc5(nu<_=3q^?)*Dphz9MVZR-CpgwV=E*9OKv$7$HzC(H-B6V;>!{0#&n{N}0;u zjBw2hfl~VgY`V3Typ@>%wid!MD9FvGO5@6zrq$m(l6@HvpXBNaK<4M!5%Wv`$gpLX zNv~@K2J0rHEX4_qRinNSS>8QlEy80oyL#t@OvI@3HG{)%U+=wSgC|&U*{lCH$vw@Cc*pX@kfl^dLVMmnyN2DGiXFy;&+jhem_dt)eaD-9 zWe+4hu2Iv~g8^K8&Yj~Ux@{qJy;YISNaixUchyj{*d1q|t|(@`IeA~VMUQT6w$^+B zSx}R4U$7IfTF?&mfBwkTZAB{x&k*jC9!mS4dr?evyszCEcE0^5AgS_VLg=i5wh1+`!^7FxfD1BVIKLv2aw$wt+rZrgf^rY2DOVF- zaX~aL{9S_lP*uN6OM3!l>z6O{bAV=_VR#iW%VR-_e}ZE}!B7T_NjENoW9{HoR=pK& zrM&i{C6ylgpcn%8Z;U+mn(-awx5R5>3*%$ypy1(nAz?Oi+4doIZTahG$dGYKxxQY} zH*7=5dqBPe-|h{{E=Kg=S;#!Gq)8 z-MeurykPZVw>G(R#6`~Zz_4wUWKCt3MZYs9!MSU)KW*q8q&JmX?t~Nz+%vjXJT|TO^>a~fAgTEB{%|LM70)ySJk=8Kt~+ep^0U?n%q;f7aqeX*vxEt4}cSnZ)}s z35_DwGnFihCAg75**8vu#WXVu&Bs6fT^xyNW}9{@PDdEoGMCB|L+H>$77xO>B7HD7 zP9P-g*T(EtXU9lB zLT4i6zsp6={wLW<5-Xp0??OwE7hR2MeX+!v;8;a@xlEjkqm8X?noQD7kQhL>RBJHG zQ7o2Ixw=_jpf{v17O3TERp2lA+QVK7oZLu1PKMN>xl}>^4Q}quN{7H?>xFM)_1Ao; z~6DHZ_M1_MPC`kkxyfqp1cI~6M ztiNgSl)JC51KW^pdVXe~u9)#M>Ggvm!q*|2^$niV2~A9pUJ~)l^jBQX#ji5sP{E}b z9%qT#tJj}0Gt1ItNX2nyXaCiPfXk^AOfL=-D)DQ!px&_hKg1h^TwD-ao?N(I+6dBsu+J>`e5$I5g%`WE6(5e@I0A7vB;yIt+wrJOJ z>BR=JiBicY)uEj3B4hm`S6f@q6xBf}6MN|e1I!El+K6P6t|-1$<-Gsd-Y4hx?>F#x z5pG<(veI>9(<5jN!<8W5YM(>bXJl@J+&)D2ip9u4vT1)U?5QCWtS<1~y_w2b5p2d0 z%V*dT{|Mh@|0l6Xl=;E>1l(7sPEJl3i&M9e1qA3dtH1dNqLb7wprfH_?aWW%vC4IR z9;gq_7&3q$EZxk^;bL3#j>u=?+ZcTy8S(Y?ou*?3pOPuQN9w(la$6ZUxm|WY!?ny- zt9tq6-eaW-GoHQWfx3x_j}YQfu#t1d?R>75a4I-RYRa(&MPppd0X{K!H^3I7d*E+M zz+v-lbJHTZ(d*`>0uAQY^O}9D{eCoP)wK6M_8Go7xT26F za-8WzDJ)Fe-f?8u)0GJl@`Y^m+|N5?FRYG|^j%ly$36KyFWV^t30#hT+eZD0Yzzhx z21>Y~nxLSf3ey(y(bh7P$Ow_RR_)xhx59>m*!DmP6K@pU`XuBCqE+ZM%UbKd%rG)B z{eql?4N8gMOEuZ2J6*0wjRE){-Jc^(VGwy|tT0nZMtom(#f|_b>~ictwxuWiVb|43 zndV0fo>mJ<7G`8O@n+}3-5>cY4D?2szh~EHT3TF`D*bw$x4L@iF4)Q^MoyKSzlTAa zBI7XwuJ5#Q8tSV1tE2C|QYa;|M)T)~Y(+4m{;L`TCicJal0f{-@&3Aa3jM@WR;KAM zKIkCuspI<@t5ReHgHEaP88;3#+CG*SkQufaQbOqV9w`}_6xDq(Ts~}MWMnY9$7QiV z3Z>T^v@;-m&pkgccnzgVb)SUlvl^P)rl|Rmm^dQ~3s@aVfgbb5{zg|gv;IIbJPgTj z-hsW%mp)2=%hk;n`)5UblRHe`+8B6NbU+F-)1j(FKB1@>FIPpcoPW*Pe(fh{S_vXp z^;-+^uA!g=(J0cF+pX7k2Iw+39xr;wUt1A0g$lE0-tO-Da%?Plrn#B%3N~3x_M!8*k`3BM zMa{cRRUU1aTuqYsGSn7&KR@@?cZv1)R36+&D;QYL7_Cc z_!KFmA5x2t9n(sh%MGmdxM=w!NNJ}bBO3-x7@xjd2tr%6+qOJt*+|V zO8Ztz!p5d>nP~jZi965lHPwN-!l~=m^A;Bxb}z~q+7vVEySj)2EfIRNejv11*f}h& z4`L7cRyz3etP?4zDp_0ozUfyI3kf4&fD}*yRD*h@+uE(4<+t#`gtRdm_W!Yn@bIn8 znX0}1i3(X%5~fz-F*~W|Usr+IFNDoq?#Da4IwWLDYGi&^{JYuuem6f$&Rvpc%bxF z0Z!Kd*wD{)w9NcJ3h3yyM+qq@vDentp61&Tc0{uE!EJpd;g{!=mD&36rM@p1w;DED zu*@l~dHZ!+zt^7ll`Lz0 z1zivUyUpiTV)y&6o*-5u_IMdU{%M{mR~$)Pe~zZ)gN23w{SKPo*Q}OF|mGp=5;$qrE!@J<|=;7tH z(-+?$m#y|?o0xBmQZoFL`k9khIQN&qEEOiL-UFZ^1RMVnBLSgmU|6vwD8|=br4^|( zYF61e)=*!MkPT^6I@~pPJh3x9(%Y0W8XmTqZDw>+uXu=sH6u87o0!uhvcybFHif9B z;V2gyrmgQ25p^E>;p1_>{aP&0vi*SQ;;nN455NqXWUV7AwI z`S457Y-e=j%Uf&jhf$cQgI|NW;iq8vC+Tw8QT&*sG|(Yngw6i$%0lcsh-H0UXDA9S zjKuS_g~Hk0GJ*3oDpaosDKRsnWnt4V_=sF|<94!9EH9oyj6WuLm!W$l)1_);U`|QK zv^L+Zlh@Bhwpkqyo@tUqdSj^k%@ci|*|<~fA&b=y5DtI%IK_O?RQ7NolxR;{SlDYz zr)jg}cU*s_dZ@bde!g9Y(E!pSxSo_*{JAHQHP)M?db>3wPbONI7#FvB6MWY4vI0Oh z4Mj%dtO%C8WQNQg-o&=X!9o>U=k zDy}=6-rwMZ2?(njSsV6O6^4W|<T>0hd4owg=1gQJ8EI^e2UR7{o*h^Lsdk3<3Rm zyt4myxO_ZPVeC~ba3?$r0hv+$zm<7NJ^lYr=JEFDe@!}lg>pIi^3U}K0GSA&dg$uH zpuZZYJ!^|C=rUTrTDeYD)@BF8;mqWk z>L})uv8_GFx?wE=1BIbapwAd7w>;BNaX;(zftEd^QTIDRgk{L9sZPQ$ZYT1knnJ>o?PJi)y+f+5&TbtMtJjgZ@jDKYP*JzQAYJrQ9Qs|49c$bg7({V0 z)Y){V9cXVp(7R|UpgpqXsVF(`M5G(E(Nr*Z>9TegkZDQOT4dT5ZVv$k9& zyK78MVn^J}X@M19j4-AlSEd7eOvn9t%NTCAFvQ1{{F1#MO3d2xGMv=(uR~iQ;x)Pi zL!%T!1mrw=2nkDrF){0)E)0<9)f(;*X3aX3SM1sl*3Xg@U2tCwV=Uz zpFx?a$7y3Ir__Cc74AXOoWQ#<;M$YsEO|a!AZqFsk;v8_9#ZbH5%URzG=D|wBaN{!8l zuaMa1M2p#>O0L2ODMQ~|af^xB+s}jaTVRfS=F=_s6Rtir9mj3IdH*fU@0bi%2PL3f zP_U3+LrRiq>9^FOGBB&1O6lAg%dS#mcYZlDY-e`lCzLT{u{!+>L?KRpP^^xf8 zm>EV&p(K{E9fui1#N@R`43XeV!S1dyEcK`eX7H~4FnJv=Fm3H#8hRh4ukLyK(l8eb z43yRwjHQXj+Wb+$V4>k#UH8UfxHAv8Lm>7M&t zU8NL4-2mP_xWjefrZuLoSIm59-y9TArO72d1iq)=j!M}dO2~dugu;pJcZ&`N-Ayg2 zZkX42K44Vodiu&ox*?_IpbPN6o&;{!XXvQOm0HAe%c$g}!Cjndu=mhkt&~4fB0BuA zM(bLYbLg}kLbztk%)7xLiSAoa_P7mf6-GFMAlezC_ar-#4}J7C$VQ z?3HXQUJK*0MF4u(h3czCupY7+M$Dh#wEPQF{ttkjrIT_|{Sg_;t+&5R$P9YQ#pCzP zHEQPPi!w0qxne3`zQo0S$fUh`EvBM;`>@s(Ax${1;=;h&BfRnHMp)QlS495)@#ZGZlh?H$=2=Yt)Pt~JjxsHp*X{eakfg(OtGWAaVun#jzsEKjH}_4E z5Chh0Bh2S)X1)4rHLqgec=h0fUi@q52smJGhVb8TeDa-(!P6RF8kz=Or^uFt>B*M7 z#v$}1u)fJh+hF~$cJ>h5J8RkX31LwY*(;}Kr<;3wFC--yCXe}rd{Q+|j*c3$*-8%0 zUH@DRrqt6)RKs}JY@0du#x@TR2==7|pRe+4HDVC9Bczc18C+fJ7m)p^Vp@&udCpbv z{8A**{K{|U9>0rYp!D5E>iZb@JR##ZZooTsXH0>`RaGX8uvMwpnjG1#U{-STEDglb z)tD=V&i)LCf6LTKlAtW24A6?P5s8%otyKB$Vh0;fh1T~WRG_JC7JL0luAIxINh2eS zNFP3PINf{?lR25X8~c2@w7Nn?Dy*ZJkJ|$OvyfnGE@}5{XK>G0jl;RE#h`MJH@5^ZSkT1Z)$_!As@k&jtfxKdp)zQx1)uU*Bx z_5NUo`+(#i#(Le=oSorM)c80%`wuy4*@*%kUV8u3)K~DSA;c6}LASq`&Sl{3&%@qh?MKn+@u!dDAg(nmJM#3_)L2TW+3r%7nkjBuP^|z8gGE zR*80T`mrqh)H>uraE83jG24!Eo*P*!`Qwi#``RG3TUrjLRt-sQ{wzlvT3`RF8o#$k{6-Rq=Zf^kScm9+TtWp?mWe_1p%HRS2eNMd}= z7_%1JRzcNjHc_AWjE+7R``KczcynbaH$zP*KsqUT?V?MQHFHMV;^_ppYIkj2bQkZc zq&ELmLhf-6$9`dBM>`MC2%(MFuep+`S{C(r)1rQi>94;yt#Z8rvuSl_0-jGbiLdESrRSPgWd>i6N6?m&$h?}J9Xmzx*MBdPNZ_e2ZKSObP(EMGsfNbCX#e%OR z`f&Nh9elfWy}Hf`mx8x=;J#)uTowtZhY?*D=7#zhn&a{J+1a;t=41S7CbYK8Y)C)T z)Ewz+s+TpuI@YxBr7aj2$E2Fq8Oe5sSk0+J2*ULr4lOd3iWQjX`mP-)9jb4F=CS$k zE*J1;C0<`Dh^gzEBooW@@#n>&6VHj*KMvFsGRfc!E>{+P2(2 z`4RbqhjUDIga>DvbjEL7Ssd^ExNfR)?*U#dn`lT{&b`>8O=qI(D1C6tRjYGOtE7D^ z&jSC|0&JJAx*yMhuupL>=`1wq^S_FX&EYQ}^hrEIro>IasnED1nHE z*k*a%Q~$&tiJX#hXCas-jrT#Y@>wRQ>nX0@{CvOpD(3U5mww;|?0aE_D*?v2d9MfB z?H^&Z@@;LI92pXx6>L?}^K-QrlX%1#mTN!jxpI40s`Y(U7I!MQ0jinn@d{U_9Mj1~ zU-Fw5-uLqq89X(n(u-c*b#8C(C<@UJhL0KRhubmSKd7kmBw2muE#>yuPy-N*S~TO##qrU?08i-^L@oI z)SdFo?-@7i)%#D}9;PUgw4UUUvdICH=*h>Aj{;o_CIME?B-^ZHU?>Y~-@v+B95tZhcVrYx8U@^f4HvMs7R% zulR6JeInyK&EB>2Z^9&eyXLKHGGhO9;2`PCxbU%8vv2lEliyBCs(QvC{#wGcXOxmTr_-pt2GE-bm%^j`0ZRb|@$TeKAd|(nPqi*P$9YTLd zl){BU(TYK|iR5e8pLsQw zid9uq^0rgN&1uyB;l)X(oQWQ^q$l~{ZMM7#7kjV-7w^|*i$}$k3fnVIkh+m@9&D}V8tNDoPdFN=Np)O?)LTLC=$U_lnt`oT9B{;P&UKB13f5B9* zFgAa*{a}fhfA$vBAG4pwuBT{cyyt>b5M1l=646oFzR_|yMq@u{GMT<{N06T4OyG0n z3ySeRsyi1^U~=G!2$|8Dj=iyrXv1K>qDK!b5%I54-FCtEKi#Zoy}dwXC4soCySD>F z#7a}NjE#M=va+gy%AX|x=8c_WZjB-09x2~fHEdGzAOiQ2*&|khqd)e+#GTT!QSd4} z^@H1d7bu)#q20uPCDS3QbaQ{G~y#X;GTG^6z>Bk2{X<#SpVW|I!tB+~NH1A-5iwu%i&|?k+K_QOi+q za#9GdMHZQK^yoC%5(NMALM?X4Sqa%H{qyx4uE%Gw(uMBBI?<<*BOwoIP?*j)@40%B zdE7A{0Jha4O^Rc{3Z^Puy@D6GAwK5CN4_Md4o*aZ^?>nUwdEPmf#rLPE$;$&B@|gV z#;zBxbcbtcVo;Khyr}v+L1w2z^3^Qox3-O#*`j81rj=OIgU^n;pF2#)w*CBWO+8@f zG~ZcR;Yws<(j8Tl%ih=UZ$qp;B4vkQvDA>3gt2yYy*FCx*%TQ$MVNnN<1!cRGcqz) zVF)TVhDqWuE@uk1oU|TmPI?tCHt!NU?X5|+e0$tibnB*5Gmw z#@XsMwO+_5(q*I0r)LN9VEuh)RZq2CIrZ+?Z~SQeqyaYFjIk)L1AO&zN9meCu08xR zX8XyK<$PEM-iItq)Nen4RBA+iO<{ zcVabD60SN}NjBbCSP*Ww`2YeWl7agh-`ac3!4V$*R|d8vC!G$(n-*cj$IEy3X>P7)^3_rDpPT~W3a~IZ0=WP8WV}z^pdz~5Q|l8j5k^2d)YSDQ)b&+R_-B)m+_V7A&- zl51%p;IaC;qc5qYuNVf;piq*`)`F%xNJb|dnObkP( z(Jw_W+NscB;1gt8KpDPA81kZYW~J@3v`!e4Ehk+B+YI1;hrPv^?8&o}^I@DPAEKk9 zom3mVAAtW!U+Gk4zxnhe?t;}EOZ6YaOsUiou;<3b$Ghymw*~8NoFm&T%{Pn^4=wB# z3ei6<%fyFA#2^ImhzKvPjVXbhL(<2OPO3c*pP^RSiUvsQ#)6)&f6-Db>Zw2QOu7}^ z8I=d?GfmGj4rjKnJMAturU-c5-8(HCw8QfYJ=t4|UdGl00*ipljdWn;l^$ZPCJVoC zsdL)CJ*{tns|b>$7e3e>1|#u~{#}}HVfThb3%BS>zBhOs4K?5qH^uSZcGTvg!PQ@6 zR9fm!+fJ5xs_;7^9pC8a)Xg*nl(`(;)M@hl)!%>L`GnMFWi(vC>vqOUD2-~!>tJf_ zw{HbOF_S7)>-WQ}7ARrFfO(_u!}p-nhI9uP*0;HXGblH1Al8D>w3U2ybv3uJFflVo zHk~tonD5W2r;iv6_!t`-gPlMaix#*2#*yXPs4c-N;b%V|ow0pFLE$E;d_gn4wx?7znw(wJ8#vQd_QW)bc$4x{8>5~+p^M#VG;`6>N4kA4Rf-K_ z{yYHh-aL5hQbzT3bOan6JS3J==`mMv)J9wKU}WUSn(G5@{u)YG_L-HAg3pa#k2z%@&is{raCt7 zzuR=^a0>aG$v(+29Jz zx|eXzXxYnO=dz;HuJS!FrVO~v2eA7gPS0E9H!I;I_j znwm}rt0E49>_x^y2(3beop`opC_{g{D0%2q)NIk6U){=_>|gI-1sRQjm1bCyV;uuq zg~isr6p3iPR`QM@&(YR`y2(l2f%1d|GLpEshb!q)X~g<08m!FB3Bo1WCeE%8c5*7J zmX?B#Wn~cH1DEh8WMxU-aBW{=)<0UTyP~9Yzxk*IJ?pO%3GKi{rB9cMf`T;)?PlX( zf0X<87Q|Qe{SnX9DfAuro@|6J|K3~O_3y;IR&UWns@6Rgl@GCZ(-qa zoTA&U4L4>3SC6%ixsM6k*WJ5YQ_mUZW_*W79=uGGOTSn&lIicc0%7abH8{`J)Cled z1}-!3Q)^C!dro!E9QM?~fcST1>*^jSUVhZN(6F%2!NI}Rbx%>Br7O-hSE{e(h_X#Bk%;`-si9|>1I+RRL65$XW>G= zYH4dTH~d4FV^UL@lG11>y`_D`df;HbG35f<+NAa_uCfD9)XQ1+Rt9v= zOVGdg_>l4P#+c*K#~Te$%UM{@ZOu?}qoN}H92~^P!NJki(J6`vxbrL5!%NuW@bhhW zCSa@0)~M)=Aa+l*PVqm+?D%p2iFVTh7(R?I+%e@=O`);RElCl>giERGk18^=+a8OBtmqG9a##biPC!9H0dHHkah@?I4xuAnk&(ujT}rd8-`dJ4 z9qBxt3Jx}S|CwHDX<6zM@%4MW+DVw5sV3rg1$h^QkaWjpSDIWf^SYebPActpY96$K z;!Y>_z>J&MAiap2tJrL+Gl)`BL_$Juhe7qTE1qcGr&~x=n$_G3ov|p-0mGlC_$?z& zm@BZyH=Nk6JUz?EF`UT1UTkQ#71YC6c>bf zTQ7)`dD?&GRhZk?jJm;s(wS1W$*I;k(JKZ$>9?RRj+3mpjqtQXA|hr)_h88!~XCnR3}A3!KV7r>Ie{xHy zi1SSFY&&TRxx4fW3Neehh@jxL3)MUf9UUFG`wvfj?t-58>q~KN(Ax3_L6qC&6Quq2 z8q^t0363;~awv#GQuh!iwlB*V$JI;kD=gnk><~bTSapa?&edn^Izb>oBjm5DPwwjAA zN)1CZocOh{aKD}slZno(G5auH+e^R>d%M=e@huLA5KmS_X9bV3SL1P=6P_t^?nLIe=h$S~lvVW?M|Bki+l1^uRRh2>wWCPF)5VX9&_(Z|g>yZ`X-*`Nxac7|m z4554N!DND);^|YVDKNIMd2Xfrxl-KfbmH5>n8mEul)M|eaG-TBpP*i%`{%;9zj*u( zuNL2@(#zO*3i$TbY2Wjk_uIxaLFn)HsEk$+(D1og%Z@4gcHIUwUsOUf#}Y9qGv@~J z`E8pLhB&sr@?Wz`9hBCOXt({3V~)UY^IID!Uvt+#Fj|xX;h$OgjOjhe_SJ9;SUbna z*}u#wx*zMfqCEO{Jk39Q{qk4-qcwojR@2TYqfqB%s|do3tQRYS zM5%ac=(5}hn(Zk=-)5{$jFo`bW!7SIAW9YXrmzqny#5iYHAMqAK$L-Ey4idga$%sJJ^NDDyC$|A%kQ-x?k+p5D#6+!YEs||Y+k+o<%Pxv@ zxh{Ha`(QLUVLEmV3EQpLj1t z>C3mJQC_D*z%O07T1`2_!}n)PyR?wZ)XpM*zC$To8Q;6rB{!=FoBv}+x_X-MJ;}fd z0{m{2m2XLl5YD=f;!;}dg7(4-a}m)ST#>ZQ%R6LvAI%Ux+Umvvs0n2*1i{rbX1YJmqafc@32>PYvjTy70Wy}A-+eWW|k zjzt8P%uK$+BwEkZC=P?BF*u@%;vanS@ce|d$xZ#upGdr)n5#8)qK5QWT{xp9L5$x@ zPrMspvLAkyPl^Pp*6$cz$M)?F?9CC>qsXsVFRt7UL*$0=5x-7j((MiAgUh_)e%6vw zC;Ud&RNPUKt$csEE+%^H**XKw9vv;6a=9L1(Q?1|5by75VtTVnXstb9G+whJYGuVV z)fL&6`Xy+N_=sD~O4*(~$MY3k!TA%b0Gt=^xq00EotPKiDC9n}lh2U0U0fJfs{m-7 z^iA14zc63Bw|zt|TY(S@3k%xqX=+&yfiD)9m&D0&d~us-Q|o}f(CCnt_+Ytqpa!7! zvm8Y(sQ7I#{L&REc1M_@?gB501ml%?=)JyEtQaKVb9uGGt~th-KuQ+&%#oCkC!)Jt znkU&GFOBHLI1>F%IpyWidO8#>F3Lchl%7CX9T;~(C#@xCTd1=%m!JZYK)$;r-od!r zbFb_OIbJH}Xe{T0iAZmiB;S54w`c>k{L*NKeR{xo_2(~tR$H)a7Dox+J<)jyip7>{ zEd4{n1tN)~!_AdJI%rc%L}C(#GuwhD(A!+U^JkSZa|DZVjA4blI1xt_kRZkDT=noG zcr#RW9#?);vy`)W$^)bJevC#rizbs-o9-=pQx~)R>h9} zh=SWc<^ya}*OH-++G{IiHdw4~+RMfI%vF+SLHqiOGs<2u>45Pa$CD7Egx3sQXHR(P ziKbN9(i94kog%X}cKiv3n|=jnu-oikg?JgAU!irM-OkmFD^?UQv_Y5ux~Vhii{B(W`r^$LyD0&fMnCEzWxZz_2oyvMZKv0n)jUEPgFK)s1SENi&is zLgAZ*|9WaOOC=^Io<}3&Q5?-_J-sLF#fQ%k(cFyM=*IgUy~HB zn!Zs_zwmpm<>nS9+Tf+IaWas2{86p2!lQpMe)vO|#??z(>b%tDOMsJ2k_m^tLgv(~ zAiWOe%3mz>tk|N)D{^C*rY4_#KX;3q6{^uF%&xDgl2edxp3I4Ur;?8lUm29C&_Mox zjC`ckhmERg|{_{S-2-2-OqEobMD zT|4kbnf=i21PG^!omCwV48yFqv3_p5`+v%^G5$;_-wcq&8})_K18qNb>H zM1UVe`cP(z>Cv|hZh^n<>N}r0f7QMRTU@!Zd+`a3MfsgSgw_#H7ndtF$n3<9or;|* z=rwm%y@yj&O6)DjX=zzLj#BR>d`l87(CfQQ+6XA73%}S?1dg%ACMstw4EP$yXBv`Q zOCG>@-KUldgTdmDj!A3 z&M0pGnkgQajq!N-3QVNok(y)VlfKT0RZc5kbz%QMuG1{Wtmep%C^#eJMX`GdrjQ1+ z)FcEQ970CHTLCvo1}5Z`SYsZL2x{!NeX`}giJ2U!kIv~(x-;T+CL;Fg$44(N%7EiV zu1d8Wt0E(@3q4+%L36?I#JAu}(jLR~M7>Hzw+*Pi7rQ%Dd&MXAu1^-G<1K4OvT{TM zs?T5(Gjnoh|5|fV`a$vH3Sbhk`!|t%A5f6f1S?O*Hcya;+6w>AoVBi|j5aBla{Lhz zW7!F%Z|ZLsQ%`Ois?6=~4@!w6>9TNeeIJpQhL(QcUAC^T-`2`bZ&Y;e_OpMq0OO7( zd=_C}^(B?LFYq7DSXLM7a9&dU0|&ovd=Bs-qo$TQo6E=Rxc<3B;GbUHdmyF%EHAch zTBnTQ-T9o6KofaF*JgFXZ)Z2|>gvvIdXPY)k$-<4*97J8d?^QAMa3*+9MhL%J=Y}x||9|I2UVm_9I|f)>>36$BaT56HSe3vricA zw|iJ{7e-c5zCsO5X%8!TmvwSGPiw)9b#=T02vjX2y~a<`6^8vl8`m-8dakV=F80Nl zjJcx*C}i~o<2=!ptZH08&2_;88v7dWrv6YdorB$KVs^osK@9pRo}js7-Nbkg7sI~^%lhD&+H#;Dn2Lz$7FyWM`R`~U>lpR6n z&rJ)-rK)*uXXl(3>$BiIn#6?49aS7ka4(7?qNX}Dlr6l%7?G?d-HbKik9>2>n(p0= zRaeGjPis3~4aHQI9S_CYyxL)mhdKAF-36}rD*ZWiILLhU7n3~yg*+uv|C>AwFFqMM zZD?~m+PI&aQDTV3+rAM=>$xZA;;B@z7Ql&_K57d7RFDr{lVCIHq+e>ji zz@~1;7%|*8lP6Ga9c|A9EcQ>JckL6tS2XWFcbvN!@bMCzf{qD;+1h%U%?{;<2FM%b zs2klmFjA~^)0C2o=DF_N5cn57O{P)6BHVm;D~Vuuto38-$4|cpQ);T~TJsT;K})9` z{zTl*S6=QJfK3+N@=%~ zy+2LVG;ihP(lOM%{&OdlD%tnp3#k4eKJCT33)fEp(LW~bU(UFgHboUIIwNtG?EU~9 zDVU>ec6`%?5L4r5D0?15*%NrTryD*4lVyN1R!D#3T>me=2y6@TGB zVOB!HV4nXKvsNBoy{7AJCGQ>El7qv-t)QEGN(0C{|GRB|KHY<|Up%3IbHhu_n>t5i zH2(lETz0$#NPIyM#o>!wNP&5^uFiJ}?hAt53}mrY?B9U#^ENeZ7nOeyC9tC1xBh+& zsrgs512vP5`K)6Icp$M7GkZZII0@Jh0p0w4cZ2|F0%}F%m0h2X#d`1{=@My*0n!Bc z>d}1#aV=O|w(Lb?%JJ+({D2yA%Ao9+jSh?Q9z~{^hQv$2l9M;h&C3=Fnz=Y_ zTWd<>1J$sPUbuBy0`}rZjZ^&_#0H{a1mZM%6aYg!M&5)VKuJ94@m9DHX{G-+9wlY? zddV68-~Ypp^7hw%720=S0RqI6(|)bCY^u|k*7SlRJUxcAQsw*wF~A9&nz zyNd-fU$#sj$(-P!y91gY^O%gz-1A0ajrcy-06ZROfM*zFrO2cqc!T0KF6ksE@o_!_ z$WyrJGo*#p8T@XjiQp`cG07yIph5cahWl$^91Xft(K3cI0nWm#lg&y`&=q3WsBDwT z5_E&1IOe))TnT>u4^AgxmRQ5pI{yLA-rZTe8#z`yhmVh6O`{PtHQzO4|7zshL|$&? zJQ|6ILnv%sD4b>wMPG?Mt*EfkSL!%G{eqS}lbpvnR^vR=ct5{rKuPcI?$pfiuoAEn zzu2txEcd!-PD}Nk@tKa-$JGhjVEe!rf(`UI!Rx)>9{0vt&rB1oQt2z5k!HpjDuqnk zg{~Owy5pkL-M%icP3Nq0HOz2_AFn#zPkGw{xc0_%o>>?*U)?!>F!td(hr{AiB=@sD zw)6Abi<4O^_%UhC9dIOzZmWD&L@?j>BLgY7uZsq2?~dCxnp+_C)op~Sq1(Cb|k^3Q)H z(=*;5&ZT?jIRk^i#<2j!Yfc4?7}4q%25WO>zgKSa1B~asUY%oHGgU{U76zu|rh{ z$o`-4$jS;$^^T{$UBWVh><&bH&Ps*7W%|2=QX+$wca-2b$}Ad?nx0He&>62a zk)TG(YsuPhWNEoMTILu!{M}e@g^OM>SG(IDv+QUAPk@O1Q^5?)=diF#PkzeYj|L?K z>gN_p7y)UFZ;Q-JAIXJ^atdVjbQgW31)ZGFI=}PG@^oto=EC5~_7zT(lW1e4Ioj_= zUl}D86|1RIw$=UdhN%Vtli{lS7+nFkrq$%=!UKr;gCO5nrpkfE^@EP|`oR&ab{}D? zM7*T`d(Ll>ku-ClH&2JhaF2=Ot16){)E(*`O?R3nk02b(_$uHvy z#UeMKnUD48yfzo#Sa~yZx-<*k&hcnAXekYrm-lPU!C)8A(lIiTA?-oj|AATW{{O--OQ$to$HJNipJD(J$3<&v zYZDWb1CtibKwEh_yk11i)8s2REzC!`-ZU?bRnq9j$Dza!Z;(u=stOvZ1T^Vf6JvD2(P&)rB$5w!xd7|3&7$gm*6tlYqH9Nlvkqmv_4@HL%#E zo3DXh0$7EDk`l@99ZgL>zkgqi?~}^1O7VlR3V$!JOH8U&!b?3V%GG*|H;LKr-o5)N zexx+tIr#DZ>1k21pcdi3Xw3TvmyeEheLBdCB_&lZuKig_KMfeNvyfE@>SMGj#SdYZ zhp2Ye(lu>7+$Jb4vCg-@%gGdEI%0o|j7$g$K`d-6zL=6oeN7Nl)M&8-HBM_dqxi0o z{CDzg;HlzjEJCi~G-;Wd1_C_`tpjk_6wFnt#HuYTNWK>AI~htTw7Ff`HTw}~V)5kp z{J*$Pqcv5}mp4Fm)La{KDcsKsDgc zB>I&{p;o#7qiHyX7lGJW9}4~LYhi@U{RpXdc55-J?x(c(wGLqY5&A>%Gmw$K@ck(E zeJyd(puMMRO8+V=G3Lq^N7w&_RZb-}kEE50Q5z|pcHUj zG3SK5gS?-@!i0r?xO z75}U(|E5#DQp5uati@(v%ZYY2pFlE0eQofSFR~erWFDePKa`M8b+~!k=ha_8>@A;c z-&hi6A)$|$*ox-RML`@SpSj4Ax!PvJkPRpDPwYC2`dtY!JG;*PC9)cKK1TcBa?W3au)uu13+0p3)6>4b0k7SaH@6oJ@ZCy%-&0^|E)~v!DvWxZ z{GY=gM$kTm?S=P>6z*@%dqo0wUq&)Lhk7}s zLK|+lL(qv@xcq@*c?+mspBty7FykQNA4dXi3fwW!%WZoF?ALB$HVhB@0mXXJVt1Lt zWn;X*=Vei$q-0;Nd?<*%GB+6U@7(b?_r%~HPP{cero1zDG3by~8;IOJ$BlV+`UovO zy(VC*99(|Ao|qyEpnAS~;4&y3bWHj+P#+}ZSbKZyhSQz<;t{tA2)bO|-8oMSy_w=c zLN0M^bR|tP@u$^kb_|C;6Haq5N8d+O%k-|;8F@fw|Y;= zPK2WZlyy^ba^k;}O?kQLHpU}yzHF>gYVzJR=FQ1loA#a*ak(0G{(1MxPi19X(=#)N zc2iWD3OUcbk?trP{r_N`V+7@y$3a*MyM_lxShdoO>s&#NWX*HwYXOFG(LAnK1Vn?i zAdl|2#1tg?FBQ9BiqZA2(LV~v%YcoW$7R!KR>O-lQt?-67Y1266L>Ld5vLe^Yp6wO zWnX-VC*r|>qo`5V{}d}-9$SONWa}$RA4e8@Gs6+dor}5`>{tt&N8cZ=W``V{JOCfVVamaxeQjuX(bmtDSAJqGV z)62h|56J5~UIz}@Q}8rEhWdm4N>p21P{? zyW)pCmkKPiIx{UrY^rJ^hjS+b0YT(+wUd+X(np9UTfKhc#*d#r#U`|>tjEXGmiokU zWAJ=7CJ+oL)-!CvT2m%h^(b_tfjo0&F~lLZ92++~<4}t1HKZ}nG z(rq|3!@s`{^RxT}rLU^Q-=9d^JUO%mNy84A&n>FpYd3E6{liTE2cb0(!Hm%sQq+id zjF9>8QE4Kl*pefv)lSZxOs8z;GfgEu-kUY!iBfl=7TqK+))g(d79MHTa9OgtZ=kX z+K^;Q+BqpHKC-+!5wH4n!vaOme+>4YX+F>SB04g_o~P*F$;hYleb)JNXy`7PN&*h? zRsc(bK+5w|9-AG5`czxviL$d$(YhP!BcZoF1tk?rw7V}}u~})Km1zKwTG~93+wkJC z+t}ee%{?o;pSq`?s_+lJU#3j|5->lqU-J?ji$OU?cC*gYHu8n9s0+CLcrR&s*gftO zDA{=EJmup0A&jxI)EsqXOZdSR92b^?%b)AzDGs-ut{<_kHn`(`L*3yMlT$7k+Q+UxhSTV>aEDBHx`V z3OmdX9PT?u?zFKWh7^lbHT=@d}Z%Y|(V?mE)u%s@k+JVUyeHS&>;Fsh)zmyrAI zEs8$J;8#qm@;g0A>i^5p+Jnp%QQKoz`3g#GO z)~mcd(;Yi!a>^}YV-gY{EQ*hE-1-55fwamM?2!36FY{Xn9C{EDQ4dC{zkcGh2saz#e9^*8hQ@x72u4Lt*)il1iaX2ai#IMr^KYt*fBwD4nK> zi9};&e;K#|fu~0#K8}>Zq0up6IH#KB_)B*7!<``~JBrU$b5bhTAM&Na$xc6 z))V{F?kqK9thMd=hIKUq^*nrZXSX2=BioE&DGEU! zV4~5+$N1ir6d+PLhlm!8d4l0@ttd5Yj7S{FTG8EeO367n>aTh6^5xeqQFO35hgn-r zHPi`NjmfX~2(l((T)*z{1e{KBe9Pzti3E43m_yDhiVT512Nu2IG3!pveYya^9T=)z zULRw<`$_#FG%W1Lfa`}r`{^4(2+|~`ks@mnjV_IMU59NuBs!z#;42Mz~aS)^;JKGD$$0i7*{r;wAN*v`0oR%``tUZ?YNX zk14QRAm_1JOUPA!S0iX=_x$1OLCNZllxLSOt{)qYnky_L&HJLjf@)Z$>s#<_bHYxZ zRRqwBiE7NWLfuVnhj&k_s}FP=j%?OYu=9x?ineF^FJ2xYblXsPv^>yTN9OtM-d~wijZwZR`C}}#3>4YA>s4MHQ zz`P@)#{6fl5fgjajv19UtdJRiQ+MG4@qUU_k084<>B*;%M7R2U8J*t-L)Tk|t3KUw z^p+^om%Fy&amh>c7CFwTlcS`A4LgwkVfjqy-(8`|9+`L6*m5ltZWI=#xcJLROW8>K z_3_Z@`{EZShY-{t&f#-D!hOdoscV^|bQ_pxs7`qf$`vpyW{s3=^aM6hIB1&ccs@&N zdE`SA>;bZeg-}6HbTp2@2gCkc zbnNxx+ZN{nXwAW-U#qf6K=i`OHx75>;I!wtPax5U@b4U#85j<<+a17rUgkPeQK8;U z&QGgS1$FQbc8Gu9zI;bgyo4~O884`NT;s8&+?x{z&aL~1_x7{5uYkuv zt)mko~malw*n%3ui3RB+YbMx&HUe9JR{?1Lb?w~ld%LyiH_eBnT>zCAwd|0Wxr z`2*qd69iR2s(D;QS1L8S4=!1rp&BN!^B2rVj<^jN*xJAJHGXBPIp1B`e)en@4|P2G zRcx1ASN*B7n0DbtrebNOEKyxzun^!YLdM6x^Q8f<0%J098<`)zydWnF$K|`UOZ~i& zASceZM@njIC!mXfLz9MEIU`pi)ufyuUPwvlAw07T?T0GaWk;5fk^ohlHJr2rQ)2rM1AY+&8i+tJ%~}>||0?1CU2s1Eu?)1Kq!hlF_KW-O7I#M9?YZdQ7Nk z@YruaFgsVj(Ev*NU#<7bY@+JD9QOi4Lcya;V8IXpexMy{kLNq0B;N{O0%{&<&-Dx) z69eP3wzjOPxNlHXUn`F%e)&i)W2`0JibUYBZBO{pSHa;F!seKm7}@lEG7*vUv4de@ zEe}@O+j4Ad!}d$9<7&K)d6H^aj?TRWBUuGol`$BwGhP? zy!D~~8(qb~FhY8&9`K0z29EQmKNqiOz%GN;x>Z=<@B|Y~noThsZ+cH}OB{;wvw>y? zh4Q?fbypNmsj_PA94CJVMtwbGhz>|EZfxMBDHl1C{9YdGY&hQEg89MT)x5Xx)rds! z!sO&T*$fF=^IV|1zka2XbA9^Kpv8R-pmdsG@~O$mbdCh~pRQuw4#yH5?G{<8(RT4X z+b{tfVKv_ciCf^(M7w_DQQ*VSFxU?J56L}9$x_TTQT|Fr?dwLKGH!RC%RHybuHhQ@ zAM*od0SWs{gQ2oVbtB~O7rF>wzf=$l`bQbeGpi-g=ZWBHt}KhFDm^?G_R1>t)~NAO zo1=3Ipwpk8nI0_Mq`6{HR-vYN%ECL-&ZN$dYI!(w+y7l{?XR%LgSKHt{$xZ+LoU`` zR~IOLKAQ}Y4wV!0nFn^qahjXhf?JOsep1;$I=Ar*@wC49U@K9qig) z*0oiC;al}g@1eD(b&YNrPX+7AsG;4JOVc3CfE0nkzJZK5HnVX0qOD4AkkwGa3szH! zP#N+5;0*wS_sWX%S4ci#Y}R=4`s-`jQ9AkQX1q2yD%@q_j7UW0$V5gm%?R)A8x=Z? ztM2mmLFLNT>kepD6@_g-euT|UFxDpP8fRy-)!g|ioYB*l`6f8rA0M<1&0q`9R;}{A z9-bvV-Y>8ANB5xa&afPLa|Km{lrbS~%m;_fmG_Ahh*Go68XQWHBb_?i$({0-(-_;~ zmK4n-OMNIbJ*VVT`7Wub{>_(vm$-7fVM`ZQew>5aM75EU$)SSKicXkY%PjW(xDcif ztq-+#xFC@C;l{GayK`_M@crIy7;2OkH`aOxc&QY;kLU0Yu${Ga0p_mTnq7`Ewtx)7 zMKul~gkz|L&nU8_kf3_z#3NQvAbdDJ)wCR5woCG5<5%Gt()5j`h0QnU`N=3*$r1z- z$#35Xc_`?-Pln&PdBx&HTs}tlR-cmeB@Q|TToO7z4>dncDVB)zf_?Hg>=A=F$pwu+ z$nWpnIqo7C*CxQb_5A6rr|*BQ?|*RO{{1d_QD(erdv#{LeRZ|cnT>|G^l>w2dw*qn z)9ab1t{+Ozpb?F&q|xLYyY!!@_3&c%TX9n^b$n>BEU?U0-b8oTKnMe7Zk6q3+On}W zlcTLLz-~D1!AZtPDClx^^ZYDpv+UEYL+=}9`rTZmGJK>(k)GAaN1djxQ}^PFENG#L z{YSFA^=LfF@3tF~IoIg}koRKjPcLw}Bi}XA!K`;5XE8tl+D)7mw6Y_`%TN03v2&n__o+EO)$J z2XS}dQ#GHRLl2c8TcUe%(r-T|B#;NjaLUC#cG`OV43Z2=l!Xvy(`-CW$CKl^=xBdT z4;D`k!(NEYaoC=8H4x&{37?*3d!rRmRJ-S2)$A}#wmeb#1WHXvJQsk(n_f#_DRqpmdH|CbP zDk%vvCp9gGJN^3*IlpVA)$Z2)Vds=Ms~MpHbOWor#BoH%#&-XyV9GjQUwB*YMos)v zHmXDq9%TzK+2x(M8fpTuxzBre{WU=VxqEYq}qxAgEQ-H4cZ3C;!YR=dxwCDX4| zwqk|S)D^!KRHanJ^GJOUcwk7|5}Z0O2Zv~vp^k-k8yy{-h`fXW+0UP#^RO)Nu-XSk#gY9zHpLYQy266E5{2Z9j`yK_raq+`nkxGMOu zo!zBz@5wKBRqPjEI7@8=*x$PBSBy=09Uoc%%IhQeF^VCkfa=3fT!6H&|N4=DoD`ul@YDHfxckYxNF1!*OIbiR|0DpcTpa#VQhFm`7XTRhi(T;`T~mWM?U)yg+l z-<=o7w=$rvlMbBLQDBHdL0STL2nl@yU!9#L(NbQ&xYYJ+*1V@#km2tee!ZUCFFSM( zf&_cl8qUu=NwdTaf^VQQ0vwo6PTqFvhq&9UDp{n-haecPdw7igr798b{CvS4rTY(r z!p;*^VJEZy$*ZHkJP|Eo75}5K6Z_wj99u5@dy?ZU8YDS-NG8N{@7DBktM9q~yvgz} z7?DDDJHm{V=R_YNnA$=N55Tv$<()Hr;CRi|21C>If)i_z4UMo2SJ4|3&%j8{rnc7< z7<*#9rjn}Dk=y=*-mAqOSOw)O8zQD$Gp@euSIG~U+GEf8;k|_-feFW>9a>cIs}rLr zbn4dog=ZD232<={=5-==j#mBcxAfc}M}lmHMe~;?KzLQ&8D3c6~GCVTQfP3sbQDo%fH`3)p ze=TbAm=I=co^=M2Y=@LPrncp(RQtG}l_#V`6;ZQoLWV`+j~~L*GdN1Sz1XVNHX(r| z12d(@1S9SfNo&8hz5&t=e*cT#9fd>#z6yW56DQyp@ZDIUz-)|}l;4i8qk@&L=DhZ4 zh0TT-_?E|q9zR^9Yz|7)jGWkrf_jH>*W(Li;CSBO5Ud?(V~a&0TuW^m!8^v3>f)$7 zpzB;}hD)m!GX;sv+mlZ_nN)s^@jDljMaa6i@M*XVVI%Pw%Um`|>D^U3_b~~I^fv_1 zP?Wm+*~N*@xXylYf&&of4dhIqXom3&li`D# z6QyX>r}u`3MsQ-od{aVhudS{<>XFhu5ZHaJl9AzdIo(nG@rm79Q|}1IhZtK6(|(>t zq~~}k<%?X`~bON{6o;@_7ORG*Pe5L~gQ_GZ4hNiK9ZY~qFz9boi(_P|sNr!tK zc8pE_NN@BKVs(UqB(`v4R?z7rs^+ZXhp(273#{-%K$BI~p!H%ktl zt7|;Ae)w$qvQUqg4Q0xYE$$L1W<&J{kZu|ez~{y6>>dP**xsHUqapeKTEPQPRqc!L6?8x}imD9-M`FO22^Tb>E z;8x0-h(3R=qnL4BDuECD-1!#WcVfzlYvFdql-lS(E||lyo$g#_KWz}p+rg_3Boi{b zS*WR~2)UgYZW41OMI_^RUctW4&W`&I>ZPX_`=rZH0lkNpk7|E)BLt>DFP<$$`v;5y z?!HC?_@i#*dlPpK1K>*r0r!XEwoDpl)R^;KbIU21E%o$jCaT1cSdFxZkVR0S(BV=T@vAuvX`Q{RRtoihZIRs;80DvME^yLnN3i7&bW| zb119eOiMBLXGpAhk@)8!!UQHp5sOcGm(Sz(V*2AY%=+Z7SFZ+7>hw}6XBHVNYP1dw zet|(AnT7$ILMkvJj}#mo*`zvbP7@Lm{>n_DZxRvNS?#{b&(BXcJffqo_#WfJ1+*|` z#ULqxi~vZGPZ5ty1xxcK{u^gsVD__mESly6Gkiywc`A#;uP3W(tHorpx%Ts`+{5-e z-#l`l(L_l~9Eoozpan7Eo*5a2e(Y>)Z1oM)R^MEVIm(LGjzC3=dEa`_)?7DP;#O$@@mO8pe^^M}`s^wJcW;um; z{&~TV!Tc{OB^A7`R;j6NR1b+GtfO6-QFtr`1tw6Enx1a(()EO8KtZ9{a7}X7pP&_E zbZ>n`>du%LL~MGv(0v4%2PlGbeROwWqvrgAW?##cm#FY>-HEe< z;|ZOU!Ga+k_YeVCPOsWR{9ov(iLnLqGdfXm{+b`0n;(WVkS%UB9Szk9hQ3(TrCUL$J6~o1k8y{qvh5B zm4Cw~&bvirU+J*U{`joCp4k|gZ+eV{h-XtAp`3HNxy)N&+V%j#5G>4l6DZtOqUUR) zQ@k%TYgE4s+1r{Emk0>7hDS3nFtD@SjV@)b(Jt|--1eAL&DHf<@Kwk*P+44Bl1YL!1o=N(hOGdxqLVJIoWb&s;xHAOvV@?uQSsP<-(E zl9u-2duufUR9X1X{qKOr70t)T2WBtKphT{p`iXn>E$J2mQtEGC3_}138IeWTw{Y^A zZsg+`Vd+QnSG*4%(?;Vwty?6CD(um5iCFHl5qQ;Kw-uMY-x{73K*}GHx}sNN zKICP3xHXikcs1l4{v6rwMtD_xyoNioKJSS8$)W`9u~2V-to9vs0X0Gny-{A!WH5^g z3ts}FwzU{i%XQ52&X#7{BNP{U)%gcco3WhSH@O#>RVTN*oS?Y%7qS=qiIi00w|l!3 z2*0XVM^<|;YVe=U>PFzvZ_zOX4F0yz9qz3;Z>j)`x5zG2Gtc*-Dob>lU^1<-n8a&W zZ+t_9hO!DmFal+R2*_U={U{<*9gbZ4yRxo15lZyV=fVOj5oyN%F*rEQjanZ@R8$7n zGa)&w1OW(nm>w8FBP3i5&E85Nj>t6ezFyLPY{uzMKHL>bBNZjE{RXYVc6aXAlwi5_ zJ`)n~ZlMo*#AHQf-|@g5(aK$R0VOX1>&2l?BlFj=sxTZ#_O$BWv=PdzxEa) zl0}mi8}|p_jIbT_S(aSBq-}26H8n0ier(Cez)*Ikr(PWwN5HZ=#0JibgW1qlNK`m_ zT)Hv(QPjb{?R#F0 z?0q#_y&~1{^oFC5%vz5_Yi<_{ipmqa{5Eq8 zL54RTNlBFOf0I4ghN;to#k!c3lu|DwCFhaQ>9|ejgHo_aCq26?882|NDq&c!qhh!9 zlw1%?Msmu?%q%EAo(#et(88G1Vw`Lt>3@!7RHZ^Y!N@PMI7m5Ff@qnSn`NQW5#&I3 z2nd?(xACQOROIQZ9nC2OweAEGb86Nf6cn5G#y|iW48B_%AO5T>N5fcm^Hc`4a4~rU zj=nUL4%Sd4HwQMu{^N>Ee=xJaIfLl3t>HkJ$W4--suU7f2fx9-%*JGbNpu;;s%tlM za`fREDLJ3R6IoeSis;yx`2oKvAq->QVm>jLf9IJx`T$Ag47Z%2k zJa%a6?!TPYM=!%_Wc*rP4g;Gk6|SD$boxfsSzYCr^IlKsImme0rrE zZF_`a!_^8oI&kBY)M5vsqN32CoA+l+w+>2C1tmXpiLdpB`)FG$D(zQZCc0^`F!Y}{ z5Rq9gO>aaC=->y&mT77lypyYTI>|S=R#8!5GFt3S^4Pp!A(*Uo<*9hgb8$IXf-)6RJU0;w6N!r{{E}w5cU_d~50F(%$Amw@zP%8t)rhm$zp} z=uxj?ODEUY6L7S2TR}P{^x#$8qiZi*itb&wmQf;)oS3J{GNGv+lDvcqZ~@(j-(y4b zv1saK*BX4_$Cy}qB1^U#{Sbz&~@p` z6(dwDBGxAagYek{*OP|NEAjTYUdYV55P863NI}KlBOq)9yRnz5TGrPiA0h1^WWnX$ zy4YQB@!1WEm^)wZ{^uX%9v4^_Y$>ns8u+UfaesQ%EqYsdmST4dbG?|ZC-V7I=}*Uh zpZ=Bq9PFp7LoVD1p=fzmw4)nRBS!I8@gcXE;>f=x5+44K4n%I~K>P=M`2zs>lENK1 zlpgF&W6xCgUQAz9wRA}=F^l8cqCwNJS!xID>ieC@zx75}lW6;$hfZ81LO9?l+%klU zABGrro7=kc#Yz2LiEQVKRHh$7^>;}4yjtZmjZg^51MtjkZDY4Bjy472OMYLPU9J!I zN6>I{D~}}2@oFVW5wU!s$lWDdn(XnqnWd;(>C%#{d1SM%`y!Ef{O6kzO{VH99u~Jj z%{$Wo4fHkzY9Tj93f-SkDTW}j$$IjhKMhqs#w~BoY7QRkEx0L2z@}6EN-VcMHhJw+ z5640*ExUDgbjHbwyM}Ja6B2@bgb*H#GZ;(sM$rc9Gc&|DjsU}2-LPsG?qw^&=oyNFKyt0YvP6H*sAdm<+&mLSYP5z(eD2uBdt@^%ybhAcoo(f*cB3*@glpx=LEnfc42#22 zq(ARtb5{GK*DAb^zq|?+p*5ppvv%pv6Fe-oovBS20~GNCzNGD9Pp++Bo`|l^E3aD= zJ{i$Orx@6csa1?HjfR1H;$`CNDG;QE+-r?v2_U%9+ByF(k7+VLa*#chU6Zt0x!C%JhlfCr6l z!tWGc=$gx-Y+wsd1fgY?VqW_6B-%UW+iY}$iuZs#?Pa;d?@*gIPF`%J6wF*)h7s`KmenmJA7j*zlO^%z;ijUJ{LIJTWmEqR!HM&n(d}OFdKdy z7({f)=K<1*p1PE4W`S{0T-p!2>YrWUa$dfd6Hh`{sv#_p<|&R7?J>*$`47r-w%qxx zaRFPVW7uP)tKsYoRU+z3_>Q4!S6>13=K6r=n5dL&xe>>M079RT5SGfII889Fkn%cw zns{vbI)Ygy6IUlqVkVfH=D@H)mJk73koiwEiC&o8!r{2Iw z>aHB1t+*Y9&=xINEw*2-aNFaCQiuC2EVu7A7*ly2{GQgH;VQPrM&_y~0fjM)MI-gQ z#ya+Avgjk{<+pKaF-2}8lEcnUHF8XoXReU+cbJ~;&DxPGd;jA4VOEY}=+-U?2N2p@ zMuORW{k_M`Y9Vm;Wva9{X--w;##$c}+Q=0+DY1K{AoXU}swc7tMKCO^@yeM;nn8k1U{>!&?8j6aMPa8y8O-~4e$aq=+ zfiJV&=1~(kW$3je9W3&9Y;%7*@sq81dq=w+iSFx!!Vk{MouWbGUtqQ(xfjpZFfDJK zKDFqpADK&=df-Gv)&Z9%dm{LGoFy%Q{NuBb_9ivwO@=X0F1Y(w#QiQ zaa`oy&+6=ZQ>RC(xL?JTw(K}!b^w+Q)u`y}(K`i(w;_A+YH*NKQPo{OI=^?nuL^K7 zezoLZgW`keAo zt`0#J?BRLM5w|^O1-bax;i`}Kb#QZwWT%O3|A8e) za6Ai8umtM5M1^Nx9QMHl%y)K>-22gNy?Medz@+8_3z1B7#)Z1~?@x-gsE_RrZy!t| zM0P(`3H@^(v;CN-t|fhMuG*N=+FE;pZ#U*mwhH1>+#(_rel#@}LT1y~0ZAkA3h z*@elhqz1<`K93Oe<6(|3xBt-sY(pry@wF|yY^$aO(q6*ACRS+}V zW`>B0iJFG4pZF?QNAlZ2LOFl%jA{i&XiiO)ai!Y$goxw+bHIxa3CH``-A&sw4RFRI zmRCB#*c*A<3tZOIT%MvC6gS!*p6lAMqYJD(<;9jNS>>)Z=d~|7$F5;_H>c*uk7$%N zAt)-GA1cace@P!^46~WmoDYQOIe+LhRbhpVNL4^k6O<|0ktduKobJlCAD^5oPKIy2 zku@aS{u%lSxxY!bzv3MjaIl#C)l1O%%DeYTlxl*f9wN$9Ht37kBk~)99C5=MU~%Q#~YfMVHenCd#wq&-6s%H>%et=Z=(ku3=ymoz`ld z1d-~`<;A{7*5nG9)+-@MxqQQG%=F+}Vd#4>1YtS4b9hoi!v8A4<0#!g=JV&zSFznw zIW>B@1&W+b0)j%jIc`5Q_yB(wUe@a*(`HFx{&LDMexB%|HSrCF94lfkCB91SGqp!O zT93C%X$z;`a=awNOcibjYiMd!{83sk+Z*-x&N1hFvk|Ncw)%w`)hXCfxgs+9J%7LJ}j!a4>e)7wu((hT0xTFD* zmGoLuV>U(Y>padK*=?PIdL6^!aq^RX}TBY<-B zwzm3#fo6_$6b&?V!Xg5SXG)efuW<#LRNk2ft7oet!cgrG$JGD4Uv+u>5t;yPOv*J6 z;otJD{?1>sr}TO5s5R_+5*+Xt;`qh6HwKFGQQBFwTW708upJmw%)C(>=zcaoKE{jY zq6!jQ!9%aaNXGk=0ttgrgl@{!tPMKDVWptvq+>`F436yXhS;1*_XWFDov!6gw$G?X z)Sd!F!uNZ>d7x9k zU!MWRP;pDaib%!G%B1eWnls9M-tqR1j<#==tG_XQgj|6rv+0LacH2Ew&b9I8VN+hE zN>hvpCKV4DN5-XVUt~g4iRMQJ74EX{eB5fjhl6v6tJoYnyzqCD$HX3^mw@9lNXp{n zG{49B;7T)uYyj8)9+H;Pp_+EEN~_wcCXJHv(&Z~?nhHPSw(wSc16@y(bMA|Wr|OZ3 z&c8bM(PLC)5$9->QfWRZvmr7<+G-zqIHFD^K=!v0Fns|v-Rpe!({TaVCIKB)JK3#c zI5i#vnQ{LPi4ZSv`dOMKTV*4Zfm^c~S9KZr{(zD)LAx<~QSdFHZd-U7Xi6Y}=u@ZZ z*hBTN_wWQWJl@3G)vnOYrFESqII#UM!jE|quzgLag-B_q2{PZ^MtsMvt-hKP_)(@8@O}R~Bhm2hb4p3rH!OU(n zEMYpn_*3rCZcBKW)7bZ80WG;&#q@tkCny`AC_DWR=|uaKt25E*E}BVeWU^Ji(URib zts8%njl$}^(DE3xx6(1(qd*vgmt<6P;q~eOG_=#EkZZaS;a#pe)4WrgFP&tw4Y{dp zKZuHyxtt$#QBy%(R+3ZBa6qB}o17)QgTMPfO`*2nG?c-#@+Az`5e$k=kF`gI=Oq$b zK}`ako*r4w#sRM+&>U_P{oJ_*?wGYX_6MY81D@KELq^)`~C7OdQt?d|tTed(+t znAC__4X3@to=nHyzxLwA_ne9|PC;c|-lYyZsyufzO0oMINn7Syv6nek{MaK(Uzf@) zWJGk|W4!EG&rcyP@d8#nfsJn@B(eD}V^Y-}(+|{EM8IgwV*iap ze4>5m)k5)&8AYdaqZSv?U9>d95)~o{5&}B!8FhfhGS(nG@=#(l^vS;@94!;yg58y@ zs<(qYeyiYlS>r0huH>62s8L=4`oi+~aWe#wj%Zz_+zP3!ePUv=wU7Pkn#`>i8u(Q1 zp#o=GKmWSN^0zu=-p2oZSI_n-W|h>QIsZ{Z{BWLHps^P4KS|bU_TbI&+tHP|g*z+o zS9gO|#9tx|^S5Y1v(S3U;Hr$$ZT!JSge80W?a=;(KB0gQ$h!Ok8vS!G;X7EL{zx?b z>tj?HaJ?5$Xy^y5bGYEb`vAcMNI0|DcWXhf11y)lb}#<<_*T+9;~1CKPE<+53rfLJ zdlyEHPgfW=_tC zM)An0>17|Gj$wAA>H4a}3CMDQZmq3&@SyfoN(p8ntx$3K*-GVfBXgdfo}0_7;(1*N z2O9G|duu}|W=Fqr^MQbXdb9w<1%R7*$yzH~i|H4;9ArIqZIQ8a4 zOf*Z)Td}jp`avZ^sIZc)n?R;`V3CO2Atr0b!ZyFsmx%&WKvx0a>*ab+j0;eV9bWH^ zDF;zPFn)yJe*y%>#pPm_+tK^1NTx!|1}6{^XdiFz7K0ILXK_-@CxnSH#+sC*9ycUavzCflZZK3Hikh!)AL zF?Du|;o$73w=MD9tONuXxoS1JYmc^W{uhw4XEydwwt~F@Dk2u@Jmb`geJh>!40st( zqh8|^Y_EtB<`+bc#EOebX*g+bi&ImB5JKx);*a01%jU&}KnDMtVu5xW$oZKK_uS2; zh3brHX=o?UMX??YA^~6R)M(&Qy#4)as&y-v;=|+b`@egep- z00bG8QSqHLo{-()VNy~Ot@a395A1|xt0SoY76_pIi~IjWkxM4T=#g&MXtaRLnhU~B zUa6@L74$N97=IBn0Xnri*AoMa!x&6O{v?mhSPffWldf=lF*_A89OufiN>>(jlthz} z=^m8NtOtSz{3~_tW@U*(J$1TD%Jrw%6i~d#H+SZV5kU0#J@fHib5rUn?;)y#BCm#tMSJiT zkUAN!3#j-j>~&`5|3Y6t-@k&)ZOTvw^ksj4Kg}uyg}zKrPS)m(l%jH?hXa%)61d3K z)DCedYn*ltSfIW~x6gNqhyZ`-vm2xE%cbv9Af6(V-2bUv!M#h=Pj5woB5dXVlRP4EbJA8Jj84r@nJv|F zzVBLz>G+>J4^jK9?t{J|JJ9(I8>i_>>A(w~S3-^^0%50_> z)<(W3X`EjWMmRi0=?GkMxOsSD8r;e2(u(Y3ECUERahaK=R4OYiPZqWKcx)xMi4E?I zEOQtiI?e^FR#;%gf+J>c&96G1f1xvO8mTc*Xm`qda@xglQ=M}6f2&uxTKk2v0TM9g z+s`HQN6cxC_bJ{sR8ApP_zEW&$1GO z&ICcbOxHZRlVl!?*4t(NEY$YTF0abU2JNbD>(_0axa{PNd8A2;{}Yp+JhgfS>T8=0C_hC`b)bM+pirRK*z zW}#Il)uE@?RoR3ti%Lr&f0;QmRN_VvGXm9nQdar>VxhfMsmoz7LzG}7%sanzH@b*G zFaz8iF_PYj0400tL-F(gemsNt%&Be}^9TYj(dV~sk=He+J|AymX^W(9rb&E_0y|Jf z@eJAL5dA^F&Fk#k{k0rZPfza>hTwG1T$@D9BP>izOq54XUniMiq#qdxpGW_dp@RWB znyc3wKhGDSqkHxZ>>pTOP3wx&ZI6r9_#G3On(Q@}lCWOn0r5GrP z4yU)f9-6%U0g45K-r@Kb0_HFZ($%rj#I3nj8Ge8CwoK&YQm=HN_V(_Q1hgu!JbLs+ zUR*ICFko>gnFRKTuZv5YJ995$U%Xg|i~UZXgtJ z&iZPhwpQ6u_tg{P2TR@EV-~)_`F)PdtA#d5@}_0FaxCqHgwF3T?*~VQ4B<$=0aA|Q zjYYA`Z{E0#tXxQc)N5vpJo^s9;Z3~rGPm!h}q@v9+o5n)9IPZbpjn5D4QtDT;|c;VZ$>o+R& zhxB(f#rT9Q8yc82TO?D7EWLbr5$!rz*$x-(;}PPGxu|1o(zn|Yrozvw(a6Y7PB%j0 z;=Z+)GHR%olM~~k04b127_HFBd@ZvYtF1+Q=k=pF(LyQ<(M(C1*DIgk_lT9X{;PpZ zeFDE+s&Xb@QVP_Wew-fg^6^HMp6WA8ahi{bR6E%o{!uO%3XUb*?l=BoXre%O_-{fF z7SFVEIl12xI6Hr$k{bac_GVx<*+8x53Pn$ZT#=P08IZs__N=%1-9BFV)j;HdIlanp2&UvS#H1g^) zGBP+EF3bBB!*e6?|pgs8s zI}~*3G&@sHP!4P&w&&fYBup5d`@4OUXj|u3`+4U)+}T-!Jn_>L;UCt4%XsB~(a|WG z6Fq;^%+WRyz>d^v)64bK+T6znEJs&Tvv&v+XPPUm=IE$JgXfUD#u+lnJZR+V0<^8^ zSa;qi;ohgE{g@BA)^rN1@kgw@_WCNjc%>y&@ZDd(q~|nUOiUPVcO|ABgnUbrI(L2v zU9GoH7H>CBgl!D;M{=(5S}v@s({ajYBA@gQT4|HZp`*Kg4m~^mP0hg0 z@Z9Zhp#)Hd0fZbrOKdf|wTh=`D0v42ps@4MP+DOM2?;@xgh!-44fGCWqGWD=3r41< zZlg{BAn56{&2AXwo=APDnCrp~gRQC$9tx$YyIw_cZ=rw4~rGC1=jk} z-Ors}_-zOwVMnKbnPaiWv0em(Blp7hxk5^FjvP6jVtX16kK&;YjW8@AZX!A(l;)@0 zM)X}2VIHZhklm7%|46%`fu*qc(&W;FyN((}JWxBkAMLLRog-Wei#I0oFtiN~f2OnO zY#zIkKp9J2>+){3rNYKiPX$4Lv3iK}UpTT{>)SdIaO9Vk=>N``F~Pk0V|+NFp*pfE zQpcO$*#`nk6J2D9-eoDC&+oLlf?#XWrN2cwC7cPT$wZ*sg>-!nW&S+Bek6qO&t7DvA)KaWE1Y zQ#+!bgVGDl%g4v+yv~y}@Re_z)!zb>&i}>RTZdJ-uI=8aQ!x-!5CjAi6r{UrN-C`& zEl78l)WD!qq@)|9r8|`F?(SyLAi1xhbFQ`5de^(Zz4vz<`#+tFh475$xu5&K&fj^S zgs>9U0h#<&wmdYHtW^c-qwaCU@w*U@i5l4z+ihog-%WgutyiU9;5szKu`yoV=|0Jp za#-p8zk!$BM@-_3tB`iki>zmt;el31Y1wz-> z#>P3h?3u1HGV+w$_}pj>lTB2Bu}Ubll8Q=iPvK=XVq%O#hpXpj$4JNW)F8+D3OG#t zCY=)8h(vDl+tVwcXKHA8yg;sV(6vYOeAN(y{c56BnCaT)@kf8Nh0Eft0j;6ifP@jS zn@B}F+&r|XZ!xa_B=0PaSA8a?HcL*&V$}T^dR-8TMUU!JbBVYM7F(-M)8?1zs+`de z4eBkuaeg9$hBn5_EP-S_)Yjs{w_)+3rI3hb2@Ik*_i!BDhs|q!_6J%Rbk(euj$Oed z_>d?oNWf|_JyGfCOTvBS-Ml#7r774K_ZxBcWHqJ&;>Iqjg-x0&RPC$V!rq%U7mLPhBQQ?R7)5HIq_8YO1JJn6BZDu0*7mxjDlg0ZWo-XXnz)s$i-=5gH1n87sZP z<8&yKxE;X-dt|rkcM}Y-^``c)CMa>PAMKO8%QE4-pWYn6wurX?`Dm{)zgXHI_v>Y7 z)<2Q^`YANAb@bPw7O_t)zj^Zg(t@&5Zb!Wvm-F$4kB|&MeBRG+!!hnfF4r9Y zzWmQomp>%MO8zT#n0$nPgiZf?U+d^?nb)kVT<>C9s>`TGkEli+VDX1PnBn%@Ts9$Pec-49rN^Wn}?8Mc;5fL&Ex(C zi3}*>F%wA4HHdGB2-dk%-=tMpa9$>?n>Zfk0bAr?V5z9bB5Z41{y=$8{ug zXl9ei);~-LaFn#9$2UKJhk=1HG+!(@s!<_GXkq`;`XK|u)c`4?t>u$RYo^k5g88Di zP%8+(w9(&8#$V_1h`wmfQpNt?eH(Yt0#S&LudHQ<~*giobPpTb8MK-Xi-0WA{~Fs|QU-%d=` z6IERqfVN<(fy~3FqZ;$#|MxV<%*URBoRmRwp^hK~?R5hCfM!B9UPN7tzsX_g7yMNd zF-x6^`z9W!an>9m><2D87y19IZvz01@V)CcmUL{;nQ4&A$f#Os{@!9zVzDdyMw@!o zhpcMTsip6i0M?UsxU>C*1eZ=Gl3l0mNv2O&4RVvQ>fGS23j4{AW$eb@OzOmKQ7odl zj82D_GqW#|YsX8|f>N2STzCy0 zv>dm$k`r3n{x&p03SRw5OnJC#gq)#&H2zpmpc4>S)_?4FlX98PVO7Y_K^y+ zzk6^H2KzBon3y14iNe8|64iMDX)}-rl4=d94|Dtgxj^l6x7p?`s0&DYqkg-SZXCK3 zeMXL0D9yBu+h#&C($*CZqE7)V(o)F118jy|_Cif1H|i+Aa6FuUkIj~+tZbV?KrQjP zx@3-|XB&L#LSoy*LF^S6*XNp-WjQ1xy)*(z73Hkrl+WL*su%t`!oyFp1pH99Ao}~k zgDPxM%)~;gOC#kR`I^lF5Tp|_?>tgwu`|NzzP~QX+!&#Hew@y9`fuzA<)2LH3UgAZ zfm`}q&W41t)7h>5OxluDp0(=7+xYNDMW-_v_hah+#4u2{NZ|9{aU%`)E8m|1wuj^{ zZA;UIQ;63y7&z|iZ-vw(KN}T0xJdZ8Im&`JMMZ%zk=)vw2AL*`$H8?!X2M`2C~z-B zo%b8z1=f$g-5`Sw{8%P z=29y7e{?+PD$l^G&U*dpK>e<)Dnc#tRs>vmR|nLU7aA+`3be7fj+g&3MM*yA`%Wav z46(5fR&K##=jL}BWab9L*WX=lbI=_m zm#r)rUbT@*63*mE=h2}Wx2hM*?EFI!&=1yZg*iIZrAPVb$eoRqU4b_Ek(f9^Lw_~E zn-qKu0g^u2B`$z~nZB+TL7_S{a#umAci7uVY;z&F^P}EM51&C3hdd<(oT{2#p50>y z2a5}ZE{QMA*z8+w=*w{@29S1Gd-LH^HD*IsYr-jo zPc0DZs;`>U#GAzQ5^eBr761i*br0I2+54gNfA@)a8+#R*iWtP}_)B5L9y7WsWVNTU zyf*~l%7FE_r2q&Ps=-*EYfq)6>FaCkG{_)%@#~Z6&X{B+Gbq7PEY-kXRX7z|WTUk( zSZ=79CSzn}PK@@Ta50_~k!&nm+u2F{7-r{woYW{VpGHkYM3m{Rva_b77^(#;&rRUQ z;qDG!ynVY(sX`9sI@fGgIJbJ;C5?|wE{$^+rrLP;7wl{%e04(|S7~TG?f0mJM>3%N zgN;dE#ZI?1Rlco-0GZ8um={SOk|9@r-eJOJf4t2@df!92u&cK>(IHEDtO9W}a{JeD z^=48|mHL09_g5gpVimS$q0#-TT0R?p<|G_a`RPt#;I?YxKYA99i%Z}QrWogPn-?jM z$sa+cl#sV`YbbS2krWUNA-(JjXb)iQ-?Z2Xxy^ILs2hC+WC8Maedd@A!m0)E8mya8 z-@?Uf9c~QhW@pe5iQK~9Ff%X^h7!QQPO@NiJb7os=HEJVjGG%3`uwb>mY1(n%yae!zHsb} z;>?SMQH#PG2mZa6btiiyYri%8=n;p%H2khoN34q*<61LcH86;n{ry%4;?5VY5keWy z=b+DdmLmediJTsClK7VC8o{5@xZxhbEH(OFoR#UG73#p)fe7vO&dxKD-vuC z@m5mmO|ri+V!iq1Wb_^v=nLP0Bk`5XJyoU5yp>$tc{VE73Gpdg+f+A?GEAeD%cjQ5 z9>YC+Xxsgng@67Jl$`6T0pT)ZpQN(s{urxnoC?$m{t0p}>^knOS5~l2P|%v1j51rk zaTz1vw3wT^P^D6KKc7@r$^SJZSQ7DDet}84g+7uP{^x1s$=icR{?^teDIjk>0>2so zt4Ru**)D|tLJx&WzPrrU?ONd=ke8u7l2MFjCZn$ z4X}F^ap6Ua+@61V@-C=pJSoTUx19+kc_&;X{#I0Q*QLNRUJP0FTk@VayyPBG*Y)id zWYnR*8Te6;c35QO2Z;h#oX;o^kQ43u7Qe3EFQhX0?3g+tM4Vbuw7qP_c4dD3S!Q;G z4bh*{^XjidOq@eZcte~ng_xYO`>d3`U)kTqXHFd*9u8TXS-n)#>%v@h&%PUEd8I<* zYlL>|k~>D?5u30#A0%s>TI=CKPsE1mK*u}Jrth$gV9tKz{{N7m|3x1C7txtn<$qUn zj*}UddO0j#@mw5Xwbb`-qH}mHFBW8s{8My3IbR#MQ^aW`tl6S}mHy=7{?{jla+!)U zFJ9m{;+6AbYk3h6?&E5)hYo3KvM>^0I|dJR4>@`fP+!09{o#SI45q=sv0$YPCdVzF zmSg)E$CB~raA&*l;mYXI$nh^ng6eAS9$T|5^B9Mk=4H|A5t)K%62)pzHt>&wkWdvF z(MG9f)%y$88$;3YJRgtuf1Gb=jaaVqE7(w!s(6foMHZXyn!w6@$Cf!_*#%se*_4_{Q3 zqEz%Y@*7o8s4(JF?C4+S0Og)((6>oPpP{=q-AJlc8iA&YB){K>%gm&Vb+mt8CHRwP z#h+aNW(A;m@arG>=a&iLe!{ei&t0H>4O#3+8ftomO-{)Cdq_&k)Y^jc*OB^Ro`Agi zrNurQ@3z3Bhpx~3tV{HI>IA77qQ*lBjQF%>;_s5!jN5ID%`arBkk~|n??OCHF3&Ll z9U{dO4EK~dSdBVXSo!t2GkKPO?kr*u@C1XG-`u#*wQzO7#oPhpqO!fE=6CO7Qx%Ig zN9zk#yTYf*L~mnbCq^LoH13Srt(|P%yu;~TptJtTmUcU`U?sJQlQfoZ{-DT2>5XYe z&rCgMxqe`gpqN0AmApe^>*}CcSNSB`eL~iFjoB25SWXl!7Ep>0ztJ}3vU#Vge`F&z z&T=Oz=Ta?${Au8s^%&1tVwTG(Jzhf~F9*tU_#Cjg%2KKMI3aQws!JDhYC0p#^ObjQo9m`OK;BXQv~W;=;dwQw=hap0Zce9kIOi@t2NE7U%1wR}mfN zG-YKZ)uTd$t2p6gdng>Vpa+A%&K$qtXse(&U+^}G=xr^nk6*YkMZsu z?nfRfWA0hlTIfJ*K;PHb3akZU`ub1Q{fK=8c_G`uQghj^6^6NJZzfLM?(YRkBG>FA*x~D zSAW!da((UVi*aK5oMSlWE7%_{-G-QfS)YfsPh=N@a9U&e92@#G&ZqcnSwNSPOIHj; zI3Iu08MQ5(H~5UoftRd46F7CSk)1o(-%t51LTj3tb@I~F-??+=3$Gm?bE6s*uO!Wr@ zNW-(@R8JMbQCt%rL)NZRRk@FZ>$5s={#lzSv9XL9BHaB3@CgW74!wdb;Gu!f2%pms zGRWDR5aBjHU}7W4mp^{yrw%RVdI);(44)k1qNPYi zON3CxGMTR3lOpC9o1CcZQ61b2O!V~enO&OxsLJ8!4Hfg3U^Df6p)_jjsxB>3` z#h&C=gM|x2c_xIdVRQ>e{o)uz+n2G)B_W@iZM-Bz>@nO}qAv&uJ7PKOCwR*_9M($Q z9bsz_^aQ6HB}#GG7#eT~t4_y+;h`>r$&rMrGK=21x}*7OH?J@kNvwzBUCIy1$;pOl zV8Y$p-)72S8p(3^8vRqxF#a56Glrp9C9gu5+W*zWv&C zOY+VM;( z;D!B~%LY|}03mKEol$N+;#SIK1x=f_K=_}c2!Emte7PT)52_xcv?mHhG_eR}eAuKzn7nYZ*j@XRI{tPZv`WYQ zB)PPgXx1BjfnUEq0hfQT-zW-HFE*WqXYlfMoSLz*D0&Z!j!m{}4-4R}z%;w6#A0b( zmu8^_MzYyx=#s#UE_*pK5X#SHmXIv&BZp-0^Y;GH)<)CJ13Bda0s{GuoGoARWwik! z<>}=$ed6YWa>K%#V|HoDGbe|HyVy+QfEde(n6K|EPhj~ol@1Q%uuToy7sb$h$EFPL?JMJ*%VBJXG9flFHvOEx-Anb!u8{j5q zU}c^kE8SUM$S=wx7mI&0x=#ds126N0t{G=$8H}c|PSdNWo4(~X-@G;75}I7*TxdP` zb4>|tu|xe$PtrADXEcnB+k&5Cm!8)|x|~;Dt8v|$y?X8DJSD5DrlR{uw5I);s)I*9Fwo`J26}guG_b58iiv zL~)po0ctEZw(+n6Mg-jBYzN8&vcdRkhw?+~X;Bb5{jy1HXK z+X;4^F|MxeGXIp7+09x6%XSD1T1iAk04OeI&MhJ*XJTruV84C)9{Flb$F-N-sD};O zAd?hg5!T3o5G_$mtHT;TTjbWWJ$pifTu9l60D3J!8S`%=1!BPvIPdiGS67D3IbR2@ zGLuQeppb}&CP?zXx-vHC7WnNPyLxGtbCO=FEaty^S3J1tb%YJ@MlOx&mnl4YGzJ!y zIiIJoR@;3BSI*4P8X83Y^^+N}3HPq5;!Gtz*3yu9$G&wf%3&>_>OKBynS>;JwO=7C zbPl+>pV?{P660n&n3)3 z{Qw(-gFUOET(RErjPOaWJ@%HxmbKMtJy3lwlc-g)Y2YhdJ~vx@-o^%imzhpXDD%j{x z#G_`%r#N; ztREc>{x9^T@_GlcxCy!aF_n{FOrY4E@hXB=g=|tfI{&35eT4G)WKd6QD5YTZNFluC zs|+!+} zPtdq;-@WT55D$4mrDB1kp}zO{e5-k}dQu9Fyyqc|1UfY8?5O4AWrSvTHXlZw4+(^I zM9UfII`R5oQ%D;`smWR`wCioxU0YgRl}*zWu5g~fWZ#;4&wiJBM90!cSc=SqbM<*S z81qGR>%CvZ+Zg$GMm;x{!=c|8pWTjN?YqbD=V*Ldl3j-w@~u*pll{e5^mJl!d_uxj z;BnGIz3A^2nNCXm`R4Y~bk5h9C4W@~`?j}pt2f?3 z>Cas%xd$ubf-2(hHmEGaY&$t3R8=W^6KL!i+c%(8W^F*wm(vNC5eR-yfB%Ki$E{!G zv#3HQh(=STBA+I@`%6S}h1;5pGFWWm1dBZ;b^QBX7G6*>`-i43@l?a+O&TP}LqU6m z>_h)X=@WylF0X-gu9wLzsn0`mlq&C_g~^+IRcn3EcY4-%dWG1eiwlnwP=@C|vf;2mq-OAO9(+_(y^{qVi+d_%E5!*bL!51%I z?}GRG=Kgy-vE52sWNQLhgx~Pg)u!+Vu3a?>$b`F4CZ{4xfaCBt);#<4+1R{}tkc?iU+nO0S#J*>OS!yeMcSZM3c1)|ORiEx42Tzu zJ?JhtD_58~xZ;(%*cQ#63NkyCYFhW|i)y387Ow!==cdAb_7pkZ>5LlP$HtQA+~IZN zsNUS8V-)cGvku7L*t3Zji>Aws1$a%}>?)b~$IfAaf!&#$BZY6MZig)$MgGmGZm z9}yM5abgn>3{Pm4)cA?{TFUZV2jGW^3mVaIkzOXPl*F|BNxoTYgV`f0iCk5W_GvI4^n_dZD31p6^dP zElBuq!meOiTbuq^P=_hX(Yw?$RGUcmM}FztwPPJ0{H`o!Fyxc6k&Cdp><2$zJGEN$ zF#FWyU2wJt$Bbz0!*jsL4YWqs4C?$`vJrDvckm1bNvl2OpB(=5KrVL=gy8NO^$ypE zlPEZef^QR*tXhHC4?c|^+0GB)jBLSKJo+pQUIn-qP0X-|#lC{PCoPl2kLm(_n-%eg z@DcOd#8<6heEO@MW2z! zKW3^tb^r=N%%Zq$nELa2#9dB2Dbz97q;u~)mYs7xn!5(as+mC|7fn;OPw?u!V7}U5 zbK*qOoozLUHTE+8ron0F1t}8#hT?oZ#y3q2`^5b9?`8GU)H3!({h5$~wzPks-s14W z{ET#&YWhj-RIP#Sae$nE*Jx_uLEgu~6^Et!SiJjuT6P3^FgMvx{np96x~TS-f8r0A zH^m7zhH7MzNIPrFtVjozP{|cH>+eVaq1>->E$vrJJ1oL<$=Z6l|@Z=^FHcU zG*vyOXg@Jhpl#Gzw3Q;}7Gqby!`#@L`Z3IGZEGQw=MOpDTf!vl&^sas6&{~YGMAh& z;El33nUj!VbYp~ra|XU=H5QRvvLo@Wnoo#IgZ^*Cs78{yZn9-l^|y*otWu;>60NXR z3H$ZRj_;}cfu0sx{8gQznN37Qs0We>KE(3t%@^O`T(JKVD^HsmnQ_C#bTYjg(V`y? z0;$7ZT_ z>=BHk#D!h)T-rygwPLgCh3Oz zeO8p`eeqx=)U+r21(6X&MJtvY+J9EJE-AE{-^fz&#b@%=#bhl#Mc(W`Dah{crB;}e zKt1RdY_&StrNN&1?J$J*^|w zl*R5JZrAa2Pd4M9gtS;6)PMB~N>ltP>+Zzr{@Np;r$0*}7;X!i>qvHw9*GkJZ9|Q@PBkD-)hVuWGWvP5brsPt-gx+ z<2;uHfF2C%Rk4Es+HhtYrrY$jg|`eg$YBImAWWUWY59h~*i%7aLvp2?SaGdXF`9# za3z?5`b!!U_x{rJ?wNW(Xi^8?y@z~2tN9;4vHT13RiwpSUjEYMZB_*ORtLeZ`slfA zk|(RT{$)qI^#@F(pEc{n--IlERDk4fO0_&3w5(A(q1$)scWP?n27mHAcn1Uk!l=`6_-r>rdn?v6 zY}%KA$MdPWf6}Y+{hCqCfmH=MX5%(R6!Adw(zPg>%W7?0Mh#hr>L+QBf@c_l9Hm+L z3yo|fTkmqh)(sAQsNAw*i^8n$ALEV-DD`fLbzKPN+U(4K0K*gQbct3WJH};rue|Pa z$D{wi&mkX~P%nqvyNQA3DQRox&T9%p}0qKWMt^YuGuPGWhcGq$h`i9(;%4UI&UG&Mci z(Ih2hU|0HCQ@pwju<1+08;>|%RQn>W`3KFAD-@(RVcU?4~>J-*6jU(4w-*6T;T0-`?^9@WC z?{Mc1k&5t!e1aU`!yNOTzNy>?6~`<(Ym6u0@)k?)CKY}am^=OK1be2IW>Eb8Q-DE`FgPUC^kN<7vfj|~h_0HR`jYxHs zYbc)`?%}}@#X`S}A>)T+@6J0k;^Ute->7wcu$-rklM&J>tGEL>F6E}q12ifE1p?nA zm-Gi{)J2l1UQwFqq5m0fIS4 zhNryH?7`B*@*F*xLN;vTCbGcz-$ z9{M%l(9+S7tW9ZG<%&`+(FX-i9QDe#pIi4Ej2=z5a6cvC*PV8-bZRz`@WxHF&KOWV(j~We@xs+{e0E@jRc?(P<{|UX4|B|dKg_Dd@ z_Bs~>qK*M}QHx&|HL6}$UfKCTvN+ljHa#st$Q{8Zb#r-b#uq6_BH|aj`&6exWq&`_ zAzFp2w^CC4N3DR;H_eb073BlU-qN@GG|uJLZ=gIbxUjIku1_w+WojyZti(2iP0HU` zy3ZnJ0JZmmFwps#Qs(=d-$({U_ACsh-icpA=PG46jx)g{rT@JDxe#bE{l0?m5gly3 z4$`SK{`Ck}pk2{>(#i?pz4ONeLg}z`zLjUkCE_pX#_Tm2gMl>R>>m5j`p}b0 zmx%5nMe9-K8$7LTnUpe_^Z3WX?ds6Hg&g?~IeZpZZ|5WME8RCaEZMq8fcs{-f)fqU z-8=7M)<>s$YTgINo(6be5j$-WbfyJwLwN-jmEGE!uuu*W0X);9X{HWPM zaYr=7k&ckai9GZv#%h@OYj*JAE0ga3a&|Dm_mz>a+fpZ?`WjO0tNp*t4w&2>G2`S? zPWbB~wnCVs7-vUPLP9D3#SVIfHo8fDiYfoUAP`ayi8eTcekNG@&AHbeT87^6 zkouKli2JFC<}ZyuA`sJ#cC_mJTajSXU2XnrfyYh%JoEoL#9F~g-}l8X+=;cniV_06 zFn4=xuL^k5Jos<11sK;gKlgBC!o|gf0OMcD0>m?mi=yF7+nVdEtQUX&FCd8Fs;cV!joQ^S=Z+|zhVEK) zMkc0~eVdd9=P~{CR~gr9U|3dazZyEA3H4_Du%p}HB`z?T^h)nHn(oWw%ose0TmQD5 zvmb7GX9TdU;`ihE^>q-v<{=rWoSLDDp)fxZWeAL>u8<7CUc0 zke&{YCv(>t^*?&j6AQeC-YORf?{>0se>!ZuU&Q_S-uShGLlgmf$|twWXsa&6HSLkb zg#-b&NF9a$pAs7eXP*Z6u5cV3FoHl^ze(?5F}+4fr_SL6Y6BW-Y=Dj3dK8P8YT#EG z%CpBNc09;i?Hnh_Iv7|FUYy*W!DrKal%-NQb22P@pX*zIqng@D!NwwnaW2}DfkuZ3 z_voXXc()tV#)b)E%;Zy?^}BnVdMfVf;$d&J^f?;UMU#~m;+qt99kzo%U%6r!milU9 zc8Ei&!e7%Y{H5a3isggtyJ&+r-8{Zt$&OEVXvQ2K_8ouHia0#9-CGv?{xbRA!7k+~ zFK_8L&C6K(NEk8W1Jgj8(P968hLG6BJxY&o56rWis!Y zdSsW%x^##Lz>*e2t4SJ$}EBkNl#|J@^X{i+rfK+(`bqsuw zaHiNK#k1XE=4`c7^n=_)MrP(jRMEuhs0Zz6(XUYjc-xGR_V88)Ga^Z=i;LNz-&z11 z$&QYW8}|07QN>#6PB^D?y3?mY8Rg@9Z?-<`IPL6VL~yXmugijjj@H)Rj?Zt3F>hkh z-QPbSBrPUeD0Y{aA6(;HD1haMuuu3DAD!S9#QATo^c#WFhaUIlsTHJGH?4l{<9_ev z;K0R&^K924C~htw?6#AE(!F=778a_0h>ztVk9EO}!NiiJ{_sXol0|B%R}68aSV&xz zMT^&l;izX6nH)0n9 zUty2)MDZ4(qvML-z3(A~MukKX4L#hcI`f>!=~~eO_2Vjebf^PZS^F_gGEi`+4OLb(!{t&mm#{Ns;HV zMuS6DS`^1T`*4=EM~s%dFS8*+d!m&7XlJow;UrvkZLG)*@&>Gc-x_Q5k5?(qhUEX2 z=2_9@o>FWya1_@A6a-mQxt&^A9+>udKM!aPva8c%wK}4!<0AMh=bqT!ZLvD3yM{)m zUMc{d)58MG$7l^@0eXL)BUE|p2po?MpSMJ?*)Y9IcWNog)#9)}dE)GN(1N<@#suR% z7r^(5s+AaxpSuof;yvDhXoFt8nVtmBe3-tl$Q3@4wXW-YjJV$ zh$ZXu$+|SgqWPAz(;is`I0&n!N&E@n2}Im>8X)nytdB~EnVM#v+Y9Qlb5FvukAC^` z^y;Fhgaif=mtC^bPN*-?XPcYBf<8dgpppcP26I5uDwi9?1B3pM1@;#ngNsm?&?*B? zoibGR#(`H52asy>)bbXq`zBYM`53eaX=nL?Wo1AK{bTh0ht1QbgF28DFzW+ z)MglcZ+qBCp-VMiWe~GWlQtI?M*fa&3TG7l{CjooWBv^P+%PB?Q) zMsjo~%ZfshxA)65ZHRy`DPe&OG#?DJ;x6C61>~oX+pf|_~K&jPr#DU}lbU_h#eQ51!Aj5*w3 z4dns#kQ+dqL2A7^g5m>{OV7xqq*TjoiQGsdMvIYga#YL91A=>g3$VK|nCW{KQYCs| zTA;t-TUyHL;6=CnGHAHO^;YRe_=y_^^Y!PJJY{DaAnmk~+hv-Rh|4CqB8%3=ctS`# z3^#3plNdzhaMWxE>Z)8_T~V{0bSLHTQM-*>*x0o{Z{Sgab=qh!tFgQLHn1bMrjtKl z!*R&t^aY_IkX5tz6p$hmdg!0!Vs3t}20rcZtv&YVJ)C`Jp3dzfPN(h0B7XPZzjnKx z7Fy~wPX+hpGowNIaPPFj3~IK40jF|pO4PT{61D4JycNiqgMDY{-u~xl;p-U-!u5?> zp=(w_r7^@0x5AI>)g9(vQNC$fXE*bFLB&au99QuEf{|dYISb==cJk0@9kE<)(mSz2 zorbqa%eCjekQb2s7kCF3b$_fx4fbYn3;W;-L&|(rr6XjIwv<{e{=Pj%*|M&={QN8) zMt8{^xXP9gTJb$0_LAhH4v?-n?9MI*kxSOJwP9#!X{AU+G(kVo$uUwAjog<+^chf& z82IkR#aOZw(f}*nXn+1UT{UN@aw)cp0cf0;1@9>9uYY;b*Mt-M$s9&bumZvAjnd63 zHYOWOg~e0a4n|0nh)gO*~`{uWHCt&!b6DIIjc?r8LyRa4k6MRU!!j-r?( z5U@F%=B~C!a`%o6hs&mRZo-_QBZgPBmt0bA*`zh3wPvE(3H3sw=i`fMmQBUJbEgF= z2T&fSsi8PNV4>=fTUyG+>oq_lh!+Z0cqTv2QLC0>LiT4UKvJeQ+$F}w#`n5%NT8Fa zZmi80_8Yq!!$F_AZmsmCxdA+6v(h)SAZgEFt6SgD0KFTHb=Njv#|1c3-4swV`(ve# zma|oP8lxizf36SSTpKHlyzGOUL5l=3D~iM7vwfw}%!&7SS(2rN)>tFx(JR#z

nVGQ6D5)RdRmjSS%zirQh<*FLMjrjPRo-rg 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 diff --git a/content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals.png b/content/learning-paths/embedded-and-microcontrollers/uv_debug/callStackLocals.png deleted file mode 100644 index afc60d58ec3996918632a0f862ed9363ef448ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11960 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