tag 标签: arm

相关帖子
相关博文
  • 2025-6-16 17:21
    558 次阅读|
    0 个评论
    概要 尽管大多数嵌入式软件应用针对单一微处理器或微控制器开发,但在某些特定场景下需要采用分布式架构。以汽车行业为例,不同子系统可能作为独立应用程序部署在分离的处理器上,例如负责发动机控制系统的嵌入式软件与防抱死制动系统应用就分别运行在不同的微控制器上。 医疗器械行业是嵌入式软件分布于多个微处理器的另一典型案例。例如,用户界面由一个微处理器实现,而负责患者交互的控制系统则位于另一个微控制器上。 可以看出,职责是根据功能划分的,而处理器则根据职责进行选择。例如,用户界面通常在基于 Linux 的系统上实现,这类系统专为类似 ARM Cortex-A 内核的处理器设计;而关键的嵌入式软件应用则采用实时操作系统(RTOS),这种系统最适合类似 ARM Cortex-R 或 Cortex-M 内核的处理器。 然而,若采用多处理器架构,处理器间的通信便至关重要。例如汽车行业就通过 CAN 总线实现这一功能。在医疗设备领域,各处理器可采用 UART、SPI 或 I2C 等通信协议进行交互,如下图所示: 然而,多个处理器分布在不同的芯片上会增加底层硬件、软件和固件的复杂性。这进而可能导致额外的开发和调试工作,从而影响产品的时间线和成本。 为了应对这种额外的复杂性,我们可以将多个处理器集成到同一块芯片上,如下图所示: 在上图中,ARM Cortex-A 和 ARM Cortex-M 内核被集成在同一块芯片上,称为系统级芯片(SoC)。SoC 将 CPU 内核与其他必要的控制器相结合,形成一个功能全面且强大的处理器。如图中显示,嵌入式软件的功能安全(FuSa)部分通过 Zephyr Project 实时操作系统在 ARM Cortex-M 内核上实现,而图形用户界面(GUI)则在 ARM Cortex-A 内核的 Linux 系统中运行。 该设计大幅缩短了硬件开发与调试时间。无需再管理多个独立处理器及电气和机械硬件互联,问题简化为围绕单个处理器的硬件设计。挑战也就主要转移到固件和软件层面,因为每个内核的嵌入式软件需要与其他内核的嵌入式软件建立通信机制。 在这篇博客文章中,我们将学习如何从运行于 ARM Cortex-A 核心的 Linux 内核加载运行于 ARM Cortex-M 核心上的固件。我们将以 Toradex Verdin iMX95 模块为例演示具体实现方法。 OpenAMP项目 Open Asymmetric Multi-Processing(OpenAMP)项目的设立旨在实现同一片上系统内不同核心之间的高效通信。该项目基于德州仪器早期将 Remoteproc 和 RPMsg 纳入 Linux 内核的工作成果发展而来:Remoteproc 使 Linux 内核能够管理远端处理器(remote processor)上的嵌入式软件生命周期,而 RPMsg 则实现了 Linux 内核与远端处理器固件间的通信。OpenAMP 项目将德州仪器的专有实现方法扩展为适用于各类系统的通用框架,标准化了 Linux 内核与基于实时操作系统(RTOS)的嵌入式应用间通信协议,并为希望利用其功能特性(如 RPMsg)的 RTOS 及裸机嵌入式应用提供了参考实现方案。 如前所述,Remoteproc 和 RPMsg 是 OpenAMP 项目的两大核心功能,它们使我们能够管理运行在同一 SoC 不同内核上的嵌入式软件。Remoteproc 负责将固件加载到远程处理器上,并启动和停止远程处理器的执行。在 Linux 系统中,Remoteproc 通常用于管理运行在 Cortex-M 等类似内核上的嵌入式软件生命周期。而 RPMsg 则负责支持运行在 Cortex-M 内核的嵌入式软件与运行 Cortex-A 内核的 Linux 系统之间的消息交换。 Toradex Verdin iMX95 Toradex Verdin iMX95 是一款基于 NXP iMX95 SoC 的高性能模块(SoM)。如下图所示,iMX95 SoC 包含三种不同类型的 ARM 核心架构: ARM Cortex-A55 运行 Linux 操作系统,ARM Cortex-M7 负责执行实时固件,而 ARM Cortex-M33 则管理 Cortex-A55 和 Cortex-M7 的运行。 Zephyr Project RTOS 尽管“实时操作系统”是 Zephyr 项目 RTOS 的官方名称,但 “Zephyr” 远不止是一个 RTOS。它是一个完整的生态系统。虽然它确实包含了 RTOS 的典型功能和数据结构,如任务、信号量、互斥锁和消息队列,但它还拥有负责嵌入式系统其他重要功能的软件栈。例如,它包括: 用于控制和操作厂商特定硬件的驱动程序 实现完整通信协议栈的软件,例如蓝牙低功耗(BLE)和WiFi 实现整个子系统的模块,例如文件系统和引导加载程序 Zephyr 还支持来自众多厂商的 750 多款开发板,包括 Toradex Verdin iMX95。如果我们下载 Zephyr 代码库,可以看到在 boards/nxp/imx95_evk 目录下提供了对 iMX95 EVK 的支持,如下图所示: Zephyr 借鉴了 Linux 内核的 Kconfig 和 Devicetree 功能,我们可以在上图中看到这一点。上图所示的 iMX95 EVK “device driver” 包含: “board.c”, 负责初始板卡启动的C源代码 “imx95_evk_mimx9596_m7.dts”, 用于告知 Zephyr 该板卡上存在哪些外设的 Devicetree 文件 “Kconfig.imx95_evk”, 需要启用支持该板卡关键功能的 Kconfig 的选项集合 例如,如果我们打开“Kconfig.imx95_evk”文件(如下图所示),可以看到它启用了 iMX95 SoC 的 Kconfig 选项。该 Kconfg 选项随后会启用 SoC 所需的其他功能: 例如,Verdin iMX95的“device driver”位于 soc/nxp/imx/imx9/imx95 目录下,如下图所示: 同样的,“soc.c” 是负责初始 SoC 启动的 C 源代码,通过分析设备树中的相应节点,我们可以发现该 SoC 的 Kconfig 文件定义了 Flash 大小。 整合所有步骤 让我们演示如何为 iMX95 编译 Zephyr 应用程序,并从同一开发板上运行的 Cortex-A 内核加载 Zephyr 应用程序到 Cortex-M 内核。首先,我们可以按照 Zephyr入门指南( https://docs.zephyrproject.org/latest/develop/getting_started/index.html )中的步骤确保环境配置正确。 然后执行以下命令使用 West 工具获取 Zephyr 源代码: $ west init -m https://github.com/mabembedded/zephyr.git $ west update 之后,我们可以执行以下命令为 Verdin iMX95 编译一个简单的“Hello World”应用程序: $ west build -p -b imx95_evk/mimx9596/m7 samples/hello_world 然后,我们可以通过执行以下命令(确保将下方列出的 IP 地址替换为我们开发板的实际地址),将编译好的 ELF 格式二进制文件传输至运行在 iMX95 Cortex-A 内核上的 Linux 系统: $ scp build/zephyr/zephyr.elf root@10.10.2.22:~/ 随后,如果我们登录到 iMX95 设备,可以运行以下命令来指示 Linux 将 Zephyr ELF 二进制文件加载至 Verdin iMX95 的 Cortex-M7 核心上: root@imx95-19x19-verdin:~# cd /sys/devices/platform/imx95-cm7/remoteproc/remoteproc1/ root@imx95-19x19-verdin:~# echo ~/zephyr.elf firmware 最后,我们可以在 iMX95 Linux 控制台中输入以下命令来启动 Cortex-M7 核心: root@imx95-19x19-verdin:~# echo start state 我们可以在 iMX95 的 Cortex-M7 控制台上看到以下内容: 上述示例展示了 Linux 内核中 OpenAMP 项目的 Remoteproc 功能。 我们还可以通过如下所示的 openamp_rsc_table 示例应用程序,了解 Zephyr 中的 RPMsg 功能: 如上图所示,“ imx95_evk_mimx9596_m7.conf ” 包含了该应用启用的 Kconfig 选项。下图可见,此文件已启用相关的 OpenAmp 和 Mbox Kconfig 配置项: 该目录还包含一个 Devicetree “overlay”,用于为此特定应用定制开发板的 Devicetree。如下图所示,此覆盖层定义了 RPMsg 应用所需的功能,并引用了特定的硬件组件: 这些特性包括: 各个核心间用于交换数据的共享内存 Linux内核通过资源表来识别远程处理器及固件支持的功能 双核通信使用的邮箱机制 接下来演示如何编译并运行 RPMsg Zephyr 应用程序。首先执行以下命令进行编译: $ west build -p -b imx95_evk/mimx9596/m7 samples/subsys/ipc/openamp_rsc_table 随后,我们可以按照之前概述的步骤将生成的 ELF 二进制文件从 Cortex-A55 上的 Linux 系统传输并加载到 Cortex-M7 中。在从 Linux 端启动 Cortex-M7 后,我们将在 Cortex-M7 的控制台上看到以下内容,这展示了从 Linux 端接收到的消息: 同样,如果观察 Cortex-A55 端的 Linux 内核日志,我们也能看到它通过 RPMsg 接收到了来自 Cortex-M7 上 Zephyr 应用程序的消息,如下所示: 总结 在本篇博客中,我们了解了利用 OpenAMP 项目特性简化嵌入式系统硬件设计的优势。探讨了 Toradex Verdin iMX95 开发板如何通过 SoC 上不同的 ARM 内核实现创新应用场景。实践演示了使用 Zephyr 实时操作系统快速构建 "Hello World" 示例程序,并从运行于 Cortex-A55 的 Linux 系统加载至 Verdin iMX95 的Cortex-M7 核心的全过程。最后,我们还完成了基于 RPMsg 协议的 Zephyr 应用程序编译、从 Linux 环境加载以及验证 Zephyr 与 Linux 之间消息交互的实验。
  • 2025-6-9 14:59
    120 次阅读|
    0 个评论
    B y Toradex 秦海 1). 简介 在前述文章中,我们介绍了如何基于 Weston Composito 实现多屏幕分别显示不同的应用,而进一步延申出的一个应用场景,就是多屏幕之一的 HDMI 屏幕需要进行热插拔,而在热插拔的同时其对应的显示应用也同时启动或者停止,以便不影响其他屏幕的显示。本文就基于前述文章同样的 NXP i.MX8MP 平台来测试如何实现这个功能场景。 本文所演示的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台 。 2. 准备 a). Verdin i.MX8MP ARM 核心版配合 Dahlia 载板, 并连接调试串口用于测试 。 b). Dahlia 载板分别由 DSI-HDMI 转接卡和 native HDMI 两个接口连接两台 HDMI 显示器以便于进行多屏显示测试。 3). 部署流程 a). 为了实现对于 native HDMI 接口连接的 HDMI-2 显示器热插拔动作的响应,需要通过 udev rule 来捕获相应触发模块并进行动作。 ./ 首先通过执行如下命令,然后操作硬件热插拔,获取被触发的 udev “ KERNEL ” 组件是 “ card1 ” , ” SUBSYSTEM ” 是 “ drm ” , ” Action ” 是 “ change ” --------------------------------------- root@verdin-imx8mp-06849028:~# udevadm monitor monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL change /devices/platform/display-subsystem/drm/card1 (drm) UDEV change /devices/platform/display-subsystem/drm/card1 (drm) KERNEL change /devices/platform/display-subsystem/drm/card1 (drm) UDEV change /devices/platform/display-subsystem/drm/card1 (drm) --------------------------------------- ./ 基于上述信息生成如下 udev rules 文件 - /etc/udev/rules.d/99-hdmi-hotplug.rules ,这样无论当 HDMI 显示器连接还是断开的时候都会触发这个规则,并执行 hdmi- hotplug .sh 脚本代码。 --------------------------------------- # When HDMI is attached or unattached ACTION=="change", KERNEL=="card1", SUBSYSTEM=="drm", RUN+="/home/root/hdmi- hotplug .sh" --------------------------------------- b). hdmi- hotplug .sh 脚本代码实现 ./ native HDMI 对应系统 “/sys/class/drm/card1-HDMI-A-2” 设备,设备节点中有 “ status ” 项目对应当前 HDMI hotplug 状态 --------------------------------------- ### HDMI attached ### root@verdin-imx8mp-06849028:~# cat /sys/class/drm/card1-HDMI-A-2/status c onnected ### HDMI unattached ### root@verdin-imx8mp-06849028:~# cat /sys/class/drm/card1-HDMI-A-2/status disconnected --------------------------------------- ./ 基于上述判断生成 hdmi-hotplug.sh 脚本来启动或者停止 smarthome Qt 应用(可以见章节 1 提到的前述双屏显示文章)。在这里需要通过 systemd service 来启动应用,不能直接执行 smarthome 应用,否则在 hdmi-hotplug.sh 退出后应用也会同时退出。 --------------------------------------- #!/bin/bash tty=/dev/ttymxc2 hdmistatus=$(cat /sys/class/drm/card1-HDMI-A-2/status) if ; then echo "HDMI connected..." $tty systemctl start smarthome-app-launch else echo "HDMI disconnected..." $tty systemctl stop smarthome-app-launch fi --------------------------------------- ./ 赋予 hdmi-hotplug.sh 脚本可执行属性 --------------------------------------- root@verdin-imx8mp-06849028:~# chmod +x hdmi-hotplug.sh --------------------------------------- c). 部署 smarthome-app-launch service 文件 ./ smarthome-app-launch service 文件 - /lib/systemd/system/smarthome-app-launch.service --------------------------------------- Description=Start a wayland application After=weston.service Requires=weston.service Type=simple User=root PAMName=login Environment=WAYLAND_DISPLAY=/run/wayland-0 Environment=QT_QPA_PLATFORM=wayland-egl WorkingDirectory=/usr/share/qtsmarthome-1.0/ ExecStart=/usr/share/qtsmarthome-1.0/smarthome Restart=on-failure RestartSec=1 WantedBy=graphical.target --------------------------------------- ./ 更新 systemd service 文件 --------------------------------------- root@verdin-imx8mp-06849028:~# systemctl daemon-reload --------------------------------------- d). 参考章节 1 前述双屏显示文章同样内容,修改 /etc/xdg/weston/weston.ini 文件。 --------------------------------------- --- a/etc/xdg/weston/weston.ini +++ b/etc/xdg/weston/weston.ini @@ -4,6 +4,7 @@ idle-time=0 xwayland=true #enable-overlay-view=1 +shell=kiosk-shell.so @@ -12,13 +13,16 @@ touchscreen_calibrator=true calibration_helper=/usr/bin/toradex-save-touchscreen-calibration -# -#name=HDMI-A-1 -#mode=1920x1080@60 + +name=HDMI-A-1 +app-ids=Qt5_CinematicExperience +mode=1920x1080@60 #transform=rotate-90 -# -#name=HDMI-A-2 + +name=HDMI-A-2 +app-ids=smarthome +mode=1920x1080 #mode=off # WIDTHxHEIGHT Resolution size width and height in pixels # off Disables the output --------------------------------------- e). 另外, wayland-app-launch.service 是 Toradex Yocto Multimedia BSP 默认使能用于 Qt5_CinematicExperience 应用启动的 systemd service 文件,如果之前关闭了,可以通过下面命令使能。 --------------------------------------- root@verdin-imx8mp-06849028:~# systemctl enable wayland-app-launch --------------------------------------- f). 最后所有上述修改完成后重新启动。 4 ). 测试 a). 重新启动后,当两个 HDMI 显示器都连接,可以通过屏幕观察以及如下进程查询确认两个 Qt 应用都分别显示在相应的显示器上面。 ------------------------------- root@verdin-imx8mp-06849028:~# ps -aux |grep Qt5_CinematicExperience root 522 38.3 3.8 1085948 153664 ? Ssl 06:20 0:41 /usr/share/cinematicexperienc e-1.0/Qt5_CinematicExperience --fullscreen root 569 0.0 0.0 2944 1280 ttymxc2 S+ 06:22 0:00 grep Qt5_CinematicExperience root@verdin-imx8mp-06849028:~# ps -aux |grep smarthome root 520 31.8 1.9 1007248 77160 ? Ssl 06:20 0:37 /usr/share/qtsmarthome-1.0/sm arthome root 571 0.0 0.0 2944 1152 ttymxc2 S+ 06:22 0:00 grep smarthome ------------------------------- b ). 当将 native HDMI 连接的 HDMI-2 屏幕断开后,对应的 smarthome 应用也同时退出 ------------------------------- root@verdin-imx8mp-06849028:~# HDMI disconnected... root@verdin-imx8mp-06849028:~# ps -aux |grep smarthome root 645 0.0 0.0 2944 1152 ttymxc2 S+ 06:28 0:00 grep smarthome ------------------------------- c ). 当 native HDMI 连接的 HDMI-2 屏幕重新连接后,对应的 smarthome 应用也同时启动 ------------------------------- root@verdin-imx8mp-06849028:~# HDMI connected... root@verdin-imx8mp-06849028:~# ps -aux |grep smarthome root 650 72.3 1.8 1007248 74052 ? Ssl 06:28 0:04 /usr/share/qtsmarthome-1.0/sm arthome root 662 0.0 0.0 2944 1280 ttymxc2 S+ 06:28 0:00 grep smarthome ------------------------------- 5 ). 总结 本文 基于 NXP i.MX8MP 处理器平台测试了 Yocto Linux 下 HDMI 显示器热插拔情况下对应显示应用同步启动和停止。 参考文档 https://blog.csdn.net/qq_17292655/article/details/134670878
  • 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-4-24 14:33
    0 个评论
    B y Toradex 胡珊逢 简介 Toradex 为其产品使用的软件系统如 Linux 提供了诸多的安全功能,例如 Secure Boot、分区加密、OP-TEE 等,帮助用户应对安全合规。这些功能可以通过在 Yocto Project 中添加由 Toradex 开发的 meta-toradex-security layer 被轻松使用。我们将在接下的几篇文章中介绍如何使用这些功能。本次我们首先介绍如何在使用 Yocto Project 生成安装镜像时创建一个独立的分区,这为后面的分区加密做好准备。 Yocot Project 环境搭建和配置 参考 Build a Reference Image with Yocto Project/OpenEmbedded 页面的说明,我们使用最新的 Linux BSP 7 版本。除了使用默认的 repo 外,我们还可以使用国内站点的 repo 工具,便于下载。 $curl-Lhttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo-orepo $chmod+xrepo $exportREPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' 下载编译 BSP 7 镜像所使用的 mainifest 文件。 $ repo init -u git://git.toradex.cn/toradex-manifest.git -b scarthgap-7.x.y -m tdxref/default.xml $ repo sync $ . export 执行完 `repo sync` 命令后,可以在 layers 目录下发现 Yocto Project 使用的 recipes 文件。在 layers 目录下需要添加 meta-toradex-security 以及其依赖的 meta-security layers。 $ cd layers $ git clone -b scarthgap-7.x.y https://github.com/toradex/meta-toradex-security.git $ git clone -b scarthgap git://git.yoctoproject.org/meta-security 在 build/conf/bblayers.conf 的末尾增加 meta-toradex-security 和 meta-security。这样在稍后的 bitbake 编译时才能够使用这些 recipes。 ${TOPDIR}/../layers/openembedded-core/meta \ ${TOPDIR}/../layers/meta-toradex-security \ ${TOPDIR}/../layers/meta-security \ 在 build/conf/local.conf 的末尾添加下面内容。 INHERIT += "tdx-tezi-data-partition" 在创建和挂载分区时, local.conf 可以使用下面变量改变分区名字、挂载路径、是否自动挂载以及使用其他的挂载参数等,可以根据需要使用。 变量 描述 默认值 TDX_TEZI_DATA_PARTITION_TYPE 数据分区文件系统类型。可用的值为 ext2 、 ext3 、 ext4 、 fat 和 ubifs 。 支持的值仅限于 Toradex Easy Installer 所支持的范围 ext4 TDX_TEZI_DATA_PARTITION_LABEL 用于格式化和挂载数据分区的标签 DATA TDX_TEZI_DATA_PARTITION_AUTOMOUNT 设置为 1 以在启动时自动挂载数据分区,或设为 0 禁用自动挂载; 当设置为 -1 时,该分区甚至不会出现在 fstab 中(需通过其他方式挂载) 如果使用了 tdx-encrypted 类为 -1 ,否则为 1 TDX_TEZI_DATA_PARTITION_MOUNTPOINT 数据分区应挂载的目录 /data TDX_TEZI_DATA_PARTITION_MOUNT_FLAGS 用于挂载数据分区的标志。有关可用挂载标志的更多信息, 请参阅 mount 手册页。 rw,nosuid,nodev,noatime, errors=remount-ro 模块情况下将在 /data 目录挂载一个 EXT4 格式的分区,在该分区上可以存放用户的数据。 编译镜像 完成上面的配置后,即可使用 bitbake 命令编译镜像。例如本次测试将编译用于 Verdn AM62 模块的 minimal image。 $ MACHINE=verdin-am62 bitbake tdx-reference-minimal-image 安装镜像 虽然在 Yocto Project 中规划了一个 /data 下的分区,但该分区还是需要在模块上安装镜像时,由 Toradex Easy Installer 在模块的 eMMC 上创建。在生成镜像的安装文件 image.json 可以看到如下内容。在 RFS 系统分区后会创建一个 DATA 分区。 { "partition_size_nominal": "512", "partition_type": "83", "want_maximised": true, "content": { "label": "DATA", "filesystem_type": "ext4", "mkfs_options": "-E nodiscard", "filename": "" } } 检查分区情况 安装完毕重启进入系统后,使用 mount 命令可以看到 /dev/mmcblk0p3 被挂载到了 /data 目录下。 /dev/mmcblk0p3 on /data type ext4 (rw,nosuid,nodev,noatime,errors=remount-ro) 在 /etc/fstab 中,将 LABEL 为 DATA 的分区在启动时自动挂载。LABEL 名字是前面表格中 TDX_TEZI_DATA_PARTITION_LABEL 参数的默认值。 root@verdin-am62-15415684:/data# cat /etc/fstab ... LABEL=DATA /data auto rw,nosuid,nodev,noatime,errors=remount-ro,auto 0 0 在 image.json 中,RFS 和 DATA 分区都设置了 "want_maximised": true,所以这两个分区会平分 eMMC 上剩余的空间,这里基本约为 3GB。 root@verdin-am62-15415684:/data# df -h Filesystem Size Used Available Use% Mounted on /dev/root 3.4G 207.0M 3.0G 6% / ... /dev/mmcblk0p3 3.4G 28.0K 3.2G 0% /data 总结 通过 meta-toradex-security,用户可以在编译镜像时轻松规划分区,并在运行时将其自动挂载。更多来自 meta-toradex-security 实用功能,我们将在后续文章介绍。
  • 2025-4-2 16:39
    124 次阅读|
    0 个评论
    近日,飞凌嵌入式FET3576-C核心板正式发布了新系统Forlinx Desktop 24.04。至此,FET3576-C核心板已完成Linux 6.1、Android 14、Forlinx Desktop 24.04等多种操作系统的适配,充分展现了其在系统丰富性方面的卓越实力。 1、多系统适配,满足多样化需求 飞凌嵌入式FET3576-C核心板基于Rockchip RK3576处理器开发设计,该处理器集成了4个ARM Cortex-A72和4个ARM Cortex-A53高性能核,内置6TOPS超强算力NPU,为AI应用赋能,多种操作系统的适配,则进一步拓宽了其应用场景。 Linux 6.1系统的加入,使得飞凌嵌入式FET3576-C核心板在开源、稳定、高效等方面表现出色;Android 14系统的适配,则让飞凌嵌入式FET3576-C核心板在智能移动终端、边缘计算等领域大放异彩。 此次新发布的Forlinx Desktop 24.04系统,针对嵌入式设备进行了深度优化,提供了更加直观、易用的用户界面和丰富的应用生态,满足用户在工业控制、智能家居、数字多媒体等多个领域的需求。 2、多重测试,确保稳定运行 飞凌嵌入式深知稳定性对于用户的重要意义,因此对FET3576-C核心板进行了多重测试。这些测试涵盖了硬件可靠性、系统稳定性、性能表现等多个方面,确保核心板在各种复杂环境下都能稳定运行。 3、广泛应用,助力产品快速上市 得益于其卓越的系统丰富性和稳定性,飞凌嵌入式FET3576-C核心板在工业、AIoT、边缘计算、智能移动终端以及其他多种数字多媒体相关的应用领域都展现出了广泛的应用前景。无论是需要高性能计算能力的工业控制设备,还是需要智能交互功能的智能家居产品,FET3576-C核心板都能提供更具优势的解决方案。 此外,飞凌嵌入式还拥有强大的技术支持服务能力,助力客户快速完成产品开发、测试和上市。 总结来说,飞凌嵌入式FET3576-C核心板与多种操作系统的深度适配,不仅充分发挥了核心板硬件的卓越性能,还通过系统的优化与升级,为用户带来了更加流畅、智能、安全的使用体验。对于工业、AIoT、边缘计算、智能移动终端以及其他多种数字多媒体相关的应用领域的专业用户而言,飞凌嵌入式FET3576-C核心板都是一个值得信赖的选择。
相关资源