Pular para conteúdo

Prática 07 - Pesquisando Receitas e mais práticas com receitas


Note

Diretório de trabalho: ~/treinamento/yp/poky/meta-treinamento


Acesse o site https://layers.openembedded.org/layerindex/branch/master/layers/ em seguida selecione o branch scarthgap:

  1. Selecione Layer e pesquise por xilinx.
  2. Selecione Recipes e pesquise pelos pacotes python3-certifi, firefox, hsqldb e greengrass-lite.

    OBS: Caso não encontre alguma das receitas, troque de branch!

  3. Selecione Machine e pesquise por: bananapi, dragonboard-845c, raspberrypi5 e stm32mp1
  4. Selecione Layer e novamente utilizando o branch scarthgap localize o repositório das camadas: meta-openembedded, meta-qt5, meta-java e meta-clang
    • 4.1. Faça um git clone destas camadas junto as camadas do poky (meta, meta-poky e meta-yocto-bsp)
    • 4.2. Adicione as camadas a seguir ao projeto atual com bitbake-layers:
      • meta-openembedded/meta-multimedia
      • meta-openembedded/meta-networking
      • meta-openembedded/meta-oe
      • meta-openembedded/meta-filesystems


Note

Atenção ao clonar cada repositório não se esqueça de especificar o branch scarthgap

E ao executar bitbake-layers certifique-se de estar dentro do diretorio build-qemu/.


Verifique o resultado final no bitbake-layers show-layers o resultado deve ser igual abaixo:

Executar no HOST
NOTE: Starting bitbake server...
layer                 path                                                                    priority
========================================================================================================
core                  /home/b2open/treinamento/yp/poky/meta                                   5
yocto                 /home/b2open/treinamento/yp/poky/meta-poky                              5
yoctobsp              /home/b2open/treinamento/yp/poky/meta-yocto-bsp                         5
meta-treinamento      /home/b2open/treinamento/yp/poky/meta-treinamento                       6
openembedded-layer    /home/b2open/treinamento/yp/poky/meta-openembedded/meta-oe              5
meta-python           /home/b2open/treinamento/yp/poky/meta-openembedded/meta-python          5
multimedia-layer      /home/b2open/treinamento/yp/poky/meta-openembedded/meta-multimedia      5
networking-layer      /home/b2open/treinamento/yp/poky/meta-openembedded/meta-networking      5
filesystems-layer     /home/b2open/treinamento/yp/poky/meta-openembedded/meta-filesystems     5


Note

Na sessão Dicas Extras e Avançadas tem a dica Baixando Camadas via bitbake-layers, mas é válido somente para camadas que fazem parte do OpenEmbedded Metadata Index.


Criando Receita para projeto que utiliza CMake

Criar o diretório meta-treinamento/recipes-b2open/apps/b2open-demo3, em seguida criar os arquivo usb_mon.c e os arquivos para utilizar CMake:

Executar no HOST
cd ~/treinamento/yp/poky/meta-treinamento/recipes-b2open/apps

mkdir b2open-demo3

cd b2open-demo3

touch usb_mon.c

touch CMakeLists.txt


No arquivo usb_mon.c adicione o código abaixo:

/*
 * gcc usb-mon.c -o usb-mon -lusb-1.0
 * arm-poky-linux-gnueabi-gcc usb-mon.c -o usb-mon -ludev
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libudev.h>

void show_device(struct udev_device *dev)
{
        if (dev) {
            if (udev_device_get_devnode(dev)) {
                  const char* action = udev_device_get_action(dev);

                  const char* vendor =
udev_device_get_sysattr_value(dev,"idVendor");
                  if (! vendor)
                        vendor = "0000";

                  const char* product =
udev_device_get_sysattr_value(dev,"idProduct");
                  if (! product)
                        product = "0000";

                  printf("%s %s %6s %s:%s %s\n",
                              udev_device_get_subsystem(dev),
                              udev_device_get_devtype(dev),
                              action,
                              vendor,
                              product,
                              udev_device_get_devnode(dev));
            }
      }
}

static void monitor_devices(struct udev* udev)
{
    struct udev_monitor* mon = udev_monitor_new_from_netlink(udev,"udev");

    udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", NULL);
    udev_monitor_enable_receiving(mon);

    int fd = udev_monitor_get_fd(mon);

    /*
     * select() -> https://man7.org/linux/man-pages/man2/select.2.html
     */
    while (1) {
           fd_set fds;
           FD_ZERO(&fds);
           FD_SET(fd, &fds);

           int ret = select(fd+1, &fds, NULL, NULL, NULL);
           if (ret <= 0)
                break;

           if (FD_ISSET(fd, &fds)) {
                 struct udev_device* dev = udev_monitor_receive_device(mon);
                show_device(dev);

           }

     }
}

