# OTA update for Qualcomm Linux

OTA updates are essential for keeping devices functioning, especially embedded systems and IoT devices.
These updates allow devices to receive and install updates.

Qualcomm Linux uses the capsule update mechanism for updating firmware images,
and the OSTree update mechanism for updating Linux OS.

> 
> 
> ![../../_images/OTA_Introduction.png](data:image/png;base64,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)
> 
> 
> **Figure: OTA update for Qualcomm Linux**

## Firmware update using capsule

Capsule update is a method for updating firmware on Qualcomm Linux-enabled devices.
A UEFI capsule packages the firmware into a binary format.
When the device boots up and functions in normal mission mode, it downloads and deploys the capsule to the EFI partition.
On reboot, during the next bootup cycle, the UEFI processes this capsule and applies the update to the device firmware.

## OSTree for Linux operating system updates

OSTree is a tool for managing version-controlled, atomic updates of Linux-based operating systems. It works like a
git repository for the entire Linux filesystem. OSTree stores snapshots of filesystem trees in repositories, which
devices pull over the network. With OSTree, updates are atomic and support rollback, so an interrupted update won’t
break the system. This is useful for IoT or edge devices that need secure, consistent updates that can
be rolled back if something goes wrong.

## Use capsule and OSTree for complete OTA software updates

To manage firmware and OS updates in a single OTA system, use capsule and OSTree update mechanisms together.
Capsule update mechanism handles the firmware updates first, updating the low-level
firmware. After the capsule update, the system reboots and reaches Linux OS, where it checks and applies the OSTree updates.

Qualcomm Linux uses capsule to update low-level firmware through UEFI.

Following are the steps to update firmware using capsule:

1. Create capsule: A binary known as a UEFI capsule encapsulates the firmware update.
2. Delivery: The system delivers the capsule binary to the UEFI by storing it in the mounted `/EFI` path.
3. Processing: The UEFI firmware processes the capsule during the bootup
cycle, and applies the update to the device firmware.

