diff options
author | Adrian Freihofer <adrian.freihofer@siemens.com> | 2025-06-16 22:36:47 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-06-20 09:48:14 +0100 |
commit | 7a01d262a19c472bfebfa1aa314d5b910c9977bd (patch) | |
tree | fb3886f508ebd65acdcf46507798e93f352a3cb0 /documentation/ref-manual/classes.rst | |
parent | 474742f808378f6d577feaff8e56b3ccbaaee726 (diff) | |
download | poky-7a01d262a19c472bfebfa1aa314d5b910c9977bd.tar.gz |
ref-manual: replace kernel-fitimage by kernel-fit-image
(From yocto-docs rev: 93c92dd2837708ba00a4ca47667e60d7bb09430b)
Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com>
Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/ref-manual/classes.rst')
-rw-r--r-- | documentation/ref-manual/classes.rst | 219 |
1 files changed, 150 insertions, 69 deletions
diff --git a/documentation/ref-manual/classes.rst b/documentation/ref-manual/classes.rst index da2bd028d8..f2f6e6e411 100644 --- a/documentation/ref-manual/classes.rst +++ b/documentation/ref-manual/classes.rst | |||
@@ -1732,77 +1732,158 @@ Its behavior is mainly controlled by the following variables: | |||
1732 | - :term:`KERNEL_DTC_FLAGS`: flags for ``dtc``, the Device Tree Compiler | 1732 | - :term:`KERNEL_DTC_FLAGS`: flags for ``dtc``, the Device Tree Compiler |
1733 | - :term:`KERNEL_PACKAGE_NAME`: base name of the kernel packages | 1733 | - :term:`KERNEL_PACKAGE_NAME`: base name of the kernel packages |
1734 | 1734 | ||
1735 | .. _ref-classes-kernel-fitimage: | 1735 | .. _ref-classes-kernel-fit-image: |
1736 | 1736 | ||
1737 | ``kernel-fitimage`` | 1737 | ``kernel-fit-image`` |
1738 | =================== | 1738 | ==================== |
1739 | 1739 | ||
1740 | The :ref:`ref-classes-kernel-fitimage` class provides support to pack a kernel image, | 1740 | The :ref:`ref-classes-kernel-fit-image` class provides support to pack a kernel image, |
1741 | device trees, a U-boot script, an :term:`Initramfs` bundle and a RAM disk | 1741 | device trees, a U-boot script, and an :term:`Initramfs` into a single FIT image. |
1742 | into a single FIT image. In theory, a FIT image can support any number | 1742 | In theory, a FIT image can support any number of kernels, U-boot scripts, |
1743 | of kernels, U-boot scripts, :term:`Initramfs` bundles, RAM disks and device-trees. | 1743 | :term:`Initramfs`, and device trees. |
1744 | However, :ref:`ref-classes-kernel-fitimage` currently only supports | 1744 | However, :ref:`ref-classes-kernel-fit-image` currently only supports |
1745 | limited usecases: just one kernel image, an optional U-boot script, | 1745 | limited usecases: just one kernel image, an optional U-boot script, |
1746 | an optional :term:`Initramfs` bundle, an optional RAM disk, and any number of | 1746 | an optional :term:`Initramfs`, and any number of device trees. |
1747 | device trees. | 1747 | |
1748 | 1748 | The FIT image is created by a recipe which inherits the | |
1749 | To create a FIT image, it is required that :term:`KERNEL_CLASSES` | 1749 | :ref:`ref-classes-kernel-fit-image` class. |
1750 | is set to include ":ref:`ref-classes-kernel-fitimage`" and one of :term:`KERNEL_IMAGETYPE`, | 1750 | One such example is the ``linux-yocto-fitimage`` recipe which creates a FIT |
1751 | :term:`KERNEL_ALT_IMAGETYPE` or :term:`KERNEL_IMAGETYPES` to include "fitImage". | 1751 | image for the Linux Yocto kernel. |
1752 | 1752 | Additionally, it is required that :term:`KERNEL_CLASSES` is set to include | |
1753 | The options for the device tree compiler passed to ``mkimage -D`` | 1753 | :ref:`ref-classes-kernel-fit-extra-artifacts`. |
1754 | when creating the FIT image are specified using the | 1754 | The :ref:`ref-classes-kernel-fit-extra-artifacts` class exposes the required kernel |
1755 | :term:`UBOOT_MKIMAGE_DTCOPTS` variable. | 1755 | artifacts to the :term:`DEPLOY_DIR_IMAGE` which are used by the |
1756 | 1756 | :ref:`ref-classes-kernel-fit-image` class to create the FIT image. | |
1757 | Only a single kernel can be added to the FIT image created by | 1757 | |
1758 | :ref:`ref-classes-kernel-fitimage` and the kernel image in FIT is mandatory. The | 1758 | The simplest example for building a FIT image is to add:: |
1759 | address where the kernel image is to be loaded by U-Boot is | 1759 | |
1760 | specified by :term:`UBOOT_LOADADDRESS` and the entrypoint by | 1760 | KERNEL_CLASSES += "kernel-fit-extra-artifacts" |
1761 | :term:`UBOOT_ENTRYPOINT`. Setting :term:`FIT_ADDRESS_CELLS` to "2" | 1761 | |
1762 | is necessary if such addresses are 64 bit ones. | 1762 | to the machine :term:`configuration file` and to execute:: |
1763 | 1763 | ||
1764 | Multiple device trees can be added to the FIT image created by | 1764 | bitbake linux-yocto-fitimage |
1765 | :ref:`ref-classes-kernel-fitimage` and the device tree is optional. | 1765 | |
1766 | The address where the device tree is to be loaded by U-Boot is | 1766 | This results in a ``fitImage`` file deployed to the :term:`DEPLOY_DIR_IMAGE` |
1767 | specified by :term:`UBOOT_DTBO_LOADADDRESS` for device tree overlays | 1767 | directory and a ``linux-yocto-fitimage`` package which can be installed. |
1768 | and by :term:`UBOOT_DTB_LOADADDRESS` for device tree binaries. | 1768 | |
1769 | 1769 | The same approach works for all variants of the ``linux-yocto`` kernel. | |
1770 | Only a single RAM disk can be added to the FIT image created by | 1770 | For example, if the ``linux-yocto-rt`` kernel should be used, add the following |
1771 | :ref:`ref-classes-kernel-fitimage` and the RAM disk in FIT is optional. | 1771 | lines to the machine configuration file:: |
1772 | The address where the RAM disk image is to be loaded by U-Boot | 1772 | |
1773 | is specified by :term:`UBOOT_RD_LOADADDRESS` and the entrypoint by | 1773 | KERNEL_CLASSES += "kernel-fit-extra-artifacts" |
1774 | :term:`UBOOT_RD_ENTRYPOINT`. The ramdisk is added to the FIT image when | 1774 | PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt" |
1775 | :term:`INITRAMFS_IMAGE` is specified and requires that :term:`INITRAMFS_IMAGE_BUNDLE` | 1775 | |
1776 | is not set to 1. | 1776 | The FIT image, this time including the RT kernel, is built again by calling:: |
1777 | 1777 | ||
1778 | Only a single :term:`Initramfs` bundle can be added to the FIT image created by | 1778 | bitbake linux-yocto-fitimage |
1779 | :ref:`ref-classes-kernel-fitimage` and the :term:`Initramfs` bundle in FIT is optional. | 1779 | |
1780 | In case of :term:`Initramfs`, the kernel is configured to be bundled with the root filesystem | 1780 | For other kernels provided by other layers, the same approach would work. |
1781 | in the same binary (example: zImage-initramfs-:term:`MACHINE`.bin). | 1781 | However, it is usually more intuitive to add a custom FIT image recipe next to |
1782 | When the kernel is copied to RAM and executed, it unpacks the :term:`Initramfs` root filesystem. | 1782 | the custom kernel recipe. |
1783 | The :term:`Initramfs` bundle can be enabled when :term:`INITRAMFS_IMAGE` | 1783 | For example, if a layer provides a ``linux-vanilla`` recipe, a |
1784 | is specified and requires that :term:`INITRAMFS_IMAGE_BUNDLE` is set to 1. | 1784 | ``linux-vanilla-fitimage`` recipe may be added as well. |
1785 | The address where the :term:`Initramfs` bundle is to be loaded by U-boot is specified | 1785 | The ``linux-vanilla-fitimage`` recipe can be created as a customized copy of |
1786 | by :term:`UBOOT_LOADADDRESS` and the entrypoint by :term:`UBOOT_ENTRYPOINT`. | 1786 | the ``linux-yocto-fitimage`` recipe. |
1787 | 1787 | ||
1788 | Only a single U-boot boot script can be added to the FIT image created by | 1788 | Usually the kernel is built as a dependency of an image. |
1789 | :ref:`ref-classes-kernel-fitimage` and the boot script is optional. | 1789 | If the FIT image should be used as a replacement for the kernel image which |
1790 | The boot script is specified in the ITS file as a text file containing | 1790 | is installed in the root filesystem, then the following variables can be set |
1791 | U-boot commands. When using a boot script the user should configure the | 1791 | e.g. in the machine configuration file:: |
1792 | U-boot :ref:`ref-tasks-install` task to copy the script to sysroot. | 1792 | |
1793 | So the script can be included in the FIT image by the :ref:`ref-classes-kernel-fitimage` | 1793 | # Create and deploy the vmlinux artifact which gets included into the FIT image |
1794 | class. At run-time, U-boot CONFIG_BOOTCOMMAND define can be configured to | 1794 | KERNEL_CLASSES += "kernel-fit-extra-artifacts" |
1795 | load the boot script from the FIT image and execute it. | 1795 | |
1796 | 1796 | # Do not install the kernel image package | |
1797 | The FIT image generated by the :ref:`ref-classes-kernel-fitimage` class is signed when the | 1797 | RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = "" |
1798 | variables :term:`UBOOT_SIGN_ENABLE`, :term:`UBOOT_MKIMAGE_DTCOPTS`, | 1798 | # Install the FIT image package |
1799 | :term:`UBOOT_SIGN_KEYDIR` and :term:`UBOOT_SIGN_KEYNAME` are set | 1799 | MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "linux-yocto-fitimage" |
1800 | appropriately. The default values used for :term:`FIT_HASH_ALG` and | 1800 | |
1801 | :term:`FIT_SIGN_ALG` in :ref:`ref-classes-kernel-fitimage` are "sha256" and | 1801 | # Configure the image.bbclass to depend on the FIT image instead of only |
1802 | "rsa2048" respectively. The keys for signing the FIT image can be generated using | 1802 | # the kernel to ensure the FIT image is built and deployed with the image |
1803 | the :ref:`ref-classes-kernel-fitimage` class when both :term:`FIT_GENERATE_KEYS` and | 1803 | KERNEL_DEPLOY_DEPEND = "linux-yocto-fitimage:do_deploy" |
1804 | :term:`UBOOT_SIGN_ENABLE` are set to "1". | 1804 | |
1805 | 1805 | The :ref:`ref-classes-kernel-fit-image` class processes several variables that | |
1806 | allow configuration: | ||
1807 | |||
1808 | - The options for the device tree compiler passed to ``mkimage -D`` | ||
1809 | when creating the FIT image are specified using the | ||
1810 | :term:`UBOOT_MKIMAGE_DTCOPTS` variable. | ||
1811 | |||
1812 | - Only a single kernel can be added to the FIT image created by | ||
1813 | :ref:`ref-classes-kernel-fit-image` and it is a mandatory component of the | ||
1814 | FIT image. | ||
1815 | The address where the kernel image is to be loaded by U-Boot is | ||
1816 | specified by :term:`UBOOT_LOADADDRESS` and the entrypoint by | ||
1817 | :term:`UBOOT_ENTRYPOINT`. Setting :term:`FIT_ADDRESS_CELLS` to "2" | ||
1818 | is necessary if such addresses are 64 bit ones. | ||
1819 | |||
1820 | - Multiple device trees can be added to the FIT image created by | ||
1821 | :ref:`ref-classes-kernel-fit-image` and the device tree is optional. | ||
1822 | The address where the device tree is to be loaded by U-Boot is | ||
1823 | specified by :term:`UBOOT_DTBO_LOADADDRESS` for device tree overlays | ||
1824 | and by :term:`UBOOT_DTB_LOADADDRESS` for device tree binaries. | ||
1825 | |||
1826 | - Only a single :term:`Initramfs` can be added to the FIT image created by | ||
1827 | :ref:`ref-classes-kernel-fit-image`. The :term:`Initramfs` in FIT is optional. | ||
1828 | The address where the RAM disk image is to be loaded by U-Boot | ||
1829 | is specified by :term:`UBOOT_RD_LOADADDRESS` and the entrypoint by | ||
1830 | :term:`UBOOT_RD_ENTRYPOINT`. The :term:`Initramfs` is added to the FIT image | ||
1831 | when :term:`INITRAMFS_IMAGE` is specified. | ||
1832 | |||
1833 | - It's recommended to add the :term:`Initramfs` and the kernel image as | ||
1834 | independent image nodes to the FIT image. | ||
1835 | Bundling a RAM disk image with the kernel image and including the bundle | ||
1836 | (:term:`INITRAMFS_IMAGE_BUNDLE` set to "1") in the FIT image is possible. | ||
1837 | However, this approach has the disadvantage that any change to the RAM | ||
1838 | disk image necessitates rebuilding the kernel image. | ||
1839 | This process requires the full kernel build directory, which is kind of | ||
1840 | incompatible with the :term:`SSTATE_DIR` and, consequently, with SDKs. | ||
1841 | |||
1842 | - Only a single U-Boot boot script can be added to the FIT image created by | ||
1843 | :ref:`ref-classes-kernel-fit-image`. The boot script is optional. | ||
1844 | The boot script is specified in the ITS file as a text file containing | ||
1845 | U-Boot commands. When using a boot script the recipe which inherits the | ||
1846 | :ref:`ref-classes-kernel-fit-image` class should add the script to | ||
1847 | :term:`SRC_URI` and set the :term:`FIT_UBOOT_ENV` variable to the name of the | ||
1848 | file like the following:: | ||
1849 | |||
1850 | FIT_UBOOT_ENV = "boot.txt" | ||
1851 | SRC_URI += "file://${FIT_UBOOT_ENV}" | ||
1852 | |||
1853 | At run-time, U-boot's boot command can be configured to load the boot script | ||
1854 | from the FIT image and source it. | ||
1855 | |||
1856 | - The FIT image generated by the :ref:`ref-classes-kernel-fit-image` class is signed when the | ||
1857 | variables :term:`UBOOT_SIGN_ENABLE`, :term:`UBOOT_MKIMAGE_DTCOPTS`, | ||
1858 | :term:`UBOOT_SIGN_KEYDIR` and :term:`UBOOT_SIGN_KEYNAME` are set | ||
1859 | appropriately. The default values used for :term:`FIT_HASH_ALG` and | ||
1860 | :term:`FIT_SIGN_ALG` in :ref:`ref-classes-kernel-fit-image` are "sha256" and | ||
1861 | "rsa2048" respectively. The keys for signing the FIT image can be generated using | ||
1862 | the :ref:`ref-classes-kernel-fit-image` class when both :term:`FIT_GENERATE_KEYS` and | ||
1863 | :term:`UBOOT_SIGN_ENABLE` are set to "1". | ||
1864 | |||
1865 | .. _ref-classes-kernel-fit-extra-artifacts: | ||
1866 | |||
1867 | ``kernel-fit-extra-artifacts`` | ||
1868 | ============================== | ||
1869 | |||
1870 | The :ref:`ref-classes-kernel-fit-extra-artifacts` class exposes the required | ||
1871 | kernel artifacts to the :term:`DEPLOY_DIR_IMAGE` directory. | ||
1872 | These artifacts are used by the :ref:`ref-classes-kernel-fit-image` class to | ||
1873 | create a FIT image that can include the kernel, device trees, an optional | ||
1874 | U-Boot script, and an optional Initramfs. | ||
1875 | |||
1876 | This class is typically included by adding it to the :term:`KERNEL_CLASSES` | ||
1877 | variable in your kernel recipe or machine configuration when building FIT images. | ||
1878 | It ensures that all necessary files are available for packaging into the FIT image, | ||
1879 | such as the kernel binary, device tree blobs (DTBs), and other related files. | ||
1880 | |||
1881 | For example, to enable this class, set:: | ||
1882 | |||
1883 | KERNEL_CLASSES += "kernel-fit-extra-artifacts" | ||
1884 | |||
1885 | This is required when using the :ref:`ref-classes-kernel-fit-image` class to | ||
1886 | generate FIT images for your kernel. | ||
1806 | 1887 | ||
1807 | .. _ref-classes-kernel-grub: | 1888 | .. _ref-classes-kernel-grub: |
1808 | 1889 | ||
@@ -3438,7 +3519,7 @@ See U-Boot's documentation for details about `verified boot | |||
3438 | and the `signature process | 3519 | and the `signature process |
3439 | <https://source.denx.de/u-boot/u-boot/-/blob/master/doc/uImage.FIT/signature.txt>`__. | 3520 | <https://source.denx.de/u-boot/u-boot/-/blob/master/doc/uImage.FIT/signature.txt>`__. |
3440 | 3521 | ||
3441 | See also the description of :ref:`ref-classes-kernel-fitimage` class, which this class | 3522 | See also the description of :ref:`ref-classes-kernel-fit-image` class, which this class |
3442 | imitates. | 3523 | imitates. |
3443 | 3524 | ||
3444 | .. _ref-classes-uki: | 3525 | .. _ref-classes-uki: |