int main()
{
      struct udev *udev;
      struct udev_enumerate *enumerate;
      struct udev_list_entry *devices, *dev_list_entry;

      /* create udev object */
      udev = udev_new();
      if (!udev) {
            fprintf(stderr, "Cannot create udev context.\n");
            return 1;
      }

      /* create enumerate object */
      enumerate = udev_enumerate_new(udev);
      if (!enumerate) {
            fprintf(stderr, "Cannot create enumerate context.\n");
            return 1;
      }

      udev_enumerate_add_match_subsystem(enumerate,"usb");
      udev_enumerate_scan_devices(enumerate);

      /* fillup device list */
      devices = udev_enumerate_get_list_entry(enumerate);
      if (!devices) {
            fprintf(stderr,"Failed to get device list.\n");
            return 1;
      }      

      udev_list_entry_foreach(dev_list_entry, devices) {
            const char *path;
            path = udev_list_entry_get_name(dev_list_entry);
            struct udev_device* dev = udev_device_new_from_syspath(udev,path);

            show_device(dev);

            /* free dev */
            udev_device_unref(dev);
      }


      /* free enumerate */
      udev_enumerate_unref(enumerate);

      /* Loop Monitor Events Udev (add and remove devices */
      monitor_devices(udev);


      /* free udev */
      udev_unref(udev);

      return 0;
}


Próximo passo editar o arquivo CMakeLists.txt e adicionar o conteúdo abaixo:

cmake_minimum_required(VERSION 3.12)
project(usb_mon C)

set(CMAKE_C_STANDARD 11)

# Encontre a biblioteca libudev
find_package(PkgConfig REQUIRED)
pkg_check_modules(UDEV REQUIRED libudev)

# Adicione o diretório de inclusao e as bibliotecas da libudev
include_directories(${UDEV_INCLUDE_DIRS})
link_directories(${UDEV_LIBRARY_DIRS})

# Adicione os arquivos-fonte do seu programa
add_executable(usb_mon usb_mon.c)

# Vincule seu programa com a libudev
target_link_libraries(usb_mon ${UDEV_LIBRARIES})


Retorno para o diretório apps e criar o arquivo para a receita b2open-demo3.bb:

Executar no HOST
cd ~/treinamento/yp/poky/meta-treinamento/recipes-b2open/apps

touch b2open-demo3.bb


Edite o arquivo da receita e adicione:

DESCRIPTION = "B2Open Application Demo3"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = " \
                   file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
                   "

SRC_URI = " \
          file://CMakeLists.txt \
          file://usb_mon.c \
          "

S = "${WORKDIR}"

inherit cmake pkgconfig

do_install() {
    install -d ${D}${bindir}
    install -m 0755 usb_mon ${D}${bindir}/b2open-demo3_usb_mon
}

Analisando a estrutura da camada do Treinamento meta-treinamento:

Executar no HOST
cd ~/treinamento/yp/poky/meta-treinamento

tree recipes-b2open/

Saída esperada:

recipes-b2open/
└── apps
    ├── b2open-demo1
       └── main.c
    ├── b2open-demo1_1.0.bb
    ├── b2open-demo2
       ├── main.c
       └── Makefile
    ├── b2open-demo2_1.3.bb
    ├── b2open-demo3
       ├── CMakeLists.txt
       └── usb_mon.c
    └── b2open-demo3.bb

4 directories, 8 files


Retorne para o diretório build-qemu/ e tente construir o pacote da receita criada:

Executar no HOST
cd ~/treinamento/yp/poky/build-qemu

bitbake b2open-demo3


O erro abaixo será gerado:

