# カーネルを開発する

Qualcomm Linuxカーネルは、Yoctoビルドワークフローまたはスタンドアロンを使用して開発できます。

## Yoctoを使用してカーネルを開発する

Qualcomm Linux の `meta-qcom-hwe` レイヤーは `linux-qcom-base_6.6.bb` および `linux-qcom-custom_6.6.bb` レシピをサポートしています。これらのレシピは、サポートされているマシンのQualcomm Linuxカーネルの取得とビルドを行います。

Yoctoの開発ワークフローを使用してカーネルを開発するには、この後の各セクションを参照してください。Yoctoの規定、ホストパッチ、およびその適用方法については、[Yocto Project Linux Kernel Development](https://docs.yoctoproject.org/1.5/kernel-dev/kernel-dev.html#applying-patches) を参照してください。

## カーネルソースを取得する

カーネルソースをCodeLinaroレポジトリからBitBakeビルドの一部として取得します。

**Yoctoカーネル**

MACHINE=<SoC>-<board>-<variant> DISTRO=qcom-wayland source setup-environment
    bitbake qcom-console-image
    
    # kernel source is downloaded under following location
      ls build-qcom-wayland/tmp-glibc/work-shared/<SoC>-<board>-<variant>/kernel-source/
      arch     Documentation  ipc       MAINTAINERS  samples   virt
      block    drivers        Kbuild    Makefile     scripts
      certs    fs             Kconfig   mm           security
      COPYING  include        kernel    net          sound
      CREDITS  init           lib       README       tools
      crypto   io_uring       LICENSES  rust         usr
    Copy to clipboard

注釈

前のコマンドのマシン名は、SoCボードバリアント名と同じです。例えば、QCS6490 SoCの場合、`QCS6490` がマシン名、`rb3gen2` がボード名、`Visionkit` がバリアントです。

設定とソース取得の詳細については、[Qualcomm Linuxビルドガイド](https://docs.qualcomm.com/doc/80-70020-254/topic/build_landing_page.html) を参照してください。

## カーネルレシピを取得する

Qualcomm Linuxは `meta-qcom-hwe` レイヤーを維持し、以下の場所でカーネルレシピファイルをホストしています。

- 基本BSP：`meta-qcom-hwe/recipes-kernel/linux//linux-qcom-base_6.6.bb` ファイル。
- カスタムBSP：`meta-qcom-hwe/recipes-kernel/linux//linux-qcom-custom_6.6.bb` ファイル。

`PREFERRED_PROVIDER_virtual/kernel` は `meta-qcom-hwe/conf/machine/include/qcom-base.inc` ファイルで `linux-qcom-base` または `linux-qcom-custom` として定義されています。

カーネルレシピについては、次のいずれかのコマンドを実行します。

# kernel recipe location
       ls -l meta-qcom-hwe/recipes-kernel/linux/
       linux-kernel-headers-install_6.6.bb
       linux-kernel-qcom-headers_6.6.bb
       linux-qcom-base-6.6
       linux-qcom-base_6.6.bb
       linux-qcom-custom
       linux-qcom-custom_6.6.bb
    Copy to clipboard

## カーネルソースを解凍する

メタレイヤーをクローンしたあと、カーネルソースを開発とカスタマイズのために解凍します。

ソースコードを解凍するには、以下のコマンドを実行します。

# unpack kernel
    # checkout kernel source aligned to upstream LTS base with patches applied from recipe
    # Following would checkout kernel source in build-qcom-wayland/workspace/sources/linux-qcom-base/
    $  devtool modify linux-qcom-base
    Copy to clipboard

注釈

カスタムBSPバリアントの場合は、`linux-qcom-custom` を使用します。

## カーネルを変更する

カーネルの変更やカスタマイズは、`build-qcom-wayland/workspace/sources/linux-qcom-base` ワークスペースで行います。

カーネル構成を変更するには、次のいずれかのコマンドを実行します。

# Modify sources in build-qcom-wayland/workspace/sources/linux-qcom-base, or update kernel configuration by running makemenufonfig
      devtool menuconfig linux-qcom-base
    
    # config fragment is updated in following location
      ls build-qcom-wayland/workspace/sources/linux-qcom-base/oe-local-files/devtool-fragment.cfg
    devtool-fragment.cfg
    
    # you may do other changes to kernel and commit
    Copy to clipboard

注釈

カスタムBSPバリアントの場合は、`linux-qcom-custom` を使用します。

## カーネルの変更をコミットする

変更をコミットするには、以下のGitコマンドを実行します。

cd build-qcom-wayland/workspace/sources/linux-qcom-base
    git add .
    git commit -s -m "my changes"
    Copy to clipboard

## カーネルイメージをビルドする

変更の完了後にカーネルとイメージをビルドするには、次のコマンドを実行します。

> 
> 
> # to build kernel use
>       devtool build linux-qcom-base
>     Copy to clipboard

# and following to build the image
      devtool build-image qcom-console-image
    Copy to clipboard

# built images are produced in standard location
      ls build-qcom-wayland/tmp-glibc/deploy/images/<SoC>-<board>-<variant>/
    Copy to clipboard

注釈

カスタムBSPをコンパイルするには、`linux-qcom-custom` を使用します。

## カーネルの変更を維持する

Devtoolを使用してパッチを開発およびエクスポートし、付加ファイルを `meta-mylayer` レイヤーに作成します。独自のレイヤーを作成するには、まずホストカーネルの `bbappend` ファイルに追加して、変更を行います。

メタレイヤーにカーネルパッチを作成および付加するには、以下のコマンドを実行します。

# create your own layer first and add it to host kernel bbappend and changes
      bitbake-layers create-layer ~/meta-mylayer
    # mkdir -p ~/meta-mylayer/recipes-kernel/linux/linux-qcom-base
      bitbake-layers add-layer ~/meta-mylayer
    
    # following would update the meta-mylayer recipe and the change
      devtool finish linux-qcom-base ~/meta-mylayer
    
    # devtool finish shall populate the meta-mylayer recipes along with patches,
    
      ls -R meta-mylayer/recipes-kernel/
    meta-mylayer/recipes-kernel/:
    linux
    
    meta-mylayer/recipes-kernel/linux:
    linux-qcom-base  linux-qcom-base_%.bbappend
    
    meta-mylayer/recipes-kernel/linux/linux-qcom-base:
    0001-my-patch.patch  devtool-fragment.cfg
    
      less meta-mylayer/recipes-kernel/linux/linux-qcom-base%.bbappend
    FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
    
    SRC_URI += "file://devtool-fragment.cfg \
                file://0001-my-patch.patch"
    Copy to clipboard

`devtool finish` コマンドを実行した後、`~/meta-mylayer` レイヤーが以下の処理により更新されます。

- `meta-mylayer/recipes-kernel/linux/linux-qcom-base/*.patch` でパッチとしてホストされる、対応するカーネルの変更。
- これらのパッチを使用して `meta-mylayer/recipes-kernel/linux/linux-qcom-base_%.bbappend SRC_URI` を追加及び更新する。
- 開発の完了後に `build-qcom-wayland/workspace` を削除する。

注釈

カスタムBSPバリアントの場合は、`linux-qcom-custom` を使用します。

## ワークスペースをクリーンアップする

ワークスペースをクリーンアップするには、次のDevtoolコマンドとBitBakeコマンドを使用します。

# to remove layer
      bitbake-layers remove-layer ~/meta-mylayer
    
    # to clean complete workspace
      bitbake -c cleanall <recipe-name>
    
    # reset using Devtool
      devtool reset linux-qcom-base
    
    # manually delete the workspace directory
      rm -rf build-qcom-wayland/workspace/sources/linux-qcom-base
    Copy to clipboard

## カーネルを構成する

Yoctoビルドシステムはカーネル構成の変更に使用され、同時に `menuconfig` を呼び出します。

カーネル構成を変更するには、次のいずれかのコマンドを実行します。

MACHINE=<SoC>-<board>-<variant> DISTRO=qcom-wayland source setup-environment
     bitbake linux-qcom-base -c menuconfig
    
    # Above would update .config in kernel build directory build-qcom-wayland/tmp-glibc/work/<SoC>-<board>-<variant>/linux-qcom-base/6.6-r0/build/
    # one can create a config fragment for modifications made by issuing following
    
      bitbake linux-qcom-base -c diffconfig
    
    # Above would create fragment.cfg in build directory build-qcom-wayland/tmp-glibc/work/<SoC>-<board>-<variant>/linux-qcom-base/6.6-r0/
    Copy to clipboard

または、Devtoolを使用してカーネル構成を変更します。

devtool modify linux-qcom-base
     devtool menuconfig linux-qcom-base
     devtool finish linux-qcom-base ~/meta-mylayer
    
    # this would create a config fragment as a patch and update in your meta layer
    Copy to clipboard

注釈

カスタムBSPバリアントの場合は、`linux-qcom-custom` を使用します。

Yoctoに関連するカーネル構成の詳細については、[Configuring the Kernel](https://docs.yoctoproject.org/4.3.1/kernel-dev/common.html#configuring-the-kernel) を参照してください。

`linux-kernel-qcom-base_6.6.bb` または `linux-qcom-custom_6.6.bb` カーネルレシピファイルは、以下の構成フラグメントを使用してイメージをビルドしています。

例えば、`linux-qcom-custom_6.6.bb` は以下のフラグメントを使用してカーネルを追加します。

KERNEL_CONFIG ??= "qcom_defconfig"
    KERNEL_CONFIG_FRAGMENTS:append = " ${S}/arch/arm64/configs/qcom_addons.config"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_debug.config', '', d)}"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@oe.utils.vartrue('DEBUG_BUILD', '${S}/arch/arm64/configs/qcom_addons_debug.config', '', d)}"
    
    # Enable selinux support
    SELINUX_CFG = "${@oe.utils.vartrue('DEBUG_BUILD', 'selinux_debug.cfg', 'selinux.cfg', d)}"
    KERNEL_CONFIG_FRAGMENTS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', '${WORKDIR}/${SELINUX_CFG}', '', d)}"
    Copy to clipboard

デバッグ構成フラグメントを使用してデバッグビルドを生成するには、以下のコマンドを実行します。

# Set DEBUG_BUILD to 1 to compile debug-enabled build
    
      source setup-environment
      DEBUG_BUILD=1 bitbake linux-kernel-custom
    Copy to clipboard

他の構成フラグメントの詳細については、[Qualcomm Linuxカーネルを使い始める](https://docs.qualcomm.com/doc/80-70020-3JA/topic/getting_started_chapter2.html) を参照してください。

## デバッグビルドを作成する

デバッグビルドを作成するには、シェルで `DEBUG_BUILD=1` を引数として渡します。

# setup the build environment
      export SHELL=/bin/bash
    
      MACHINE=<SoC>-<board>-<variant> DISTRO=qcom-wayland QCOM_SELECTED_BSP=base source setup-environment
    
    # build qcom linux console image
      DEBUG_BUILD=1 bitbake qcom-console-image
    Copy to clipboard

注釈

カスタムBSPバリアントの場合は、`QCOM_SELECTED_BSP=custom` を使用します。

## カーネルコマンドラインのパラメーターを更新する

カーネルコマンドラインを更新するには、対応するSoC特有のマシン・インクルージョン・フィルでYocto構成変数 `KERNEL_CMDLINE_EXTRA` を変更します。例えば、`meta-qcom-hwe/conf/machine/include/qcom-<SoC>.inc` です。

カーネルコマンドラインを更新するには、以下の変数を変更します。

KERNEL_CMDLINE_EXTRA = "root=/dev/disk/by-partlabel/system rw rootwait console=ttyMSM0,115200n8 pcie_pme=nomsi earlycon"
    Copy to clipboard

### ESPイメージを更新する

systemd-bootブートマネージャーとカーネルイメージをコンパイルして、UKIタイプ2のイメージファイルにパッケージ化するには、以下のものを使用します。

ハードウェアSoC用のYoctoビルドは、必須のすべてのイメージとパッケージ・ブート・イメージを `efi.bin` として生成します。これはEFIパーティションにフラッシュされます。`efi.bin` ファイルは、systemd-bootブートマネージャーとカーネルイメージで構成されます。これらはUKIタイプ2イメージ形式でパッケージ化されています。

カーネルソース、構成、またはDTSを更新した後EFIイメージを再ビルドし、生成された `efi.bin` をEFIパーティションにフラッシュします。

MACHINE=<SoC>-<board>-<variant> DISTRO=qcom-wayland source setup-environment
    
    # build qcom linux console image
      DEBUG_BUILD=1 bitbake qcom-console-image
    
    # build images are produced in following directory
      ls build-qcom-wayland/tmp-glibc/deploy/images/<SoC>-<qcom>-<variant>/efi.bin
    efi.bin
    
    # reboot into fastboot
      fastboot flash efi efi.bin
      fastboot flash dtb_a dtb.bin
    Copy to clipboard

UKIタイプ２イメージ形式の詳細については、[Type #2 EFI Unified Kernel Images](https://uapi-group.org/specifications/specs/boot_loader_specification/#type-2-efi-unified-kernel-images) を参照してください。

ESPの詳細については、起動 と:ref:<cite>bring up the device &lt;bring up the device&gt;</cite> を参照してください。

## initramfsパッケージをカスタマイズする

initramfsパッケージを更新するには、`meta-qcom-hwe/recipes-kernel/images/initramfs-qcom-image.bbappend` ファイルの `PACKAGE_INSTALL` リストを変更します。

less meta-qcom-hwe/recipes-kernel/images/initramfs-qcom-image.bbappend
    
    # Add additional packages needed as part of initrd
    PACKAGE_INSTALL += " \
        e2fsprogs \
        e2fsprogs-e2fsck \
        e2fsprogs-mke2fs \
        e2fsprogs-resize2fs \
        e2fsprogs-tune2fs \
        ${VIRTUAL-RUNTIME_dev_manager} \
        os-release-initrd \
        "
    Copy to clipboard

## カーネルモジュールの追加

Yoctoビルドシステムを使用してツリー外カーネルモジュールをコンパイルするには、次の手順に従います。

1. ツリー外カーネルドライバー用の `Makefile` を作成します。

> 
> 
> 以下は、ツリー外カーネルドライバー用の `Makefile` のサンプルです。

all: modules
    obj-m := hello.o
    
    SRC := $(shell pwd)
    
    modules:
      $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules $(KBUILD_OPTIONS)
    
    modules_install:
      $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install
    Copy to clipboard

2. モジュールをYoctoビルドシステムに統合します。

> 
> 
> Yoctoモジュールクラスを使用してカーネルモジュールを統合する方法については、以下のサンプルを参照してください。

DESCRIPTION = "${SUMMARY}"
    LICENSE = "GPL-2.0-only"
    LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/${LICENSE};md5=801f80980d171dd6425610833a22dbe6"
    
    inherit module
    
    SRC_URI += "file://Makefile \
                file://hello.c  \
                file://COPYING  \
                "
    S = "${WORKDIR}"
    
    EXTRA_OEMAKE += "MACHINE='${MACHINE}'"
    MAKE_TARGETS = "modules"
    MODULES_INSTALL_TARGET = "modules_install"
    
    # Kernel module to be autoloaded
        KERNEL_MODULE_AUTOLOAD += "hello"
    
    # The inherit of module.bbclass will automatically name module packages with
    # "kernel-module-" prefix as required by the oe-core build environment.
    
    RPROVIDES_${PN} += "kernel-module-hello"
    Copy to clipboard

ツリー外モジュールの詳細については、[Working with Out-of-Tree Modules](https://docs.yoctoproject.org/kernel-dev/common.html#working-with-out-of-tree-modules) を参照してください。

## DTBサポートの構成

Qualcomm Linuxは以下の手順でデバイスツリーファイルの選択、カーネル構成の変更、ツリー外カーネルモジュールのビルドを行います。

## プラットフォームのデバイスツリー

Qualcomm Linuxでは、デバイスツリーオーバーレイ機能がサポートされていて、デバイス外のツリーブロブを維持し、ベースラインデバイスのツリーブロブと統合することができます。SoCデバイスツリーのサポートは、`arch/arm64/boot/dts/qcom` ディレクトリのカーネルソースにあります。

Qualcomm デバイスツリーソース には、デバイスツリーの一覧があります。また、アップストリームに合わせたベースを個別にプロビジョニングするための、ダウンストリームでの追加分を格納するための明確な分離が維持されます。

ダウンストリームのコンテンツはカーネルソース外でホストされます。ツリー外のドライバーは、カーネル外のデバイスツリーオーバーレイの追加を維持します。ビルドプロセス中、該当するデバイスツリーオーバーレイがベースボードDTBと統合されて統合DTBが生成されます。これはブートイメージとあわせて使用されます。

以下の図は、デバイスツリーオーバーレイのビルドプロセスと、QCS6490でのカスタムBSPのDTB生成を示しています。

注釈

- **addons** ダウンストリーム・デバイスツリー・ファイルがない場合、ベースBSPは同じビルドプロセスに従います。
- サポートされているQualcommハードウェアSoCはすべて、DTオーバーレイとDTB生成について同じビルドプロセスに従います。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export device-tree.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="12.3611in" height="9.91319in" viewbox="0 0 890 713.75" xml:space="preserve" color-interpolation-filters="sRGB" class="st26" aria-label="../_images/device-tree.svg"><v:documentproperties v:langid="1033" v:viewmarkup="false">	<v:userdefs>		<v:ud v:nameu="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"></v:ud>		<v:ud v:nameu="msvNoAutoConnect" v:val="VT0(1):26"></v:ud>	</v:userdefs></v:documentproperties>
<style>.svg-1 .st1 { fill: #fafafa; stroke: #d2d7e1; stroke-width: 2 }
.svg-1 .st2 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2 }
.svg-1 .st3 { stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st4 { fill: #8d8df7; stroke: #fafafa; stroke-width: 1.5 }
.svg-1 .st5 { fill: #ffffff; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 0.916672em }
.svg-1 .st6 { fill: #8d8df7; stroke: #000000; stroke-opacity: 0; stroke-width: 0.75 }
.svg-1 .st7 { fill: #6280cc; stroke: #000000; stroke-opacity: 0; stroke-width: 0.75 }
.svg-1 .st8 { fill: #ffffff; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.00001em }
.svg-1 .st9 { font-size: 1em }
.svg-1 .st10 { fill: none; stroke: #7c8aa3; stroke-width: 1.25 }
.svg-1 .st11 { fill: #7c8aa3; stroke: #000000; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st12 { fill: #007884; stroke: #000000; stroke-opacity: 0; stroke-width: 0.75 }
.svg-1 .st13 { fill: #d2d7e1; stroke: none; stroke-width: 1.25 }
.svg-1 .st14 { fill: #000000; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 0.916672em }
.svg-1 .st15 { marker-start: url("#mrkr4-106"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st16 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.45454545454545 }
.svg-1 .st17 { marker-start: url("#mrkr4-127"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st18 { fill: #000000; fill-opacity: 1; stroke: #000000; stroke-opacity: 1; stroke-width: 0.37313432835821 }
.svg-1 .st19 { marker-end: url("#mrkr4-161"); stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.5 }
.svg-1 .st20 { fill: #8d8df7; stroke: #8d8df7; stroke-opacity: 0; stroke-width: 2 }
.svg-1 .st21 { fill: none; stroke: none; stroke-width: 0.25 }
.svg-1 .st22 { fill: #000000; font-family: Roboto Flex, Qualcomm-Next, sans-serif; font-size: 1.00001em }
.svg-1 .st23 { fill: #007884; stroke: none; stroke-width: 2 }
.svg-1 .st24 { fill: #6280cc; stroke: none; stroke-width: 2 }
.svg-1 .st25 { fill: #7c8aa3; stroke: none; stroke-width: 2 }
.svg-1 .st26 { fill: none; fill-rule: evenodd; font-size: 12px; overflow: visible; stroke-linecap: square; stroke-miterlimit: 3 }</style>
<defs id="Markers">	<g id="lend4">		<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"></path>	</g>	<marker id="mrkr4-106" class="st16" v:arrowtype="4" v:arrowsize="1" v:setback="4.16" refx="4.16" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(2.2) "></use>	</marker>	<marker id="mrkr4-127" class="st18" v:arrowtype="4" v:arrowsize="2" v:setback="5.12" refx="5.12" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(2.68) "></use>	</marker>	<marker id="mrkr4-161" class="st18" v:arrowtype="4" v:arrowsize="2" v:setback="5.36" refx="-5.36" orient="auto" markerunits="strokeWidth" overflow="visible">		<use xlink:href="#lend4" transform="scale(-2.68,-2.68) "></use>	</marker></defs><g v:mid="0" v:index="1" v:groupcontext="foregroundPage">	<v:userdefs>		<v:ud v:nameu="msvThemeOrder" v:val="VT0(0):26"></v:ud>	</v:userdefs>	<title>Page-1</title>	<v:pageproperties v:drawingscale="1" v:pagescale="1" v:drawingunits="0" v:shadowoffsetx="9" v:shadowoffsety="-9"></v:pageproperties>	<v:layer v:name="Connector" v:index="0"></v:layer>	<g id="shape1070-1" v:mid="1070" v:groupcontext="shape" transform="translate(20,-20)">		<title>Sheet.1070</title>		<rect x="0" y="40" width="850" height="673.75" rx="4" ry="4" class="st1"></rect>	</g>	<g id="shape1030-3" v:mid="1030" v:groupcontext="shape" transform="translate(20.9091,-194.78)">		<title>Sheet.1030</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L848.54 713.75" class="st2"></path>	</g>	<g id="shape1051-6" v:mid="1051" v:groupcontext="shape" transform="translate(675,1335) rotate(180)">		<title>Sheet.1051</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L505.87 713.75" class="st3"></path>	</g>	<g id="shape1000-9" v:mid="1000" v:groupcontext="shape" transform="translate(46.1875,-641.094)">		<title>Rectangle.1000</title>		<desc>Kernel</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="188.156" cy="700.087" width="376.32" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="376.312" height="27.3253" rx="2" ry="2" class="st4"></rect>		<text x="172.65" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Kernel</text>		</g>	<g id="shape1001-12" v:mid="1001" v:groupcontext="shape" transform="translate(46.1875,-568.226)">		<title>Rectangle.1001</title>		<desc>sc7280.dtsi</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="188.156" cy="700.087" width="376.32" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="376.312" height="27.3253" rx="2" ry="2" class="st6"></rect>		<text x="159.57" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>sc7280.dtsi</text>		</g>	<g id="shape1002-15" v:mid="1002" v:groupcontext="shape" transform="translate(46.1875,-531.792)">		<title>Rectangle.1002</title>		<desc>qcm6490.dtsi</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="188.156" cy="700.087" width="376.32" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="376.312" height="27.3253" rx="2.88" ry="2.88" class="st7"></rect>		<text x="154.46" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490.dtsi</text>		</g>	<g id="shape1004-18" v:mid="1004" v:groupcontext="shape" transform="translate(117,-481.696)">		<title>Rectangle.1004</title>		<desc>qcs6490-rb3gen2.dts</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63" cy="700.087" width="126" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="126" height="27.3253" rx="2" ry="2" class="st6"></rect>		<text x="10.95" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-rb3gen2.dts</text>		</g>	<g id="shape1005-21" v:mid="1005" v:groupcontext="shape" transform="translate(258,-481.696)">		<title>Rectangle.1005</title>		<desc>qcm6490-addons.dtsi</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="82.25" cy="700.087" width="164.5" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="164.5" height="27.3253" rx="2.88" ry="2.88" class="st7"></rect>		<text x="23.98" y="703.69" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490-addons.dtsi</text>		</g>	<g id="shape1007-24" v:mid="1007" v:groupcontext="shape" transform="translate(258,-418.271)">		<title>Rectangle.1007</title>		<desc>qcm6490-addons-rb3gen2.dtsi</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="82.25" cy="693.877" width="164.5" height="39.7459"></v:textrect>		<rect x="0" y="674.004" width="164.5" height="39.7459" rx="2.88" ry="2.88" class="st7"></rect>		<text x="33.8" y="690.28" class="st8" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490-addons-<tspan x="48.79" dy="1.2em" class="st9">rb3gen2.dtsi</tspan></text>		</g>	<g id="shape1008-28" v:mid="1008" v:groupcontext="shape" transform="translate(258.511,-363.884)">		<title>Rectangle.1008</title>		<desc>qcs6490-addons-rb3gen2.dts</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81.9886" cy="698.451" width="163.98" height="30.5986"></v:textrect>		<rect x="0" y="683.151" width="163.977" height="30.5986" rx="2.88" ry="2.88" class="st7"></rect>		<text x="10.22" y="701.75" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-rb3gen2.dts</text>		</g>	<g id="shape1009-31" v:mid="1009" v:groupcontext="shape" transform="translate(258.511,-325.288)">		<title>Rectangle.1009</title>		<desc>qcs6490-addons-rb3gen2-ia.mezz.dts</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81.9886" cy="698.451" width="163.98" height="30.5986"></v:textrect>		<rect x="0" y="683.151" width="163.977" height="30.5986" rx="2.88" ry="2.88" class="st7"></rect>		<text x="17.88" y="695.15" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-rb3gen2-<tspan x="53.85" dy="1.2em" class="st9">ia.mezz.dts</tspan></text>		</g>	<g id="shape1010-35" v:mid="1010" v:groupcontext="shape" transform="translate(258.511,-286.692)">		<title>Rectangle.1010</title>		<desc>qcs6490-addons-rb3gen2-ptz-mezz.dts</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81.9886" cy="698.451" width="163.98" height="30.5986"></v:textrect>		<rect x="0" y="683.151" width="163.977" height="30.5986" rx="2.88" ry="2.88" class="st7"></rect>		<text x="8.76" y="695.15" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-rb3gen2-ptz-<tspan x="59.62" dy="1.2em" class="st9">mezz.dts</tspan></text>		</g>	<g id="shape1011-39" v:mid="1011" v:groupcontext="shape" transform="translate(258.511,-248.096)">		<title>Rectangle.1011</title>		<desc>qcs6490-addons-rb3gen2-video-mezz.dts</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81.9886" cy="698.451" width="163.98" height="30.5986"></v:textrect>		<rect x="0" y="683.151" width="163.977" height="30.5986" rx="2.88" ry="2.88" class="st7"></rect>		<text x="17.88" y="695.15" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-rb3gen2-<tspan x="44.95" dy="1.2em" class="st9">video</tspan>-mezz.dts</text>		</g>	<g id="shape1012-43" v:mid="1012" v:groupcontext="shape" transform="translate(258.511,-209.5)">		<title>Rectangle.1012</title>		<desc>qcs6490-addons-rb3gen2-vision-mezz.dts</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81.9886" cy="698.451" width="163.98" height="30.5986"></v:textrect>		<rect x="0" y="683.151" width="163.977" height="30.5986" rx="2.88" ry="2.88" class="st7"></rect>		<text x="17.88" y="695.15" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-rb3gen2-<tspan x="43.76" dy="1.2em" class="st9">vision</tspan>-mezz.dts</text>		</g>	<g id="shape1013-47" v:mid="1013" v:groupcontext="shape" transform="translate(250,-202.199)">		<title>Rectangle.1013</title>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<rect x="0" y="514.859" width="180" height="198.891" rx="2" ry="2" class="st10"></rect>	</g>	<g id="shape1014-49" v:mid="1014" v:groupcontext="shape" transform="translate(478.187,-642.693)">		<title>Rectangle.1014</title>		<desc>Camera</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81" cy="700.087" width="162" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="162" height="27.3253" rx="2" ry="2" class="st6"></rect>		<text x="61.84" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Camera</text>		</g>	<g id="shape1015-52" v:mid="1015" v:groupcontext="shape" transform="translate(476.687,-555.676)">		<title>Rectangle.1015</title>		<desc>qcm6490-camera.dtsi</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="82.5" cy="694.338" width="165" height="38.8235"></v:textrect>		<rect x="0" y="674.926" width="165" height="38.8235" rx="2.88" ry="2.88" class="st7"></rect>		<text x="28.83" y="697.64" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490-camera.dtsi</text>		</g>	<g id="shape1017-55" v:mid="1017" v:groupcontext="shape" transform="translate(476.687,-484.5)">		<title>Rectangle.1017</title>		<desc>qcs6490-addons-camera-rb3gen2.dtso</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="82.5" cy="694.338" width="165" height="38.8235"></v:textrect>		<rect x="0" y="674.926" width="165" height="38.8235" rx="2.88" ry="2.88" class="st7"></rect>		<text x="20.09" y="691.04" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-camera-<tspan x="50.02" dy="1.2em" class="st9">rb3gen2.dtso</tspan></text>		</g>	<g id="shape1019-59" v:mid="1019" v:groupcontext="shape" transform="translate(674.5,-642.693)">		<title>Rectangle.1019</title>		<desc>Component N</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="85.5" cy="700.087" width="171" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="171" height="27.3253" rx="2" ry="2" class="st6"></rect>		<text x="51.68" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Component N</text>		</g>	<g id="shape1020-62" v:mid="1020" v:groupcontext="shape" transform="translate(672.917,-555.676)">		<title>Rectangle.1020</title>		<desc>qcm6490-&#60;component&#62;.dtsi</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="87.0833" cy="694.338" width="174.17" height="38.8235"></v:textrect>		<rect x="0" y="674.926" width="174.167" height="38.8235" rx="2.88" ry="2.88" class="st7"></rect>		<text x="18.36" y="697.64" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490-&#60;component&#62;.dtsi</text>		</g>	<g id="shape1021-65" v:mid="1021" v:groupcontext="shape" transform="translate(672.917,-484.5)">		<title>Rectangle.1021</title>		<desc>qcm6490-addons-&#60;component&#62;.dtso</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="87.0833" cy="694.338" width="174.17" height="38.8235"></v:textrect>		<rect x="0" y="674.926" width="174.167" height="38.8235" rx="2.88" ry="2.88" class="st7"></rect>		<text x="42.67" y="691.04" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490-addons-<tspan x="41.26" dy="1.2em" class="st9">&#60;component&#62;.dtso</tspan></text>		</g>	<g id="shape1023-69" v:mid="1023" v:groupcontext="shape" transform="translate(117,-143.753)">		<title>Rectangle.1023</title>		<desc>qcs6490-rb3gen2.dtb</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="63" cy="693.877" width="126" height="39.7459"></v:textrect>		<rect x="0" y="674.004" width="126" height="39.7459" rx="2" ry="2" class="st11"></rect>		<text x="10.7" y="697.18" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-rb3gen2.dtb</text>		</g>	<g id="shape1026-72" v:mid="1026" v:groupcontext="shape" transform="translate(475.344,-143.753)">		<title>Rectangle.1026</title>		<desc>qcs6490-addons-camera-rb3gen2.dtbo</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="84.6562" cy="693.877" width="169.32" height="39.7459"></v:textrect>		<rect x="0" y="674.004" width="169.312" height="39.7459" rx="2" ry="2" class="st11"></rect>		<text x="22.25" y="690.58" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-camera-<tspan x="51.93" dy="1.2em" class="st9">rb3gen2.dtbo</tspan></text>		</g>	<g id="shape1028-76" v:mid="1028" v:groupcontext="shape" transform="translate(675,-82.4013)">		<title>Rectangle.1028</title>		<desc>qcm6490-addons-&#60;component&#62;.dtbo</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="85" cy="698.451" width="170" height="30.5986"></v:textrect>		<rect x="0" y="683.151" width="170" height="30.5986" rx="2" ry="2" class="st11"></rect>		<text x="40.58" y="695.15" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcm6490-addons-<tspan x="38.92" dy="1.2em" class="st9">&#60;component&#62;.dtbo</tspan></text>		</g>	<g id="shape1052-80" v:mid="1052" v:groupcontext="shape" transform="translate(674.805,1325) rotate(180)">		<title>Sheet.1052</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L482.76 713.75" class="st3"></path>	</g>	<g id="shape1029-83" v:mid="1029" v:groupcontext="shape" transform="translate(370.187,-84.038)">		<title>Rectangle.1029</title>		<desc>Build time fdt overlay</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="76.5" cy="700.087" width="153" height="27.3253"></v:textrect>		<rect x="0" y="686.425" width="153" height="27.3253" rx="2.88" ry="2.88" class="st12"></rect>		<text x="25.01" y="703.39" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Build time fdt overlay</text>		</g>	<g id="shape1031-86" v:mid="1031" v:groupcontext="shape" transform="translate(45.7576,-605.907)">		<title>Sheet.1031</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L799.24 713.75" class="st2"></path>	</g>	<g id="shape1032-89" v:mid="1032" v:groupcontext="shape" transform="translate(-271.562,518.97) rotate(-90)">		<title>Sheet.1032</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L482.75 713.75" class="st2"></path>	</g>	<g id="shape1033-92" v:mid="1033" v:groupcontext="shape" transform="translate(-55.5625,518.97) rotate(-90)">		<title>Sheet.1033</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L482.75 713.75" class="st2"></path>	</g>	<g id="shape1035-95" v:mid="1035" v:groupcontext="shape" transform="translate(478.687,-614)">		<title>Sheet.1035</title>		<desc>(Board dependent)</desc>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="80.5" cy="702" width="161" height="23.5"></v:textrect>		<rect x="0" y="690.25" width="161" height="23.5" rx="2" ry="2" class="st13"></rect>		<text x="34.93" y="705.3" class="st14" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>(Board dependent)</text>		</g>	<g id="shape1036-98" v:mid="1036" v:groupcontext="shape" transform="translate(674.5,-614)">		<title>Sheet.1036</title>		<desc>(Board independent)</desc>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="85.5" cy="702" width="171" height="23.5"></v:textrect>		<rect x="0" y="690.25" width="171" height="23.5" rx="2" ry="2" class="st13"></rect>		<text x="35.56" y="705.3" class="st14" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>(Board independent)</text>		</g>	<g id="shape1037-101" v:mid="1037" v:groupcontext="shape" transform="translate(-533.75,204.729) rotate(-90)">		<title>Sheet.1037</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M6.24 713.75 L6.6 713.75 L22.77 713.75" class="st15"></path>	</g>	<g id="shape1040-107" v:mid="1040" v:groupcontext="shape" transform="translate(-373.25,255.733) rotate(-90)">		<title>Sheet.1040</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M6.24 713.75 L6.6 713.75 L23.33 713.75" class="st15"></path>	</g>	<g id="shape1041-112" v:mid="1041" v:groupcontext="shape" transform="translate(-373.25,312.66) rotate(-90)">		<title>Sheet.1041</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M6.24 713.75 L6.6 713.75 L17.18 713.75" class="st15"></path>	</g>	<g id="shape1043-117" v:mid="1043" v:groupcontext="shape" transform="translate(-533.837,530.042) rotate(-89.9832)">		<title>Sheet.1043</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M6.24 713.75 L6.6 713.75 L298.2 713.75" class="st15"></path>	</g>	<g id="shape1045-122" v:mid="1045" v:groupcontext="shape" transform="translate(-153.747,532.178) rotate(-90.1547)">		<title>Sheet.1045</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M7.68 713.75 L8.04 713.75 L301 713.75" class="st17"></path>	</g>	<g id="shape1046-128" v:mid="1046" v:groupcontext="shape" transform="translate(46.25,600.75) rotate(-90)">		<title>Sheet.1046</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M7.68 713.75 L8.04 713.75 L371.5 713.75" class="st17"></path>	</g>	<g id="shape1047-133" v:mid="1047" v:groupcontext="shape" transform="translate(46.25,190.426) rotate(-90)">		<title>Sheet.1047</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M7.68 713.75 L8.04 713.75 L32.35 713.75" class="st17"></path>	</g>	<g id="shape1048-138" v:mid="1048" v:groupcontext="shape" transform="translate(-154.562,190.426) rotate(-90)">		<title>Sheet.1048</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M7.68 713.75 L8.04 713.75 L32.35 713.75" class="st17"></path>	</g>	<g id="shape1050-143" v:mid="1050" v:groupcontext="shape" transform="translate(882.873,572.059) rotate(90.1406)">		<title>Sheet.1050</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M7.68 713.75 L8.04 713.75 L50.94 713.75" class="st17"></path>	</g>	<g id="shape1054-148" v:mid="1054" v:groupcontext="shape" transform="translate(904.625,570.014) rotate(90)">		<title>Sheet.1054</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M7.68 713.75 L8.04 713.75 L41.29 713.75" class="st17"></path>	</g>	<g id="shape1060-153" v:mid="1060" v:groupcontext="shape" transform="translate(933.75,232.054) rotate(90)">		<title>Sheet.1060</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 713.75 L173.06 713.75" class="st3"></path>	</g>	<g id="shape1061-156" v:mid="1061" v:groupcontext="shape" v:layermember="0" transform="translate(220,-317.64)">		<title>Dynamic connector.1061</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M0 722.75 L0 729.75 L21.96 729.75" class="st19"></path>	</g>	<g id="shape1062-162" v:mid="1062" v:groupcontext="shape" transform="translate(258.523,-143.753)">		<title>Rectangle.1062</title>		<desc>qcs6490-addons-rb3gen2.dtb</desc>		<v:userdefs>			<v:ud v:nameu="visVersion" v:val="VT0(15):26"></v:ud>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="81.9886" cy="693.877" width="163.98" height="39.7459"></v:textrect>		<rect x="0" y="674.004" width="163.977" height="39.7459" rx="2" ry="2" class="st11"></rect>		<text x="9.97" y="697.18" class="st5" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>qcs6490-addons-rb3gen2.dtb</text>		</g>	<g id="shape1063-165" v:mid="1063" v:groupcontext="shape" transform="translate(-372.972,549.762) rotate(-91.5664)">		<title>Sheet.1063</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M6.24 713.75 L6.6 713.75 L18.71 713.75" class="st15"></path>	</g>	<g id="shape1057-170" v:mid="1057" v:groupcontext="shape" transform="translate(463,-36.5)">		<title>Sheet.1057</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<rect x="0" y="696.662" width="17.8" height="17.0878" rx="2" ry="2" class="st20"></rect>	</g>	<g id="shape1073-172" v:mid="1073" v:groupcontext="shape" transform="translate(-153.751,608.741) rotate(-89.9985)">		<title>Sheet.1073</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<path d="M6.24 713.75 L6.6 713.75 L38.76 713.75" class="st15"></path>	</g>	<g id="shape1074-177" v:mid="1074" v:groupcontext="shape" transform="translate(1054.26,569.997) rotate(90)">		<title>Sheet.1074</title>		<path d="M0 713.75 L31.21 713.75" class="st19"></path>	</g>	<g id="shape1079-182" v:mid="1079" v:groupcontext="shape" transform="translate(480.5,-38.1439)">		<title>Sheet.1079</title>		<desc>Upstream</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="30.75" cy="706.85" width="61.5" height="13.8"></v:textrect>		<rect x="0" y="699.95" width="61.5" height="13.8" class="st21"></rect>		<text x="4.71" y="710.45" class="st22" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Upstream</text>		</g>	<g id="shape1080-185" v:mid="1080" v:groupcontext="shape" transform="translate(553,-36.5)">		<title>Sheet.1080</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<rect x="0" y="696.662" width="17.8" height="17.0878" rx="2" ry="2" class="st23"></rect>	</g>	<g id="shape1081-187" v:mid="1081" v:groupcontext="shape" transform="translate(570.5,-38.1439)">		<title>Sheet.1081</title>		<desc>Open source</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="38.25" cy="706.85" width="76.5" height="13.8"></v:textrect>		<rect x="0" y="699.95" width="76.5" height="13.8" class="st21"></rect>		<text x="4.61" y="710.45" class="st22" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Open source</text>		</g>	<g id="shape1082-190" v:mid="1082" v:groupcontext="shape" transform="translate(654.852,-36.5)">		<title>Sheet.1082</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<rect x="0" y="696.662" width="17.8" height="17.0878" rx="2" ry="2" class="st24"></rect>	</g>	<g id="shape1083-192" v:mid="1083" v:groupcontext="shape" transform="translate(672.352,-38.1439)">		<title>Sheet.1083</title>		<desc>Downstream</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="38.25" cy="706.85" width="76.5" height="13.8"></v:textrect>		<rect x="0" y="699.95" width="76.5" height="13.8" class="st21"></rect>		<text x="4.29" y="710.45" class="st22" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Downstream</text>		</g>	<g id="shape1084-195" v:mid="1084" v:groupcontext="shape" transform="translate(760.602,-36.5)">		<title>Sheet.1084</title>		<v:userdefs>			<v:ud v:nameu="visAltText" v:val="VT4(Device tree overlay)"></v:ud>			<v:ud v:nameu="visAltDescription" v:val="VT4(This image shows the  device tree overlay feature to support out-of-device tree blobs and baseline device tree blobs.)"></v:ud>		</v:userdefs>		<rect x="0" y="696.662" width="17.8" height="17.0878" rx="2" ry="2" class="st25"></rect>	</g>	<g id="shape1085-197" v:mid="1085" v:groupcontext="shape" transform="translate(778.102,-38.1439)">		<title>Sheet.1085</title>		<desc>Build blobs</desc>		<v:textblock v:margins="rect(4,4,4,4)"></v:textblock>		<v:textrect cx="34.5" cy="706.85" width="69" height="13.8"></v:textrect>		<rect x="0" y="699.95" width="69" height="13.8" class="st21"></rect>		<text x="4.97" y="710.45" class="st22" v:langid="1033"><v:paragraph v:horizalign="1"></v:paragraph><v:tablist></v:tablist>Build blobs</text>		</g></g>
</svg>

**図：QCS6490でのデバイスツリーオーバーレイ**

ビルドシステムは `fdt_overlay` ツールを使用して、ビルド中にツリー外デバイスツリーオーバーレイをプロビジョニングします。

DTBOの統合プロセスは、`meta-qcom-hwe/conf/machine/<SoC>-<board>-<variant>.conf` ファイル内のリストにあるDTBOファイルの統合をサポートしています。

以下は、QCS6490でデバイスツリー変数を列挙する方法の例です。プラットフォーム特有の情報については、ボード特有のマシン構成ファイルを参照してください。

# List of dtbs for corresponding supported qcs6490 platforms
    KERNEL_DEVICETREE = " \
                         qcom/<SoC>-addons-<Variant>.dtb \
                         "
    # Additional list of dtbos to be overlaid on top of base kernel devicetree files
    # Format - KERNEL_TECH_DTBOS[<base-dtb-name>] = "<dtbo1 <dtbo2> ..."
    # For example:
    
    KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2] = " \
    qcm6490-graphics.dtbo qcm6490-wlan-rb3.dtbo \
    qcm6490-display-rb3.dtbo qcm6490-bt.dtbo \
    qcm6490-video.dtbo qcm6490-wlan-upstream.dtbo \
    "
    Copy to clipboard

カーネルでDTBサポートを更新し、起動時にDTBを選択するには、以下の手順に従います。

**カーネルでのDTBビルドサポート**

新しいプラットフォームのデバイスツリーをカーネルビルドに統合するには、`Makefile` を更新します。

以下の例では、QCS6490 SoC向けにDTBをカスタマイズしています。以下の方法を複製して、新しいDTBを追加します。

diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
    index 183aeba47193..a7815c774f7c 100644
    --- a/arch/arm64/boot/dts/qcom/Makefile
    +++ b/arch/arm64/boot/dts/qcom/Makefile
    dtb-$(CONFIG_ARCH_QCOM)        += qcs6490-addons-rb3gen2.dtb
    +dtb-$(CONFIG_ARCH_QCOM)        += qcs6490-my-board.dtb
    dtb-$(CONFIG_ARCH_QCOM)        += qcs6490-rb3gen2.dtb
    dtb-$(CONFIG_ARCH_QCOM)        += qcs404-evb-1000.dtb
    Copy to clipboard

**マシン構成にDTBを組み込む**

Yoctoマシン構成が更新され、対応するデバイスツリー・ブロブが組み込まれます。例えば、QCS6490マシンのサポート用にデバイスツリーを追加するには、以下のファイルを使用します。

`meta-qcom-hwe/conf/machine/qcs6490-rb3gen2-core-kit.conf`：

OUT_OF_KERNEL_DTSO - qcs6490-rb3gen2-core-kit.conf
    # List of dtbs for corresponding supported qcs6490 platforms
    KERNEL_DEVICETREE = " \
                         qcom/qcs6490-my-board.dtb   \
                         qcom/qcs6490-addons-rb3gen2.dtb \
                         qcom/qcs6490-my-board.dtb   \
                         "

    # Additional list of DTBOs to be overylaid on top of base kernel devicetree
    # See how existing boards are managing it in the following example:
    # Format - KERNEL_TECH_DTBOS[<base-dtb-name>] = "<dtbo1 <dtbo2> ..."
    
    KERNEL_TECH_DTBOS[qcs6490-addons-rb3gen2] = " \
    qcm6490-graphics.dtbo qcm6490-wlan-rb3.dtbo \
    qcm6490-display-rb3.dtbo qcm6490-bt.dtbo \
    qcm6490-video.dtbo qcm6490-wlan-upstream.dtbo \
    Copy to clipboard

注釈

他のSoCについては、`meta-qcom-hwe/conf/machine/*.conf` ディレクトリを参照してください。カスタムBSPバリアントのDTBファイル名に `addons` が含まれています。

**起動時のDTB選択**

カスタムDTBは、EFIで更新されるUKIイメージの一部としてパッケージ化され、選択されたDTBで起動します。

ukifyツールを使用してUKIイメージを生成します。ukifyツールはYoctoビルドの一部として `tmp-glibc/sysroots-components/x86_64/systemd-boot-native/usr/bin/ukify` ビルドディレクトリで使用できます。

UKIイメージを生成するには、以下を実行します。

# Note - ukify tool need python 3.10 version or above
    
       ukify build --efi-arch=aa64  \
                --stub=<build-path>/tmp-glibc/deploy/images/<SoC>/linuxaa64.efi.stub \
                --linux=<build-path>/tmp-glibc/deploy/images/<SoC>/Image \
                --initrd=<build-path>/tmp-glibc/deploy/images/<SoC>/initramfs-qcom-image-<SoC>.cpio.gz \
                --cmdline="console=ttyMSM0,115200n8 earlycon qcom_geni_serial.con_enabled=1 kernel.sched_pelt_multiplier=4 mem_sleep_default=s2idle" \
                --devicetree=<build-path>/tmp-glibc/deploy/images/<SoC>/<SoC>-my-board.dtb \
                --output=./uki.efi
    Copy to clipboard

ukify buildコマンドにより、`uki.efi` イメージとカスタムボードDTBが生成されます。

ESPパーティションで `uki.efi` イメージを更新するには、以下を実行します。

# Following may need sudo privilege
    
    # Take the yocto build generated efi.bin and mount it locally
      mount <build-path>/tmp-glibc/deploy/images/<SoC>/efi.bin  /mnt --options rw
    
    # Overwrite the uki.efi with one packaged above
      cp uki.efi /mnt/EFI/Linux/uki.efi
      umount /mnt
    
    # now efi.bin carries packaged uki.efi which can be flashed to the target and booted
    # UEFI shall now pick the <SoC>-my-board.dtb that is part of uki.efi image
    
    # reboot into fastboot and flash efi.bin
      fastboot flash efi <build-path>/tmp-glibc/deploy/images/<SoC>/efi.bin
    Copy to clipboard

デバイスツリーの仕様の詳細については、[The Devicetree Specification](https://www.devicetree.org/specifications/) を参照してください。

デバイスツリーのLinuxカーネルのドキュメントについては、[Linux and the Devicetree](https://docs.kernel.org/devicetree/usage-model.html) を参照してください。

**DTBO統合シーケンス**

`image-qcom-deploy.bbclass` クラスの `merge_dtbos()` タスクは、`fdt_overlay` ツールを使用してDTBOを統合します。

`merge_dtbos()` タスクの反復は、以下の順序で発生します。

1. DTBOファイル名が構成ファイル内に列挙されます。
2. `KERNEL_DEVICETREE` 変数により、DTBOファイル名が反復されます。
3. ベースDTBごとに、DTBO統合タスクが、`KERNEL_TECH_DTBOS` 変数内に列挙されているDTBOをオーバーレイします。
4. オーバーレイ・プロセスが完了したら、最終的なDTB出力が生成されます。

## Yoctoから独立したカーネルをコンパイルする

Qualcomm Linuxカーネルは、Yoctoのビルドシステムサポートがなくてもコンパイルできます。

**前提条件**

カーネルのコンパイルプロセスを始めるため、以下の依存関係をプロビジョニングしてください。

> 
> 
> - aarch64 ツールチェーン
> - systemd-boot EFIスタブ。UKIイメージの一部として含めます。
> - systemd ukifyツール。カーネルイメージ、initramfs、DTBをUKIイメージにパッケージ化するために使用します。
> - UKIイメージがあるinitramfs
> - 更新されたUKIが格納されたESPイメージ。デバイスの起動のためにフラッシュする必要があります。

これらの依存関係と必要なツールは [ドッカ―](https://git.codelinaro.org/clo/la/kernel/qcom) によりプロビジョニングされています。  このドッカーはカーネルスタンドアロンの開発に使用できます。

**ドッカーのセットアップ**

git clone git@github.com:qualcomm-linux/kmake-image.git
    cd kmake-image
    docker build -t kmake-image .
    cd ..
    Copy to clipboard

**エイリアスのセットアップ**

alias kmake-image-run='docker run -it --rm --user $(id -u):$(id -g) --workdir="$PWD" -v "$(dirname $PWD)":"$(dirname $PWD)" kmake-image'
    alias kmake='kmake-image-run make'
    Copy to clipboard

**Linuxカーネルのソースを取得する**

Linuxカーネルのソースを、[CodeLinaro](https://git.codelinaro.org/clo/la/kernel/qcom) でホストされているgitレポジトリからクローンします。

レポジトリをクローンしてソースコードを取得するには、以下のコマンドを実行します。

git clone https://git.codelinaro.org/clo/la/kernel/qcom kernel
    cd kernel
    git checkout <released sha>
    # e.g.
    git checkout origin/kernel.qclinux.1.0.r2-rel
    cd ..
    Copy to clipboard

**ramdiskを取得する**

カスタムinitramfsを使用できます。参考として、以下のコマンドを使用して、[Linaro Snapshots site](https://snapshots.linaro.org/member-builds/qcomlt/testimages/arm64/latest/) でホストされているarm64用のinitramfsを取得できます。

mkdir artifacts
    wget https://snapshots.linaro.org/member-builds/qcomlt/testimages/arm64/latest/initramfs-test-image-qemuarm64-*.rootfs.cpio.gz -O artifacts/ramdisk.gz
    Copy to clipboard

**systemd-bootバイナリを取得する**

wget -O artifacts/systemd-boot-efi.deb http://ports.ubuntu.com/pool/universe/s/systemd/systemd-boot-efi_255.4-1ubuntu8_arm64.deb
    dpkg-deb -xv artifacts/systemd-boot-efi.deb artifacts/systemd
    Copy to clipboard

**カーネルをビルドする**

`arch/arm64/configs/qcom_defconfig` を使用すると、以下の命令を使用してカーネルとビルドを構成できます。

cd kernel
    kmake O=../kobj qcom_defconfig
    kmake O=../kobj -j$(nproc)
    kmake O=../kobj -j$(nproc) dir-pkg INSTALL_MOD_STRIP=1
    Copy to clipboard

**DLKMをramdiskにパッケージ化する**

(cd ../kobj/tar-install ; find lib/modules | cpio -o -H newc -R +0:+0 | gzip -9 >> ../../artifacts/ramdisk.gz)
    Copy to clipboard

**ブート/ESPパーティション用にefi.binを生成する**

cd ..
    kmake-image-run generate_boot_bins.sh efi --ramdisk artifacts/ramdisk.gz \
       --systemd-boot artifacts/systemd/usr/lib/systemd/boot/efi/systemd-bootaa64.efi \
       --stub artifacts/systemd/usr/lib/systemd/boot/efi/linuxaa64.efi.stub \
       --linux kobj/arch/arm64/boot/Image \
       --cmdline "${CMDLINE}" \
       --output images
    Copy to clipboard

**デバイスツリーをサポートするターゲット用にdtb.binを生成する**

kmake-image-run generate_boot_bins.sh dtb --input kobj/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dtb \
    --output images
    Copy to clipboard

結果として得られる **efi.bin** と **dtb.bin** はイメージディレクトリに集められ、QCS6490 RB3Gen2で起動できるようになります。

**バイナリをフラッシュして起動する**

fastboot flash efi images/efi.bin
    fastboot flash dtb_a images/dtb.bin
    fastboot reboot
    Copy to clipboard

EFIイメージをフラッシュして再起動する方法については、[デバイスを起動する](https://docs.qualcomm.com/doc/80-70020-3JA/topic/getting_started_chapter2.html#flash-images-and-boot) を参照してください。

注釈

追加のツリー外カーネルモジュールをビルドするには、Yoctoのビルドメカニズム全体を活用します。

Last Published: Jan 01, 2026

[Previous Topic
起動後設定を構成する](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/post-boot-settings.md) [Next Topic
リモート・プロセッサー（remoteproc）サブシステムを構成する](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/remoteproc-overview.md)