# 커널 개발

Qualcomm Linux 커널은 Yocto 빌드 워크플로우를 사용하거나 독립 실행형으로 개발할 수 있습니다.

## Yocto를 사용하여 커널 개발

Qualcomm Linux `meta-qcom-hwe` 계층은 지원되는 시스템의 Qualcomm Linux 커널을 가져오고 페치하는 `linux-qcom-base_6.6.bb` 및 `linux-qcom-custom_6.6` 레시피를 지원합니다.

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-board-variant 이름과 동일합니다. 예를 들어 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-3KO/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별 시스템 포함 파일에서 `KERNEL_CMDLINE.EXTRA` Yocto 구성 변수를 수정합니다. 그 예로, `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 부팅 매니저와 kernel 이미지를 패키징된 UKI type-2 이미지 파일로 컴파일하려면 다음 방법을 사용하세요.

하드웨어 SoC용 Yocto 빌드는 필요한 모든 이미지를 생성하고 부트 이미지를 EFI 파티션 영역에 플래시되는 `efi.bin` 으로 패키징합니다. `efi.bin` 파일은 systemd-boot 부팅 매니저와 커널 이미지로 구성되어 있으며, 이는 UKI type-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 이미지 형식에 대한 자세한 내용은 [Type #2 EFI Unified Kernel Images](https://uapi-group.org/specifications/specs/boot_loader_specification/#type-2-efi-unified-kernel-images) 를 참조하세요.

ESP에 대한 자세한 내용은 부팅 및 [기기 브링업하기](https://docs.qualcomm.com/doc/80-70020-3KO/topic/getting_started_chapter2.html#bring-up-the-device) 를 참조하세요.

## 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는 기기 외부 트리 blob을 유지하고 기준 기기 트리 blob과 병합하는 기기 트리 오버레이 기능을 지원합니다. SoC 기기 트리 지원은 `arch/arm64/boot/dts/qcom` 디렉토리의 커널 소스에 있습니다.

Qualcomm 기기 트리 소스 는 기기 트리를 나열하고 명확한 구분을 유지하여, 업스트림 정렬 기반을 명확하게 프로비저닝하기 위한 다운스트림 추가 사항을 포함할 수 있습니다.

다운스트림 콘텐츠는 커널 소스 외부에 호스팅됩니다. 트리 외부 드라이버는 커널 외부에서 기기 트리 오버레이 추가 사항을 유지합니다. 빌드 프로세스가 진행되는 동안, 해당하는 기기 트리 오버레이는 기본 보드 DTB와 병합되며 부트 이미지와 함께 사용되는 통합된 DTB가 생성됩니다.

다음 그림은 QCS6490에서 사용자 지정 BSP에 대한 기기 트리 오버레이의 빌드 프로세스 및 DTB 생성에 대해 보여줍니다.

참고

- 기본 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는 선택한 DTB를 사용하여 부팅할 수 있도록 EFI에서 업데이트된 UKI 이미지의 일부로 패키징되어 있습니다.

ukify 도구를 사용하여 UKI 이미지를 생성하세요. ukify 도구는 `tmp-glibc/sysroots-components/x86_64/systemd-boot-native/usr/bin/ukify` 빌드 디렉토리에 있는 Yocto 빌드의 일부로 사용 가능합니다.

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 빌드 명령어는 사용자 지정 보드 DTB가 있는 `uki.efi` 이미지를 생성합니다.

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. DTBO 파일 이름이 `KERNEL_DEVICETREE` 변수를 통해 반복됩니다.
3. 각 기본 DTB를 대상으로, DTBO 병합 작업은 `KERNEL_TECH_DTBOS` 변수에 나열된 DTBO를 오버레이합니다.
4. 오버레이 프로세스가 완료되면 최종 DTB 출력이 생성됩니다.

## Yocto와 독립적으로 커널 컴파일

Qualcomm Linux 커널은 Yocto 빌드 시스템의 지원 없이도 컴파일할 수 있습니다.

**요구 조건**

커널 컴파일 프로세스를 설정하려면 다음과 같은 종속요소를 프로비저닝합니다.

> 
> 
> - aarch64 툴체인
> - UKI 이미지의 일부로 포함하기 위한 systemd-boot EFI 스텁
> - 시스템 이미지, initramfs, DTB를 UKI 이미지로 패키징하기 위한 systemd ukify 도구
> - UKI 이미지가 있는 initramfs
> - 업데이트된 UKI를 포함하고, 기기를 부팅하려면 반드시 플래시해야 하는 ESP 이미지

이러한 종속요소는 필요한 도구와 더불어 [Docker](https://git.codelinaro.org/clo/la/kernel/qcom) 를 사용하여 프로비저닝되었으며,  이는 커널을 독립 실행형으로 개발하는 데 사용할 수 있습니다.

**Docker 설정**

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 커널 소스 가져오기**

[CodeLinaro](https://git.codelinaro.org/clo/la/kernel/qcom) 에서 호스팅되는 git 저장소에서 Linux 커널 소스를 복제합니다.

저장소를 복제하고 소스 코드를 가져오려면 다음 명령어를 실행하세요.

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을 RAM 디스크에 패키징**

(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-3KO/topic/getting_started_chapter2.html#flash-images-and-boot) 를 참조하세요.

참고

추가적인 트리 외부 커널 모듈을 빌드하려면 전체 Yocto 빌드 메커니즘을 활용하세요.

Last Published: Jan 01, 2026

[Previous Topic
postboot 설정 구성](https://docs.qualcomm.com/bundle/publicresource/80-70020-3KO/topics/post-boot-settings.md) [Next Topic
remoteprocessor(remoteproc) 서브시스템 구성](https://docs.qualcomm.com/bundle/publicresource/80-70020-3KO/topics/remoteproc-overview.md)