tag 标签: nxp

相关博文
  • 2025-5-28 12:00
    0 个评论
    B y Toradex 胡珊逢 简介 在 上一篇文章 中我们已经介绍如何使用 meta-toradex-security layer 创建一个单独的分区。接下来我们将说明,如何在该分区上使用加密功能,读写性能测试,如果你还感兴趣,最后部分内容将阐述分区加密背后的原理。技术实现细节隐藏在 meta-toradex-security 的 recipes 里面,用户能够仅使用几行简单的配置即可开启分区加密。 Yocot Project 配置 和之前的文章一样,首先需要搭建 Yocto Project 编译环境。这里我们将以 Verdin iMX8MP 为例进行介绍。在 local.conf 的结尾添加下面两行配置即可。 INHERIT += "tdx-tezi-data-partition tdx-encrypted" TDX_ENC_STORAGE_LOCATION = "/dev/mmcblk2p3" tdx-encrypted 被添加后,所编译的镜像中就能够使用分区加密。'TDX_ENC_STORAGE_LOCATION' 用于配置需要加密的分区。在 Verdin iMX8MP 上 eMMC 会被挂载到 /dev/mmcblk2 下面,mmcblk2p3 是需要新创建的第三个分区。'TDX_ENC_STORAGE_LOCATION' 也可以设置为 /dev/sda1 或者 /dev/mmcblk0p1,分别对应外部的 U 盘、SD 卡等。 为了提供加密的安全性和效率,meta-toradex-security 可以利用加密运算单元,例如 iMX8M Plus SoC 上的 CAAM(Cryptographic Accelerator and Assurance Module)模块。当然也支持外部的 TPM,例如在 Verdin AM62 上由于没有 SoC 内置的加密运算单元,meta-toradex-security 则能够使用底板上的 TPM,如 Mallow 底板。对于使用 TPM 的模块,local.conf 中还需要添加 TDX_ENC_KEY_BACKEND = "tpm"。 然后使用 bitbake 命令编译镜像即可。 bitbake tdx-reference-minimal- image 当安装完系统并重启后,可以看到 /dev/mapper/encdata,这就是 /dev/mmcblk2p3 分区 DATA 对应的加密设备,它被挂载到 /run/encdata 目录下。在 local.conf 文件中 TDX_ENC_STORAGE_MOUNTPOINT 参数可以用来更改挂载路径。 ~# mount -l/dev/mapper/encdata on /run/encdata type ext4 (rw,relatime) Linux 的文件系统 RFS 使用非加密分区,我们将分别往加密的 /run/encdata 和非加密的 /home/root 目录下写入和读取 1GB 的文件,对比加密操作对读写文件的影响。 #write fio --name= test --filename=testfile.tmp --size=1G --bs=256k --iodepth=64 \ --readwrite =write --direct= 1 --ioengine=libaio --gtod_reduce= 1 # read fio --name= test --filename=testfile.tmp --size=1G --bs=256k --iodepth=64 \ --readwrite =read --direct= 1 --ioengine=libaio --gtod_reduce= 1 测试结果如下: /run/encdata /home/root 写入 1GB 文件 32.8MB/s 61.9MB/s 读取 1GB 文件 32.6MB/s 314MB/s 实现原理 如前面介绍,借助 meta-toradex-security 开启和使用加密分区是非常简单的,对于应用程序来讲,底层的加密是透明的。如果你还对实现原理感兴趣,请继续阅读下面的内容。 i.MX8 SoC 上有一个 CAAM 模块可以用于密钥生成、加密和解密运算。通常用户不会直接调用 CAAM API 进行相关操作。为了更好地保护密钥,我们使用 Linux 的一个内核功能 Trusted Keys 。Trusted Keys 能够在内核空间中生成和维护一个密钥,而在用户空间中则是该密钥的加密文件(encrypted blobs),用户空间中无法直接访问到密钥。密钥的加密和解密是在 CAAM 上完成,而 CAAM 就是 Trusted Keys 的 Trust Source。对于没有 CAAM 作为 Trust Source 的平台,例如 Verdin AM62,我们还可以使用外部的 TPM,甚至是 TEE (Trusted Execution Environment)。这些在 meta-toradex-security 中均得到支持。 另外一个内核功能 dm-crypt 实现了透明的分区加密。dm-crypt 会使用一个密钥用于加密需要写入到 /run/encdata 目录下文件。该密钥可以存储在文件系统分区 RFS 的一个目录下,默认配为 / var /local/ private /.keys/tdx-enc-key.blob 。如果 RFS 是只读文件系统,tdx-enc-key.blob 也可以直接存放在 eMMC 上。但 tdx-enc- key .blob 并是直接用于加密和解密的密钥。如前面提到的,密钥的维护是由 Trusted Keys 实现。 在 CAAM 中首先生成一个密钥 encryption key,该密钥不会离开 CAAM。该密钥通过同样位于 CAAM 的 Test key 或者 OTPMK Key 加密后,交给位于 kernel space 的 Trust Keys 维护。Trust Keys 为 dm-crypt 映射一个密钥,并存放在 / var /local/ private /.keys/tdx-enc-key.blob 。当位于 user space 的应用程序需要读写 /run/encdata 的文件时,dm-crypt 将 tdx-enc- key .blob 提交给 Trusted Keys。Trusted Keys 在 kernel space 中找到对应的密钥,然后将该密钥交给 CAAM。在 CAAM 中可以使用 Test key 或者 OTPMK Key 解密出 encryption key。并在 CAAM 中使用 encryption key 完成加密或者解密数据。这个过程中 Test key/OTPMK Key 和 encryption key 始终不会离开 CAAM,并且加密和解密操作也均在 CAAM 中进行。由于 / var /local/ private /.keys/tdx-enc-key.blob 并不是直接用于加密和解密的密钥。因此,即使该密钥泄漏,也不会导致原来位于 /run/encdata 的数据被破解。 对于使用 CAAM 的模块,例如 Verdin iMX8MM、Verdin iMX8MP、Apalis iMX8QM 等,如果没有开启 Secure Boot 功能,如前面提到,CAAM 会使用预制的 Test key 来加密密钥,这是不安全的,也不推荐在生产环境中使用。开启 Secure Boot 功能后,CAAM 则使用 OTPMK Key 来加密密钥。这是一个 256bit 随机生产的密钥,在 fuse 设备的时候烧录到 CAAM 中。因此该密钥必须妥善保管。 总结 借助 meta-toradex-security,用户能够轻松而安全地使用加密分区,保护数据和应用。更多来自 meta-toradex-security 实用功能,我们将在后续文章介绍,敬请关注。
  • 2025-5-15 13:58
    0 个评论
    2025年5月14日,【2025年恩智浦创新技术峰会】首站登陆上海,飞凌嵌入式作为恩智浦(NXP)金牌合作伙伴受邀参会,聚焦“工业与物联网”领域,携多款边缘侧AI核心板、开发板以及动态演示方案亮相,展示其在低成本人工智能、工业物联网等领域的创新成果。 此次峰会,飞凌嵌入式带来了基于恩智浦i.MX 95xx、i.MX 9352、i.MX 8MPlus 和 i.MX 6ULL 处理器设计开发的嵌入式核心板,并且重点展出了“基于i.MX 8MPlus开发板的内窥镜方案”和“基于i.MX 9352开发板的驾驶员疲劳检测方案”2款动态演示方案,通过动态演示的形式给现场观众带来了更加丰富和多维的体验。 自2014年飞凌嵌入式与恩智浦建立合作以来,双放已共同推出了20余款嵌入式核心板产品,涵盖i.MX6/8/9系列、LS系列、i.MXRT系列等处理器,客户覆盖AIoT、智慧医疗、交通、能源等多元领域,为全球客户提供了更高效智能的嵌入式解决方案,引领行业创新进程。 此次参会,飞凌嵌入式展示了边缘计算与工业物联网领域的前沿技术成果;在未来,飞凌嵌入式也将与恩智浦持续携手创新,赋能智能制造、智慧交通、智慧城市等垂直领域,加速全球产业智能化转型进程。 2025年恩智浦创新技术峰会及技术研讨会持续进行中,欢迎大家的关注和参与。
  • 2025-5-9 16:56
    0 个评论
    NXP iMX8MP ARM 平台多屏幕克隆显示测试
    B y Toradex 秦海 1). 简介 NXP i.MX8MP ARM SoC 支持 3 路 Display Controller 分别提供 DSI/HDMI/LVDS 显示输出,在 Yocto Linux BSP 下采用 Wayland Backend 基于 DRM subsystem 显示驱动,前端默认基于 Weston Compositor 。因此在默认情况下连接多个屏幕的显示输出是如下 Extended 模式: 而为了实现多屏幕 Clone Mode 显示,就需要修改显示 buffer 输出模式如下: 本文就基于上述显示输出 pipeline 修改测试 i.MX8MP 多屏 Clone Mode ,本文所涉及的方法和实际修改代码均来自于如下 NXP 论坛文档,本文仅进行测试演示示例。 https://community.nxp.com/t5/i-MX-Graphics-Knowledge-Base/Weston-clone-mode-on-i-MX8MPlus/ta-p/1791853 本文所演示的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台 。 2. 准备 a). Verdin i.MX8MP ARM 核心版配合 Dahlia 载板, 并连接调试串口用于测试 。 b). Dahlia 载板分别由 DSI-HDMI 转接卡和 native HDMI 两个接口连接两台 HDMI 显示器以便于进行多屏显示测试。 3). 修改部署方法之一:通过 Yocto 编译部署 a). 考虑可维护性和易用性,此方法为推荐方法。 b ). 首先 参考 这里 说明创建 Yocto /Openembedded 编译 框架 , 当前最新版本是对应于 Toradex Yocto Linux BSP 7.x 版本的 scarthgap-7.x.y branch 。 c). 创建定制化 layer meta-customer-demos ,用于添加 Weston 源码修改相关 patch 文件。 --------------------------------------- $ mkdir -p ../oe_core/layers/meta-customer-demos/conf $ cd .../oe_core/layers/meta-customer-demos/conf ### create layer.conf file ### # We have a conf and classes directory, append to BBPATH BBPATH .= ":${LAYERDIR}" # We have recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "customer-demos" BBFILE_PATTERN_customer-demos = "^${LAYERDIR}/" BBFILE_PRIORITY_customer-demos = "24" # Let us add layer-specific bbappends which are only applied when that # layer is included in our configuration BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bbappend' % layer \ for layer in BBFILE_COLLECTIONS.split())}" # Add layer-specific bb files too BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \ for layer in BBFILE_COLLECTIONS.split())}" LAYERDEPENDS_customer-demos = " \ core \ yocto \ openembedded-layer gnome-layer multimedia-layer networking-layer \ " LAYERSERIES_COMPAT_customer-demos = "hardknott honister kirkstone scarthgap" --------------------------------------- d). 在定制化 layer meta-customer-demos 下面添加 Weston bbappend 文件,应用相应的 patch 文件 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/ $ mkdir -p recipes-graphics/wayland/files $ cd recipes-graphics/wayland ### cteate weston_12.0.4.imx.bbappend file ### FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += " \ file://0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch \ " --------------------------------------- e). 将如下 0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch 补丁文件复制到 “ .../oe_core/layers/meta-customer-demos/recipes-graphics/wayland/files ” 目录即可。原 NXP 论坛文档 patch 是基于 Weston 12.0.3 版本,这里对于 Yocto 环境配置的 12.0.4 版本做了一定的适配修改。 https://gitee.com/simonqin09/verdin-imx8mp-display-clone-mode/blob/master/0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch f). 最终完整 meta-customer-demos layer 文件结构如下 meta-customer-demos ├── conf │ └── layer.conf ├── recipes-graphics │ └── wayland │ ├── files │ │ └── 0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch │ └── weston_12.0.4.imx.bbappend g). 修改 bblayers.conf 和 local.conf 文件 ------------------------------- ### modify bblayer.conf ### --- a/build/conf/bblayers.conf +++ b/build/conf/bblayers.conf @@ -34,7 +34,7 @@ ${TOPDIR}/../layers/meta-openembedded/meta-python \ ${TOPDIR}/../layers/meta-freescale-distro \ ${TOPDIR}/../layers/meta-toradex-demos \ + ${TOPDIR}/../layers/meta- customer-demos \ \ \ ${TOPDIR}/../layers/meta-toradex-distro \ ### add below to local.conf ### # add Freescale EULA ACCEPT_FSL_EULA = "1" ------------------------------- h ). 编译 Yocto Linux image ------------------------------- # ## compile Reference-Multimedia image ### $ MACHINE="verdin- imx8mp " bitbake tdx-reference-multimedia-image ------------------------------- i ). Yocto Linux image 部署 参考 这里 通过 Toradex Easy installer 将上面编译好的 image 更新部署到模块 4 ). 修改部署方法之二:通过直接修改 Weston 源码 编译部署 a). 在不具备 Yocto 编译条件下可以考虑此方法。 b ). 参考如下下载对应版本 Weston-imx 源码,本文依然使用 12.0.4 版本示例,并进行修改 ------------------------------- ### download weston-imx source code ### $ git clone -b weston-imx-12.0.3 https://github.com/nxp-imx/weston-imx.git ### apply patch for clone mode ### $ cd weston-imx $ git apply ../../0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch ### modify meson.build file to adopt cross compile ### $ vi protocol/meson.build --- a/protocol/meson.build +++ b/protocol/meson.build @@ -1,5 +1,9 @@ dep_scanner = dependency('wayland-scanner', native: false) -prog_scanner = find_program(dep_scanner.get_variable(pkgconfig: 'wayland_scanner')) +if meson.is_cross_build() + prog_scanner = find_program('wayland-scanner', dep_scanner.get_variable(pkgconfig: 'wayland_scanner')) +else + prog_scanner = find_program(dep_scanner.get_variable(pkgconfig: 'wayland_scanner')) +endif dep_wp = dependency('wayland-protocols', version: '= 1.31', fallback: ) ------------------------------- c ). 参考如下文章编译并 export 交叉编译 toolchain 相关环境变量 https://developer.toradex.cn/linux-bsp/os-development/build-yocto/linux-sdks d ). 编译修改好的 weston-imx 源码 ------------------------------- ### export SDK environments ### $ source SDK_Install_Path/environment-setup-armv8a-tdx-linux ### compile ### $ cd weston-imx $ meson build/ --prefix=/usr -Ddoc=false -Dbackend-drm-screencast-vaapi=false -Dcolor-management-lcms=false -Dpipewire=false \ -Dbackend-x11=false -Drenderer-g2d=true -Dbackend-pipewire=false -Dbackend-rdp=false -Dbackend-vnc=false -Dxwayland=false $ DESTDIR=./opt/weston ninja -C build/ install ------------------------------- e ). 将编译好的 weston 相关库文件部署到 Verdin i.MX8MP BSP7.x Linux ------------------------------- ### package ### $ cd weston-imx/ build/opt/weston/ $ tar cjvf ../../../weston_mod.tar.bz2 * ### copy weston_mod.tar.bz2 package to Verdin i.MX8MP Linux ### ### deploy weston binaries ### root@verdin-imx8mp-06849028:~# tar xvf weston_mod.tar.bz2 / ------------------------------- 5 ). 多屏显示测试 a ). 上述修改部署完成后,不做任何修改, DSI-HDMI 和 native HDMI 屏幕默认启动后是 Extended 显示模式 b). 如下修改 /etc/xdg/weston/weston.ini 来使能 clone mode ------------------------------- --- a /etc/xdg/weston/weston.in i +++ b /etc/xdg/weston/weston.ini @@ -3,6 +3,7 @@ repaint-window=16 idle-time=0 #enable-overlay-view=1 +clone-mode=1 ------------------------------- c ). 重新启动后 DSI-HDMI 和 native HDMI 屏幕使能为 Clone 显示模式 d). 另外,如果是 DSI/native HDMI/native LVDS 同时显示的话,根据 NXP 论坛原文说明,可以在 /etc/xdg/weston/weston.ini 文件中增加如下配置组合,实现两个屏幕 Clone mode 显示,另外一个屏幕 Extented mode 显示。 ------------------------------- ... clone-connector-id= id_1 extend-connector-id= id_2 conn_id= id_3 mode= display_resolution ... ------------------------------- // 其中屏幕 connector-id 通过如下 modetest 命令可以获取 ------------------------------- ### get encoders devices ### # Type DSI - DSI # # Type TMDS - native HDMI # root@verdin-imx8mp-06849028:~# modetest -M imx-drm |grep -C 5 Encoders Encoders: id crtc type possible crtcs possible clones 37 33 DSI 0x00000001 0x00000001 39 36 TMDS 0x00000002 0x00000002 Connectors: ### get display connector-ids ### # connector-id 38 - DSI display # # connector-id 40 - native HDMI display # root@verdin-imx8mp-06849028:~# modetest -M imx-drm |grep -C 1 connected id encoder status name size (mm) modes encoders 38 37 connected HDMI-A-1 0x0 12 37 modes: -- value: 40 39 connected HDMI-A-2 0x0 20 39 modes: ------------------------------- 6 ). 总结 本文 基于 NXP i.MX8MP 处理器平台测试了 Yocto Linux 下多屏幕 Clone 模式显示,不过请注意如 NXP 论坛原文说明,此方法仅限于 NXP i.MX8MP 平台应用。 参考文档 https://community.nxp.com/t5/i-MX-Graphics-Knowledge-Base/Weston-clone-mode-on-i-MX8MPlus/ta-p/1791853
  • 2025-5-7 11:56
    0 个评论
    飞凌嵌入式FET-MX8MPQ-SMARC核心板基于NXP i.MX8MPQ处理器开发设计,该系列处理器专注于机器学习与视觉处理、高级多媒体应用以及高可靠性工业自动化领域,旨在满足智慧城市、工业物联网、智能医疗、智慧交通等应用的需求。 强大的四核或双核ARM@Cortex®-A53处理器,主频高达1.6GHz,带有神经处理单元(NPU),最高运行速率可达2.3TOPS;内置图像信号处理器(ISP)和两个摄像头输入,打造高效的视觉系统;多媒体功能包括视频编码(含H.265)和解码、3D/2D图形加速以及多种音频和语音功能;通过Cortex-M7进行实时控制,采用CAN-FD和双千兆以太网的强大控制网络,具有时间敏感网络(TSN);2个USB3.0、1个PCle3.0、1个SDIO3.0等高速通信接口,满足5G网络、高清视频、双频Wi-Fi、高速工业以太网等应用场景。
  • 2025-4-2 11:12
    237 次阅读|
    0 个评论
    NXP iMX8MP ARM 平台 EMQX 部署测试
    B y Toradex 秦海 1). 简介 EMQX 是一款基于 Erlang/OTP 平台开发的开源 MQTT 消息服务器,广泛应用于物联网( IoT )领域,以实现设备到服务器以及服务器到设备的消息传递与控制 , 文本就基于 NXP i.MX8M Plus ARM 处理器平台,通过在 Yocto Linux BSP 中集成 Docker 环境来部署测试 EMQX 。 本文所演示的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台 。 2. 准备 a). Verdin i.MX8MP ARM 核心版配合 Dahlia 载板, 并连接调试串口用于测试 。 3). Verdin i.MX8MP Yocto Linux 编译部署 a). 首先 参考 这里 说明创建 Yocto /Openembedded 编译 框架 , 当前最新版本是对应于 Toradex Yocto Linux BSP 7.x 版本的 scarthgap-7.x.y branch 。 b). 增加包含 Docker 支持的 meta-virtualization layer 。 ------------------------------- ### add meta-virtualization ### $ cd OE_ROOT_PATH/layers $ git clone -b scarthgap git://git.yoctoproject.org/meta-virtualization ### add meta-clang layer for PySide6 ### $ git clone -b kirkstone https://github.com/kraj/meta-clang.git ------------------------------- c). 创建定制化 layer meta-customer-demos ,用于添加 Docker 需要的额外修改和配置,首先添加 layer 配置文件 --------------------------------------- $ mkdir -p ../oe_core/layers/meta-customer-demos/conf $ cd .../oe_core/layers/meta-customer-demos/conf ### create layer.conf file ### # We have a conf and classes directory, append to BBPATH BBPATH .= ":${LAYERDIR}" # We have recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "customer-demos" BBFILE_PATTERN_customer-demos = "^${LAYERDIR}/" BBFILE_PRIORITY_customer-demos = "24" # Let us add layer-specific bbappends which are only applied when that # layer is included in our configuration BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bbappend' % layer \ for layer in BBFILE_COLLECTIONS.split())}" # Add layer-specific bb files too BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \ for layer in BBFILE_COLLECTIONS.split())}" LAYERDEPENDS_customer-demos = " \ core \ yocto \ openembedded-layer gnome-layer multimedia-layer networking-layer \ " LAYERSERIES_COMPAT_customer-demos = "hardknott honister kirkstone scarthgap" --------------------------------------- d). 在定制化 layer meta-customer-demos 下面添加 Docker bbapend 文件,配置 Docker 可以启动自动加载 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/ $ mkdir -p recipes-containers/docker $ cd recipes-containers/docker ### cteate docker-moby_git.bbappend file ### FILES:${PN} += "${sysconfdir}/systemd/system/docker.service" SYSTEMD_SERVICE:${PN} = "docker.service" SYSTEMD_AUTO_ENABLE:${PN} = "enable" --------------------------------------- e). Docker daemon 启动需要额外比如 IPSec/Netfilter/NF_table 等网络相关的 Kernel Modules ,因此如下增加额外的 Linux Kernel 配置。 --------------------------------------- $ cd .../oe_core/layers/meta-customer-demos/ $ mkdir -p recipes-kernel/linux/ $ cd recipes-kernel/linux ### cteate linux-toradex%.bbappend file ### SRCREV_meta-custom = "1e293f75e7e5569f0d86d752fbf4180dd3fac6eb" SRCREV_meta-custom:use-head-next = "${AUTOREV}" KMETABRANCH = "scarthgap-7.x.y" KMETAVIRTUALITION = "kernel-meta-custom" KMETAREPOSITORY="github.com/toradex/toradex-kernel-cache.git" KMETAPROTOCOL="https" SRC_URI += "git://${KMETAREPOSITORY};protocol=${KMETAPROTOCOL};type=kmeta;name=meta-custom;branch=${KMETABRANCH};destsuffix=${KMETAVIRTUALITION}" ## Compose additional .scc file including docker requirement and include it to our build. KERNEL_FEATURES += "bsp/${MACHINE}-${LINUX_KERNEL_TYPE}-torizon.scc" --------------------------------------- f). 最终完整 meta-customer-demos layer 文件结构如下 meta-customer-demos ├── conf │ └── layer.conf ├── recipes-containers │ └── docker │ └── docker-moby_git.bbappend └── recipes-kernel └── linux └── linux-toradex % .bbappend g). 修改 bblayers.conf 和 local.conf 文件 ------------------------------- ### modify bblayer.conf ### --- a/build/conf/bblayers.conf +++ b/build/conf/bblayers.conf @@ -34,7 +34,7 @@ ${TOPDIR}/../layers/meta-openembedded/meta-python \ ${TOPDIR}/../layers/meta-freescale-distro \ ${TOPDIR}/../layers/meta-toradex-demos \ + ${TOPDIR}/../layers/meta- virtualization \ + ${TOPDIR}/../layers/meta- customer-demos \ \ \ ${TOPDIR}/../layers/meta-toradex-distro \ ### add below to local.conf ### # enable meta-virtualization DISTRO_FEATURES:append = " virtualization" # enable docker support IMAGE_INSTALL:append = " docker docker-compose" # add Freescale EULA ACCEPT_FSL_EULA = "1" ------------------------------- h ). 编译 Yocto Linux image ------------------------------- # ## compile Reference-Multimedia image ### $ MACHINE="verdin- imx8mp " bitbake tdx-reference-multimedia-image ------------------------------- i ). Yocto Linux image 部署 参考 这里 通过 Toradex Easy installer 将上面编译好的 image 更新部署到模块 4 ). EMQX 部署测试 a ). 关于 EMQX 的更多说明和介绍可以参考如下 https://docs.emqx.com/en/emqx/latest/getting-started/getting-started.html b ). 在 Verdin i.MX8MP 设备上面通过如下命令确认 Docker daemon 已经成功运行 ------------------------------- root@verdin-imx8mp-06849028:~# systemctl is-enabled docker.service enabled root@verdin-imx8mp-06849028:~# systemctl status docker.service * docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled) Active: active (running) since Fri 2025-03-28 01:54:37 UTC; 5h 16min ago TriggeredBy: * docker.socket Docs: https://docs.docker.com Main PID: 685 (dockerd) Tasks: 19 Memory: 99.6M (peak: 146.5M) CPU: 14.376s CGroup: /system.slice/docker.service `-685 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ... Mar 28 01:54:37 verdin-imx8mp-06849028 dockerd : time="2025-03-28T01:54:37.583078000Z" level=info msg="Daemon has completed initialization" Mar 28 01:54:37 verdin-imx8mp-06849028 dockerd : time="2025-03-28T01:54:37.684308375Z" level=info msg="API listen on /run/docker.sock" Mar 28 01:54:37 verdin-imx8mp-06849028 systemd : Started Docker Application Container Engine. ------------------------------- c). 参考 这里 通过如下命令安装并运行 EMQX ARM64 Docker Image ,本文采用 offline 方式,如果网络条件允许也可以 online 方式安装。 ------------------------------- ### download $ wget https://www.emqx.com/en/downloads/broker/5.8.6/emqx-5.8.6-docker-arm64.tar.gz ### install $ docker load emqx-5.8.6-docker-arm64.tar.gz ### $ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.8.6 ------------------------------- d ). 此时在开发主机,通过浏览器通过如下网址可以查看已经运行的 EMQX 控制台页面,默认登录信息为 admin/public ,可以后续自行更改密码。 ------------------------------- http:// verdin_imx8mp_ip_address :18083/ ------------------------------- e). 通过如下自带的基于 Websocket 的 MQTT 客户端进行测试 ./ 进入客户端后,首先连接 Verdin i.MX8MP 核心节点设备 ./ 然后再订阅默认的 “ testtopic ” 主题 ./ 最后可以修改 payload 内容后,点击发布,可以看到核心节点可以正常接收数据 5 ). 总结 本文 基于 NXP i.MX8MP 处理器简单演示了通过 Docker 环境部署运行 EMQX MQTT 消息服务器。
相关资源