Qualcomm Linux uses OSTree to manage the Linux OS. The system copies the Qualcomm Linux build-generated update package to
the device and stages it for activation using commands listed in [Linux OS update flow using OSTree](https://docs.qualcomm.com/doc/80-70020-27/topic/ota_update_for_qualcomm_linux.html#linux-os-update-flow-using-ostree).
After the device reboots, it applies the update package.

The following figure shows the storage view for the Linux OS with OSTree.
The **Runtime** view indicates which directories from the **Storage at default deployment** are
mapped to the mount-points at runtime.

The **Storage after creation of new deployment** view shows how the flash storage updates when the device successfully creates
a new OSTree deployment. This deployment is newly created and attempts as the new Linux OS on the next reboot.

![../../_images/OTAupdate.png](data:image/png;base64,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)

**Figure: Overview of the storage during OTA update**

Following is the list of Linux OS and firmware images updated as part of OTA:

> 
> 
> - **Linux OS images**
> 
> 
> 
> > 
> > 
> > - The `efi.bin` file contains the UKI, initrd, and boot loader configuration files. OSTree creates a new configuration file during deployment. It lists the paths to the new kernel and initramfs images copied to the EFI partition.
> >     - The `system.img` file contains the rootfs, including key components such as `/ostree`, `/ostree/repo`, and `/ostree/deploy`. When a new deployment is created, OSTree updates the filesystem tree to reflect the new version of the operating system.
> - **Firmware images**
> 
> 
> 
> > 
> > 
> > For information related to the list of firmware images, see [GitHub](https://github.com/quic/cbsp-boot-utilities/blob/main/uefi_capsule_generation/FirmwarePartitions.md).

## Capsule update flow

The following figure shows the capsule and HLOS update flow:

![../../_images/OTA_flow.png](data:image/png;base64,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)

**Figure: Capsule and HLOS update flow**

To update the capsule and HLOS, do the following:

1. Copy the `<capsule>.cap` capsule file to EFI partition, which is mounted at `/boot/EFI/UpdateCapsule` on the booted-up device.
2. Set the EFI variable (efivar) OsIndications flags with `EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED` and reboot the device.

    1. UEFI identifies that there is a capsule available for update from OsIndications flag.
    2. UEFI authenticates the capsule and updates the firmware images from the capsule.
    3. The status of capsule update is updated in the ESRT table.
    4. If there is a failure during capsule update, UEFI rolls back the firmware to previous version.
3. UEFI successfully updates the firmware from the capsule, and the device boots up with the new firmware.
4. Copy the OSTree repo to the device. Create a new deployment for HLOS update using OSTree commands, a new configuration file with count tag gets created, reboot the device.
5. Systemd-boot picks the new config file and boots up the kernel and user space from this. The device boots up with the updated firmware and the HLOS software. `systemd-bless-boot.service` marks the new config as good.
6. Reset the TrialBootEnabled flag in OtaStatus efivar to indicate firmware is good. UEFI checks this efivar to commit the new firmware.

The following figure shows the firmware update flow:

![../../_images/OTA_firmware.png](data:image/png;base64,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)

**Figure: Firmware update using capsule**

To update the firmware using capsule, do the following:

1. To create the UpdateCapsule folder on the device, run the following command:

adb shell mkdir /boot/EFI/UpdateCapsule
        Copy to clipboard
2. Copy the capsule to the device:

scp -r <firmware_capsule.cap> <user>@<IP_address>:/boot/EFI/UpdateCapsule/<firmware_capsule.cap>
        Copy to clipboard

    For more information about `firmware_capsule.cap` capsule generation, see [Capsule generation in UEFI](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-4/tools.html#capsule-generation-in-uefi).
3. Create the `data.hex` file on the device containing the specified hexadecimal data:

echo -e -n "\x4\x0\x0\x0\x0\x0\x0\x0" > data.hex
        Copy to clipboard
4. Write the contents of `data.hex` on the device to the UEFI variable OsIndications using efivar tool:

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -f data.hex -w
        Copy to clipboard

    For more information about UEFI variables, see [Update and recovery](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-4/capsule-update-and-recovery.html).
5. Print the value of the OsIndications UEFI variable using efivar tool:

efivar -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-OsIndications -p
        Copy to clipboard
6. To save the efivars to replay protected memory block (RPMB), run the `uefi_sec` app on the device:

/usr/bin/uefi_sec 1
        Copy to clipboard
7. Reboot the device:

reboot
        Copy to clipboard
8. Check the ESRT table entries:

cd /sys/firmware/efi/esrt/entries/entry0
        Copy to clipboard

    1. Check the output of `last_attempt_status` command. If it’s 0, then the update is successful:

cat last_attempt_status
            Copy to clipboard
    2. Check the output of `last_attempt_version` command:

cat last_attempt_version
            Copy to clipboard
    3. Check the output of `fw_version` command. If `last_attempt_version` and `fw_version` are the same, then the update is successful:

cat fw_version
            Copy to clipboard

## Linux OS update flow using OSTree

The following figure shows the Linux OS update flow:

![../../_images/OTA_hlos.png](data:image/png;base64,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)

**Figure: Linux OS update using OSTree**

To update Linux OS using OSTree, do the following:

1. To check the current deployment in the Qualcomm device, run the following command:

ostree admin status
        Copy to clipboard

    Output:

* poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0
           Version: 1.0
           origin refspec: poky:qcs6490-rb3gen2-vision-kit
        Copy to clipboard

    The \* shows the current deployment that the device has booted with.
2. The `ostree_repo` package is in the `<workspace>/build-<DISTRO>/tmp-glibc/deploy/images/<MACHINE>/` path on the host development computer. For example, `<workspace>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/`. Copy the `ostree_repo` package from the host computer to the Qualcomm device using the following scp command:

scp -r <ostree_repo> <user>@<IP_address>:/tmp
        Copy to clipboard
3. Pull a local OSTree repository on the Qualcomm device.

    Following is the general syntax of the command:

ostree pull-local /tmp/<ostree_repo> <branch_name>
        Copy to clipboard

    To find the `branch_name` for the command, run the following command:

ostree refs
        Copy to clipboard

    Output:

poky:qcs6490-rb3gen2-vision-kit
        Copy to clipboard

    Here, `qcs6490-rb3gen2-vision-kit` is an example branch name.
4. Create the deployment on the Qualcomm device:

ostree admin deploy <branch_name>
        Copy to clipboard

    This creates the `ostree-2-poky.conf` configuration file in the `/boot/loader/entries/` directory.
For more information, see [Systemd boot counting - Successful boot](https://docs.qualcomm.com/doc/80-70020-27/topic/ota_update_for_qualcomm_linux.html#systemd-boot-successful-boot).
5. Reboot the device:

reboot
        Copy to clipboard
6. Check if the device is booted with the newly created deployment:

ostree admin status
        Copy to clipboard

    Output:

* poky 1e8a01bcc5cd9b3b34043db494ddcd01ec5c1c84312479a55253358a92250fa3.0
           Version: 1.0
           origin refspec: qcs6490-rb3gen2-vision-kit
           poky 643b332dd72b345b5040a1decbe7e04bd2d208a04ba59417aa667c901c485504.0 (rollback)
           Version: 1.0
           origin refspec: poky:qcs6490-rb3gen2-vision-kit
        Copy to clipboard

    To verify the newly created deployment on the build host computer, check the deployment in the `<workspace>/build-<DISTRO>/tmp-glibc/work/<MACHINE>/<IMAGE>/ota-sysroot/ostree/deploy/poky/deploy` path. For example, `<workspace>/build-qcom-wayland/tmp-glibc/work/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image/ota-sysroot/ostree/deploy/poky/deploy`.

## Systemd-boot counting - Successful boot

Following figure shows the systemd-boot counting on successful boot flow:

![../../_images/OTA_systemd_boot.png](data:image/png;base64,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)

**Figure: Systemd-boot counting on successful boot**

To manage boot counting in systemd-boot after a successful boot, OSTree executes the following procedure:

1. When OSTree deploys a new configuration, it creates a configuration file with a `+3` tag in the name, indicating the maximum retry count. This allows boot counting.
2. systemd-boot detects the `+3` tag in the entry file name and renames it to `ostree-conf+2-1.conf`, indicating that one boot attempt has started. After renaming the file, the boot process continues.
3. The `systemd-bless-boot-generator` creates the `systemd-bless-boot.service`, which is set to start when `boot-complete.target` is reached.
4. The `systemd-bless-boot.service` marks the new configuration as successful by removing the counter tags `+2-1` and renaming the file to `ostree-conf.conf`.

## Systemd boot counting - Unsuccessful boot and rollback

Following figure shows the systemd-boot counting on unsuccessful boot and rollback flow:

![../../_images/OTA_boot_counting.png](data:image/png;base64,UklGRpIWAABXRUJQVlA4TIYWAAAvSwUgEOfiJrZtpzrEKvpXgwUcUFLCjzeea8NxI0mKVMsM/ntzJpwH915m6L7qcRvbtqrs74ZL/53QAxGEFrvbuQdB27axNAKFUAADc/4wTmABAODKmesPGWjWoBD8KEuFJJJ/6T5Io4VQSRotkIFmAB/gAApQgAAU4AEEII3HdF5/Wy8zpuiCXJ8/POuFzmONl/qfAi/IGeCZ3kIm7P0jYSKpCJVQxF/8tWSg95RPgzR9pBz0FpEbkRuRO3lvuvLA0pXv9ge28qnpXhG5Y7Uml+gtFTy9ulwlB+XsWS9Cw/5ZuJezZ72QvdS8c1MxcHV7T5f73TdtduDx1toMbe3I8V06fxvwsG17G63ZtnEeXCgonUlvRhAbB8WZGOcSRne7ajr31Uva//8h1nHskmWNxgvn3DcR/ZcF2VbYNodELanqPnPhSUKPZ/X3xkVpee4/z/3nEpJ33nvjcGFZ3nzvnVTeeu9wkVneeyvt+4PD4eUXbl5YlhdeORw+SPp6/3CH/e7i8jd3Du8l8C77vsj8OhzeifPe4aWbF5rlpZRfDodbl5rcOhzi/9bh9ZsXm+XO4e04r15u8urhnef+c1HKi589qlL57MVc1KP5Pv84Dx99fupi3s3Dg1PvcQ9vZ+H2yQ+WBzXU79Ms+t1+WEP5bt79/NQ9ykcZefGJr1R5cjfTd02a70GW7wqoeTcHn/qTL19k8T2P/cmXhxl46E++PM7x9YU/+fJplm9/+uWjfHzmq1U+x9RwxPjHOfi8imLe9r6GR8NPatA4GajBudEn6/m4BvK9WMXB+igfj+rFo0xUpfnq2DiP8pyzV/Fcs4pUUb+HNeCjHIP1uf8895/n/vNMFkuCTu88RhqlftfZjDRuD9ldwEjj9pD9/3kYNVHvvTbeT8FbtERm8h0RdYtRhhnlKFgTjOgWJk3KABQ3zbuGqHHIgIGI9PmiEP1mswhEY1Q/3wXTovpdlzJT7480eEtu+fnse+W80eJEzSm7GDAsNIsNZL0N1mgzOw1YzBpo4NYY46UB525TiH6dmvxCRD9hjXIx/a5LmejofR/ci/Wm8b413o/dzOmV99603nHn4pl1R5oiFW7aMdg50hEYcOYoQ7+ZbLxiWm7NrHqg3/VqpaGW+YimEU5Fd5P3nIZCaQSaY2lmOCKynNZwaxbLgQFnjiL0C16foxeTpH7ca3vTAP2uWXeZOqPYGe5Ac7DDdtRJDDMtFVYEOhgi8eeQrfRLJaJfMETir18Zw30W1QV3oYKn6cfghpy4JqYZsycqW+v3rLjSNODEZD8QzsxU8BIt8xWNdr5Ts58WZfg9GtNHiO/CToGPzJrZaA8NUN0Zowj9wC4R/bg1HbmIfs/qaJrtsXRuK1YRtbzBZSSVHpkraniAUTtHmQypBqANMaflTHghbIAlOl+VQvSbm8UYGqP6eRauFdXv3OJaWjTIxkjjGif0jItVpTe+vHLG1gicnn5nllmbEM5rdzMyBHsIV2OtmkWEtqOlOB5mPclzDEukp4WByGhAw03zLGBbnM+ocOFMRMN5xqlhJ+LUsOtAFxStChM0/HTLkaGOLaNwaLlFp0iLRRgM4G50a4gG6YS0UVqu3NgpiBBsPoelehmhLQ6BvXZM/o5G35OeZ90w0f1IADYJJqxZDGfx2ZaOZ3xjF0n2FGv123nIaIuxmxFMzC623MK4WbdgA92NVmM4AggnpBdr5MqNfQIKwe5UuNEqIrQ5/BbskSZ8dyHEaccq3LRezZ6paxrReyxd/+X6M/IoCBl4iEV8uYUGQHeju3BK5iSd597HNH6fEAnB7lUkQjvYwsoYEFpT8PoMdjHCCI6fHXvZUYCtwe7p2hOw3CIB5G4SACs3dsouIAQ7/KnpQYS25MhMSyUUybAYIrHPkNiRlQSAUT4B5G6SECs36kRDtJGx5QBDsH2v6AgitDkz9QlUt+JMdLrPka0dbNhUCUs0Ruioejga8lAB+U5ily6pQnMizN2kI1ZulAzZDfWcYmqSspmMLQcYgu0nUjhCu9Victwqh0nZxTltuDWTCqLz/ECsBxWHJSLq5iS0SabVMx7UfeVg4+g0GNll5ZRER3MqE9mIzrVjpDEjFZDvBF6IO6sOk7TcYuIyIXeDaLWAr9yoFRHd1bRYMmYxtiBwCLZXHY7Qnthxu12MGnwMPygyBhBiuVzo0Fq+kDgUzZpseTg/GZ02PPJF5O0HBj834gxiq6jHc8KJy1cWqU5FWZlZNkLKcgvfiktH6W4k3AlJLLliADmChbMaRGpbFvXFYzoH73nMWCSpLoz87EzDDGiIyCK3ojvQ7eSbSje2zDUCMx19gaVA+NJuITCbUWKzGrqREbrCJiEfm7tnVxp6ZAIHxAqcuUBE74tHDIr3HcmcLPvvjBtBxBYOzLxZtmCp8Jk60UZBTD7L3lG0z/foUqThR3gb2rcJSK0LhEdeZtKPW2OmJP0cNcHe9fqVJB+3YSa7aCL9TZJ83JI2Qb5arl3tjS8HlNL2SEffkxMbrR0fBZacjBkLyGvxAUV+dmT5DIGl+Clap1xARoe6ZGPLpNe+kvjWIIGDIqYVg0FPvtHIpqXI8Fw1hfkThDHeqa5MtEuIGATvO5o52SxG6E42QmTThGtQ0ILlYmkGbdQaNgHPGGjAowe1CIt4HmiUyKjoIqExm34yCjNFP2nvev2Kki/YwIMXCfibJPlm6sIEXly+SuLUUBAg3Q3XrpsknefuZCYrY8aYc+RGWAvuCskr9RTkqa40uh8TjC0YUmM16Sgi8ERHBgsRcZ2TNkEmPngAzPVbWyZdSsQgeN9JGah7JRshgmPvQLZguQw0yjZircBPFWSfBzZBJtZDrQRERZeIzqcfiMJM0E/au16/suSbyTItOgL+Jkk+N7MRkSBfFbHU+IJAKW2dpm7wHkOsWBkzxpLiyqlCEPkZRYsoMt535aQP2ZixJ4D3vqIggUearJoZI5NOih9hDteaGEumm32hpEQMivcN0BxLrMhGSEG0YOGANpqVnWjkogrNpE0IXkGAqOgiyajfKMat0C8FoV/ZIIma1ivLaZoV8g0mWBKVr575qQrDy6Pr0CkzR+iB5wUF0XB3vGbDLI/S7BBajeTxum9ajwE2QTo1RjbBGzQ0FEpKxKB43ykwhyMbIZG+5F24jGiEdMYqL4mMnkiLWLyRUdFlskK/FI5YvxTW61eYfAMdaZKky+eYt2/i8tWTMiuWxS9gjFlAMWO5K9QzUit7Aqd6JLDvNR19tGIi8D6BYdb5VhdcoRnD3ncKR+57ZCMkVkzhGANHyJF076MVmiMw14oBUdFFklG/mXqsXwrr9StMvpm08ZFKgnwgVjRBvvMLSmlraeQ3AFTH4ecLozrKmLGAnPu2IPIzjegLyfsOEzA2P/e3RneJrIsTGpU4j+poE+7dy/pCQGAWjTt7vMssbYK02jkDmVXjZ9NswP1MyF4nEe87Cr8/1phYI0w0AEDr5uZ+3iAiOEIUjQzQ5+XoQbBh0SBAVPQWvSwD+fQDUZhx/QDb6beVfC1ZBvA3KfKxG5qWmgT58nPv3naARlhH06zzNZaKwBnxQp2Y/LFE0uvZYAqKGRNtoJExnV/hjmcRTeYNO5AGI4CxG/DDN3/OjqN+LZYw2kRR7BrfbMafv/9LxjUCWGCvWy+Y2QsBmySip3Q0SHgsjHEb8MOXf85CPFEyeN8RuDVmijZCS40EtGBurn5zL2NwOx4hnfKMaJ9vZzzem8UQ1UlkVPQWvezpT+vJp5+MwkzRT7KZfl/+5v428g00Mfmkv0mUzxIZoxPky8+fn/6wEdoUwvnMA/DD1dUv9/NvspFaxCDZjqurL/8kLpPqJuZv7tcvD8DV1dMf65cH4M9XV+Ico2b6fXn19Id79cgDsEK+7/+80WZ/EfpgFqjRpEZ4jtbMjEmZGcVdi5zSIH4dRuWjUwN5gJdR2blZHOQ9Rv3ErB9hZFeQcI5RO4J+f6keS/nyviR9TdJAffAV0Ks04Blb5FKVyPIWmWcewEzjMwB6lA86c1ZhY/mnLITpTTXDT5HrAk4bL+OuwQbErwdkaDPaSEBUdmaYg6wfbGBXDz6yqwc/HFaPcJFWOVj5+R5Ezg8PMis88BXIi+hGfM4hWqoSW94ibJfwe0VgjYb4sMkzxD//nFp+cyXG8p8z0AXZLYpbH/uACZKKuGuEnEMMgNDmBFZFZf9Hcjv9uLSTOJN7VEMx/1QF/pHcOFdXcmSfHpv0sp9qpt83om1+8/ca8Nd18rHJpEdr4pWkr5BehDGTZRXuanrFQ1/AeoZeRSvMkskDW89T5fdX68tvsuA5SBcxWy/irlMBoc0JrIrK/u8M7fTlr6so5m9rwNfr2+bpv0+ObXrZt/9ZQf3+9w8VIIN83/wL0TSx5UUS6UUYEx0ZcqlKAK5naE0cS7NcoxFsOE/8z5ep5TsGm2rKRB/HKAfirlORoc0prIrK/q/kdvoGeJ6fHlVRzL/WgN8lNw7gl7+dEhv2sj9WTL+nkq//swJ8lSwf4IdfJ9HEkF4kDjtHkxhmRCKOr9E4EWZz3JaGKMJo5o2nFMHEZxamlIpTLYi7TgWENqdVzAYzd2DOaQt0l7VLNEMBYv5486P1Ka87yoOlYn/M7s9vUel0Bst61GhQ7c162W/ulaLfSGOJP5aTXWXKNxjsX7b9Mb97mKcivUi8ckTI9QzJFd2dTqVt/aZYvuQN6tmaAvjNvW12aZlaR7Iyfl3iIoDQ5gRAVHZe5L3QDDRNTkYaQZewHQ0LEx0LEHMFrWZ3BHKS0JYDHYsgxI1mwFJWxFyTnkFq3Vn328KD79bp19Gcn6aBYdoFwMPa1jPSmF++iSYuX8f8y7bwqDaIuF9lQVZ4ifQikV3kUpUAWpYR36VZjOjBGo1T2GVQ89bELZnVsClijGTBKPRCkwnhzFzQTo0o7lrklMaA0OYkvGV/khceo1cisks0Dcdbvb2YC2vbZBMK2ywBmYXigozDIt/IT6fcdoDYltX6bUFJG34OVCjaAvmYf9mUpz+hwZq4JgkhvEgAPGOLXKrCBi9YzxDJM8/jLxsP1migB51pmlLRvZdPBRDLSduzXIpjntTSHb98F83X601h/0QmukpE57DI9iw4WopbBCMyo8RorCYyoCP2SuLEzXFmGrYTk816r4LdEhAHMtT5vGyJFnQ0EBsI25JHFg40xtNT54ZHOq4FBSrLR9LI9SzPnZHnb2xgmG67XgZirtfp11FcP9EQxgH9QIAm0o8nsHZkt9bvS3YOtB7Rt3PLN9AcHD24oNdb8vO9076RZLoSEZes8qkAQHwYmyYxIVe1ypNamjGB0/ojTRvy47I+oLKwaZB8G/CwyYIQbwfVRAaMNLLZBIw37YZiBgvWbwSg8y2AtMOgo4nrM7gRkYVDSnrq3PAVOLk2YCQccz3Ls+LX68D5qO1gawFXbxYS9AtSzLNpgH7gIjliL7+821q/37Cbxbk22eVrDZpI4v5lM8LR+qQZlSuUgRzr2swCGR8W3MdMuvemXZt2CtLzC2Huc7KwotSKNY2Tl5lflPXSoTBLgJrAADm+XIRObyhmXmDyYZR2WHY0cd8gRucXUKyhzJWdPz9VXuTH1WZ5zkc+ENCcPRN0w16WiYh+nIk1GNBP3LyJoT1je/1yklc+NBcWru499i9Vzk9VKJZmBIgP86q3ympwOUs2FnOWADMpwK08CbyvMGI8eNMgvOqBmsAAjqU5gqUTAXU+L9MOQyzN6cTTUxcOuwbuibH6WZ6DOQw+v8hcZ+lE9BMEKyATHdOJ61cymeVjRorOyPUju2OIpfZt+4kszVGaFbR7iTGBblFT0lQCgwxy1CybXIiGAmHFpWMZa57lOYmJen9aGGiRXnayuYjrVzJZ5EvEN6b6nEIFp/ZVR2+08RWreL9jKzTjbpm1wieWZa7s6lTElOdpVCL6yb6TsRLXrzaVxjD2SWWiIwLlnZ0puBTqfWpq6SQc3uUkGWmsG/LpK/htLoEaw60FoCYyYKIhbZcTASYflmmHEdFdWg2Jp6cuGcdHwkBDlmd5lrs4zXTju5ROin5+kWJUiOgurYbE9SuWiYbs8rXGc0tHsnyXvYHXPQLmnTUtmt9KSC2dgkyzJV6o7mjD3kSBTBTeTItfiKUrBGpiA1pqkl7oNMDJh0HaYQGKDYRtCYinpy4RFKjMGkRZn+dZnsULWfAhk6YrnhT9wk90S04CAjSRfoC4fmUi+nZu+QaaQeg39y+FERnuHeEJ6q39DtmTYVBzUQFjLV8jUPvNduQu+buE1b4ITqpsSXnFRbrRSK4AqqDfKcrnNXKGzL8Ujfe+xvi2LYRJjfwqpTe+XCLx1iBJbSTeOvIELMA0aatchBHOVAYZxQ3S3wq7Gx4/XT7Zu4RTxx2Ht/jBh0zvdxsTTRLmX0pDDHdHhrpYRnhLIDO8oy7yMC1s/XpPI3AVMju1XPjEFzhwd+SCc7E0lp1TpZRxoojN45u5ZHC8NUhSi+e8ok/AIk2DtrJ7CjT5Vs0ginumML8/SE5pkzunyq4hd06VHUP2nCqFbhzxCRrgPNAT7vikh2lxZB2+fyizU4PHkpY37LS4gdiauubzLxkcby1mlnUn7sUCOjnJQVaaFre1DQZMeEmE9/32lC/mOaX4cj4pv5TLwADOAz3hjhdWdRoZFW7Jao+QKyzAzSeOvJswLbbuDBoigkx0jCGSSSMitkp1RxnFLZ9m+roR4TzQE+5gcLp4TUeIzE6dyKzskaYdQDzeei1i1lUibE2AXWaAp5m+hoRPCMkn3InSo3CSIQKPPEjEt6Y3fi8gZcxRMRGYrQmIKG7wNNPXjRXgPOQT7kQrRtCrVs+QIx3XcCTV7wZgvDXyx2IXCEgmLU0TtkaRUdzy/30oYT1md8AU24k4GvYKbLgjkPOwNAY3gUFGTcsuqkeuQmanhqgO4BVNu4FIvLVExFtDQCSzBNgaQURxg1TvEh4/fe4ZacxJ0+wZyObE0rnHt9QA4HKEjv0DGGCUfJwo4CpkdmqIJQK02p9rTrz5rs04uWL6Z3CwkGvxQQMAHnstcsAL68woPqpgp8AD1IV+kqCfmRL0E59UsHc5kntGtwGfLyDA/9MVS0eQ9n3/bIB+EpaoJEW/XbxpyPpndYDcg6jSK5AfDiQu3D8g/VDlSFOCfrsY7/0zO8DnC0iYIwI54EcW9GKa/QPSDzHRMUG/a2+aFJwnKxn3E00KA9ZvV/N/sStJ4dr8Nhf4a36knt2rCT+Had9bvWdQHdAv8t/WTNPPkruWhoVcy88XiD1+B4u5VpG07xPRuE8QIkn9JEEul6bfrMk+m+bZXR6A5/7z3H+e+89z/9lZPKwXDzPzSR2POZ9VgM9yNM6TCnA3Aw8qwOMMPK4AD9ZztwI8qeRgzcftR7Xii9s3K/vLk7s5uP1FFcV8UIPjTA0H9pMc53EfPTl9/aroHx9UcbA+vp0BUD5+WKXy8c1cpR7N9yDTIef2g1NvnEwCvvjJiTfO3UyNc/fE2+aTF2uo30d1lK+WHiUDl5TlspbXLjd5/fB2jBuHw68uNbl1ONyI8sHhpUtNXjq8F+fdw51bl5m8cOfw7o2UX167dZH5/drh/RsJvPXG4c5LF5d/4dZLdw4fvnUj6euDw+Hw+qsXleX1w+HwvvhO+AsfHC4uywfv3lhT3rmwLDcuSstz/7n45AY=)

**Figure: Systemd-boot counting on unsuccessful boot and rollback**

To manage boot counting in systemd-boot after a unsuccessful boot and rollback, OSTree executes the following procedure:

1. When OSTree deploys a new configuration, it creates a systemd configuration file with a `+3` tag in the name, indicating the maximum retry count, such as `ostree-boot+3.conf`. This enables boot counting.
2. systemd-boot detects the `+3` tag in the configuration file name and renames it to `ostree-boot+2-1.conf`, indicating that one boot attempt has started. After renaming the file, the boot process continues.
3. The `systemd-bless-boot-generator` creates the `systemd-bless-boot.service`, which starts when `boot-complete.target` is reached. If there are any failures during the Linux boot-up, the `systemd-bless-boot.service` does not remove the `+2-1` counter tags from the configuration file.
4. On the subsequent boot, systemd-boot detects the `+2-1` tag in the configuration file name, renames the file to `ostree-boot+1-2.conf`, and tries to boot with it.
5. If the Linux bootup fails on the second attempt, the `systemd-bless-boot.service` does not remove the counter tags `+1-2` from the configuration file.
6. On the next boot, systemd-boot detects the `+1-2` tag in the configuration file name, renames the file to `ostree-boot+0-3.conf`, and tries to boot with it. This is the last attempt to boot Linux deployment.
7. If the device fails to bootup Linux during the third attempt, the `systemd-bless-boot.service` does not remove the counter tags `+0-3` from the configuration file.
8. On the subsequent boot, systemd-boot finds the `+0-3` tag in the configuration file name. As the counter has reached zero, the entry (configuration file) is considered bad. The systemd-boot reverts to an earlier version by trying the valid configuration file entry.

## Usrmerge

The Usrmerge feature in Linux simplifies the filesystem layout by merging certain directories under the `/usr` path.
It combines `/bin`, `/sbin`, and `/lib` with `/usr/bin`, `/usr/sbin`, and `/usr/lib`, respectively.

With Usrmerge, executables and libraries found in `/bin`, `/sbin`, and `/lib` are placed in `/usr/bin`, `/usr/sbin`, and `/usr/lib`, respectively.
The original directories become symbolic links to their /usr counterparts. This unified structure makes maintenance easier and reduces
redundancy, as there is only one location for binaries and libraries instead of separate location for root-level and `/usr` directories.
Symbolic links ensure compatibility, allowing scripts and software that reference paths such as `/bin` to continue functioning.

Linux distributions are adopting Usrmerge to align with the filesystem hierarchy standard (FHS) recommendations and simplify root
filesystems, especially in containerized and embedded systems.

Distributions such as Debian, Ubuntu, and Fedora have adopted Usrmerge as part of their system layout, making it a standard in recent versions.
The transition involves creating symbolic links and moving any remaining files from the original directories to their `/usr` equivalents.

In summary, the Usrmerge feature consolidates the Linux filesystem, making it more manageable, modernized, and aligned with the evolving
needs of system management and containerization.

## Manage `/var`, `/home`, `/media`, `/mnt`, `/opt`, `/srv`, and `/usr` in Qualcomm Linux

OSTree considers `/var` as a persistent directory. This means user/runtime
created contents under `/var` remain untouched by OSTree and persist across OTA updates.
For more information, see [OSTree Overview](https://ostreedev.github.io/ostree/introduction/).

Other directories that remain untouched by OSTree during an OTA update are `/home`, `/media`, `/mnt`, `/opt`, and `/srv`.
OSTree maps these directories as symbolic links as follows:

- `/home` is a symbolic link to `/var/rootdirs/home`
- `/media` is a symbolic link to `/var/rootdirs/media`
- `/mnt` is a symbolic link to `/var/rootdirs/mnt`
- `/opt` is a symbolic link to `/var/rootdirs/opt`
- `/srv` is a symbolic link to `/var/rootdirs/srv`

Any runtime data stored under `/home`, `/media`, `/mnt`, `/opt`, `/srv`, and `/var` stays persistent
across OTA updates.

To maintain a clean and consistent filesystem, OSTree recommends not to install any artifacts under
the above directories at build-time. Any artifacts installed in these directories during build-time are
not packaged into the rootfs image generated by the Qualcomm Linux build command, that is, `bitbake <image recipe>`.

To handle runtime creation of files and directories under persistent paths, do the following:

> 
> 
> 1. The process creates the files or directories at runtime when it’s required.
> 2. Paths under `/run/`, `/var/lib/`, `/var/cache/`, and `/var/log/` can be created from the respective systemd unit files. Here is a [reference](https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#RuntimeDirectory=).
> 3. Use [systemd-tmpfiles](https://www.freedesktop.org/software/systemd/man/latest/systemd-tmpfiles-setup.service.html) to create files, symbolic links, and directories at bootup.

OSTree creates a read only bind mount at `/usr`, ensuring that the core operating system files remain immutable by
users. This approach helps to maintain system integrity and security. OSTree uses the `/usr` mount-point to deploy next update.

> 
> 
> Note
> 
> - OSTree allows the installation of files and directories under the `/var/local` path at build time.
> - Although OSTree preserves the contents installed under `/usr` during build time, it doesn’t package the contents installed under the `/usr/local` subdirectory into the rootfs image.

In Qualcomm Linux with OSTree enabled, the `/etc` directory is managed in a way that allows for both system updates and local customizations.

> 
> 
> - The `/etc` directory is mutable, allowing modifications at runtime for maintaining system configurations that need to persist across updates.
> - OSTree supports merging configuration files from the `/usr/etc` directory to `/etc`. This allows OSTree to update default configurations while preserving any local changes made.
> - When an update is applied, OSTree performs a three-way merge for configuration files in `/etc` using the original version of the file, version of the file in new update and locally modified version of the file.
> - If conflicts arise during the merge process, OSTree retains the runtime modifications. This helps maintain system stability and ensures that critical configurations aren’t overwritten.

## SOTA distribution feature

The software over-the-air (SOTA) distribution feature allows remote updates for embedded systems and IoT devices. It integrates tools such as OSTree for system updates,
allowing devices to receive and install updates without physical access. This feature is included in the Qualcomm Linux reference distribution configuration as follows:

> 
> 
> DISTRO_FEATURES:append = " pam overlayfs acl xattr selinux ptest security virtualization tpm usrmerge sota"
>     Copy to clipboard

The SOTA distribution feature is found in the `meta-qcom-distro/conf/distro/include/qcom-base.inc` file.

## Next steps

Handle out-of-tree kernel modules and device tree using recipes:

To build an out-of-tree kernel module, see [Add a kernel
module](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-3/kernel-development.html#add-a-kernel-module).

Note

Qualcomm Linux supports out-of-kernel device tree overlays only for the `custom` variant.

For device-tree/device-tree blob management, see DTB build support in kernel in [Platform device tree](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-3/kernel-development.html#platform-device-tree).

Last Published: Jul 02, 2025

[Previous Topic
Create secondary virtual machine](https://docs.qualcomm.com/bundle/publicresource/80-70020-27/topics/create_secondary_virtual_machine.md) [Next Topic
Boot Linux operating system from SD card](https://docs.qualcomm.com/bundle/publicresource/80-70020-27/topics/boot_linux_operating_system_from_sdcard.md)