NOTE: Executing Tasks
ERROR: b2open-demo3-1.0-r0 do_configure: ExecutionError('/home/b2open/treinamento/yp/poky/build-qemu/tmp/work/core2-64-poky-linux/b2open-demo3/1.0/temp/run.do_configure.1660583', 1, None, None)
ERROR: Logfile of failure stored in: /home/b2open/treinamento/yp/poky/build-qemu/tmp/work/core2-64-poky-linux/b2open-demo3/1.0/temp/log.do_configure.1660583
Log data follows:
| DEBUG: Executing python function extend_recipe_sysroot
| NOTE: Direct dependencies are ['/home/b2open/treinamento/yp/poky/meta/recipes-core/glibc/glibc_2.39.bb:do_populate_sysroot', '/home/b2open/treinamento/yp/poky/meta/recipes-devtools/cmake/cmake-native_3.28.3.bb:do_populate_sysroot', '/home/b2open/treinamento/yp/poky/meta/recipes-devtools/gcc/gcc-cross_13.3.bb:do_populate_sysroot', '/home/b2open/treinamento/yp/poky/meta/recipes-devtools/gcc/gcc-runtime_13.3.bb:do_populate_sysroot', '/home/b2open/treinamento/yp/poky/meta/recipes-devtools/quilt/quilt-native_0.67.bb:do_populate_sysroot', 'virtual:native:/home/b2open/treinamento/yp/poky/meta/recipes-devtools/ninja/ninja_1.11.1.bb:do_populate_sysroot', 'virtual:native:/home/b2open/treinamento/yp/poky/meta/recipes-devtools/patch/patch_2.7.6.bb:do_populate_sysroot', 'virtual:native:/home/b2open/treinamento/yp/poky/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb:do_populate_sysroot', 'virtual:native:/home/b2open/treinamento/yp/poky/meta/recipes-devtools/pseudo/pseudo_git.bb:do_populate_sysroot']
| NOTE: Installed into sysroot: []
| NOTE: Skipping as already exists in sysroot: ['gettext-minimal-native', 'glibc', 'binutils-cross-x86_64', 'cmake-native', 'gcc-cross-x86_64', 'gcc-runtime', 'libgcc', 'libtool-native', 'm4-native', 'quilt-native', 'texinfo-dummy-native', 'linux-libc-headers', 'openssl-native', 'ncurses-native', 'zlib-native', 'flex-native', 'gnu-config-native', 'make-native', 'ninja-native', 'patch-native', 'perl-native', 'pkgconfig-native', 'pseudo-native', 'bzip2-native', 'xz-native', 'zstd-native', 'attr-native', 'gdbm-native', 'gmp-native', 'libmpc-native', 'mpfr-native', 're2c-native', 'sqlite3-native']
| DEBUG: Python function extend_recipe_sysroot finished
| DEBUG: Executing shell function do_configure
| -- The C compiler identification is GNU 13.3.0
| -- Detecting C compiler ABI info
| -- Detecting C compiler ABI info - done
| -- Check for working C compiler: /home/b2open/treinamento/yp/poky/build-qemu/tmp/work/core2-64-poky-linux/b2open-demo3/1.0/recipe-sysroot-native/usr/bin/x86_64-poky-linux/x86_64-poky-linux-gcc - skipped
| -- Detecting C compile features
| -- Detecting C compile features - done
| -- Found PkgConfig: /home/b2open/treinamento/yp/poky/build-qemu/tmp/work/core2-64-poky-linux/b2open-demo3/1.0/recipe-sysroot-native/usr/bin/pkg-config (found version "0.29.2")
| -- Checking for module 'libudev'
| --   No package 'libudev' found
| CMake Error at recipe-sysroot-native/usr/share/cmake-3.28/Modules/FindPkgConfig.cmake:619 (message):
|   The following required packages were not found:
| 
|    - libudev
| 
| Call Stack (most recent call first):
|   recipe-sysroot-native/usr/share/cmake-3.28/Modules/FindPkgConfig.cmake:841 (_pkg_check_modules_internal)
|   CMakeLists.txt:8 (pkg_check_modules)
| 
| 
| -- Configuring incomplete, errors occurred!
| WARNING: exit code 1 from a shell command.
ERROR: Task (/home/b2open/treinamento/yp/poky/meta-treinamento/recipes-b2open/apps/b2open-demo3.bb:do_configure) failed with exit code '1'
NOTE: Tasks Summary: Attempted 854 tasks of which 844 didn't need to be rerun and 1 failed.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 1 seconds

