# Biên dịch với GitHub bằng firmware và thành phần bổ sung

Dùng thông tin này để dựng các lớp Qualcomm Linux Yocto khác nhau, bao gồm `meta-qcom-hwe`, `meta-qcom-extras`, `meta-qcom-qim-product-sdk` và `meta-qcom-robotics-sdk` bằng các nguồn và tệp nhị phân/thư viện độc quyền chọn lọc.

Ghi chú

Thông tin này chỉ áp dụng cho người dùng được cấp quyền. Để nâng cấp quyền truy cập của bạn, hãy chuyển đến [Trang hỗ trợ của Qualcomm](https://www.qualcomm.com/support/working-with-qualcomm).

## Yêu cầu đối với máy chủ

- Cấu hình

    - Máy x86
    - CPU lõi tứ, ví dụ, Intel i7-2600 ở tốc độ 3,4 GHz (tương đương hoặc mạnh hơn)
    - 300 GB dung lượng đĩa trống (phân vùng swap &gt; 32 GB)
    - 16 GB RAM
    - Ubuntu 22.04
- Công cụ

    - Git 1.8.3.1 trở lên
    - Tar 1.28 trở lên
    - Python 3.10.2 trở lên
    - GCC 8.0 trở lên
    - GNU Make 4.0 trở lên
- Quyền

    - Cần có quyền `sudo` để chạy một vài lệnh

Ghi chú

Quá trình biên dịch mã trên máy ảo diễn ra chậm và có thể mất vài giờ. Bạn nên dùng máy chủ Ubuntu để biên dịch. Để thiết lập máy ảo (VM) chạy Ubuntu 22.04 trên Microsoft^®^ Windows^®^ hoặc Apple^®^ macOS^®^, hãy xem [Hướng dẫn thiết lập máy ảo cho Qualcomm Linux](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-41/).

## Cài đặt QSC CLI

Để đăng ký ID email Qualcomm của bạn, hãy chuyển đến [Trang hỗ trợ của Qualcomm](https://www.qualcomm.com/support/working-with-qualcomm).

1. Cài đặt curl (nếu chưa cài đặt):

sudo apt install curl
        Copy to clipboard
2. Tải xuống gói Debian cho `qsc-cli`:

cd <workspace_path>
        # For x86
        curl -L https://softwarecenter.qualcomm.com/api/download/software/tools/Qualcomm_Software_Center/Linux/Debian/latest.deb -o qsc_installer.deb
        # For ARM64
        curl -L https://softwarecenter.qualcomm.com/api/download/software/tools/Qualcomm_Software_Center/Linux/ARM64/Debian/latest.deb -o qsc_installer.deb
        Copy to clipboard
3. Cài đặt gói Debian cho `qsc-cli`:

sudo apt update
        sudo apt install ./qsc_installer.deb
        Copy to clipboard
4. Đăng nhập vào `qsc-cli` bằng ID email đã đăng ký:

qsc-cli login -u <username>
        Copy to clipboard

Để biết thêm thông tin về `qsc-cli`, hãy xem [Cách đồng bộ hóa](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#howto-sync).

## Thiết lập máy chủ Ubuntu

Cài đặt và đặt cấu hình các công cụ phần mềm trên máy chủ Ubuntu.

1. Cài đặt các gói sau:

sudo apt update
        sudo apt install repo gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm python3-subunit mesa-common-dev zstd liblz4-tool locales tar python-is-python3 file libxml-opml-simplegen-perl vim whiptail g++ libacl1
        sudo apt-get install lib32stdc++6 libncurses5 checkinstall libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev curl
        Copy to clipboard
2. Thêm ID đăng nhập Qualcomm với PAT của bạn vào tệp `~/.netrc` trong thư mục home:

# Log in to qsc-cli to generate PAT
        qsc-cli login -u <username>
        # Run the following command to generate PAT
        qsc-cli show-access-token
        # This command gives output as shown in the following note
        # The last line in this output is the token, which can be used to access
        # Qualcomm Proprietary repositories. This token expires in two weeks.
        Copy to clipboard

Ghi chú

user@hostname:/local/mnt/workspace$ qsc-cli show-access-token

[Info]: Starting qsc-cli version 0.0.0.9

**5LThNlklb55mMVLB5C2KqUGU2jCF**
3. Dùng trình soạn thảo văn bản bạn muốn để chỉnh sửa tệp `~/.netrc` và thêm các mục sau. Tạo tệp `~/.netrc` nếu chưa có.

machine chipmaster2.qti.qualcomm.com
        login <your Qualcomm login id>
        password <your PAT token>
        
        machine qpm-git.qualcomm.com
        login <your Qualcomm login id>
        password <your PAT token>
        Copy to clipboard
4. Thiết lập ngôn ngữ (nếu chưa thiết lập):

sudo locale-gen en_US.UTF-8
        sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
        export LC_ALL=en_US.UTF-8
        export LANG=en_US.UTF-8
        Copy to clipboard
5. Cập nhật cấu hình git:

# Check if your identity is configured in .gitconfig
        git config --get user.email
        git config --get user.name
        
        # Run the following commands if you don't have your account identity set in .gitconfig
        git config --global user.email <Your email ID>
        git config --global user.name <"Your Name">
        
        # Add the following UI color option for output of console (optional)
        git config --global color.ui auto
        
        # Add the following git configurations to fetch large size repositories and to avoid unreliable connections
        git config --global http.postBuffer 1048576000
        git config --global http.maxRequestBuffer 1048576000
        git config --global http.lowSpeedLimit 0
        git config --global http.lowSpeedTime 999999
        
        # Add the following git configurations to follow remote redirects from http-alternates files or alternates
        git config --global http.https://chipmaster2.qti.qualcomm.com.followRedirects true
        git config --global http.https://qpm-git.qualcomm.com.followRedirects true
        Copy to clipboard
6. Thiết lập Python 3.10.2:

Ghi chú

Bỏ qua các hướng dẫn sau nếu bạn đã có Python 3.10.2 hoặc các phiên bản mới hơn.

python --version
        # Download it in a directory of your choice
        wget https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz
        tar -xvf Python-3.10.2.tgz
        cd Python-3.10.2
        # Use sudo if you need to access /opt
        ./configure --prefix=/opt/python3 --enable-optimizations
        make
        make install
        ln -s /opt/python3/bin/python3  /opt/python3/bin/python
        export PATH=/opt/python3/bin:$PATH
        export PYTHONPATH=/opt/python3/lib:$PYTHONPATH
        Copy to clipboard

## Biên dịch bằng mã nguồn firmware

### Đồng bộ hóa firmware

Các lệnh trong những phần sau dựa trên tệp thực thi và mã nguồn cho bản firmware không có modem và GPS (xem lệnh trong [Ánh xạ bản phân phối firmware tương ứng với  git repositories](https://docs.qualcomm.com/doc/80-70020-254V/topic/build_addn_info.html#mapping-firmware-table)). Do đó, `qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk` được dùng. Nếu bạn dùng bất kỳ bản phân phối nào khác, hãy cập nhật thư mục cho phù hợp.

Bảng bên dưới mô tả các lớp Qualcomm Yocto và phiên bản phát hành:

| Cấp độ truy cập | Lớp Yocto | Phiên bản phát hành | Ví dụ |
| --- | --- | --- | --- |
| Nhà phát triển mã nguồn mở (chưa đăng ký) | `meta-qcom-hwe` | phiên bản phát hành manifest | qcom-6.6.90-QLI.1.5-Ver.1.1.xml |
| Nhà phát triển mã nguồn mở (chưa đăng ký) | `meta-qcom-qim-product-sdk` | phiên bản phát hành manifest | qcom-6.6.90-QLI.1.5-Ver.1.1\_qim-product-sdk-2.0.1.xml |
| Nhà phát triển mã nguồn mở (chưa đăng ký) | `meta-qcom-robotics-sdk` | phiên bản phát hành manifest | qcom-6.6.90-QLI.1.5-Ver.1.1\_robotics-product-sdk-1.1.xml |
| Nhà phát triển được cấp phép quyền truy cập | `meta-qcom-extras` | phiên bản phát hành meta-qcom-extras | r1.0\_00097.0 |
| Xem [Ánh xạ cấp độ truy cập đến bản phân phối firmware](https://docs.qualcomm.com/doc/80-70020-254V/topic/build_addn_info.html#build-mapping-access-levels) | NA | Phiên bản phát hành firmware | r1.0\_00095.0 |
|  |  |  |  |
|  |  |  |  |

Bảng sau đây mô tả bản phân phối firmware mà bạn có thể tải xuống. Để biết thêm thông tin về các lớp Yocto, hãy xem [Các lớp siêu dữ liệu của Qualcomm Linux](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-27/qualcomm_bsp_metadata_layers.html).

| **Cấp độ truy cập** | **Bản phân phối** | Lớp Yocto |
| --- | --- | --- |
| Nhà phát triển được cấp phép quyền truy cập | Bản build BSP: Hệ điều hành cấp cao và mã nguồn firmware (chỉ GPS)<br><br><br>`Qualcomm_Linux.SPF.1.0|AP|Standard|OEM|NoModem` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras` |
| Nhà phát triển được cấp phép quyền truy cập | Bản dựng BSP + Qualcomm IM SDK<br><br><br><br>> <br>> <br>> `Qualcomm_Linux.SPF.1.0|AP|Standard|OEM|NM_QIMPSDK` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras`<br><br><br>`meta-qcom-qim-product-sdk` |
| Nhà phát triển được cấp phép quyền truy cập | Bản dựng BSP + Qualcomm IM SDK+ QIR SDK<br><br><br><br>> <br>> <br>> `Qualcomm_Linux.SPF.1.0|AP|Standard|OEM|NM_QIRPSDK` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras`<br><br><br>`meta-qcom-robotics-extras`<br><br><br>`meta-ros`<br><br><br>`meta-qcom-robotics`<br><br><br>`meta-qcom-robotics-distro`<br><br><br>`meta-qcom-robotics-sdk`<br><br><br>`meta-qcom-qim-product-sdk` |
| Nhà phát triển được cấp phép (liên hệ với Qualcomm để có quyền truy cập) | Bản build BSP: Hệ điều hành cấp cao và mã nguồn firmware (chỉ GPS)<br><br><br>`Qualcomm_Linux.SPF.1.0|AP|Standard|OEM|` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras` |
| Nhà phát triển được cấp phép (liên hệ với Qualcomm để có quyền truy cập) | Bản dựng BSP + Qualcomm IM SDK (chỉ GPS)<br><br><br><br>> <br>> <br>> `Qualcomm_Linux.SPF.1.0|AP|Standard|OEM|QIMPSDK` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras`<br><br><br>`meta-qcom-robotics-extras`<br><br><br>`meta-qcom-qim-product-sdk` |
| Nhà phát triển được cấp phép (liên hệ với Qualcomm để có quyền truy cập) | Bản build BSP: Hệ điều hành cấp cao và mã nguồn firmware (GPS và modem)<br><br><br><br>> <br>> <br>> `Qualcomm_Linux.SPF.1.0|AMSS|Standard|OEM|` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras` |
| Nhà phát triển được cấp phép (liên hệ với Qualcomm để có quyền truy cập) | Bản dựng BSP + Qualcomm IM SDK (GPS và modem)<br><br><br><br>> <br>> <br>> `Qualcomm_Linux.SPF.1.0|AMSS|Standard|OEM|QIMPSDK` | `meta-qcom`<br><br><br>`meta-qcom-hwe`<br><br><br>`meta-qcom-distro`<br><br><br>`meta-qcom-extras`<br><br><br>`meta-qcom-qim-product-sdk` |
|  |  |  |
|  |  |  |
|  |  |  |

Bảng sau đây ánh xạ các bản phân phối firmware đến kho lưu trữ git:

Ánh xạ bản phân phối firmware tương ứng git repositories

| Bản phân phối firmware | Lệnh Git | Thư mục mà firmware được đồng bộ hóa khi thực hiện lệnh git clone |
| --- | --- | --- |
| Qualcomm\_Linux.SPF.1.0|AP|Standard|OEM|NoModem | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem.git` | `qualcomm-linux-spf-1-0_ap_standard_oem_nomodem` |
| Qualcomm\_Linux.SPF.1.0|AP|Standard|OEM|NM\_QIMPSDK | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk.git` | `qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk` |
| Qualcomm\_Linux.SPF.1.0|AP|Standard|OEM|NM\_QIRPSDK | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk.git` | `qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk` |
| Qualcomm\_Linux.SPF.1.0|AP|Standard|OEM| | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem.git` | `qualcomm-linux-spf-1-0_ap_standard_oem` |
| Qualcomm\_Linux.SPF.1.0|AP|Standard|OEM|QIMPSDK | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_qimpsdk.git` | `qualcomm-linux-spf-1-0_ap_standard_oem_qimpsdk` |
| Qualcomm\_Linux.SPF.1.0|AMSS|Standard|OEM| | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_amss_standard_oem.git` | `qualcomm-linux-spf-1-0_amss_standard_oem` |
| Qualcomm\_Linux.SPF.1.0|AMSS|Standard|OEM|QIMPSDK | `git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_amss_standard_oem_qimpsdk.git` | `qualcomm-linux-spf-1-0_amss_standard_oem_qimpsdk` |

Cột **Lệnh Git** (trong bảng [Ánh xạ bản phân phối firmware đến kho lưu trữ git](https://docs.qualcomm.com/doc/80-70020-254V/topic/build_addn_info.html#mapping-firmware-table)) cung cấp thông tin về các kho lưu trữ git chứa mã nguồn firmware. Máy chủ Qualcomm lưu trữ các kho lưu trữ này. Hãy sao chép các kho lưu trữ phù hợp dựa trên hồ sơ truy cập và use case của bạn.

Lệnh `git clone` sau đây tải xuống các thành phần firmware đã chọn trong mã nguồn, ngoại trừ modem:

mkdir -p <FIRMWARE_ROOT>
    cd <FIRMWARE_ROOT>
    git clone -b <firmware release tag> --depth 1 https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk.git
    # Example, <firmware release tag> is r1.0_00095.0
    Copy to clipboard

Lệnh `git clone` tải nội dung vào thư mục `<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk`. Để biết thẻ `<firmware release tag>` mới nhất, hãy xem phần *Thẻ phát hành quan trọng trong bản dựng* trong [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).

### Biên dịch firmware

Tab QCS6490/QCS5430
Tab IQ-9075
Tab IQ-8275

Điều kiện tiên quyết

- Đảm bảo rằng shell đang dùng là `bash`.

echo $0
        Copy to clipboard

    Đầu ra mong đợi của lệnh này phải là `bash`. Nếu không, hãy chuyển sang shell bash:

bash
        Copy to clipboard
- Cài đặt gói libffi6 bằng các lệnh sau. Đây là điều kiện bắt buộc đối với trình biên dịch QAIC, để tạo header và tệp mã nguồn từ các tệp IDL:

curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
        sudo dpkg -i libffi6_3.2.1-8_amd64.deb
        Copy to clipboard
- Cài đặt LLVM để biên dịch AOP, Qualcomm^®^ Trusted Execution Environment (TEE) và các thành phần khởi động:

cd <FIRMWARE_ROOT>
        mkdir llvm
        
        # Log in to qsc-cli and activate the license
        qsc-cli login
        qsc-cli tool activate-license --name sdllvm_arm
        
        # LLVM requirement for boot compilation is 14.0.4
        qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <FIRMWARE_ROOT>/llvm/14.0.4
        chmod -R 777 <FIRMWARE_ROOT>/llvm/14.0.4
        
        # LLVM requirement for the Qualcomm TEE compilation is 16.0.7
        qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <FIRMWARE_ROOT>/llvm/16.0.7
        chmod -R 777 <FIRMWARE_ROOT>/llvm/16.0.7
        Copy to clipboard
- Xuất biến `SECTOOLS` và biên dịch firmware (`<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk` là thư mục cấp cao nhất):

export SECTOOLS=<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCM6490.LE.1.0/common/sectoolsv2/ext/Linux/sectools
        export SECTOOLS_DIR=<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCM6490.LE.1.0/common/sectoolsv2/ext/Linux
        Copy to clipboard
- Cài đặt và thiết lập Qualcomm^®^ Hexagon^™^ Processor. Đặt biến môi trường HEXAGON\_ROOT thành đường dẫn nơi cài đặt Hexagon SDK. Để thay đổi đường dẫn cài đặt khi dùng `qsc-cli`, hãy xem [Thay đổi đường dẫn cài đặt công cụ Hexagon](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#change-hex-tool-install-path).

qsc-cli tool extract --name hexagon8.4 --required-version 8.4.07
        export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
        echo $HEXAGON_ROOT
        Copy to clipboard

Biên dịch cDSP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: Hexagon 8.4.07
- Phiên bản Python: Python 3.10.2
- Gói libffi6

**Các bước biên dịch**

1. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/CDSP.HT.2.5.c3/cdsp_proc/build/ms
        Copy to clipboard
2. Dọn dẹp bản build:

python ./build_variant.py kodiak.cdsp.prod --clean
        Copy to clipboard
3. Biên dịch tệp ảnh:

python ./build_variant.py kodiak.cdsp.prod
        Copy to clipboard

Biên dịch aDSP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: Hexagon 8.4.07
- Phiên bản Python: Python 3.10.2
- Gói libffi6

**Các bước biên dịch**

1. Tích hợp Nanopb (thiết lập 1 lần):

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/ADSP.HT.5.5.c8/adsp_proc/qsh_api
        curl https://jpa.kapsi.fi/nanopb/download/nanopb-0.3.9.5-linux-x86.tar.gz -o nanopb-0.3.9.5-linux-x86.tar.gz
        cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/ADSP.HT.5.5.c8/adsp_proc/
        python qsh_api/build/config_nanopb_dependency.py -f nanopb-0.3.9.5-linux-x86
        Copy to clipboard
2. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/ADSP.HT.5.5.c8/adsp_proc/build/ms
        Copy to clipboard
3. Dọn dẹp bản build:

python ./build_variant.py kodiak.adsp.prod --clean
        Copy to clipboard
4. Biên dịch tệp ảnh:

python ./build_variant.py kodiak.adsp.prod
        Copy to clipboard

Biên dịch thành phần khởi động

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM phải được cập nhật lên phiên bản 14.0.4

export LLVM=<FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard
- Phiên bản Python: Python 3.10
- Gói libffi6

**Các bước biên dịch**

1. Cài đặt trình biên dịch cho device tree:

sudo apt-get install device-tree-compiler
        export DTC=/usr/bin
        Copy to clipboard
2. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/BOOT.MXF.1.0.c1/
        Copy to clipboard
3. Cài đặt phần phụ thuộc:

python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
        pip install json-schema-for-humans
        Copy to clipboard
4. Dọn dẹp bản build:

python -u boot_images/boot_tools/buildex.py -t kodiak,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
        Copy to clipboard
5. Biên dịch tệp ảnh:

python -u boot_images/boot_tools/buildex.py -t kodiak,QcomToolsPkg -v LAA -r RELEASE
        Copy to clipboard

Ghi chú

Đối với các bản build biến thể gỡ lỗi, hãy thay `RELEASE` bằng `DEBUG`.

Dựng firmware Qualcomm TEE

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM 16.0.7
- Phiên bản Python: Python 3.10

**Các bước biên dịch**

1. Cài đặt LLVM:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/TZ.XF.5.29.1/trustzone_images/build/ms/
        vi build_config_deploy_kodiak.xml
        # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <FIRMWARE_ROOT>/llvm/16.0.7/
        Copy to clipboard
2. Dọn dẹp bản build:

python build_all.py -b TZ.XF.5.0 CHIPSET=kodiak --cfg=build_config_deploy_kodiak.xml --clean
        Copy to clipboard
3. Biên dịch tệp ảnh:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/TZ.XF.5.29.1/trustzone_images/build/ms/
        python build_all.py -b TZ.XF.5.0 CHIPSET=kodiak --cfg=build_config_deploy_kodiak.xml
        Copy to clipboard

Dựng firmware AOP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM 14.0.4
- Phiên bản Python: Python 3.10

**Các bước biên dịch**

1. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/AOP.HO.3.6/aop_proc/build/
        Copy to clipboard
2. Dọn dẹp bản build:

./build_kodiak.sh -c -l <FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard
3. Biên dịch tệp ảnh:

./build_kodiak.sh -l <FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard

Firmware CPUCP

Firmware CPUCP được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware CPUSYS.VM

Firmware CPUSYS.VM được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware BTFM

Firmware BTFM được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware WLAN

Firmware WLAN được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Tạo bản biên dịch sẵn của firmware (gồm các tệp thực thi quan trọng cho khởi động và firmware được chia tách)

- Tạo một tệp thực thi firmware tích hợp từ các thành phần riêng lẻ mà bạn đã biên dịch:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCM6490.LE.1.0/common/build
        python build.py --imf
        Copy to clipboard
- Bản biên dịch sẵn của firmware sẽ thành công nếu các tệp zip sau được tạo trong thư mục `<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCM6490.LE.1.0/common/build/ufs/bin`:

> 
> 
> - `QCM6490_bootbinaries.zip`
>     - `QCM6490_dspso.zip`
>     - `QCM6490_fw.zip`

Điều kiện tiên quyết

- Đảm bảo rằng shell đang dùng là `bash`.

echo $0
        Copy to clipboard

    Đầu ra mong đợi của lệnh này phải là `bash`. Nếu không, hãy chuyển sang shell bash:

bash
        Copy to clipboard
- Cài đặt gói libffi6 bằng các lệnh sau. Đây là điều kiện bắt buộc đối với trình biên dịch QAIC, để tạo header và tệp mã nguồn từ các tệp IDL:

curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
        sudo dpkg -i libffi6_3.2.1-8_amd64.deb
        Copy to clipboard
- Cài đặt LLVM để biên dịch AOP, Qualcomm TEE và các thành phần khởi động:

cd <FIRMWARE_ROOT>
        mkdir llvm
        
        # Log in to qsc-cli and activate the license
        qsc-cli login
        qsc-cli tool activate-license --name sdllvm_arm
        
        # LLVM requirement for boot compilation is 14.0.4
        qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <FIRMWARE_ROOT>/llvm/14.0.4
        chmod -R 777 <FIRMWARE_ROOT>/llvm/14.0.4
        
        # LLVM requirement for the Qualcomm TEE compilation is 16.0.7
        qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <FIRMWARE_ROOT>/llvm/16.0.7
        chmod -R 777 <FIRMWARE_ROOT>/llvm/16.0.7
        Copy to clipboard
- Xuất biến `SECTOOLS` và biên dịch firmware (`<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk` là thư mục cấp cao nhất):

export SECTOOLS=<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS9100.LE.1.0/common/sectoolsv2/ext/Linux/sectools
        export SECTOOLS_DIR=<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS9100.LE.1.0/common/sectoolsv2/ext/Linux
        Copy to clipboard
- Cài đặt và thiết lập Hexagon. Đặt biến môi trường HEXAGON\_ROOT thành đường dẫn nơi cài đặt Hexagon SDK. Để thay đổi đường dẫn cài đặt khi dùng `qsc-cli`, hãy xem [Thay đổi đường dẫn cài đặt công cụ Hexagon](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#change-hex-tool-install-path).

qsc-cli tool extract --name hexagon8.6 --required-version 8.6.05.2
        export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
        echo $HEXAGON_ROOT
        Copy to clipboard

Biên dịch DSP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: Hexagon 8.6.05.2
- Phiên bản Python: Python 3.8.2

**Các bước biên dịch**

1. Cài đặt trình biên dịch cho device tree:

sudo apt-get install device-tree-compiler
        export DTC_PATH=/usr/bin
        Copy to clipboard
2. Cài đặt phần phụ thuộc:

pip install ruamel.yaml==0.17.17
        pip install dtschema==2021.10
        pip install jsonschema==4.0.0
        Copy to clipboard
3. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/DSP.AT.1.0/dsp_proc/build/ms
        Copy to clipboard
4. Dọn dẹp bản build:

python ./build_variant.py lemans.adsp.prod --clean
        python ./build_variant.py lemans.cdsp0.prod --clean
        python ./build_variant.py lemans.cdsp1.prod --clean
        python ./build_variant.py lemans.gpdsp0.prod --clean
        python ./build_variant.py lemans.gpdsp1.prod --clean
        Copy to clipboard
5. Biên dịch tệp ảnh:

python ./build_variant.py lemans.adsp.prod && python ./build_variant.py lemans.cdsp0.prod && python ./build_variant.py lemans.cdsp1.prod && python ./build_variant.py lemans.gpdsp0.prod && python ./build_variant.py lemans.gpdsp1.prod
        Copy to clipboard

Biên dịch thành phần khởi động

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM phải được cập nhật lên phiên bản 14.0.4

export LLVM=<FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard
- Phiên bản Python: Python 3.10
- Gói libffi6

**Các bước biên dịch**

1. Cài đặt trình biên dịch cho device tree:

sudo apt-get install device-tree-compiler
        export DTC=/usr/bin
        Copy to clipboard
2. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/BOOT.MXF.1.0.c1/
        Copy to clipboard
3. Cài đặt phần phụ thuộc:

python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
        pip install json-schema-for-humans
        Copy to clipboard
4. Dọn dẹp bản build:

python -u boot_images/boot_tools/buildex.py -t lemans,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
        Copy to clipboard
5. Biên dịch tệp ảnh:

python -u boot_images/boot_tools/buildex.py -t lemans,QcomToolsPkg -v LAA -r RELEASE
        Copy to clipboard

Ghi chú

Đối với các bản build biến thể gỡ lỗi, hãy thay `RELEASE` bằng `DEBUG`.

Dựng firmware Qualcomm TEE

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM 16.0.7
- Phiên bản Python: Python 3.10

**Các bước biên dịch**

1. Cài đặt LLVM:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/TZ.XF.5.29.1/trustzone_images/build/ms/
        vi build_config_deploy_lemans.xml
        # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <FIRMWARE_ROOT>/llvm/16.0.7/
        Copy to clipboard
2. Dọn dẹp bản build:

python build_all.py -b TZ.XF.5.0 CHIPSET=lemans --cfg=build_config_deploy_lemans.xml --clean
        Copy to clipboard
3. Biên dịch tệp ảnh:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/TZ.XF.5.29.1/trustzone_images/build/ms/
        python build_all.py -b TZ.XF.5.0 CHIPSET=lemans --cfg=build_config_deploy_lemans.xml
        Copy to clipboard

Dựng firmware AOP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM 14.0.4
- Phiên bản Python: Python 3.10

**Các bước biên dịch**

1. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/AOP.HO.3.6.1/aop_proc/build/
        Copy to clipboard
2. Dọn dẹp bản build:

./build_lemansau.sh -c -l <FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard
3. Biên dịch tệp ảnh:

./build_lemansau.sh -l <FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard

Firmware CPUCP

Firmware CPUCP được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware CPUSYS.VM

Firmware CPUSYS.VM được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware BTFM

Firmware BTFM được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware WLAN

Firmware WLAN được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Tạo bản biên dịch sẵn của firmware (gồm các tệp thực thi quan trọng cho khởi động và firmware được chia tách)

- Tạo một tệp thực thi firmware tích hợp từ các thành phần riêng lẻ mà bạn đã biên dịch:

Ghi chú

Áp dụng tất cả các thay đổi từ phần *Thông tin bổ sung* trong [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/ReleaseNote.html#additional-information).

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS9100.LE.1.0/common/build
        python build.py --imf
        Copy to clipboard
- Bản biên dịch sẵn của firmware sẽ thành công nếu các tệp zip sau được tạo trong thư mục `<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCM6490.LE.1.0/common/build/ufs/bin`:

> 
> 
> - `QCS9100_bootbinaries.zip`
>     - `QCS9100_dspso.zip`
>     - `QCS9100_fw.zip`

Điều kiện tiên quyết

- Đảm bảo rằng shell đang dùng là `bash`.

echo $0
        Copy to clipboard

    Đầu ra mong đợi của lệnh này phải là `bash`. Nếu không, hãy chuyển sang shell bash:

bash
        Copy to clipboard
- Cài đặt gói libffi6 bằng các lệnh sau. Đây là điều kiện bắt buộc đối với trình biên dịch QAIC, để tạo header và tệp mã nguồn từ các tệp IDL:

curl -LO http://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
        sudo dpkg -i libffi6_3.2.1-8_amd64.deb
        Copy to clipboard
- Cài đặt LLVM để biên dịch AOP, Qualcomm TEE và các thành phần khởi động:

cd <FIRMWARE_ROOT>
        mkdir llvm
        
        # Log in to qsc-cli and activate the license
        qsc-cli login
        qsc-cli tool activate-license --name sdllvm_arm
        
        # LLVM requirement for boot compilation is 14.0.4
        qsc-cli tool install --name sdllvm_arm --required-version 14.0.4 --path <FIRMWARE_ROOT>/llvm/14.0.4
        chmod -R 777 <FIRMWARE_ROOT>/llvm/14.0.4
        
        # LLVM requirement for the Qualcomm TEE compilation is 16.0.7
        qsc-cli tool install --name sdllvm_arm --required-version 16.0.7 --path <FIRMWARE_ROOT>/llvm/16.0.7
        chmod -R 777 <FIRMWARE_ROOT>/llvm/16.0.7
        Copy to clipboard
- Xuất biến `SECTOOLS` và biên dịch firmware (`<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk` là thư mục cấp cao nhất):

export SECTOOLS=<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS8300.LE.1.0/common/sectoolsv2/ext/Linux/sectools
        export SECTOOLS_DIR=<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS8300.LE.1.0/common/sectoolsv2/ext/Linux
        Copy to clipboard
- Cài đặt và thiết lập Hexagon. Đặt biến môi trường HEXAGON\_ROOT thành đường dẫn nơi cài đặt Hexagon SDK. Để thay đổi đường dẫn cài đặt khi dùng `qsc-cli`, hãy xem [Thay đổi đường dẫn cài đặt công cụ Hexagon](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#change-hex-tool-install-path). .. container:: nohighlight

> 
> 
> qsc-cli tool extract --name hexagon8.6 --required-version 8.6.05.2
>         qsc-cli tool extract --name hexagon8.7 --required-version 8.7.02.1
>         export HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools
>         echo $HEXAGON_ROOT
>         Copy to clipboard

Biên dịch DSP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: Hexagon 8.6.05.2 và 8.7.02.1
- Phiên bản Python: Python 3.8.2

**Các bước biên dịch**

1. Cài đặt trình biên dịch cho device tree:

sudo apt-get install device-tree-compiler
        export DTC_PATH=/usr/bin
        Copy to clipboard
2. Cài đặt phần phụ thuộc:

pip install ruamel.yaml==0.17.17
        pip install dtschema==2021.10
        pip install jsonschema==4.0.0
        Copy to clipboard
3. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/DSP.AT.1.0/dsp_proc/build/ms
        Copy to clipboard
4. Dọn dẹp bản build:

python ./build_variant.py lemans.adsp.prod --clean
        python ./build_variant.py monaco.cdsp0.prod --clean
        python ./build_variant.py lemans.gpdsp0.prod --clean
        Copy to clipboard
5. Biên dịch tệp ảnh:

python ./build_variant.py lemans.adsp.prod && python ./build_variant.py monaco.cdsp0.prod && python ./build_variant.py lemans.gpdsp0.prod
        Copy to clipboard

Biên dịch thành phần khởi động

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM phải được cập nhật lên phiên bản 14.0.4

export LLVM=<FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard
- Phiên bản Python: Python 3.10
- Gói libffi6

**Các bước biên dịch**

1. Cài đặt trình biên dịch cho device tree:

sudo apt-get install device-tree-compiler
        export DTC=/usr/bin
        Copy to clipboard
2. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/BOOT.MXF.1.0.c1/
        Copy to clipboard
3. Cài đặt phần phụ thuộc:

python -m pip install -r boot_images/boot_tools/dtschema_tools/oss/requirements.txt
        pip install json-schema-for-humans
        Copy to clipboard
4. Dọn dẹp bản build:

python -u boot_images/boot_tools/buildex.py -t monaco,QcomToolsPkg -v LAA -r RELEASE --build_flags=cleanall
        Copy to clipboard
5. Biên dịch tệp ảnh:

python -u boot_images/boot_tools/buildex.py -t monaco,QcomToolsPkg -v LAA -r RELEASE
        Copy to clipboard

Ghi chú

Đối với các bản build biến thể gỡ lỗi, hãy thay `RELEASE` bằng `DEBUG`.

Dựng firmware Qualcomm TEE

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM 16.0.7
- Phiên bản Python: Python 3.10

**Các bước biên dịch**

1. Cài đặt LLVM:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/TZ.XF.5.29.1/trustzone_images/build/ms/
        vi build_config_deploy_monaco.xml
        # Edit all the occurrences of /pkg/qct/software/llvm/release/arm/16.0.7/ to <FIRMWARE_ROOT>/llvm/16.0.7/
        Copy to clipboard
2. Dọn dẹp bản build:

python build_all.py -b TZ.XF.5.0 CHIPSET=monaco --cfg=build_config_deploy_monaco.xml --clean
        Copy to clipboard
3. Biên dịch tệp ảnh:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/TZ.XF.5.29.1/trustzone_images/build/ms/
        python build_all.py -b TZ.XF.5.0 CHIPSET=monaco --cfg=build_config_deploy_monaco.xml
        Copy to clipboard

Dựng firmware AOP

**Công cụ cần thiết**

- Phiên bản trình biên dịch: LLVM 14.0.4
- Phiên bản Python: Python 3.10

**Các bước biên dịch**

1. Chuyển đến thư mục sau:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/AOP.HO.3.6.1/aop_proc/build/
        Copy to clipboard
2. Dọn dẹp bản build:

./build_monaco.sh -c -l <FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard
3. Biên dịch tệp ảnh:

./build_monaco.sh -l <FIRMWARE_ROOT>/llvm/14.0.4/
        Copy to clipboard

Firmware CPUCP

Firmware CPUCP được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware CPUSYS.VM

Firmware CPUSYS.VM được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware BTFM

Firmware BTFM được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Firmware WLAN

Firmware WLAN được phát hành dưới dạng tệp thực thi và không cần biên dịch lại.

Tạo bản biên dịch sẵn của firmware (gồm các tệp thực thi quan trọng cho khởi động và firmware được chia tách)

- Tạo một tệp thực thi firmware tích hợp từ các thành phần riêng lẻ mà bạn đã biên dịch:

cd <FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS8300.LE.1.0/common/build
        python build.py --imf
        Copy to clipboard
- Bản biên dịch sẵn của firmware sẽ thành công nếu các tệp zip sau được tạo trong thư mục `<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/QCS8300.LE.1.0/common/build/ufs/bin`:

    - `QCS8300_bootbinaries.zip`
    - `QCS8300_dspso.zip`
    - `QCS8300_fw.zip`

### Dựng ảnh BSP kèm thành phần bổ sung

Bản dựng ảnh BSP có các thành phần phần mềm hỗ trợ thiết bị Qualcomm và các tính năng phần mềm áp dụng cho Qualcomm SoC. Bản dựng này bao gồm cấu hình bản phân phối tham chiếu cho Qualcomm development kit. Lớp `meta-qcom-extras` cho phép biên dịch từ mã nguồn đối với một số thành phần, thường chỉ có sẵn dưới dạng tệp nhị phân. Để biết thêm chi tiết, hãy xem [Các lớp siêu dữ liệu của Qualcomm Linux](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-27/qualcomm_bsp_metadata_layers.html).

1. Tải xuống Qualcomm Yocto và các lớp hỗ trợ kèm thành phần bổ sung. Để biết thông tin về `<manifest release tag>` và `<meta-qcom-extras release tag>`, hãy xem phần *Thẻ phát hành quan trọng trong bản dựng* trong [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).

# cd to directory where you have 300 GB of free storage space to create your workspaces
        mkdir <WORKSPACE_DIR>
        cd <WORKSPACE_DIR>
        repo init -u https://github.com/quic-yocto/qcom-manifest -b qcom-linux-scarthgap -m <manifest release tag>
        # Example, <manifest release tag> is qcom-6.6.90-QLI.1.5-Ver.1.1.xml
        repo sync
        git clone https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_hlos_oem_metadata.git -b <meta-qcom-extras release tag> --depth 1
        # Example, <meta-qcom-extras release tag> is r1.0_00097.0
        mkdir -p layers/meta-qcom-extras
        cp -rf qualcomm-linux-spf-1-0_hlos_oem_metadata/<product>/common/config/meta-qcom-extras/* layers/meta-qcom-extras/
        # An example <product> is QCM6490.LE.1.0. For more information about <product>, see the latest Release Notes (https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
        Copy to clipboard
2. Thiết lập biên dịch Yocto:

# Export additional meta layers to EXTRALAYERS. Location is assumed under <WORKSPACE DIR>/layers.
        export EXTRALAYERS="meta-qcom-extras"
        
        # CUST_ID is used to clone the proprietary source repositories downloaded by meta-qcom-extras.
        # It allows source compilation for the corresponding binaries present in meta-qcom-hwe.
        # CUST_ID must be set to "213195" for no-modem based distributions ("qualcomm-linux-spf-1-0_ap_standard_oem_nomodem",
        # "qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk", "qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk").
        # For other modem based distributions, CUST_ID must be set based on the "Customer ID".
        # To find "Customer ID", sign in to your account at qualcomm.com.
        # Click the Profile icon, select Account Settings, and then scroll down to the Company Information section.
        # export CUST_ID using the following command.
        export CUST_ID=<Customer ID>
        
        # The firmware recipe is compiled when the Yocto build is initiated. Firmware recipe expects the
        # path of firmware. You have generated firmware prebuilts (boot-critical and split-firmware binaries)
        # using the steps described in the previous section.
        # Example, for QCM6490, the directory path must contain QCM6490_bootbinaries.zip, QCM6490_dspso.zip, and QCM6490_fw.zip.
        # Set the environment variable to pick up the prebuilts:
        export FWZIP_PATH="<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/<product>/common/build/ufs/bin"
        # An example <product> is QCM6490.LE.1.0. For more information about <product>, see the latest Release Notes (https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
        Copy to clipboard
3. Thiết lập môi trường biên dịch:

MACHINE=<machine> DISTRO=qcom-wayland QCOM_SELECTED_BSP=custom source setup-environment
        # Example, MACHINE=qcs6490-rb3gen2-vision-kit DISTRO=qcom-wayland QCOM_SELECTED_BSP=custom source setup-environment
        # source setup-environment: Sets the environment, creates the build directory build-qcom-wayland,
        # and enters into build-qcom-wayland directory.
        Copy to clipboard

    Để biết các giá trị tham số `MACHINE`, hãy xem [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
4. Biên dịch Yocto:

bitbake qcom-multimedia-image
        Copy to clipboard

Ghi chú

Dọn dẹp Yocto:

bitbake -fc cleansstate qcom-multimedia-image
        bitbake -fc cleanall qcom-multimedia-image
        Copy to clipboard
5. Sau khi  biên dịch thành công, hãy kiểm tra xem tệp `system.img` có nằm trong thư mục `<workspace_path>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image` hay không:

cd <workspace_path>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image
        ls -al system.img
        Copy to clipboard
6. Flash bản build đã tạo dựa trên tài liệu [Flash ảnh phần mềm](https://docs.qualcomm.com/doc/80-70020-254V/topic/flash_images.html).

### Dựng ảnh Qualcomm IM SDK kèm thành phần bổ sung

Qualcomm IM SDK là một tập hợp gồm 4 SDK chức năng độc lập: Qualcomm IM SDK, Qualcomm Neural Processing SDK, Qualcomm AI Engine direct SDK và LiteRT. SDK này cũng bao gồm các ứng dụng tham chiếu mà bạn có thể dùng để phát triển các use case. Lớp `meta-qcom-extras` cho phép biên dịch từ mã nguồn đối với một số thành phần, thường chỉ có sẵn dưới dạng tệp nhị phân. Để biết thêm chi tiết, hãy xem [Hướng dẫn bắt đầu nhanh với Qualcomm IM SDK](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-51).

1. Tải xuống lớp Qualcomm IM SDK, lớp Qualcomm Yocto và các lớp hỗ trợ kèm thành phần bổ sung. Để biết thông tin về `<manifest release tag>` và `<meta-qcom-extras release tag>`, hãy xem phần *Thẻ phát hành quan trọng trong bản dựng* trong [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).

# cd to directory where you have 300 GB of free storage space to create your workspaces
        mkdir <WORKSPACE_DIR>
        cd <WORKSPACE_DIR>
        repo init -u https://github.com/quic-yocto/qcom-manifest -b qcom-linux-scarthgap -m <manifest release tag>
        # Example, <manifest release tag> is qcom-6.6.90-QLI.1.5-Ver.1.1.xml
        repo sync
        git clone https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_hlos_oem_metadata.git -b <meta-qcom-extras release tag> --depth 1
        # Example, <meta-qcom-extras release tag> is r1.0_00097.0
        mkdir -p layers/meta-qcom-extras
        cp -rf qualcomm-linux-spf-1-0_hlos_oem_metadata/<product>/common/config/meta-qcom-extras/* layers/meta-qcom-extras/
        # An example <product> is QCM6490.LE.1.0. For more information about <product>, see the latest Release Notes (https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
        git clone https://github.com/quic-yocto/meta-qcom-qim-product-sdk -b qcom-6.6.90-QLI.1.5-Ver.1.1_qim-product-sdk-2.0.1 layers/meta-qcom-qim-product-sdk
        Copy to clipboard
2. Thiết lập biên dịch Yocto:

# Export additional meta layers to EXTRALAYERS. Location is assumed under <WORKSPACE DIR>/layers.
        export EXTRALAYERS="meta-qcom-extras meta-qcom-qim-product-sdk"
        
        # CUST_ID is used to clone the proprietary source repositories downloaded by meta-qcom-extras.
        # It allows source compilation for the corresponding binaries present in meta-qcom-hwe.
        # CUST_ID must be set to "213195" for no-modem based distributions ("qualcomm-linux-spf-1-0_ap_standard_oem_nomodem",
        # "qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk", "qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk").
        # For other modem based distributions, CUST_ID must be set based on the "Customer ID".
        # To find "Customer ID", sign in to your account at qualcomm.com.
        # Click the Profile icon, select Account Settings, and then scroll down to the Company Information section.
        # export CUST_ID using the following command.
        export CUST_ID=<Customer ID>
        
        # The firmware recipe is compiled when the Yocto build is initiated. Firmware recipe expects the
        # path of firmware. You have generated firmware prebuilts (boot-critical and split-firmware binaries)
        # using the steps described in the previous section.
        # Example, for QCM6490, the directory path must contain QCM6490_bootbinaries.zip, QCM6490_dspso.zip, and QCM6490_fw.zip.
        # Set the environment variable to pick up the prebuilts:
        export FWZIP_PATH="<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk/<product>/common/build/ufs/bin"
        # An example <product> is QCM6490.LE.1.0. For more information about <product>, see the latest Release Notes (https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
        Copy to clipboard
3. Thiết lập môi trường biên dịch:

MACHINE=<machine> DISTRO=qcom-wayland QCOM_SELECTED_BSP=custom source setup-environment
        # Example, MACHINE=qcs6490-rb3gen2-vision-kit DISTRO=qcom-wayland QCOM_SELECTED_BSP=custom source setup-environment
        # source setup-environment: Sets the environment, creates the build directory build-qcom-wayland,
        # and enters into build-qcom-wayland directory.
        Copy to clipboard

    Để biết các giá trị tham số `MACHINE`, hãy xem [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
4. Biên dịch bản dựng Qualcomm IM SDK:

bitbake qcom-multimedia-image
        # Build SDK image
        bitbake qcom-qim-product-sdk
        Copy to clipboard
5. Dọn dẹp bản dựng Qualcomm IM SDK:

bitbake -fc cleansstate qcom-multimedia-image
        bitbake -fc cleanall qcom-multimedia-image
        bitbake -fc cleansstate qcom-qim-product-sdk
        bitbake -fc cleanall qcom-qim-product-sdk
        Copy to clipboard
6. Sau khi  biên dịch thành công, hãy kiểm tra xem tệp `system.img` có nằm trong thư mục `<workspace_path>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image` hay không:

cd <workspace_path>/build-qcom-wayland/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/qcom-multimedia-image
        ls -al system.img
        Copy to clipboard
7. Flash bản build đã tạo dựa trên tài liệu [Flash ảnh phần mềm](https://docs.qualcomm.com/doc/80-70020-254V/topic/flash_images.html).

### Biên dịch tệp ảnh QIR SDK kèm thành phần bổ sung

QIR SDK 2.0 là một tập hợp các thành phần cho phép bạn phát triển tính năng robot trên các bản phát hành Qualcomm Linux. Lớp `meta-qcom-extras` cho phép biên dịch từ mã nguồn đối với một số thành phần, thường chỉ có sẵn dưới dạng tệp nhị phân. Để biết thêm chi tiết, hãy xem [Hướng dẫn sử dụng QIR SDK 2.0](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-265).

Ghi chú

Trước khi bắt đầu, hãy tải xuống firmware tương ứng cho QIR SDK, ví dụ: `qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk`.

1. Tải xuống lớp QIR SDK, Qualcomm Yocto và các lớp hỗ trợ kèm thành phần bổ sung. Để biết thông tin về `<manifest release tag>`, `<meta-qcom-extras release tag>` và `<meta-qcom-qim-product-sdk release tag>`, hãy xem phần *Thẻ phát hành quan trọng trong bản dựng* trong [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).

# cd to directory where you have 300 GB of free storage space to create your workspaces
        mkdir <WORKSPACE_DIR>
        cd <WORKSPACE_DIR>
        repo init -u https://github.com/quic-yocto/qcom-manifest -b qcom-linux-scarthgap -m <manifest release tag>
        # Example, <manifest release tag> is qcom-6.6.90-QLI.1.5-Ver.1.1.xml
        repo sync
        git clone https://qpm-git.qualcomm.com/home2/git/qualcomm/qualcomm-linux-spf-1-0_hlos_oem_metadata.git -b <meta-qcom-extras release tag> --depth 1
        # Example, <meta-qcom-extras release tag> is r1.0_00097.0
        mkdir -p layers/meta-qcom-extras
        mkdir -p layers/meta-qcom-robotics-extras
        cp -rf qualcomm-linux-spf-1-0_hlos_oem_metadata/<product>/common/config/meta-qcom-extras/* layers/meta-qcom-extras/
        cp -rf qualcomm-linux-spf-1-0_hlos_oem_metadata/<product>/common/config/meta-qcom-robotics-extras/* layers/meta-qcom-robotics-extras/
        # An example <product> is QCM6490.LE.1.0. For more information about <product>, see the latest Release Notes (https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
        
        git clone https://github.com/ros/meta-ros -b scarthgap layers/meta-ros && cd layers/meta-ros && git checkout c560699e810e60a9526f4226c2c23f8d877280c8 && cd ../../
        git clone https://github.com/quic-yocto/meta-qcom-robotics.git -b qcom-6.6.90-QLI.1.5-Ver.1.1_robotics-product-sdk-1.1 layers/meta-qcom-robotics
        git clone https://github.com/quic-yocto/meta-qcom-robotics-distro.git -b qcom-6.6.90-QLI.1.5-Ver.1.1_robotics-product-sdk-1.1 layers/meta-qcom-robotics-distro
        git clone https://github.com/quic-yocto/meta-qcom-robotics-sdk.git -b qcom-6.6.90-QLI.1.5-Ver.1.1_robotics-product-sdk-1.1 layers/meta-qcom-robotics-sdk
        git clone https://github.com/quic-yocto/meta-qcom-qim-product-sdk -b qcom-6.6.90-QLI.1.5-Ver.1.1_qim-product-sdk-2.0.1 layers/meta-qcom-qim-product-sdk
        # Example, <meta-qcom-qim-product-sdk release tag> is qcom-6.6.90-QLI.1.5-Ver.1.1_qim-product-sdk-2.0.1
        Copy to clipboard
2. Thiết lập biên dịch Yocto:

# Export additional meta layers to EXTRALAYERS. Location is assumed under <WORKSPACE DIR>/layers.
        export EXTRALAYERS="meta-qcom-extras meta-qcom-robotics-extras"
        
        # CUST_ID is used to clone the proprietary source repositories downloaded by meta-qcom-extras.
        # It allows source compilation for the corresponding binaries present in meta-qcom-hwe.
        # CUST_ID must be set to "213195" for no-modem based distributions ("qualcomm-linux-spf-1-0_ap_standard_oem_nomodem",
        # "qualcomm-linux-spf-1-0_ap_standard_oem_nm-qimpsdk", "qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk").
        # For other modem based distributions, CUST_ID must be set based on the "Customer ID".
        # To find "Customer ID", sign in to your account at qualcomm.com.
        # Click the Profile icon, select Account Settings, and then scroll down to the Company Information section.
        # export CUST_ID using the following command.
        export CUST_ID=<Customer ID>
        
        # The firmware recipe is compiled when the Yocto build is initiated. Firmware recipe expects the
        # path of firmware. You have generated firmware prebuilts (boot-critical and split-firmware binaries)
        # using the steps described in the previous section.
        # Example, for QCM6490, the directory path must contain QCM6490_bootbinaries.zip, QCM6490_dspso.zip, and QCM6490_fw.zip.
        # Set the environment variable to pick up the prebuilts:
        export FWZIP_PATH="<FIRMWARE_ROOT>/qualcomm-linux-spf-1-0_ap_standard_oem_nm-qirpsdk/<product>/common/build/ufs/bin"
        # An example <product> is QCM6490.LE.1.0. For more information about <product>, see the latest Release Notes (https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
        Copy to clipboard
3. Biên dịch QIR SDK:

ln -s layers/meta-qcom-robotics-distro/set_bb_env.sh ./setup-robotics-environment
        ln -s layers/meta-qcom-robotics-sdk/scripts/qirp-build ./qirp-build
        MACHINE=<machine> DISTRO=qcom-robotics-ros2-humble QCOM_SELECTED_BSP=custom source setup-robotics-environment
        # Example, MACHINE=qcs6490-rb3gen2-vision-kit DISTRO=qcom-robotics-ros2-humble QCOM_SELECTED_BSP=custom source setup-robotics-environment
        # source setup-robotics-environment: Sets the environment, creates the build directory build-qcom-robotics-ros2-humble,
        # and enters into build-qcom-robotics-ros2-humble directory.
        ../qirp-build qcom-robotics-full-image
        Copy to clipboard

    Để biết các giá trị tham số `MACHINE`, hãy xem [Ghi chú phát hành](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).
4. Sau khi  biên dịch thành công, hãy kiểm tra xem các cấu phần phần mềm của bản build SDK QIR có nằm ở các đường dẫn sau không:

QIR SDK artifacts: <workspace_path>/build-qcom-robotics-ros2-humble/tmp-glibc/deploy/qirpsdk_artifacts/qirp-sdk_<version>.tar.gz
        # system.img is present in the following path
        Robotics image: <workspace_path>/build-qcom-robotics-ros2-humble/tmp-glibc/deploy/images/qcs6490-rb3gen2-vision-kit/qcom-robotics-full-image
        Copy to clipboard
5. Flash bản build đã tạo dựa trên tài liệu [Flash ảnh phần mềm](https://docs.qualcomm.com/doc/80-70020-254V/topic/flash_images.html).

## Các bước tiếp theo

- [Kết nối với shell UART](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#connect-uart)
- [Kết nối với mạng](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#connect-to-network)
- [Đăng nhập bằng SSH](https://docs.qualcomm.com/doc/80-70020-254V/topic/how_to.html#use-ssh)
- [Khắc phục sự cố về đồng bộ hóa, dựng và flash](https://docs.qualcomm.com/doc/80-70020-254V/topic/troubleshoot_sync_build_and_flash.html#troubleshoot-sync-build-and-flash)

Last Published: Dec 23, 2025

[Previous Topic
Biên dịch với GitHub cho người dùng đã đăng ký](https://docs.qualcomm.com/bundle/publicresource/80-70020-254V/topics/build_from_source_github_intro.md) [Next Topic
Flash ảnh phần mềm](https://docs.qualcomm.com/bundle/publicresource/80-70020-254V/topics/flash_images.md)

Source: [https://docs.qualcomm.com/doc/80-70020-254V/topic/build_addn_info.html](https://docs.qualcomm.com/doc/80-70020-254V/topic/build_addn_info.html)