Summary: 1 task failed:
  /home/b2open/treinamento/yp/poky/meta-treinamento/recipes-b2open/apps/b2open-demo3.bb:do_configure
      log: /home/b2open/treinamento/yp/poky/build-qemu/tmp/work/core2-64-poky-linux/b2open-demo3/1.0/temp/log.do_configure.1660583
      Summary: There was 1 ERROR message, returning a non-zero exit code.

Analisando o log reportado, encontramos a informação "No package 'libudev' found", o código utiliza recursos da biblioteca udev e não está encontrando a biblioteca para compilação, então, deve-se adicionar udev em DEPENDS para satisfazer esta dependência para compilação.

Adicione na receita b2open-demo3.bb a variável DEPENDS acima de SRC_URI:

DESCRIPTION = "B2Open Application Demo3"
SECTION = "examples"
LICENSE = "MIT"
LIC_FILES_CHKSUM = " \
                   file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
                   "

DEPENDS += "udev"

SRC_URI = " \
          file://CMakeLists.txt \
          file://usb_mon.c \
          "

S = "${WORKDIR}"

inherit cmake pkgconfig

do_install() {
    install -d ${D}${bindir}
    install -m 0755 usb_mon ${D}${bindir}/b2open-demo3_usb_mon
}

Salve e tente construir novamente executando bitbake b2open-demo3.


Verificando se o binario foi construido com sucesso:

Executar no HOST
tree tmp/work/core2-64-poky-linux/b2open-demo3/1.0/image/

Resultado esperada:

1
2
3
4
5
6
tmp/work/core2-64-poky-linux/b2open-demo3/1.0/image/
└── usr
    └── bin
        └── b2open-demo3_usb_mon

2 directories, 1 file


Criando Receita para baixar projeto de repositório Git


Acessar novamente meta-treinamento/recipes-b2open/apps e criar a receita b2-sniffer_git.bb:

Executar no HOST
cd ~/treinamento/yp/poky/meta-treinamento/recipes-b2open/apps/

touch b2-sniffer_git.bb


Editar o arquivo da receita criada b2-sniffer_git.bb e adicionar:

SUMMARY = "Sniffer B2Open Systems in C++ and based in libcap"
DESCRIPTION = " \
Simple sniffer in C++ with libpcap para \
capturar/capturar e salvar pcap file. Use wireshark \
to view the generated .pcap files."
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = " \
                   file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \
                   "

DEPENDS = "libcap libpcap "

SRC_URI = "\
          gitsm://github.com/b2open/b2-sniffer.git;protocol=https;branch=main \
          "
SRCREV = "2822051cca9e34363424e09d5d440e8f6a7b22ac"

S = "${WORKDIR}/git"

inherit cmake pkgconfig

Retorno para o diretorio de build-qemu/ e execute o bitbake b2-sniffer para baixar o repositório do projeto b2-sniffer e construir utilizando cmake herdando a classe cmake.

Executar no HOST
cd ~/treinamento/yp/poky/build-qemu/

bitbake b2-sniffer


DESAFIO: Resolver o erro de compilação que está ocorrendo no b2-sniffer.


Note

Existe um erro no código-fonte do b2-sniffer, o desafio é corrigir/fixar e avançar o processo de compilação utilizando recursos e configurações na receita.

ERRO
error: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Werror=unused-result]

DICA
Flags de compilação CXXFLAGS/CFLAGS e -Wno-error


Adicionando camadas para suportar BSP dos hardware da Toradex

Note

Antes de continuar verificar com o instrutor se será utilizada o mesmo container e ambiente com o qemu ou um novo build/projeto será ou ja foi criado a fim de agilizar ambiente e downloads.


Afim de preparar o mesmo ambiente atual para construir imagens para Módulos da Toradex, clone os repositorios abaixo junto com as demais meta camadas.


Criando uma nova instância do Container para Toradex BSP

Executar no HOST
docker run -it --rm --privileged --cap-add=NET_ADMIN --name treinamento-build-tdx --hostname build-tdx -e DISPLAY=$DISPLAY -v ${HOME}/treinamento-b2open:/home/b2open/treinamento -v /tmp:/tmp -v /dev:/dev -v /var/run/dbus:/var/run/dbus -v /run/udev:/run/udev:ro -v /etc/localtime:/etc/localtime:ro b2open/treinamento-linux-embarcado /bin/bash


Próximo passo acessar o poky atualmente baixado e configurado, mas iremos criar um novo projeto de build chamado build-toradex, mas antes baixar as camadas do BSP e dependências da Toradex:

Executar no HOST
cd ~/treinamento/yp/poky/


Branch scarthgap

Executar no HOST
# revision: 70c83e96c7f75e73245cb77f1b0cada9ed4bbc6d
git clone -b scarthgap https://github.com/Freescale/meta-freescale-3rdparty.git

# revision: b9d6a5d9931922558046d230c1f5f4ef6ee72345
git clone -b scarthgap https://github.com/Freescale/meta-freescale-distro.git

# revision: a82f138b140f613a06bf9ac60101e4bb511c309f
git clone -b scarthgap https://github.com/Freescale/meta-freescale.git

# revision: aec6ca26d6eb9b7c2d74e15e10deb76d63230016
git clone -b scarthgap-7.x.y http://git.toradex.com/meta-toradex-bsp-common.git

# revision: a217e4b3186b4d1b1beaf44ff8bdb7eda252e6c1
git clone -b scarthgap-7.x.y http://git.toradex.com/meta-toradex-nxp.git

# revision: 7d9d42e024b8bd9048028986c8dfb36a7300ac6a
git clone -b scarthgap-7.x.y http://git.toradex.com/meta-toradex-demos.git

# revision: e808259783ae03856eb908fae18bb5279dac78c7
git clone -b scarthgap-7.x.y http://git.toradex.com/meta-toradex-distro.git

# revision: bc865c5276c2ab4031229916e8d7c20148dfbac3
git clone -b scarthgap https://git.yoctoproject.org/meta-security

# revision: eb828418264a49b8d00035cb3d7b12fcea3be801
git clone -b scarthgap https://github.com/meta-qt5/meta-qt5

# revision: be5c50bed93b3dfafb3354e418ed48aca51d3153
git clone -b scarthgap https://github.com/b2open/meta-b2open-treinamento


Criar o novo projeto de build

Executar no HOST
cd ~/treinamento/yp/poky/

source oe-init-build-env build-toradex


Adicionado as camadas da Toradex ao projeto atual

Executar no HOST
bitbake-layers add-layer ../meta-freescale-3rdparty

bitbake-layers add-layer ../meta-freescale

bitbake-layers add-layer ../meta-freescale-distro

bitbake-layers add-layer ../meta-toradex-bsp-common

bitbake-layers add-layer ../meta-toradex-nxp

bitbake-layers add-layer ../meta-toradex-demos

bitbake-layers add-layer ../meta-toradex-distro

bitbake-layers add-layer ../meta-security/meta-tpm

bitbake-layers add-layer ../meta-qt5

bitbake-layers add-layer ../meta-b2open-treinamento


Ajustando o conf/local.conf


Edite o conf/local.conf e adicione as MACHINE abaixo junto com as já existentes:

# MACHINE ?= "colibri-imx8x"
# MACHINE ?= "verdin-imx8mp"


Ainda no conf/local.conf adicione abaixo do DISTRO ?= "poky":

# DISTRO ?= "tdx-xwayland"


E no final do arquivo adicione:

# Delete the the source/object/binary files once a package is built to preserve disk space
INHERIT += "rm_work"

# Add Toradex bbclasses
INHERIT += "toradex-mirrors toradex-sanity"

# This file does not need to exist, if it does it can be used to influence machine specific
# configurations without copying the machine file.
include conf/machine/include/${MACHINE}.inc

ACCEPT_FSL_EULA = "1"


Gerando primeira imagem para Toradex

Abaixo passando os parametros de um MACHINE sendo "colibri-imx8x" e a DISTRO a fornecida pela Toradex "tdx-xwayland":

Executar no HOST
MACHINE="colibri-imx8x" DISTRO="tdx-xwayland" bitbake tdx-reference-minimal-image -k


Diretório com o resultado final

O resultado final com a geração de todos os arquivos como Bootloader, Kernel, RootFS, Modulos e o arquivo de instalação da Toradex Tezi todos em tmp/deploy/images/colibri-imx8x/.


Exemplo o deploy do colibri-imx8x:

Executar no HOST
cd tmp/deploy/images/colibri-imx8x/

ls -l 


Resultado:

total 590808
-rw-r--r-- 1 b2open b2open     32909 Jun 02 16:47 bl31-imx8qx.bin
-rw-r--r-- 1 b2open b2open      5389 Jun 02 21:04 boot.scr-colibri-imx8x
-rw-r--r-- 2 b2open b2open   8424528 Jun 02 20:14 Colibri-iMX8X_Reference-Minimal-Image.bootfs.tar.xz
-rw-r--r-- 2 b2open b2open     66906 Jun 02 20:12 Colibri-iMX8X_Reference-Minimal-Image.manifest
-rw-r--r-- 2 b2open b2open   3126752 Jun 02 20:14 Colibri-iMX8X_Reference-Minimal-Image.spdx.tar.zst
-rw-r--r-- 2 b2open b2open 154882544 Jun 02 20:15 Colibri-iMX8X_Reference-Minimal-Image.tar.xz
-rw-r--r-- 2 b2open b2open    924997 Jun 02 20:11 Colibri-iMX8X_Reference-Minimal-Image.testdata.json
-rw-r--r-- 2 b2open b2open 164966400 Jun 02 20:16 Colibri-iMX8X_Reference-Minimal-Image-Tezi_7.5.0-devel-20250602225301+build.0.tar
lrwxrwxrwx 2 b2open b2open        81 Jun 02 20:16 Colibri-iMX8X_Reference-Minimal-Image-Tezi.tar -> Colibri-iMX8X_Reference-Minimal-Image-Tezi_7.5.0-devel-20250602225301+build.0.tar
-rw-r--r-- 2 b2open b2open      3619 Jun 02 20:18 Colibri-iMX8X_Reference-Minimal-Image.wic.bmap
-rw-r--r-- 2 b2open b2open 251689142 Jun 02 20:18 Colibri-iMX8X_Reference-Minimal-Image.wic.gz
drwxr-xr-x 2 b2open b2open      4096 Jun 02 10:33 devicetree
lrwxrwxrwx 2 b2open b2open        74 Jun 02 20:05 Image.gz -> Image.gz--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.bin
-rw-r--r-- 2 b2open b2open   8402094 Jun 02 20:05 Image.gz--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.bin
lrwxrwxrwx 2 b2open b2open        74 Jun 02 20:05 Image.gz-colibri-imx8x.bin -> Image.gz--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.bin
-rw-r--r-- 2 b2open b2open      2031 Jun 02 20:15 image-Reference-Minimal-Image.json
lrwxrwxrwx 2 b2open b2open        24 Jun 02 20:05 imx8dx-colibri-aster--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8dx-colibri-aster.dtb
lrwxrwxrwx 2 b2open b2open        24 Jun 02 20:05 imx8dx-colibri-aster-colibri-imx8x.dtb -> imx8dx-colibri-aster.dtb
-rw-r--r-- 2 b2open b2open    120592 Jun 02 20:05 imx8dx-colibri-aster.dtb
lrwxrwxrwx 2 b2open b2open        26 Jun 02 20:05 imx8dx-colibri-eval-v3--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8dx-colibri-eval-v3.dtb
lrwxrwxrwx 2 b2open b2open        26 Jun 02 20:05 imx8dx-colibri-eval-v3-colibri-imx8x.dtb -> imx8dx-colibri-eval-v3.dtb
-rw-r--r-- 2 b2open b2open    121528 Jun 02 20:05 imx8dx-colibri-eval-v3.dtb
lrwxrwxrwx 2 b2open b2open        23 Jun 02 20:05 imx8dx-colibri-iris--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8dx-colibri-iris.dtb
lrwxrwxrwx 2 b2open b2open        23 Jun 02 20:05 imx8dx-colibri-iris-colibri-imx8x.dtb -> imx8dx-colibri-iris.dtb
-rw-r--r-- 2 b2open b2open    121532 Jun 02 20:05 imx8dx-colibri-iris.dtb
lrwxrwxrwx 2 b2open b2open        26 Jun 02 20:05 imx8dx-colibri-iris-v2--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8dx-colibri-iris-v2.dtb
lrwxrwxrwx 2 b2open b2open        26 Jun 02 20:05 imx8dx-colibri-iris-v2-colibri-imx8x.dtb -> imx8dx-colibri-iris-v2.dtb
-rw-r--r-- 2 b2open b2open    122122 Jun 02 20:05 imx8dx-colibri-iris-v2.dtb
lrwxrwxrwx 2 b2open b2open        25 Jun 02 20:05 imx8qxp-colibri-aster--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8qxp-colibri-aster.dtb
lrwxrwxrwx 2 b2open b2open        25 Jun 02 20:05 imx8qxp-colibri-aster-colibri-imx8x.dtb -> imx8qxp-colibri-aster.dtb
-rw-r--r-- 2 b2open b2open    121268 Jun 02 20:05 imx8qxp-colibri-aster.dtb
lrwxrwxrwx 2 b2open b2open        27 Jun 02 20:05 imx8qxp-colibri-eval-v3--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8qxp-colibri-eval-v3.dtb
lrwxrwxrwx 2 b2open b2open        27 Jun 02 20:05 imx8qxp-colibri-eval-v3-colibri-imx8x.dtb -> imx8qxp-colibri-eval-v3.dtb
-rw-r--r-- 2 b2open b2open    122208 Jun 02 20:05 imx8qxp-colibri-eval-v3.dtb
lrwxrwxrwx 2 b2open b2open        24 Jun 02 20:05 imx8qxp-colibri-iris--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8qxp-colibri-iris.dtb
lrwxrwxrwx 2 b2open b2open        24 Jun 02 20:05 imx8qxp-colibri-iris-colibri-imx8x.dtb -> imx8qxp-colibri-iris.dtb
-rw-r--r-- 2 b2open b2open    122212 Jun 02 20:05 imx8qxp-colibri-iris.dtb
lrwxrwxrwx 2 b2open b2open        27 Jun 02 20:05 imx8qxp-colibri-iris-v2--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.dtb -> imx8qxp-colibri-iris-v2.dtb
lrwxrwxrwx 2 b2open b2open        27 Jun 02 20:05 imx8qxp-colibri-iris-v2-colibri-imx8x.dtb -> imx8qxp-colibri-iris-v2.dtb
-rw-r--r-- 2 b2open b2open    122802 Jun 02 20:05 imx8qxp-colibri-iris-v2.dtb
lrwxrwxrwx 1 b2open b2open        35 Jun 02 21:18 imx-boot -> imx-boot-colibri-imx8x-sd.bin-flash
-rw-r--r-- 1 b2open b2open   1192960 Jun 02 21:18 imx-boot-colibri-imx8x-sd.bin-flash
-rw-r--r-- 1 b2open b2open   1193000 Jun 02 21:18 imx-boot.tagged
drwxr-xr-x 2 b2open b2open      4096 Jun 02 21:18 imx-boot-tools
lrwxrwxrwx 2 b2open b2open        75 Jun 02 20:05 kernel-config -> kernel-config--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301
-rw-r--r-- 2 b2open b2open    214357 Jun 02 13:14 kernel-config--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301
-rw-r--r-- 1 b2open b2open     69050 Jun 02 23:42 LA_OPT_NXP_SW.html
-rw-r--r-- 1 b2open b2open    378880 Jun 02 23:42 marketing.tar
-rw-r--r-- 2 b2open b2open   7388230 Jun 02 20:05 modules--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.tgz
lrwxrwxrwx 2 b2open b2open        73 Jun 02 20:05 modules-colibri-imx8x.tgz -> modules--6.6.119+git0+meta_e5c5595adb-r0-colibri-imx8x-20250602225301.tgz
-rw-r--r-- 1 b2open b2open     78408 Jun 02 19:28 mx8qxc0-ahab-container.img
drwxr-xr-x 2 b2open b2open      4096 Jun 02 10:33 overlays
-rw-r--r-- 1 b2open b2open        52 Jun 02 10:33 overlays.txt
-rw-r--r-- 1 b2open b2open       183 Jun 02 23:42 prepare.sh
lrwxrwxrwx 2 b2open b2open        51 Jun 02 20:14 Reference-Minimal-Image-colibri-imx8x.rootfs.bootfs.tar.xz -> Colibri-iMX8X_Reference-Minimal-Image.bootfs.tar.xz
lrwxrwxrwx 2 b2open b2open        46 Jun 02 20:12 Reference-Minimal-Image-colibri-imx8x.rootfs.manifest -> Colibri-iMX8X_Reference-Minimal-Image.manifest
lrwxrwxrwx 2 b2open b2open        50 Jun 02 20:14 Reference-Minimal-Image-colibri-imx8x.rootfs.spdx.tar.zst -> Colibri-iMX8X_Reference-Minimal-Image.spdx.tar.zst
lrwxrwxrwx 2 b2open b2open        44 Jun 02 20:15 Reference-Minimal-Image-colibri-imx8x.rootfs.tar.xz -> Colibri-iMX8X_Reference-Minimal-Image.tar.xz
lrwxrwxrwx 2 b2open b2open        51 Jun 02 20:11 Reference-Minimal-Image-colibri-imx8x.rootfs.testdata.json -> Colibri-iMX8X_Reference-Minimal-Image.testdata.json
lrwxrwxrwx 2 b2open b2open        46 Jun 02 20:18 Reference-Minimal-Image-colibri-imx8x.rootfs.wic.bmap -> Colibri-iMX8X_Reference-Minimal-Image.wic.bmap
lrwxrwxrwx 2 b2open b2open        44 Jun 02 20:18 Reference-Minimal-Image-colibri-imx8x.rootfs.wic.gz -> Colibri-iMX8X_Reference-Minimal-Image.wic.gz
-rw-r--r-- 2 b2open b2open      7301 Jun 02 20:14 Reference-Minimal-Image.env
-rw-r--r-- 2 b2open b2open       976 Jun 02 20:14 Reference-Minimal-Image-imx-imx-boot-bootpart.wks
-rw-r--r-- 1 b2open b2open      2434 Jun 02 23:42 toradexlinux.png
lrwxrwxrwx 1 b2open b2open        24 Jun 02 18:57 u-boot.bin -> u-boot-sd-2024.04-r0.bin
lrwxrwxrwx 1 b2open b2open        24 Jun 02 18:57 u-boot.bin-sd -> u-boot-sd-2024.04-r0.bin
lrwxrwxrwx 1 b2open b2open        24 Jun 02 18:57 u-boot-colibri-imx8x.bin -> u-boot-sd-2024.04-r0.bin
lrwxrwxrwx 1 b2open b2open        24 Jun 02 18:57 u-boot-colibri-imx8x.bin-sd -> u-boot-sd-2024.04-r0.bin
lrwxrwxrwx 1 b2open b2open        46 Jun 02 18:57 u-boot-initial-env-colibri-imx8x-sd -> u-boot-initial-env-colibri-imx8x-sd-2024.04-r0
-rw-r--r-- 1 b2open b2open      2917 Jun 02 18:57 u-boot-initial-env-colibri-imx8x-sd-2024.04-r0
lrwxrwxrwx 1 b2open b2open        46 Jun 02 18:57 u-boot-initial-env-sd -> u-boot-initial-env-colibri-imx8x-sd-2024.04-r0
-rw-r--r-- 1 b2open b2open    832112 Jun 02 18:57 u-boot-sd-2024.04-r0.bin
-rw-r--r-- 1 b2open b2open        18 Jun 02 23:42 wrapup.sh


No exemplo acima, deverá copiar e extrair o conteúdo do arquivo Colibri-iMX8X_Reference-Minimal-Image-Tezi_7.5.0-devel-20250602225301+build.0.tar para o MicroSD de instalação!


Download TEZI

Para baixar a ferramenta utilize o link abaixo e selecione o hardware/modulo correto para download:

Toradex Easy Installer