Multi Source Translation Content

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Multi Source Translation Content

Discussions

Sort by:
如何为 i.MX 8QuadMax MEK CPU 板构建 I.MX Bootloader。 以下步骤允许您以两种不同方式构建可启动镜像以及如何启用和使用 SCFW 调试监控器。生成可启动镜像需要四个文件: ├── bl31.bin ├── u-boot.bin   ├── mx8qm-ahab-container.img     └── scfw_tcm.bin 获取这四个文件有几种方法,一种是使用 Yocto,另一种是使用独立构建。 获取生成可启动映像所需的四个文件,使用 Yocto。 要使用 Yocto 获取所需的四个文件,您必须构建一个 i.MX 8QuadMax 镜像,也许某些步骤不是必需的。 1.-主机软件包。 sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa \ libsdl1.2-dev pylint3 xterm rsync curl 2.-设置 Repo 实用程序。 mkdir ~/bin (this step may not be needed if the bin folder already exists) curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH 3.-Yocto 项目设置。 git config --global user.name "Your Name" git config --global user.email "Your Email" git config --list mkdir imx-yocto-bsp cd imx-yocto-bsp repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-hardknott -m imx-5.10.72-2.2.0.xml repo sync 4.-构建配置。 DISTRO=fsl-imx-xwayland MACHINE=imx8qmmek source imx-setup-release.sh -b imx8qmmek 5.-构建镜像。 bitbake imx-image-full 生成可启动镜像所需的四个文件位于: ~/imx-yocto-bsp/imx8qmmek/tmp/deploy/images/imx8qmmek/imx-boot-tools 注意:使用 Yocto,您无法启用 SCFW 调试监控器。 如需更多信息,请参阅 i.MX Yocto Project 用户指南。 获取生成具有独立构建的可启动镜像所需的四个文件。 要从源代码构建所有所需的二进制文件,您可以使用标准的 aarch64 Linux 工具链,在 Ubuntu 20.04 LTS 上: sudo apt-get install gcc-aarch64-linux-gnu 获取 bl31.bin 文件——Arm Trust 固件。   从以下位置下载源代码: git clone -b lf-5.10.72-2.2.0 https://source.codeaurora.org/external/imx/imx-atf 构建: cd imx-atf make clean PLAT=imx8qm CROSS_COMPILE=aarch64-linux-gnu- make PLAT=imx8qm CROSS_COMPILE=aarch64-linux-gnu- bl31 编译后的 bl31.bin 位置: build/imx8qm/release/bl31.bin 获取 u-boot.bin 文件——u-boot。   从以下位置下载源代码: git clone -b lf-5.10.72-2.2.0 https://source.codeaurora.org/external/imx/uboot-imx 构建: cd uboot-imx make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- imx8qm_mek_defconfig make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- 编译后的 u-boot.bin 文件位置: ./u-boot.bin 获取 mx8qmb0-ahab-container.img 文件——iMX Seco。 wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-3.7.4.bin chmod +x imx-seco-3.7.4.bin ./imx-seco-3.7.4.bin --auto-accept mx8qmb0-ahab-container.img 文件位置: imx-seco-3.7.4/firmware/seco/mx8qmb0-ahab-container.img 获取 scfw_tcm.bin 文件 - SCFW。   下载并安装 GNU 工具链。   查看 packages/imx-scfw-porting-kit-1.7.4/doc/pdf/ ,在“移植指南”章节的“工具链”子章节中,查看与您正在构建的 SCFW 对应的 GNU 工具链版本。该 imx-scfw-porting-kit-1.7.4 版本使用的是 GNU 工具链版本 gcc-arm-none-eabi-8-2018-q4-major 。建议将工具链安装在“opt”文件夹中: cd /opt sudo wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 sudo tar xjf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 下载并安装 Arm GCC 工具链。 建议将工具链安装在“opt”文件夹中: sudo wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz sudo tar -Jxvf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz 安装工具链后,设置与构建相关的环境变量。 export ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- export TOOLS=/opt 生成 scfw_tcm.bin 文件。 cd ~ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-scfw-porting-kit-1.7.4.bin chmod +x imx-scfw-porting-kit-1.7.4.bin ./imx-scfw-porting-kit-1.7.4.bin --auto-accept cd imx-scfw-porting-kit-1.7.4/src 提取所需的 SCFW 移植套件: tar -xvf scfw_export_mx8qm_b0.tar.gz cd scfw_export_mx8qm_b0/ 不使用调试监控器进行构建: make clean make qm B=mek R=B0 使用调试监控器进行构建: make clean make qm B=mek D=1 M=1 R=B0 DDR_CON=imx8qm_dcd_1.6GHz scfw_tcm.bin 文件位置: build_mx8qm_b0/scfw_tcm.bin   生成可启动的镜像。 一旦您准备好生成可启动镜像所需的四个文件,请使用 imx-mkimage 工具。 从以下位置下载源代码: git clone -b lf-5.10.72-2.2.0 https://source.codeaurora.org/external/imx/imx-mkimage 将四个二进制文件复制到 iMX8QM 文件夹中。 您需要重命名一些文件。 如果您使用 Yocto 获得了四个二进制文件。 cp ~/imx-yocto-bsp/imx8qmmek/tmp/deploy/images/imx8qmmek/imx-boot-tools/bl31-imx8qm.bin ~/imx-mkimage/iMX8QM/bl31.bin cp ~/imx-yocto-bsp/imx8qmmek/tmp/deploy/images/imx8qmmek/imx-boot-tools/u-boot-imx8qmmek.bin-sd ~/imx-mkimage/iMX8QM/u-boot.bin cp ~/imx-yocto-bsp/imx8qmmek/tmp/deploy/images/imx8qmmek/imx-boot-tools/mx8qmb0-ahab-container.img ~/imx-mkimage/iMX8QM cp ~/imx-yocto-bsp/imx8qmmek/tmp/deploy/images/imx8qmmek/imx-boot-tools/mx8qm-mek-scfw-tcm.bin ~/imx-mkimage/iMX8QM/scfw_tcm.bin 如果您获得了四个独立构建的二进制文件。 cp ~/imx-atf/build/imx8qm/release/bl31.bin ~/imx-mkimage/iMX8QM cp ~/uboot-imx/u-boot.bin ~/imx-mkimage/iMX8QM cp ~/imx-seco-3.7.4/firmware/seco/mx8qmb0-ahab-container.img ~/imx-mkimage/iMX8QM cp ~/imx-scfw-porting-kit-1.7.4/src/scfw_export_mx8qm_b0/build_mx8qm_b0/scfw_tcm.bin ~/imx-mkimage/iMX8QM 构建可启动镜像。 cd ~/imx-mkimage make SOC=iMX8QM flash 编译后的文件是 flash.bin,其位置是: iMX8QM/flash.bin   刷写可启动镜像。 要刷写启动镜像,请按照以下步骤操作: -将 flash.bin 和 uuu.exe 复制到一个文件夹中。 -将基板上的 SW2 更改为 000100(从 MSB 到 LSB,1 表示开启,0 表示关闭)以从串行下载器启动。 -在命令提示符中运行以下命令: uuu.exe -b sd flash.bin -启动 MEK CPU 板。   SCFW 调试监控器。 如果 SCFW 使用 M=1 选项进行编译(默认值为 M=0),则会包含一个调试监控器。这可以用于读写内存或寄存器、读写电源状态,以及转储某些资源管理器状态。对生产环境中的 SCFW 从不启用监测(M=0,默认值)! 调试监视器允许通过SCU UART进行命令行交互。包含调试监视器会影响SCFW的计时,因此绝不应在产品中部署!请注意,终端需要处于发送 CR 或 LF 作为新行的模式(而不是 CR+LF)。 以下命令受支持: 命令                                   描述 退出                                              退出调试监视器 quit                                              退出调试监控器 reset [mode]                                请求重置模式(默认=板) reboot partition [type]                  请求分区重启类型(默认=冷启动) md.b 地址 [count] 显示地址处的字节数 md.w address [count]                 显示地址处的字节数 md[.l] address [count]                 显示地址处的长字数 mm.b address value                   修改地址处的字节 mm.w address value                  修改地址处的字词 mm[.l] address value                  修改地址处的长字 ai.r ss sel addr                            读取模拟接口 (AI) 寄存器 ai.w ss sel addr data                  写入模拟接口 (AI) 寄存器 fuse.r word                                 读取 OTP 熔断字 fuse.w word value                      将值写入 OTP 熔断字 dump rm                                    转储所有资源管理器 (RM) 信息 dump rm part [part]                    转储部分的所有分区信息(默认=全部) dump rm rsrc [part]                    转储部分的所有资源信息(默认=全部) dump rm mem [part]                  转储所有部分的内存信息(默认=全部) dump rm pad [part]                    转储该部分的所有 pad 信息(默认=全部) power.r [resource]                     读取/获取资源的电源模式(默认=所有) power.w resource mode            将资源的电源模式写入/设置为(关闭、待机、低功耗、开启) info                                             显示 SCFW/SoC 信息,例如唯一 ID 等。 seco lifecycle change                向 SECO 发送 SECO 生命周期更新命令(更改) seco info                                    显示 SECO 信息,例如生命周期、SNVS 状态等。 seco debug                                dump SECO debug log seco events                               转储 SECO 事件日志 seco commit 提交 SRK 和/或 SECO FW 版本更新 pmic.r id reg 读取 pmic 寄存器 pmic.w id reg val                        写入 PMIC 寄存器 pmic.l id                                      列出 PMIC 信息(轨道电压等) 资源和子系统 (ss) 参数是通过名称指定的。所有数值参数均为十进制,除非以 0x(用于十六进制)或 0(用于八进制)为前缀。 测试 SCFW 调试监控器,以显示 Linux 端和 SCU 端地址处的长字计数。 -将基板上的 SW2 更改为 001100(从 MSB 到 LSB,1 表示开启,0 表示关闭),以从 SD 卡启动。 -启动 MEK CPU 板。 -打开 Tera Term,您将看到: 来自 SCU 的问候 (版本 5263,提交 9b3d006e,2021 年 8 月 20日 12:20:10) ​ DDR 频率=1596000000  ROM 启动时间= 262368 微秒 启动时间=24583 微秒 横幅= 10 微秒 初始值= 9038 微秒 配置= 3232 微秒 DDR = 2677 微秒 SConfig = 444 微秒 准备= 5039 微秒 ​ ***调试监控器*** ​ >$ - 运行以下命令: power.r power.w db on power.w dblogic on power.w mu_1a on -Linux 端的示例读取: md.l 0x5d1c0000 10 —您将看到: >$ md.l 0x5d1c0000 10 5d1c0000: 00000000 00000000 00000000 00000000 5d1c0010: 00010201 23c34600 d63fdb21 00000000 5d1c0020: 00f00200 18000000 -SCU 端的示例阅读: md.l 0x41cac080 10 —您将看到: >$ md.l 0x41cac080 10 41cac080: 00000000 00000000 00000000 00000000 41cac090: 0d070201 ff0001f1 ffff8000 ffff00fb 41cac0a0: 00f00000 18000000 有关更多信息,请参阅《系统控制器固件移植指南》。 i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus Linux Yocto Project
View full article
eIQ Time Series Studioを使い始める このラボでは、eIQ Time Series Studio(TSS)の使用方法を説明します。この新しいツールはeIQ Tookitに含まれており、埋め込みマイクロコントローラ向けの時系列モデルの作成に使用されます。時系列データをインポートする方法、複数のMLアルゴリズムを生成する方法、生成モデルを開発ボードにデプロイする方法を取りあげます。 ラボではFRDM-MCXN947を使用しますが、eIQ Time Series Studioでサポートされているあらゆるデバイスで同じ手順が適用されます。 MCX FRDM-MCXA153 FRDM-MCXN947 MCX-N9XX-EVK i.MX RT i.MXRT685-EVK i.MXRT595-EVK MIMXRT1060-EVK MIMXRT1170-EVK MIMXRT1180-EVK LPC LPC55S69-EVK Kinetis FRDM-K66F FRDM-KV31F FRDM-K32L3A6 DSC MC56F83000-EVK MC56F80000-EVK   Time Series Studioプロセスの概要をすばやくつかむには、以下の動画もご覧ください。 (マイビデオで視聴) Time Series Studioで使用可能なセンサ・データの収集ツールについては、アプリケーション・コード・ハブのML Universal Datalogger もご覧ください。 i.MX RT
View full article
i.MX Android 常见问题解答 i.MX_Android_常见问题解答 i.MX Android FAQ 1 同步项目并构建 1.1 如何从镜像服务器下载 AOSP repo? 默认情况下,Android项目中的所有aosp repo都将直接从google服务器下载。但有些人可能无法访问谷歌服务器,如果你的服务器已经镜像了 aosp repo,那么你可以重定向 aosp repo 下载链接。 在i.MX android项目中,所有的aosp repo都会被包含在${MY_ANDROID} /.repo/manifests/aosp*.xml中,您可以通过更改远程“aosp”的“fetch”来重定向aosp repo远程,下面是将远程链接重定向到 的示例: @@ -2,7 +2,7 @@ https://android.googlesource.com/" + fetch=" /" review="https://android-review.googlesource.com/" /> 1.2 如何配置构建信息? BUILD_ID 和 BUILD_NUMBER 是两个 makefile 变量,如果定义了它们,则可以在 Android 核心构建系统中使用它们来指定构建信息。在我们的发布包中,我们将 BUILD_ID 定义为内部发布版本号,并将 BUILD_NUMBER 定义为内部发布日期。您可以在${MY_ANDROID} /device/fsl/{product}/build_id.mk文件中自定义这两个变量的值。“ ${MY_ANDROID} ”代表Android源代码的根目录。“{product}”与特定的芯片和主板相关,例如,它可以是“imx8m/evk_8mq”。 以下是更新 i.MX 8MQuad EVK 的 BUILD_ID 的示例 diff --git a/imx8m/evk_8mq/build_id.mk b/imx8m/evk_8mq/build_id.mk 索引 257b500..b177202 100644 --- a/imx8m/evk_8mq/build_id.mk +++ b/imx8m/evk_8mq/build_id.mk @@ -18,5 +18,5 @@ #(如“CRB01”)。它必须是一个单词,并且按照惯例以# 大写。 -export BUILD_ID=1.0.0-ga-rc2 +export BUILD_ID=1.0.0-ga-rc3 导出 BUILD_NUMBER=20190114 1.3 如何更改 boot.img 中的启动命令行? 使用 boot.img 后,我们将默认的内核启动命令行存储在这个图像中。 它将在 android 构建期间一起打包。 您可以通过更改${MY_ANDROID} /device/fsl/{product}/BoardConfig.mk 文件中 BOARD_KERNEL_CMDLINE 的定义来更改此设置。 注意: 将 {product} 替换为您的产品,例如 imx8m/evk_8mq。 1.4 如何修复 Python2 与最新的 git-repo 不兼容? 当你执行“repo init”或“repo sync”时,你可能会遇到以下异常: haoran@pentakill:~/ssd/imx_5.4.y$ 存储库同步-c repo:警告:Python 2 不再受支持;请升级到 Python 3.6+。 回溯(最近一次调用最后一次): 文件“/home/ssd-1/haoran/imx_5.4.y/.repo/repo/main.py”,第 56 行,位于 从 subcmds.version 导入版本 文件“/home/ssd-1/haoran/imx_5.4.y/.repo/repo/subcmds/ __init__ .py”,第 38 行,位于 ['%s' % 名称]) 文件“/home/ssd-1/haoran/imx_5.4.y/.repo/repo/subcmds/upload.py”,第 27 行,位于 从 hooks 导入 RepoHook 文件“/home/ssd-1/haoran/imx_5.4.y/.repo/repo/hooks.py”,第 472 行 文件=sys.stderr) ^ 在 Android 代码库中,之前实际可用的“repo”工具来自${MY_ANDROID} /.repo/repo/repo。默认情况下,这个 Python 脚本来自 Google 的https://gerrit.googlesource.com/git-repo 。Google 推动了此 git-repo.git 的更改,并在 2020 年 12 月之后删除了 repo 工具的 Python2 支持。因此 Python2 无法再基于最新的 repo 工具执行 repo sub 命令。对于较旧的 Android 版本,某些 Android 构建脚本不支持 Python 3。因此,经常在“repo sync”和镜像构建之间切换 Python 工具非常不方便。解决这个问题的一个方法是,您可以按照以下说明,将 git-repo 版本回退到适用于 Python 2 的版本,以支持较旧的 Android 版本:  $cd ${MY_ANDROID} /.repo/repo $git checkout -b python2_repo 58ac1678e8438fd029a22365741fc57276eda404 $git 分支 python2_repo --set-upstream-to=origin/master 2 连接性 2.1 如何设置计算机以支持 ADB? 要设置计算机以支持 ADB,请参阅 Android 网站 了解更多详情。 上述页面中关于在 Ubuntu Linux 上“设置系统以检测设备”有一点不清楚,需要创建并编辑一个 udev 规则文件,请按照以下步骤操作: 1.使用 root 权限创建“/etc/udev/rules.d/90-android.rules”文件,并将设备的供应商添加到文件中,格式如下 子系统=="usb",属性{idVendor}=="18d1",模式="0666",组="plugdev" 子系统=="usb",属性{idVendor}=="1fc9",模式="0666",组="plugdev" “18d1”的id值是google的USB VID,在我们的USB HAL代码中使用。 “1fc9”的id值是NXP的USB VID。 2.现在在主机上执行blow命令 chmod a+r /etc/udev/rules.d/90-android.rules 2.2 如何设置计算机以支持恢复模式下的 ADB? NXP i.MX 6/7 系列支持从 ADB 应用系统更新。 Linux 操作系统默认支持该功能。 对于 Windows 操作系统,请按照以下步骤操作: 安装 Google USB 驱动程序。 将下面的补丁应用到 Google 的 USB 驱动程序。 将 USB 电缆连接到开发板并按照提供的说明安装驱动程序。 --- android_winusb.inf 2013-06-04 13:39:40.344756457 +0800 +++ android_winusb.inf 2013-06-04 13:43:46.634756423 +0800 @@ -23,6 +23,8 @@ [Google.NTx86] +;adb 侧载支持 + %SingleAdbInterface% = USB_Install,USB\VID_18D1&PID_D001 ;Google Nexus One %SingleAdbInterface% = USB_Install,USB\VID_18D1&PID_0D02 @@ -59,7 +61,8 @@ [Google.NTamd64] - +;adb sideload support +%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_D001 ;Google Nexus One %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02 %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01 2.3 如何启用 USB 网络共享? 我们支持USB网络共享功能,上游设备可以是WIFI或以太网。 将 OTG USB 线连接到 PC 后,可以在设置 UI 中启用 USB 网络共享:设置 -> 网络和互联网 -> 热点和网络共享 -> USB 网络共享。 在 Linux 和 Windows 7 PC 上,当启用 USB 网络共享时,您可以轻松获得自动安装主机驱动程序的 USB 网络设备。 IP 和 DNS 服务器是自动配置的。 在 Windows XP PC 上,当您将开发板与 PC 连接后,您可以在设备管理器中看到一个名为“Android”的未知设备,您必须手动安装 tetherxp.inf 的网络共享驱动程序文件。 安装成功后,可以在设备管理器中看到“Android USB RNDIS设备”。 这时就可以使用USB rndis网络设备访问网络了。 2.4 如何使用 MTP? 媒体传输协议是 图片传输协议 (PTP)。 PTP 是为从数码相机下载照片而设计的,而媒体传输协议 (MTP) 支持传输数字音频播放器上的音乐文件和便携式媒体播放器上的媒体文件,以及 个人 数字 助理. 从 4.0 版本开始,Android 支持 MTP 作为与 PC 传输文件的默认协议,而不是 USB 大容量存储。 默认情况下,按照 Google 的建议,我们禁用了 UMS 并启用了 MTP。 注意:请确保在使用 MTP 时禁用 USB 网络共享。在 WinXP 下,启用 ADB 后 MTP 无法工作,但在 Win7 下,大多数情况下 MTP 可以与 ADB 协同工作。 当通过 USB 线将开发板连接到 PC 时,通知栏中将显示 USB 图标。 然后您可以点击通知区域,并选择“作为媒体设备连接”以启动 USB 计算机连接选项 UI。 其中,可以选择MTP和PTP作为当前传输协议。您也可以通过设置->存储->菜单->USB 计算机连接启动选项 UI。 Windows XP 上的 MTP Windows XP默认支持PTP协议。 为了支持 MTP 协议,您必须安装 Windows Media Player(版本 >= 10)。 当连接到PC时,您可以在Windows资源管理器中看到MTP设备。 由于 Windows XP 仅支持在资源管理器中复制/粘贴文件,因此您无法直接打开 MTP 设备中的文件。 Windows 7 上的 MTP Windows 7默认支持MTP(PTP)协议。 当连接到PC时,您可以在Windows资源管理器中看到MTP设备。 您可以像对硬盘一样进行任何操作。 MTP on ubuntu Ubuntu默认支持PTP协议。 要支持 MTP 协议,必须安装以下软件包:libmtp、mtp-tools $ sudo apt-get 安装 mtp-tools 如果您的默认 libmtp 版本不是 1.1.1(目前 Ubuntu 上最新的 libmtp 是 1.1.0),您必须通过以下方式手动升级: $ sudo apt-get install libusb-dev $ wget http://downloads.sourceforge.net/project/libmtp/libmtp/1.1.1/libmtp-1.1.1.tar.gz $ tar -xvf libmtp-1.1.1.tar.gz $ cd libmtp-1.1.1 $ ./configure--prefix=/usr $ make -j4 $ sudo make install 完成上述步骤后,您可以通过以下命令在 PC 和设备之间传输文件: mtp-detect:查找当前连接的 MTP 设备 mtp-files:列出 MTP 设备上的所有文件 2.5 如何设置Wi-Fi网络代理? 要配置 Wi-Fi 网络的代理设置,您必须: 从已添加的 Wi-Fi 网络列表中点击并按住一个网络 现在选择“高级选项”,然后向下滚动到“代理”。 选择“手动”。然后输入网络管理员提供的代理设置。 最后点击标有“连接”的按钮。 2.6 如何使“wifi国家代码”适应特定国家和/或地区? i.MX Android软件中默认使用“CN”代码,主要用于中国大陆地区。为了方便起见,下表列出了一些其他国家和/或地区。如果目标国家/地区不在下表中,请在互联网上使用关键字“ISO 3166”搜索结果。 代码 国家/地区名称 CA 加拿大 JP 日本 DE 德国 荷兰 荷兰 IT 意大利 PT 葡萄牙 LU Luxembourg NO 挪威 fi 芬兰 DK 丹麦 通道 瑞士 CZ 捷克共和国 ES 西班牙 GB 英国 韩国 大韩民国(韩国) 法国 法国 SG 新加坡 BR 巴西 IL 以色列 在 奥地利 AU 澳大利亚 BE 比利时 CY 塞浦路斯 EE Estonia 生长激素 希腊 胡 匈牙利 ID Indonesia IE 爱尔兰 ID 印度 是 冰岛 LT 立陶宛 LV 拉脱维亚 我的 马来西亚 新西兰 新西兰 PH 菲律宾 PL 波兰 SE 瑞典 SI 斯洛文尼亚 SK 斯洛伐克共和国 个 泰国 美国 美国 ZA 南非 2.7 如何通过 USB Type-C 切换 USB Power Delivery 的电源角色? 多个 i.MX 8 开发板通过 USB Type-C 端口支持 USB 电力传输 (PD)。该开发板可用作电源接收器或电源。 检查相应的 Android 发行说明以了解主板是否支持 USB 电源传输 (PD)。 以下是切换权力角色的步骤: 1.将参考设备与i.MX板连接: 使用 Type-C 转 Type-C 电缆将 i.MX 板与参考设备连接(支持 Usb Power Delivery)。 2.检查i.MX板设备的角色 如果 i.MX 板作为主机连接,并且参考设备是一个设备(有一个 usb 下拉菜单来选择传输文件、ptp),则在参考设备上执行步骤 3。 如果 i.MX 板作为设备连接(有一个 usb 下拉菜单来选择传输文件、ptp),并且参考设备是主机,则在 i.MX 板上执行步骤 3。 3.电源角色切换 如果 i.MX 板是主机: 要将 i.MX 板作为电源为参考设备充电,请在参考设备的 USB 下拉菜单上选择“为此设备充电”。 要使 i.MX 板作为电源接收器由参考设备充电,请在参考设备的 USB 下拉菜单上选择“供电”。 如果 i.MX 板是设备: 要将 i.MX 板作为电源为参考设备充电,请在 i.MX 板的 USB 下拉菜单上选择“供电”。 要使 i.MX 板成为由参考设备充电的电源接收器,请在 i.MX 板的 USB 下拉菜单上选择“为此设备充电”。 注意: 1.以下命令可以检查i.MX板的当前电源角色 猫/系统/类/typec/port0/power_role 源[接收器]:表示此 i.MX 板已由参考设备充电, [source] sink :表示此 i.MX 板正在为参考设备充电, 2.参考设备应支持USB Power Delivery(PD)。您可以通过以下命令检查参考设备是否支持它 当它连接到i.MX板的USB Type-C端口时: 猫/ sys /类/ typec / port0 / port0-partner / support_usb_power_delivery, 如果该值为是,则该参考设备支持 USB 电源传输。Google Pixel 手机满足此要求,但 Google Nexus 6 不满足。 3 核 3.1 如何手动进入 Android 恢复模式? 系统运行时,如果主板有这些键,请按“音量减小”和“电源”进入恢复模式。 该检查位于 u-boot.git 板支持文件中,您可以在其中更改您喜欢的组合键。 您也可以在控制台中输入此命令: 重启恢复# 主板重置为恢复模式。 进入恢复模式。 3.2 如何在恢复模式下进入文本菜单? 注意:此功能仅适用于带有 POWER / VOLUME UP / VOLUME DOWN 键的主板。 当系统完成启动进入恢复模式时,您将看到一个 Android 机器人徽标 按 电源键(按住) , 进而 音量增大键 去 文本菜单 像这样: 移动菜单项 音量增大 和 音量降低 按钮。 选择菜单项 电源键。 使用小键盘或键盘上的方向键选择所需的选项。 立即重启系统 从 ADB 应用更新,您可以通过 adb sideload 命令从 update.zip 更新软件。仅 NXP i.MX 6/7 系列支持此功能。 清除数据/回复原厂设定。/data 和 /cache 分区已格式化。 擦除缓存分区。/cache 分区已格式化。 重新启动系统。 3.3 如何通过ADB升级系统? NXP i.MX 6/7系列支持从ADB应用系统更新。 使用ADB工具升级系统前,请先安装adb驱动,具体安装方法请参考“2 Connectivity->2.2”如何设置计算机以支持恢复模式下的 ADB?”部分。 驱动程序安装和设置完成后,请按照以下步骤操作: 将 OTA 更新包下载到您的计算机,并使用 USB 线将开发板连接到您的 PC。 确保系统已进入恢复模式。请参阅“3.1 如何手动进入 Android 恢复模式”部分。 切换文本菜单,将光标移动到“apply update from ADB”处,UI显示如下: 在您的计算机上执行以下命令 adb sideload $YOUR_UPDATE_PACKAGE.zip 包裹发送后,系统开始使用更新文件更新固件。 3.4 如何使用 android fastboot? Fastboot 是一个实用程序,可用于将图像从 Windows/Linux PC 下载到目标存储设备。 该实用程序由 Google 发布,可以从 Android 官方网站下载。 Android版本在U-Boot中实现了部分fastboot命令,比如:flash、reboot、getvar。 在使用快速启动之前,应在 Windows HOST 上安装 Google USB 驱动程序,并且目标板应启动到引导加载程序快速启动模式。 注意:fastboot下载的图像大小必须小于相关分区的大小。 目标方: 连接 USB OTG 后打开开发板电源。 确保主板进入快速启动模式。有几种方法可以进入快速启动模式。 选项1:输入  reboot bootloader  启动后在控制台中。 时钟配置2: 将电源连接至电路板。您将看到控制台的以下输出。 U-Boot ... ... 快速启动:正常 按任意键停止自动启动:3 打 任意键 在倒计时完成之前访问引导加载程序提示。输入 fastboot usb 并按 Enter: 快速启动:正常按任意键停止自动启动:0 => fastboot usb 笔记: 1.在主机上,它会提示您发现了一个新设备,需要安装驱动程序。请安装它。 2. 开发板进入U-Boot模式后,在目标端输入mmc部分,获取分区表映像中定义的详细分区名称。有些分区在 u-boot 中是硬编码的,这里就不列出了。 主机端: 确保 fastboot 包含在“PATH”的系统环境变量中。 转到图像文件夹。 下面是使用 fastboot 为 NXP imx8 系列刷写映像的示例。 在使用 fastboot 刷新图像之前,请确保您的主板处于解锁状态。 bootloader0/bootloader 和 gpt 分区在 u-boot 中是硬编码的,它不在分区表文件中。 分区表文件中定义的分区名称和数量可能会随着时间的推移和新功能的启用而发生变化。 $ fastboot flash gpt 分区表.img $ fastboot flash bootloader0 u-boot.imx $ fastboot flash dtbo dtbo.img $ fastboot flash 启动 boot.img $ fastboot flash 系统 system.img $ fastboot flash 供应商 vendor.img $ fastboot flash vbmeta vbmeta.img $ fastboot 重启 下面是使用 fastboot 为 NXP i.MX 6/7 系列刷写映像的示例。 $ fastboot flash gpt 分区表.img $ fastboot flash 引导加载程序 u-boot.imx $ fastboot flash dtbo dtbo.img $ fastboot flash 启动 boot.img $ fastboot flash 系统 system.img $ fastboot flash 供应商 vendor.img $ fastboot flash vbmeta vbmeta.img $ fastboot flash 恢复 recovery.img $ fastboot 重启 3.5 如何对imx6/7进行增量OTA更新? 3.5.1 检查“IncrementalOTA_InstallEnd”函数的定义 Android10之前发布的i.MX6/7代码(不包括Android10)不支持构建增量OTA包。需要在releasetools.py中为特定平台定义一个名为“IncrementalOTA_InstallEnd”的函数,这是${MY_ANDROID} /device/fsl下的文件。以i.MX 7ULP EVK为例,此文件为${MY_ANDROID} /device/fsl/imx7ulp/releasetools.py。如果该函数未定义,请对代码进行以下更改。 其他平台有自己的releasetools.py,根据您自己的要求修改文件。 diff --git a/imx7ulp/releasetools.py b/imx7ulp/releasetools.py index 8c40905d..d557b23e 100644 --- a/imx7ulp/releasetools.py +++ b/imx7ulp/releasetools.py @@ -38,3 +38,25 @@ def FullOTA_InstallEnd(info): # emit the script code to trigger the dtbo updater on the device info.script.WriteRawImage("/dtbo", "dtbo.img") + +def IncrementalOTA_InstallEnd(info): + # copy the vbmeta and dtbo into the package. + try: + vbmeta_img = common.GetBootableImage( + "vbmeta.img", "vbmeta.img", OPTIONS.input_tmp, "VBMETA") + dtbo_img = common.GetBootableImage( + "dtbo.img", "dtbo.img", OPTIONS.input_tmp, "DTBO") + except KeyError: + print "no vbmeta or dtbo images in target_files; skipping install" + return + # copy the vbmeta into the package. + common.ZipWriteStr(info.output_zip, "vbmeta.img", vbmeta_img.data) + + # emit the script code to trigger the vbmeta updater on the device + info.script.WriteRawImage("/vbmeta", "vbmeta.img") + + # copy the dtbo into the package. + common.ZipWriteStr(info.output_zip, "dtbo.img", dtbo_img.data) + + # emit the script code to trigger the dtbo updater on the device + info.script.WriteRawImage("/dtbo", "dtbo.img") ${MY_ANDROID} /device/fsl 中的变量“BOARD_PREBUILT_DTBOIMAGE”用于指定要构建到 OTA 包中的 dtbo 图像。根据您的要求修改此变量的值。以 i.MX7ULP EVK 为例,您可能需要进行以下更改以使 OTA 包适用于带有 MIPI 面板显示的电路板 diff --git a/imx7ulp/evk_7ulp/BoardConfig.mk b/imx7ulp/evk_7ulp/BoardConfig.mk index 0c023ecc..ec1c695f 100644 --- a/imx7ulp/evk_7ulp/BoardConfig.mk +++ b/imx7ulp/evk_7ulp/BoardConfig.mk @@ -103,7 +103,7 @@ TARGET_BOARD_DTS_CONFIG := imx7ulp:imx7ulp-evkb.dtb imx7ulp-evk:imx7ulp-evk.dtb TARGET_BOARD_DTS_CONFIG += imx7ulp-mipi:imx7ulp-evkb-rm68200-wxga.dtb imx7ulp-evk-mipi:imx7ulp-evk-mipi.dtb TARGET_KERNEL_DEFCONFIG := imx_v7_android_defconfig # TARGET_KERNEL_ADDITION_DEFCONF := imx_v7_android_addition_defconfig -BOARD_PREBUILT_DTBOIMAGE := out/target/product/evk_7ulp/dtbo-imx7ulp.img +BOARD_PREBUILT_DTBOIMAGE := out/target/product/evk_7ulp/dtbo-imx7ulp-mipi.img # u-boot target used by uuu for imx7ulp_evk TARGET_BOOTLOADER_CONFIG += imx7ulp-evk-uuu:mx7ulp_evk_defconfig 3.5.2构建目标包文件 您可以使用以下命令在android环境下生成目标包文件: $ cd ${MY_ANDROID} $ 源构建/envsetup.sh $ lunch evk_7ulp-userdebug $ make 目标文件包 -j4 构建完成后,您可以在以下路径找到目标包文件: . ${MY_ANDROID} /out/target/product/evk_7ulp/obj/PACKAGING/target_files_intermediates/evk_7ulp-target_files-**.zip 将目标文件复制到${MY_ANDROID}目录,我们将其重命名为evk_7ulp-target.a.zip。然后执行以下命令生成完整的OTA包。 $./build/tools/releasetools/ota_from_target_filesevk_7ulp-target.a.zip evk_ota_full.zip 将此 OTA 包 evk_ota_full.zip 应用到开发板上。例如,使用 adb,在通过 USB 电缆连接到开发板的主机上执行以下命令: $ sudo adb root $ sudo adb restart sideload # 等待一段时间,直到系统重新启动进入侧载模式 $ sudo adb 侧载 evk_ota_full.zip 上述命令完成后,重新启动系统。板上运行的图像与“evk_7ulp-target.a.zip”中的图像相同 3.5.3构建增量更新包 增量更新包含一组二进制补丁,可应用于设备上已有的数据。这会导致更新包明显变小。 增量OTA包也是由目标包文件构建而成,与完整OTA包的区别在于增量OTA包需要生成两个目标包文件。一个目标包包含已经在板上运行的图像,另一个目标包包含要更新的图像。 例如,我们已经更新了 i.MX 7ULP EVK 板,其上运行的图像与“evk_7ulp-target.a.zip”中的图像相同。此后,对代码进行一些开发工作。我们可以按照“3.5.2 构建目标包文件”中的说明重新构建目标包文件并生成完整的OTA包,我们也可以使用这个新生成的目标包文件与evk_7ulp-target.a.zip一起生成增量OTA包。 假设我们已经生成了一个目标文件,复制到${MY_ANDROID}目录并将其重命名为evk_7ulp-target.b.zip。在主机上执行以下命令生成增量OTA包: $./build/tools/releasetools/ota_from_target_files-i evk_7ulp-target.a.zip evk_7ulp-target.b.zip evk_7ulp_ota_diff.zip 使用上述命令生成增量OTA包。它应该应用于运行与目标文件 evk_7ulp-target.a.zip 中相同图像的设备。 此增量 OTA 包也可以通过 adb 更新到主板,就像完整 OTA 包所述一样。 应用此 OTA 包后。下次如果需要另一个增量 OTA,则使用新生成的目标包文件和旧的 evk_7ulp-target.b.zip 来生成它。 4 视音频 4.1 如何在视频播放时检查丢帧统计数据? 在播放视频时从控制台输入以下命令以获取实时丢帧统计信息。 dumpsys media.player | grep“num” 然后检查输出,帧丢失统计将显示如下: 总帧数(1892),丢弃帧数(0),丢弃百分比(0.00%) numFramesTotal:视频文件的总帧数。 numFramesDropped:AV同步丢失的帧数。 percentageDropped:总丢帧百分比。 5 图形 5.1 如何设置GPU最小时钟来平衡性能和功耗? 通常 GPU 以全速工作。 当热驱动器报告芯片过热时,GPU驱动器将调整内部时钟以降低功耗,从而快速冷却芯片。 理论上我们应该将 GPU 时钟设置为 1/64,以便芯片可以更快地冷却下来,但是当 GPU 以如此慢的时钟工作时,尤其是在高分辨率下,您可能会看到黑屏或闪烁问题。 有以下方法可以根据芯片和产品的分辨率定制 GPU 最小时钟的阈值。 客户可以通过更改${MY_ANDROID} /device/fsl/{product}/init.rc 文件中的以下行来设置最小 GPU 时钟,该值可以设置为 1 到 64 之间的任意值。 写入/sys/module/galcore/parameters/gpu3DMinClock 3 当前默认值为 3。 客户应根据自己的测试调整并设置合适的值。 5.2 如何禁用 GPU 加速? Android上使用GPU加速有三个部分。客户可能需要单独禁用其中一些以缩小问题范围。下面是操作步骤。 1.禁用HWComposer: 您可以在设置 apk 中禁用 HWComposer,设置->系统-> {} 开发人员选项->禁用硬件覆盖 2.禁用 OpenGL 渲染器 您可以通过设置“setprop sys.viewroot.hw false”并终止 surfaceflinger 线程来禁用 OpenGL 渲染器并强制使用 SKIA 进行绘制。 3.禁用OpenGL 3D绘制 禁用 OpenGL 3D 绘制只能在禁用 OpenGL 渲染器之后进行,因为此操作将完全禁用所有 3D OpenGL 加速。 您可以通过“mv /system/lib/egl/libGLES_android.so /system/lib/egl/libGLES.so”来执行此操作并终止 surfaceflinger 线程。 注意: 下面的例子告诉你如何杀死surfaceflinger root@sabresd_6dq:/# ps | grep surfaceflinger 系统 159 1 168148 7828 ffffffff b6f05834 S /system/bin/surfaceflinger root@sabresd_6dq:/# 杀死 159 6 启动 6.1 如何从带有 i.MX 8QuadXPlus b0 芯片的主板的 eMMC 不同分区启动? 带有硅片修订版 b0 的 i.MX 8QuadXPlus MEK 芯片可以从 eMMC 启动分区 32KB 偏移启动,但这不是参考手册中指定的行为,因此不能保证它能在您的主板上正常工作。正如参考手册所示,如果引导加载程序映像位于 eMMC 引导分区中,则第一个映像容器偏移量为 0;如果引导加载程序映像位于 eMMC 用户数据区域分区中,则第一个映像容器偏移量为 32KB。如果您的主板无法从 eMMC 启动分区 32KB 偏移启动,可以进行一些更改以符合参考手册中的描述: 1. 位于 eMMC 启动分区且偏移量为 0 的引导加载程序映像 在这种情况下,i.MX 8QuadXPlus 硅修订版 b0 芯片应使用 eMMC 快速启动模式。 eMMC 快速启动模式默认未启用,并且启用该模式是不可逆的。fastboot 命令“fuse prog -y 0 0x13 0x1”可用于启用 eMMC fastboot 模式,这可以添加到 uuu_imx_android_flash 脚本中。uuu_imx_android_flash.sh 上的一个示例: diff --git a/common/tools/uuu_imx_android_flash.sh b/common/tools/uuu_imx_android_flash.sh 索引 da45518cb..49ee53555 100755 --- a/common/tools/uuu_imx_android_flash.sh +++ b/common/tools/uuu_imx_android_flash.sh @@ -145,6 +145,9 @@ 函数 uuu_load_uboot 如果 [[ ${target_dev} = “emmc” ]]; 然后 echo FB: ucmd mmc partconf ${target_num} 1 1 1 >> /tmp/uuu.lst fi + 如果 [[ ${soc_name} = “imx8qxp” ]] && [[ ${uboot_feature} != *“c0”* ]];然后+回显 FB: ucmd fuse prog -y 0 0x13 0x1 >> /tmp/uuu.lst + fi 如果[[ ${intervene} -eq 1 ]]; 然后回显 FB: 完成 >> /tmp/uuu.lst 此外,i.MX 8QuadXPlus 硅片修订版 b0 的“bootloader0”分区偏移量应从 32K 更改为 0。 diff--git a/drivers/fastboot/fb_fsl/fb_fsl_partitions.cb/驱动程序/快速启动/fb_fsl/fb_fsl_partitions.c 索引 92c978e6c8..7e3679b19a 100644 --- a/驱动程序/fastboot/fb_fsl/fb_fsl_partitions.c +++b/驱动程序/快速启动/fb_fsl/fb_fsl_partitions.c @@ -55,7 +55,7 @@ 静态 ulong bootloader_mmc_offset(void) { 如果(is_imx8mq()|| is_imx8mm()||((is_imx8qm()|| is_imx8qxp())&& is_soc_rev(CHIP_REV_A))) 返回 0x8400; - 否则如果(is_imx8qm()||(is_imx8qxp()&&!is_soc_rev(CHIP_REV_B))){ + 否则,如果 (is_imx8qm() || is_imx8qxp()) { if (MEK_8QM_EMMC == fastboot_devinfo.dev_id) /* 目标设备是 eMMC boot0 分区,引导加载程序偏移量为 0x0 */ 返回 0x0; 2. eMMC 上的引导加载程序映像具有 32KB 偏移量的用户数据区分区。 在这种情况下,应该修改 uboot 中的代码,以在 eMMC 用户数据区域分区中创建“bootloader0”分区。 以下补丁适用于带有 b0 芯片的 i.MX 8QuadXPlus MEK,但显然会影响其他平台,请谨慎应用以下路径。 差异——git a/drivers/fastboot/fb_fsl/fb_fsl_dev.cb/驱动程序/快速启动/fb_fsl/fb_fsl_dev.c 索引 f1c116bea2..c23f0a3e01 100644 --- a/驱动程序/fastboot/fb_fsl/fb_fsl_dev.c +++b/驱动程序/快速启动/fb_fsl/fb_fsl_dev.c @@ -124,7 +124,7 @@ 静态 int get_fastboot_target_dev(char *mmc_dev,struct fastboot_ptentry *ptn) printf("Flash目标是mmc%d\n", dev); 如果(target_mmc->part_config!=MMCPART_NOAVAILABLE) sprintf(mmc_dev, “mmc dev %x %x”, dev, /*槽号*/ -FASTBOOT_MMC_BOOT_PARTITION_ID/*零件编号*/); +FASTBOOT_MMC_USER_PARTITION_ID/*零件编号*/); 别的 sprintf(mmc_dev,“mmc dev%x”,dev); } @@ -559,4 +559,4 @@ void process_erase_mmc(const char *cmdbuf,char *response) sprintf(响应,“OKAY”); 返回; -} \ 文件末尾没有换行符 +} diff--git a/drivers/fastboot/fb_fsl/fb_fsl_partitions.cb/驱动程序/快速启动/fb_fsl/fb_fsl_partitions.c 索引 92c978e6c8..4629060402 100644 --- a/驱动程序/fastboot/fb_fsl/fb_fsl_partitions.c +++b/驱动程序/快速启动/fb_fsl/fb_fsl_partitions.c @@ -231,7 +231,7 @@ 静态 int _fastboot_parts_load_from_ptable(void) bootloader_mmc_offset()/dev_desc->blksz; ptable[PTN_BOOTLOADER_INDEX].长度= ANDROID_BOOTLOADER_SIZE / dev_desc->blksz; -ptable[PTN_BOOTLOADER_INDEX].partition_id = boot_partition; + ptable[PTN_BOOTLOADER_INDEX].分区ID=用户分区; ptable[PTN_BOOTLOADER_INDEX].标志=FASTBOOT_PTENTRY_FLAGS_UNERASEABLE; strcpy(ptable[PTN_BOOTLOADER_INDEX].fstype,"原始"); eMMC 还需要设置为从用户数据区域分区启动,在 uuu_imx_android_flash 脚本中进行设置。 下面是uuu_imx_android_flash.sh的一个示例,注意,这将影响其他平台的刷写,请谨慎使用。 差异 --git a/common/tools/uuu_imx_android_flash.sh b/common/tools/uuu_imx_android_flash.sh 索引 da45518cb..d98844d84 100755 --- a/common/tools/uuu_imx_android_flash.sh +++b/common/tools/uuu_imx_android_flash.sh @@ -143,7 +143,7 @@ 函数 uuu_load_uboot 回显 FB:ucmd mmc 擦除${uboot_env_start} ${uboot_env_len} >> /tmp/uuu.lst if [[ ${target_dev} = "emmc" ]]; then - echo FB: ucmd mmc partconf ${target_num} 1 1 1 >> /tmp/uuu.lst + echo FB: ucmd mmc partconf ${target_num} 1 7 1 >> /tmp/uuu.lst fi 如果[[ ${intervene} -eq 1 ]]; 那么 7 杂项 7.1 如何在 Android Jelly Bean 及更高版本上启用开发者选项? 自 Jelly Bean 版本以来,Google 已经隐藏了开发者选项 - 以下是恢复它们的方法: 转到“设置”菜单,然后向下滚动到“系统”。点击它。然后点击“关于平板电脑”菜单。 再次向下滚动到底部,您会看到“版本号”。 轻敲七次。第三次点击后,您将看到一个有趣的对话框,提示您只需点击四次即可成为开发人员。继续点击,直到恢复开发人员设置。 7.2 如何启用或禁用总线频率功能? 当需要高总线频率的 IP 不工作时,总线频率驱动器用于降低 SoC 中的 DDR、AHB 和 AXI 总线频率。 这显著节省了 Android earlysuspend 模式(屏幕关闭时播放音频)下的功耗。 总线频率驱动器是 已启用 默认情况下,如果要启用或禁用它,请在控制台中执行以下命令: 禁用: $ echo 0>sys/bus/platform/drivers/imx_busfreq/busfreq/enable 使能够: $ echo 1> sys/bus/platform/drivers/imx_busfreq/busfreq/enable 请注意,如果您使用以太网,则上行操作将启用 FEC 时钟并强制总线频率升高。 这意味着无论以太网电缆是否插入或拔出,您都无法再进入低总线模式。 因此,如果您希望系统进入低总线模式,则必须执行“netcfg eth0 down”来手动关闭 FEC。 如果您想再次使用 FEC,请手动执行“netcfg eth0 up”,当 FEC 使用时钟门控关闭时,PHY 无法检测到您的电缆进/出事件。 7.3 如何使用 memtool? 7.3.1 Android环境下搭建memtool git克隆https://source.codeaurora.org/external/imx/imx-test/-b imx_5.4.24_2.1.0 cp-r imx测试/测试/memtool ${MY_ANDROID} /外部 光盘${MY_ANDROID} 源构建/envsetup.sh lunch evk_8mm-userdebug mmm 外部/memtool 构建的二进制文件存储在${MY_ANDROID} /out/target/product/evk_8mm/vendor/bin/memtool_32 和${MY_ANDROID} /out/target/product/evk_8mm/vendor/bin/memtool_64 7.3.2重建启动映像 添加以下补丁以启用 CONFIG_DEVMEM,然后重建 boot.img 并将其刷入板上:fastboot flash boot_a boot.img diff --git a/arch/arm64/configs/imx_v8_android_defconfig b/arch/arm64/configs/imx_v8_android_defconfig 索引 ee40b9aa67e6..cdc9a1d56849 100644 --- a/arch/arm64/configs/imx_v8_android_defconfig +++b/arch/arm64/配置/imx_v8_android_defconfig @@ -477,7 +477,6 @@ CONFIG_INPUT_ISL29023=y # CONFIG_SERIO_SERPORT 未设置 CONFIG_SERIO_AMBAKMI=y # CONFIG_LEGACY_PTYS 未设置 -# CONFIG_DEVMEM 未设置 配置串行8250=y 配置串行8250控制台=y CONFIG_SERIAL_8250_EXTENDED=y 7.3.3 使用板上的 memtool 将 memtool 推送到主板的磁盘: adb push ${MY_ANDROID} /out/target/product/ evk_8 mm /vendor/bin/memtool_32 /data/local/tmp 运行 memtool_32 获取帮助信息: evk_8mm:/#/数据/本地/tmp/memtool_32 用法: 读取内存:memtool [-8 | -16 | -32] 写入内存:memtool [-8 | -16 | -32] =   7.4 如何使用 systrace? Systrace 工具可用于分析 Android 设备性能。请参阅以下链接了解 Systrace 是什么以及如何使用它: https://source.android.com/devices/tech/debug/systrace  https://developer.android.com/topic/performance/tracing/command-line systrace 工具需要启用“CONFIG_DEBUG_FS”配置,否则生成报告时可能会出现以下错误: 开始跟踪(按回车键停止) 跟踪完成。正在收集输出... /system/bin/sh: [2]:无法创建 /sys/kernel/debug/tracing/trace_marker:没有此文件或目录 正在输出 Systrace 结果... 在一些新的Android版本中,“CONFIG_DEBUG_FS”配置默认是禁用的,您需要自行启用它才能启用systrace功能。例如: diff --git a/arch/arm64/configs/imx_v8_android_car2_defconfig b/arch/arm64/configs/imx_v8_android_car2_defconfig 索引 9e38bb17d640..bf35ce161d6d 100644 --- a/arch/arm64/configs/imx_v8_android_car2_defconfig +++b/arch/arm64/配置/imx_v8_android_car2_defconfig @@ -509,3 +509,4 @@ CONFIG_PANIC_TIMEOUT=5 CONFIG_DEBUG_LIST=y 配置启用默认跟踪器=y # CONFIG_UPROBE_EVENTS 未设置 +CONFIG_DEBUG_FS=y   8 端口 ISP 摄像头至 Android 这是帮助开发人员将 ISP 摄像头从 Linux 移植到 evk_8mp 上的 Android 的快速指南。假设您已经获得了 Android 源代码并知道如何构建和刷新映像。这些可以从 Android 发布文档中获得。下面只关注ISP摄像头的移植。还假设相机在 Linux 上运行正常。   8.1 驱动代码路径 供应商/nxp-opensource/verisilicon_sw_isp_vvcam   8.2 驱动程序编译 8.2.1编译命令 在 Android 根路径下,按照以下命令操作。 1)源构建/envsetup.sh 2)午餐evk_8mp-userdebug 3) ./imx-make.sh kernel -j8 //只需运行一次即可 4)./imx-make.sh vvcam-j8  如果构建成功,将会在下面路径下生成ko。 fanghui@aps001:~/share_home2/android-11-5.10/out/target/product/evk_8mp$ ls obj/VVCAM_OBJ/ basler-camera-driver-vvcam.ko  kernelenv.sh  os08a20.ko  ov2775.ko  vvcam-dwe.ko  vvcam-isp.ko  vvcam-video.ko   8.2.2编译安排 以下是相关文件 vvcam/vvcam.mk 如果添加了新的传感器。需要在vvcam.mk中添加复制脚本,例如 cp $(VVCAM_SRC_PATH)/传感器/ov2775/ov2775.ko $(VVCAM_OUT);   vvcam/v4l2/Kbuild 它是从 vvcam/v4l2/Makefile 复制而来的,只需进行一些必要的更改即可使其在 Android 上顺利构建。如果 Makefile 中针对新传感器有更改,则应与 Kbuild 保持一致。   设备/nxp/common/build/Makefile 仅供参考。这是将 vvcam 添加到 android 构建系统的地方。你永远不应该改变它。 fanghui@aps001:~/share_home2/android-11-5.10/device/nxp$ grep -rn vvcam.mk 常见/构建/Makefile:20:-包括${VVCAM_PATH} /vvcam/vvcam.mk 8.3 驱动程序更新  在 8mp 上,使用 GKI(通用内核映像)。ISP 相关的 KO 被构建到 vendor_boot.img 中,然后烧写到开发板。请按照以下命令操作。 cd ANDROID_ROOT //假设“ANDROID_ROOT”是android代码的根路径。 ./imx-make.sh vendorbootimage -j8 adb 重启引导程序 sudo fastboot flash vendor_boot out/target/product/evk_8mp/vendor_boot.img。 sudo fastboot 重启 重启后,更新的 KO 将被加载   注意:如果添加新的 KO,需要先添加到 device/nxp/imx8m/evk_8mp/SharedBoardConfig.mk 如下所示。 ifeq ($(IMX8MP_USES_GKI),true) BOARD_VENDOR_RAMDISK_KERNEL_MODULES +=     \     …… $(TARGET_OUT_INTERMEDIATES)/VVCAM_OBJ/basler-camera-driver-vvcam.ko \ $(TARGET_OUT_INTERMEDIATES)/VVCAM_OBJ/vvcam-video.ko \ $(TARGET_OUT_INTERMEDIATES)/VVCAM_OBJ/vvcam-dwe.ko \ $(TARGET_OUT_INTERMEDIATES)/VVCAM_OBJ/vvcam-isp.ko \   8.4 DTB update 8.4.1 DTB安排 在 device/nxp/imx8m/evk_8mp/BoardConfig.mk 中,将以下内容更改为您的 dtb。 # 默认双 Basler     TARGET_BOARD_DTS_CONFIG := imx8mp:imx8mp-evk-dual-basler.dtb  相关的 dts 文件应该位于 供应商/nxp-opensource/kernel_imx/arch/arm64/boot/dts/飞思卡尔  8.4.2构建DTB镜像 在 ANDROID 根路径下,运行 ./imx-make.sh kernel -j8 ./imx-make.sh dtboimage -j8 8.4.3 Update DTB image 1) adb reboot bootloader 2) sudo fastboot flash dtbo dtbo-imx8mp.img 3) sudo fastboot reboot 8.5 新的传感器库更新 8.5.1构建传感器库 默认传感器是 basler。如果使用新的传感器,您需要构建自己的 libMySensor.so 来实现 isi_iss.h 中的接口。 您应该通过“wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/isp-imx-4.2.2.15.0.bin ”获取 ISP 代码包。注意:“isp-imx-4.2.2.15.0.bin”应该替换为您使用的版本。 按照 appshell/readme_android.txt 来构建库。 8.5.2更新传感器库 1)adb root 2)adb重新挂载 3)adb pull /vendor/etc/configs/isp/Sensor0_Entry.cfg 4)更改“drv =“/vendor/lib64/DAA3840_30MC_1080P.drv”” 到“drv =“/vendor/lib64/libMySensor.so””。 将xml和dwe更改为相关文件。 5)adb推送Sensor0_Entry.cfg/供应商/etc/configs/isp/ 另外,您可以推送相关的 xml/dwe 文件。 注意: 即使在“adb remount”之后,“/vendor/etc/configs/isp”可能仍然只读,这是由于覆盖系统造成的。参考“/vendor/etc/init/hw/init.nxp.rc”中的“overlay”。 在默认图像上,“/vendor/etc/configs/isp”被“/vendor/vendor_overlay_sensor/os08a20/vendor/etc/configs/isp”覆盖。 因此需要更新“/vendor/vendor_overlay_sensor/os08a20/vendor/etc/configs/isp”下的文件,然后重启。 重启后,“/vendor/etc/configs/isp”已更新。 9 安全 9.1 如何增强IOMUX安全性? i.MX 8M 系列 SoC 上的 IOMUX 模块支持灵活的 I/O 复用,允许用户将每个 IO 板配置为可选功能之一。i.MX 8M 上的 CSU(中央安全单元)模块可用于将某些设备配置为仅安全访问,以保护这些设备的安全。但由于 IOMUX 为非安全访问,因此焊盘功能可以动态配置,如果黑客重新配置 IO 焊盘,使设备连接到其他可从非安全访问的控制器,则存在风险。 解决此问题的一个方法是配置 CSU 以限制对 IOMUX 的非安全访问,所有 IOMUX 寄存器写入操作都被路由到 Trusty OS。在 Trusty OS 中,将所有敏感 IO 资源添加到一个黑名单,Trusty OS 中的 IOMUX 驱动程序应检查并拒绝任何来自非安全世界对敏感寄存器的写入尝试。 附加了一个示例补丁集,以展示如何将 IOMUX 分配给安全世界以及如何将 IOMUX 写入操作路由到 Trusty OS。在此示例中,i.MX8MP EVK 上的 USB 主机 pinctrl PAD 被分配到安全世界。示例代码的布局如下: . ├── atf │ └── 0001-config-iomux-to-secure-write.patch --> ${MY_ANDROID}/vendor/nxp-opensource/arm-trusted-firmware ├── kernel │ └── 0001-Use-Trusty-OS-to-handle-iomux-registers-written-oper.patch --> ${MY_ANDROID}/vendor/nxp-opensource/kernel_imx/ ├── trusty │ └── 0001-Add-iomux-pinctrl-TEE-handler.patch --> ${MY_TRUSTY}/trusty/hardware/nxp └── u-boot └── 0001-Use-Trusty-OS-to-handle-IOMUX-operation.patch --> ${MY_ANDROID}/vendor/nxp-opensource/uboot-imx
View full article
S32K LPUARTハードウェアフロー制御 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> LPUARTハードウェアフロー制御に関するドキュメントとデモを作成しました。RTM 3.0.0を搭載したs32k144 evbボードで実行され、フロー制御機能は正常に動作しています。ご不明な点がございましたら、私までご連絡ください。 全般 Re: S32K LPUARTハードウェアフロー制御 @NXF55009  コードでは、CTS<-> RTS および RTS<-> CTSですが、CTSがCTSに接続され、RTSがRTSに接続されている場合、コードのどの部分を変更する必要がありますか? chandan_uv_0-1702452269412.png
View full article
FreeMASTER 使用指南 本文旨在为工程师提供使用FreeMASTER工具的入门指南。 简介 如何安装 FreeMASTER 工具 3.x 如何获取嵌入式应用的 FreeMASTER 驱动程序 Webinars 观看 FreeMASTER 四部分在线研讨会系列 开发 如何使用 JSON-RPC API 实现控制 HTML 页面  如何配置 FreeMASTER 驱动程序(视频) 如何连接到目标板(视频) 如何通过 TSA(目标端寻址)公开变量(视频) 如何在自定义 C/C++ 项目中使用 FreeMASTER 通信库 如何在自定义 Python 脚本中使用 FreeMASTER 通信库 关于:FreeMASTER 使用指南 谢谢 @robSanders。似乎存在访问问题(其他用户可以看到)。我已请网站管理团队调查此事。 更新:该链接现在应该可以访问了。 关于:FreeMASTER 使用指南 注意 - 第一个链接[如何安装 FreeMASTER Tool 3.x ]已损坏。不过,内容很棒!
View full article
如何在 Yocto 中创建自定义摄像头 本文档介绍了在 BSP 版本为 4.14.98、测试板为 i.MX8MM LPDDR4 评估板的情况下,创建新摄像头 dtb 文件和 ko 文件的步骤。 1)构建 BSP $ mkdir ~/bin(如果 bin 文件夹已存在,则可能不需要此步骤) $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo export PATH=~/bin:$PATH $ mkdir imx-yocto-bsp $ cd imx-yocto-bsp $ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml $ repo sync DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk source fsl-setup-release.sh -b build-xwayland bitbake fsl-image-qt5-validation-imx 2) 添加新的摄像头 dts 文件 在“imx-yoct-bsp/tmp/work-shared/imx8mmevk/kernel-source/arch/arm64/boot/dts/freescale”中添加新的摄像机 dts 文件 需注意两点: a)   新的摄像头 dts 文件可参考 I2C3 下的 “ov5640_mipi” 节点以及 “&mipi_csi_1”,将 ov5640 替换为自己的摄像头https://source.codeaurora.org/external/imx/linux-imx/tree/arch/arm64/boot/dts/freescale/fsl-imx8mm-evk.dts?h=imx_4.14.98_2.0.0_ga 不要忘记在自己的 dts 文件中添加 "#include "fsl-imx8mm-evk.dts"。 3) 在 "imx-yoct-bsp/tmp/work-shared/imx8mmevk/kernel-source/arch/arm64/boot/dts/freescale" 目录下的 "Makefile" 中,在 "dtb-$(CONFIG_ARCH_FSL_IMX8MM) += fsl-imx8mm-evk.dtb" 之后添加自己的 dts 文件。 4) 在 "imx-yoct-bsp/tmp/work-shared/imx8mmevk/kernel-source/drivers/media/platform/imx8" 目录下添加摄像头驱动。 然后在 "imx-yoct-bsp/tmp/work-shared/imx8mmevk/kernel-source/drivers/media/platform/imx8/Kconfig" 中添加摄像头模块。 5) 在内核中启用摄像头模块 如果摄像头格式为 raw10 和 raw12,不要忘记在设备树中启用 fsl,two-8bit-sensor-mode。 修改完所有需要的源代码后,通过命令 "bitbake -c menuconfig linux-imx" 在 menuconfig 中启用摄像头模块 joanxie_0-1621858670861.png   joanxie_2-1621858769503.png joanxie_3-1621858817613.png joanxie_4-1621858848608.png 6) 在 Yocto 中创建自定义 dtb 文件 执行命令 "bitbake -c compile -f linux-imx" 和 "bitbake linux-imx",理论上 ko 文件和新的 dtb 文件应分别在 "/build-xwayland/tmp/work/imx8mmevk-poky-linux/linux-imx/4.14.98-r0/build/drivers/media/platform/imx8" 和 "/build-xwayland/tmp/work/imx8mmevk-poky-linux/linux-imx/4.14.98-r0/build/arch/arm64/boot/dts/freescale" 目录下,但可能找不到新的 dtb 文件。如果在独立环境中使用内核,可以用 "make dtbs" 构建新的 dtb 文件;但在 Yocto 环境中,可尝试在 "bitbake linux-imx" 之前使用 "bitbake -c devshell linux-imx" 命令(该命令会打开一个新的 shell,其中已定义好 linux-imx 所需的必要系统值),然后切换目录并按如下方式构建 joanxie_5-1621858889182.png 构建完成后,可在 "/build-xwayland/tmp/work/imx8mmevk-poky-linux/linux-imx/4.14.98-r0/build/arch/arm64/boot/dts/freescale" 目录下找到新的 dtb 文件 然后 “bitbake linux-imx” i.MX 8M | i.MX 8M Mini | i.MX 8M Nano
View full article
S32DS に付属する設定ツールを使用してモジュールを設定するときに、メイン関数でモジュールの初期化呼び出しコードを自動的に生成するにはどうすればよいですか? たとえば、クロックを設定した後、`main` 関数内で `Clock_Ip_Init` 関数呼び出しが自動的に生成され、ピンを設定した後、`Siul2_Port_Ip_Init` 関数呼び出しが自動的に生成されます。
View full article
How can I put the UJA1169 into Sleep mode? All FNMC, SDMC, and SLPC are set to 0. However, when I issue the command to enter Sleep mode, it immediately switches to Standby mode. Do you know why this happens? I followed these steps: 1. Enabled Wake pin Rising Edge 2. Disabled CAN Wake-Up 3. Set CMC to Offline 4. Set MC to STANDBY 5. Set MC to SLEEP Re: How can I put the UJA1169 into Sleep mode? After the Sleep Command, I checked the main status and found 0x14 (illegal Sleep mode command received). Re: How can I put the UJA1169 into Sleep mode? Hello Bumjin, The UJA1169(A) will only enter Sleep mode when all of the following conditions are met: - Sleep mode command issued (MC = 0b001 via SPI). - No wake-up event is pending (all event status bits cleared). - At least one regular wake-up source is enabled (CAN wake-up or WAKE pin). - Sleep mode is not permanently disabled (SLPC = 0). If any of these conditions is not satisfied, the SBC will not enter Sleep mode. Instead, it transitions to Reset mode, then to Standby mode and sets the reset source status bits (RSS) to indicate the reason (e.g. 0b10100 = illegal Sleep mode command received). Screenshot 2026-01-02 091145.png So, please verify that Event status registers are cleared before issuing Sleep and double-check WAKE pin configuration and enable bits. I hope it helps. BRs, Tomas
View full article
Build and Flash Application Using MCUXpresso IDE The following steps will guide you through the hello_world demo application using MCUXpresso IDE for the Cortex-M33 application. The MCUXpresso IDE installation and the SDK for the MCXN-Series can be found at the section Get Software of this Getting Started guide. Find the Quickstart Panel in the lower left-hand corner.   Sabina_Bruce_1-1767118880216.png Then click on Import SDK example(s). Sabina_Bruce_2-1767118904196.png Click on the board you are using to select an example that can run on that board, and then click on Next. Sabina_Bruce_3-1767118948399.png Use the arrow button to expand the demo_apps category, and then click the checkbox next to hello_world to select that project. To use the UART for printing (instead of the default semihosting), select UART as the SDK Debug Console checkbox under the project options. Then, click on Finish Sabina_Bruce_4-1767118968268.png Select the project and build it by either clicking on the “build icon” in the shortcuts provided above or by clicking “Build” in the Quickstart Panel Sabina_Bruce_5-1767118993960.png The project should build without presenting any errors or warnings in the console Sabina_Bruce_6-1767119004337.png Connect the board to your computer with the type-C USB cable to ‘MCU-LINK’ port. Check your board's user manual for instructions. Sabina_Bruce_7-1767119052616.png Download the application to your board by either clicking on the “debug” icon above or clicking on “Debug” in the Quickstart Panel Sabina_Bruce_8-1767119086969.png Select the MCU-Link CMSIS-DAP debug probe Sabina_Bruce_9-1767119109335.png  Open up a serial terminal to be able to see the application’s output. Select the “Terminal” window and press the “new terminal” icon Sabina_Bruce_10-1767119145379.png Choose a “Serial Terminal” and then set the UART settings to 115200 baudrate, 8 bit data size, no parity and 1 stop bit. Press OK Sabina_Bruce_11-1767119154921.png Run the application by pressing the “run” icon. See the output printed on the terminal Sabina_Bruce_12-1767119186546.png
View full article
FRDM-KL25Z ミス U7 MMA8451Q FRDM-KL25Z の新バージョンでは、U7 MMA8451Q チップが搭載されていません。このチップはこのボードにとって重要なコンポーネントですが、なぜ削除されたのかわかりません。このため、ボードは使用できず、チップが削除されたにもかかわらず価格が上昇しました。古いボードが必要です。確認してください。チップは削除されましたが、ボードのモデル番号は変更されていません。そのため、注文したときに古いボードを期待していましたが、新しいボードが届きました。 Re: FRDM-KL25Z miss U7 MMA8451Q NXP は数年前に Accel/Gyros のほとんどの既存在庫を Rochester Electronics に売却しました。現在、MEM を探すなら ST または アナログ Devices が適しています。 新しいデザインを始める場合、Kinetis ラインは適切なラインではありません。 https://www.rocelec.com/global-search/MMA8451Q Re: FRDM-KL25Z miss U7 MMA8451Q こんにちは@wanjianbing お問い合わせいただきありがとうございます。申し訳ございませんが、新バージョン(Rev.I)のみの販売となり、旧バージョンの生産は終了となります。FRDM-KL25Z ホームページに記載されているとおり、「MMA8451Q 加速度センサは Rev.I でははんだ付けされていません | MMA8451Q は新しいデザインには推奨されなくなりました。」 販売代理店や他のサードパーティ プラットフォームに問い合わせて、以前のバージョンの在庫がまだあるかどうかを確認してください。 ご理解のほどよろしくお願いいたします。 BR アリス Re: FRDM-KL25Z miss U7 MMA8451Q わかりました。問題があります。解決方法を確認してください。このバージョン変更で削除されるのはU7だけですか?この U7 MMA8451Q をボードにはんだ付けします。以前のバージョンと同じようにCANとして使えますか?今、それを処分するための解決策が必要です。ありがとう!
View full article
如何将 FS23 Mcal 内置到 Vector 的达芬奇配置器中 你好,恩智浦、 目前我们有一个使用 FS23 的项目,我们需要将 FS23 的 MCAL 集成到 Vector 的达芬奇配置器中(因为我们无法更改这个工具), 当前我下载了S32K3xx_SBC_FS23_R21-11_1.0.0 这个版本,当我尝试集成时,我看到了这个问题、 你们有可以集成到 Davinci 中的版本吗? KidhRobin_0-1767012024642.png Re: how to integrate FS23 Mcal into Vector‘s Davinci Configurator 谢谢您的答复 Re: how to integrate FS23 Mcal into Vector‘s Davinci Configurator 你好@KidhRobin 1。请咨询 Vector 的技术支持,看看他们是否支持 FS2x 元器件。 2.如果没有,我建议的解决方案如下: a. 先用 EB Tresos 或 S32 DS 生成 FS2x 配置文件。 b.在 Davinci 中配置 SPI。 c.最后,将与 FS2X 相关的配置和驱动程序文件手动移植到项目中。
View full article
RT1176 flash error. I am working on a custom board developed based on RT1176 and using multilink universal debugger.  Please explain the following error and also how do i resolve it? I have 2 problems.  1. when i try to debug my project it give following error with the popup message as attached in image file. "P&E Semihosting Console Connection closed by the GDB server." 2. when i try to flash the axf file directly it gives the error msg as attached in text file. I can debug any other example from SDK like uart etc successfully. The project is quite complex with multiple GUI Screens in lvgl. I have observed that when the GUI project is small it works but as I add more GUI elements the problem starts. Does flashing and debugging any way related to bin size? Please find the build output also  in the attached file. Thankyou. Re: RT1176 flash error. Hi @kamleshv , Hope you are doing well! Based on some community experience, this issue is generally caused by problems with the debugger driver or hardware connections. Please try updating or replacing the connection cable. https://www.pemicro.com/forums/forum_topic.cfm?forum_id=9&forum_topic_id=8710 If similar issues persist, you may create a ticket with PEMicro. Thank you for your understanding and cooperation! Best regards, Gavin
View full article
I.MX8MPイーサネットカメラ こんにちは、 i.MX8MP は仮想チャネルをサポートしていないため、下の図に示すように (別の S32 プロセッサに属します)、4 台のイーサネット カメラを同時にストリーミングしたいと考えています。そこで、リファレンス・マニュアルに VLAN タグ付きフレームと AVB のサポートが示されているものの、VPU では単一のハードウェア デコーダーしか提供されていないことを考えると、i.MX8MP が 4 台の 1080p @ 30 fps イーサネット カメラ ストリームを同時にデコードしてストリーミングできるかどうかが疑問です。   Wobaffet_5-1766741211636.png ありがとう。よろしく。         Re: I.MX8MP Ethernet Camera こんにちは、 はい、iMX8MP はそれを処理できます。gstreamer は、すべてのストリームをデコードするために使用するツールです。 よろしくお願いします。
View full article
AES-128 を使用して EV3 カードを読み書きするアプリはありますか? こんにちは、 NXPについては、AES-128 を使用して EV3 カードを安全に読み書きするためのアプリを提供していますか? 私が話しているのは、次のようなことができるCANプログラムです。 - カードのマスターキーを作成および変更します。 - アプリケーションを作成および管理します。 - アプリケーション キーを使用して、各アプリケーションに異なるファイルを作成します。 そんなものがあるんですか? Taplinkx SDK の使用を試みましたが、動作させるのが大変でした。意味のあるドキュメント (あまり役に立たない Javadoc 以外) にアクセスできなかったため、ここからどうすればよいかわかりません。 NXP から EV3 カードをいくつか購入しましたが、書き込み/読み取り方法がわかりません。 ミファーレ スマート・カード Re: App to read/write on EV3 cards with AES-128? こんにちは@samerhaddad Pegoda CLRD730 リーダーは、以下の購入リンクを推奨します。 PEGODA非接触型スマートカードリーダー | NXPセミコンダクターズ Pegoda CLRD730 リーダー + RFID Discover は、EV3 カードの読み取り/書き込みに最適な組み合わせです。 Re: App to read/write on EV3 cards with AES-128? RFID Discoverプログラムの提供を拒否されました。どうやら、何らかのNXPについての大企業である必要があるようで、購入したカードに書き込むためのプログラムしか提供されていないようです。 どうやらEV3 カードに書き込む方法はこの世に存在しないようです。
View full article
i.MX8QXPはLinux 6.12でADV7280-Mからのビデオをストリーミングできません こんにちは、 当社には、アナログ カメラ入力に ADV7280-M デコーダーを使用する i.MX8QXP SoC をベースにしたカスタム ボードがあります。Linux 6.6 linux-imx カーネルからバージョン 6.12 にアップグレードしようとしていますが、新しいカーネルでは ADV7280-M からのストリーミングがまったく機能しません。 6.6 以降、この SoC のプレスリリース、製品ニュース パイプラインに大幅な変更が加えられ、パイプラインを手動で構成して、すべてのフォーマットが一致していることを確認する必要があることは承知しています。カーネル内での多数のデバッグ プリントを通じて、ストリーミングが正常に開始されたように見えるが、フレームが実際に通過する状態に到達することができました。 プレスリリース パイプラインは次のとおりです。 - adv720m 1-0021 パッド 0 フォーマット:UYVY8_2X8 @ 720x576 25fps フィールド:なし - imx8mq-mipi-csi2 パッド 0 フォーマット:UYVY8_2X8 -> パッド 1 フォーマット:UYVY8_2X8 @ 720x576 フィールド:なし - クロスバー パッド 2 fmt:UYVY8_2X8 -> パッド 6 fmt:UYVY8_2X8 @ 720x576 // 注: これにより、パッド 6 ~ 11 が 'mxc.isi.0-5':0 にルーティングされます - mxc_isi.0 パッド0 フォーマット:UYVY8_2X8 -> パッド1 @ 720x576 フィールド:なし - mxc_isi.0.capture パッド 0 (fmt またはフィールドが設定されていません) mxc_isi.0.captureは/dev/video4/ として公開されます。 「media-ctl -p -d1」の出力を添付しました。 これでパイプラインの検証は成功し、すべての.enable_streamsが.streamon、.start_streaming、.s_ストリーム関数は実行され、コード 0 で終了しているように見えますが、実際にはフレームは通過しません。 次のコマンドでストリーミングを試みました: - gst-launch-1.0 v4l2src デバイス=/dev/video4 ! video/x-raw、幅=720、高さ=576、フレームレート=25/1 ! autovideosink - v4l2-ctl -d /dev/video4 --stream-mmap --stream-count=5 しかし、実際に何かを捉えたものはありません。 With debug prints on and the kernel log level = 7, I see the following output: root@imx8qxp-d7:~# v4l2-ctl -d /dev/video4 --stream-mmap --stream-count=5 [ 334.960386] adv7180_set_pad_format:813 enter adv7180 set_fmt field: 0x000000 [ 691.055405] mxc_isi_video_streamon:1302 entering [ 691.062698] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "crossbar":6 -> "mxc_isi.0":0 [ 691.077772] mxc-isi 58100000.isi: Link 'crossbar':6 -> 'mxc_isi.0':0 is valid [ 691.085186] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "imx8mq-mipi-csi2 58227000.csi":1 -> "crossbar":2 [ 691.097362] mxc-isi 58100000.isi: Link 'imx8mq-mipi-csi2 58227000.csi':1 -> 'crossbar':2 is valid [ 691.106310] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "adv7180 1-0021":0 -> "imx8mq-mipi-csi2 58227000.csi":0 [ 691.119110] mxc-isi 58100000.isi: Link 'adv7180 1-0021':0 -> 'imx8mq-mipi-csi2 58227000.csi':0 is valid [ 691.128591] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "crossbar":7 -> "mxc_isi.1":0 [ 691.139021] mxc-isi 58100000.isi: Link 'crossbar':7 -> 'mxc_isi.1':0 is valid [ 691.146221] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "crossbar":8 -> "mxc_isi.2":0 [ 691.156649] mxc-isi 58100000.isi: Link 'crossbar':8 -> 'mxc_isi.2':0 is valid [ 691.163838] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "crossbar":9 -> "mxc_isi.3":0 [ 691.174269] mxc-isi 58100000.isi: Link 'crossbar':9 -> 'mxc_isi.3':0 is valid [ 691.181465] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "crossbar":10 -> "mxc_isi.4":0 [ 691.191975] mxc-isi 58100000.isi: Link 'crossbar':10 -> 'mxc_isi.4':0 is valid [ 691.199254] mxc-isi 58100000.isi: v4l2_subdev_link_validate_default: validating link "crossbar":11 -> "mxc_isi.5":0 [ 691.209763] mxc-isi 58100000.isi: Link 'crossbar':11 -> 'mxc_isi.5':0 is valid [ 691.217033] getting state for subdev mxc_isi.0 [ 691.222447] mxc_isi_video_streamon:1348 about to call vb2_streamon [ 691.228677] mxc_isi_vb2_buffer_queue:1057 buffer 0 queued [ 691.234117] mxc_isi_vb2_buffer_queue:1057 buffer 1 queued [ 691.239548] mxc_isi_vb2_buffer_queue:1057 buffer 2 queued [ 691.245072] mxc_isi_vb2_buffer_queue:1057 buffer 3 queued [ 691.250505] mxc_isi_vb2_start_streaming:1086 starting stream [ 691.261239] mxc_isi_pipe_enable:331 entering [ 691.261250] mxc_isi_pipe_enable:362 sink_info idx=1 src_info idx=3 [ 691.265552] mxc_isi_pipe_enable:363 sink_fmt: width=720 height=576 code=0x002006 encoding=2 [ 691.272020] mxc_isi_pipe_enable:365 src_fmt: width=720 height=576 code=0x002025 encoding=2 [ 691.280498] mxc_isi_channel_config:383 entering [ 691.293464] mxc_isi_channel_set_csc:239 entering [ 691.293477] mxc-isi 58100000.isi: CSC: YUV -> YUV [ 691.302890] mxc_isi_channel_set_csc:276 exiting val & CHNL_IMG_CTRL_CSC_BYPASS = 1 [ 691.302905] mxc_isi_channel_config:408 exiting. csc_bypass = 1 scaler_bypass = 1 [ 691.310561] mxc_isi_crossbar_enable_streams:493 enter [ 691.323167] mxc_isi_crossbar_enable_streams:503 for device imx8mq-mipi-csi2 58227000.csi [ 691.331407] mxc_isi_crossbar_enable_streams:532 about to enable stream for imx8mq-mipi-csi2 58227000.csi [ 691.341396] adv7180_s_stream:939 starting to stream [ 691.341403] adv7180_s_stream:955 streaming [ 691.346392] mxc_isi_crossbar_enable_streams:545 exit ret = 0 [ 691.356268] mxc_isi_video_streamon:1356 exit ret = 0 # and here it hangs until I exit with Ctrl-C デバイス ツリーの関連セクションも添付しました。 これまでのSOの変更点 - adv7180.c内ドライバでは、プローブ内のフィールドを V4L2_FIELD_NONE に強制するため、デバイスはプログレッシブ形式で出力するはずです。 - imx8mq-mipi-cs2.cでは、そのフォーマットを設定できるように、`imx8mq_mipi_csi_formats` 配列に `MEDIA_BUS_FMT_UYVY8_2X8` を追加しました。 - imx8-isi-video.c の `mxc_isi_video_validate_format` 関数で、同じメディア バス形式のチェックを削除しました。 また、メインライン カーネルから imx8mq-mipi-csi2 ドライバをバックポートすることも試みました。このドライバの iMX8QXP のサポートは、後のコミットで追加されたようです: https://github.com/torvalds/linux/commit/642b70d526ab8daa8f256dfc1eb6bf27c3290cc6。 結果は同じで、実際にはパイプラインを通過するフレームはありませんでした。 ストリーミングを機能させるために何をすべきかについてのアドバイスがあれば幸いです。 よろしくお願いいたします! Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 こんにちは@dominic-vtさん、 hs_settle タイミングは、センサのデータ レートに応じて設定する必要があります。一般的に言えば、センサドライバで link_freq パラメーターを設定する必要があり、mipi-csi ドライバはそれに応じて hs_settle タイミングを計算します。詳細については、drivers/media/platform/nxp/imx8mq-mipi-csi2.c をご覧ください。 そして、link_freq = sensor_data_rate_per_lane / 2 です。 よろしくお願いいたします。 ゾーイ Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 「mxc_isi.0':1 -> 'mxc_isi.0.capture':0」が抜けているようです。media-ctlを使って設定し、もう一度確認してください。 Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 こんにちは@zoey_liさん 返信ありがとうございます!adv7180.cでリンク周波数を設定しましたドライバ。データシートには、ADV がプログレッシブ モードの場合、432Mbps と記載されています。 root@imx8qxp-d7:~# v4l2-ctl -d /dev/v4l-subdev8 --get-ctrl link_frequency link_frequency: 0 (216000000 0xcdfe600) この設定でもまだ出力はありません。 これは ISI でフォーマット変換を行おうとしたことと関係があるのでしょうか? - entity 14: mxc_isi.0 (2 pads, 2 links, 0 routes) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 pad0: SINK [stream:0 fmt:UYVY8_2X8/720x576 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range compose.bounds:(0,0)/720x576 compose:(0,0)/720x576] <- "crossbar":6 [ENABLED,IMMUTABLE] pad1: SOURCE [stream:0 fmt:YUV8_1X24/720x576 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range crop.bounds:(0,0)/720x576 crop:(0,0)/720x576] -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE] (パッド0はUYVY8_2X8、パッド1はYUV8_1X24です) よろしくお願いいたします。 ドミニク Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 これまでに行った作業のパッチを以下に示します。デバイス ツリーは含まれません。 パッチはかなり大きいですが、ほとんどがデバッグ プリントです。 起動からストリーミングを試みるまでの完全な dmesg 出力を添付しました。imx8-isi ドライバのデバッグ プリントを有効にした後に実行したコマンドは、次の順序です。 - media-ctl -d /dev/media1 -V '"imx8mq-mipi-csi2 58227000.csi":0[fmt:UYVY8_2X8/720x576]' - media-ctl -d /dev/media1 -V '"mxc_isi.0":1[fmt:RGB888_1X24/720x576 フィールド:なし]' - gst-launch-1.0 v4l2src デバイス=/dev/video4 !ビデオ/x-raw、幅=720、高さ=576、フレームレート=25/1 !オートビデオシンク そして約10秒後にストリーミングが停止しました。 ご回答をお待ちしています。 Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 .link_validateに0を返す空の実装を持つmedia_entity_operationsを追加しました。および.link_setupそして、`media-ctl -d /dev/media1 -l '"mxc_isi.0":1 を実行しました。-> "mxc_isi.0.capture":0 [1]'`. それでも結果は同じで、実際にはフレームは通過しません。 CSC を有効にするために、mxc_isi.0 のパッド 1 を RGB888_1X24 に設定してみましたが、それでも何も起こりませんでした。 編集: media_entity_operations が、 mxc_isi_video_register()の mxc_isi.0.capture デバイスのvdev -> entityに追加されました。 Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 はい、見つかりました。ただし、デバッグ プリント ログを参照してください。このリンクは見つかりませんでした。もう一度確認してください。以前 imx8qm でテストしましたが、media-ctl -p コマンドを使用してこのリンクを追加する必要があることを思い出しました。試してみるとよいかもしれません。 Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 投稿内のパイプラインの概要で見逃したかもしれません。申し訳ありません。しかし、リンクは media-ctl 出力にあります: ... - entity 14: mxc_isi.0 (2 pads, 2 links, 0 routes) type V4L2 subdev subtype Unknown flags 0 device node name /dev/v4l-subdev1 ... pad1: SOURCE [stream:0 fmt:YUV8_1X24/720x576 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range crop.bounds:(0,0)/720x576 crop:(0,0)/720x576] -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE] - entity 17: mxc_isi.0.capture (1 pad, 1 link) type Node subtype V4L flags 0 device node name /dev/video4 pad0: SINK <- "mxc_isi.0":1 [ENABLED,IMMUTABLE] Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 ボードの起動時の完全なログを提供していただけますか? また、変更に対するパッチはありますか? Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 こんにちは@dominic-vtさん、 mxc_isi.xの場合サブデバイス、 - パッド0は入力フォーマットを示し、センサ/mipi-csi/クロスバーと同じフォーマットである必要があります - パッド 1 は出力形式のカラー スペースを示します。 ISI メディア パイプライン全体の最終的な出力形式は、ビデオ デバイス (mxc_isi.x.capture) の set_fmt ioctl を呼び出すユーザー空間アプリケーションによって制御されます。 印刷されたメディア トポロジに明らかなエラーは見当たりません。また、ISI の再フォーマットや CSC によってキャプチャがハングすることもないはずです。MIPI-CSI ステータス レジスタを (キャプチャ中に数回) チェックして、エラーが報告されているかどうかを確認してください。 それでも見つからない場合は、問題を絞り込むために、8QXP mipi-csi および isi ドライバーに対して行ったすべての変更を元に戻し、media-ctl を使用してメディア パイプラインを手動で構成することをお勧めします。 ちなみに、dts でデータ レーン番号を 1 に設定しましたが、センサの設定と一致していることを確認してください。 よろしくお願いいたします。 ゾーイ Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 問題が分かりました: 新しい MIPI CSI2 ドライバは以前のドライバとは異なり、s_power() コールバックを呼び出さないため、ADV チップは実際には電源がオンになっていませんでした。 解決策は、adv7180.c のランタイム PM を実装することであった。ドライバ。動作する実装を含むパッチを添付しました。 これはカーネルドキュメントに記載されているベストプラクティスです: https://docs.kernel.org/5.17/driver-api/media/camera-sensor.html#power-management パッチはアップストリームのadv7180.cには完全には適用されません私たちのファイルには無関係な変更がいくつか含まれているため、このファイルを使用しますが、他のユーザーが変更を必要とする場合は、簡単にコピーして貼り付けることができるはずです。 ご提案ありがとうございます! Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 こんにちは@zoey_liさん レジスターを確認するという提案、ありがとうございます!その結果、ADV チップはストリーミング用に実際には電源がオンになっていなかったことがわかりました。 修正を含むパッチをいくつか投稿し、他の誰かがこの問題に遭遇した際に備えて、それを解決策としてマークしました。 よろしくお願いいたします ドミニク Re: i.MX8QXP cannot stream video from ADV7280-M on Linux 6.12 それを聞いて嬉しく思います。また、他の人の参考のためにパッチを共有していただきありがとうございます。
View full article
NXP os08a20カメラを搭載したiMX95 Verdin EVKでストリームをディスプレイにプッシュする方法 最近、 https://www.nxp.com/design/design-center/development-boards-and-designs/4K-MIPI-CMOS-CAMERA-MODULEから X-IMX-OS08A20 カメラモジュールを購入しました。 これを iMX95 Verdin EVK キットにコネクテッドにすると、カメラが正しく検出され、正常にプローブされます。 私は次のdtbを使用しています- imx95-19x19-verdin-os08a20-isp-lt8912.dtb 次の v4l2 コマンドを実行しており、stream-mmap コマンドで v4l2 ストリームを取得できました。以下は私が使用するコマンドです media-ctl -d /dev/media0 -l "'os08a20 2-0036':0 -> 'csidev-4ad30000.csi':0[1]" media-ctl -d /dev/media0 -l "'csidev-4ad30000.csi':1 -> '4ac10000.syscon:formatter@20':0[1]" media-ctl -d /dev/media0 -l "'4ac10000.syscon:formatter@20':1-> 'クロスバー':2[1]" media-ctl -d /dev/media0 -l "'クロスバー':5 -> 'mxc_isi.0':0[1]" media-ctl -d /dev/media0 -l "'mxc_isi.0':1-> 'mxc_isi.0.capture':0[1]" echo "メディア設定" media-ctl -d /dev/media0 -R "'os08a20 2-0036' [1/0->0/0[1]]" media-ctl -d /dev/media0 -R "'csidev-4ad30000.csi' [0/0->1/0[1]]" media-ctl -d /dev/media0 -R "'4ac10000.syscon:formatter@20'[0/0->1/0[1]]" media-ctl -d /dev/media0 -R "'クロスバー' [2/0->5/0[1]]" echo "ルーティング完了" media-ctl -d /dev/media0 -V "'os08a20 2-0036':0/0 [fmt:SBGGR10/3840x2160 フィールド:なし]" media-ctl -d /dev/media0 -V "'csidev-4ad30000.csi':0/0 [fmt:SBGGR10/3840x2160 フィールド:なし]" media-ctl -d /dev/media0 -V "'4ac10000.syscon:formatter@20':0/0[fmt:SBGGR10/3840x2160 フィールド:なし]" media-ctl -d /dev/media0 -V "'クロスバー':2/0 [fmt:SBGGR10/3840x2160 フィールド:なし]" media-ctl -d /dev/media0 -V "'mxc_isi.0':0/0[fmt:SBGGR10/3840x2160 フィールド:なし]" echo "リンクが完了しました" 次のコマンドを実行して v4l2 でフレームを取得すると、期待どおり 30 fps を取得できます。 v4l2-ctl -d /dev/video0 --set-fmt-video=幅=3840、高さ=2160、ピクセルフォーマット=BG10 --stream-mmap <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.04 fps <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.04 fps <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.04 fps それをディスプレイにプッシュしようとしているのですが、この問題に直面しています。 root@imx95-19x19-verdin:~# gst-launch-1.0libcamerasrc !ビデオ/x-raw、フォーマット=BGRx、幅=3840、高さ=2160 !ビデオ変換!fpsdisplaysink ビデオシンク=autovideosink テキストオーバーレイ=true パイプラインを一時停止に設定しています... [0:01:33.994814097][774] 情報 カメラ camera_manager.cpp:326libcamera v0.5.0+330-7fce0333-dirty (2025-06-04T12:23:54UTC) パイプラインはライブなので PREROLL は必要ありません... [0:01:34.098980249][780] ISI を警告 imx8-isi.cpp:353サポートされているYUV/RGB形式が見つかりません パイプラインは事前ロールされています... パイプラインを再生中に設定しています... エラー: 要素 /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0 から: 内部データ ストリーム エラー。 追加のデバッグ情報: /usr/src/debug/libcamera/0.5.0.imx/src/gstreamer/gstlibcamerasrc.cpp(682):gst_libcamera_src_task_enter(): /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0: ストリーミングが停止しました。理由は交渉されていません (-4) エラー: パイプラインはプリロールを要求しません。 実行は0:00:00.000314034後に終了しました パイプラインを NULL に設定しています... [0:01:34.099615025][780] ISI を警告 imx8-isi.cpp:353サポートされているYUV/RGB形式が見つかりません エラー: 要素 /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0 から: 内部データ ストリーム エラー。 追加のデバッグ情報: /usr/src/debug/libcamera/0.5.0.imx/src/gstreamer/gstlibcamerasrc.cpp(682):gst_libcamera_src_task_enter(): /GstPipeline:pipeline0/GstLibcameraSrc:libcamerasrc0: ストリーミングが停止しました。理由は交渉されていません (-4) パイプラインを解放します... cam -c 1 --info [0:01:09.047021603][772] 情報 カメラ camera_manager.cpp:326libcamera v0.5.0+330-7fce0333-dirty (2025-06-04T12:23:54UTC) [0:01:09.152506530][772] ISI を警告 imx8-isi.cpp:353サポートされているYUV/RGB形式が見つかりません カメラ /base/soc/bus@42000000/i2c@42530000/os08a20_mipi@36 を cam0 として使用します 0: 3840x2160-SBGGR10 * ピクセル形式: SBGGR10 (3840x2160)-(3840x2160)/(+1,+1) - 3840x2160 * ピクセル形式: SBGGR12 (3840x2160)-(3840x2160)/(+1,+1) - 3840x2160 これまで、libcamera に関して MATCH_LIST をエクスポートしたことがなく、上記がそのログです。 この後エクスポートします LIBCAMERA_PIPELINES_MATCH_LIST='nxp/neo,imx8-isi' をエクスポートします。 root@imx95-19x19-verdin:~# cam -c 1 --info [0:01:46.524765885][782] 情報 カメラ camera_manager.cpp:326libcamera v0.5.0+330-7fce0333-dirty (2025-06-04T12:23:54UTC) [0:01:46.642824790][783] 情報 NxpNeoIPA neo_ipa.cpp:128nxpneo: IPANxpNeo NXPNEO_IPA_v0.5.0+330-7fce0333-dirty (2025-06-04T12:23:54UTC) カメラ /base/soc/bus@42000000/i2c@42530000/os08a20_mipi@36 を cam0 として使用します 0: 3840x2160-BGR888 * ピクセルフォーマット: R8 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: R10 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: R12 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: R16 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: NV21 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: NV61 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: NV12 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: XBGR8888 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセル形式: BGR888 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: RGB888 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: XRGB8888 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: NV16 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセル形式: YUYV (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: XVUY8888 (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 * ピクセルフォーマット: UYVY (1920x1080)-(3840x2160)/(+0,+0) - 1920x1080 - 3840x2160 この後、次の gstreamer コマンドを実行しても、ストリームは開始されません。このプロセスは終了するまで応答がありません。 root@imx95-19x19-verdin:~# GST_DEBUG=3 gst-launch-1.0libcamerasrc !ビデオ変換!オートビデオシンク パイプラインを一時停止に設定しています... [0:04:17.443233635][794] 情報 カメラ camera_manager.cpp:326libcamera v0.5.0+330-7fce0333-dirty (2025-06-04T12:23:54UTC) [0:04:17.562332552][798] 情報 NxpNeoIPA neo_ipa.cpp:128nxpneo: IPANxpNeo NXPNEO_IPA_v0.5.0+330-7fce0333-dirty (2025-06-04T12:23:54UTC) パイプラインはライブなので PREROLL は必要ありません... 0:00:00.203418021 794 0xffffa4000b70 FIXME デフォルト gstutils.c:4169:gst_element_decorate_stream_id_internal: ランダムなストリームIDを作成する場合は、ストリームIDを作成するためのデターミニスティックな方法を実装することを検討してください。 パイプラインは事前ロールされています... パイプラインを再生中に設定しています... 0:00:00.203987701 794 0xffffa4000b70 警告 デフォルト gstlibcamera-utils.cpp:345:gst_libcamera_stream_formats_to_caps:サポートされていないDRMフォーマットR10 0:00:00.204038448 794 0xffffa4000b70 警告 デフォルト gstlibcamera-utils.cpp:345:gst_libcamera_stream_formats_to_caps:サポートされていないDRMフォーマットR12 新しい時計: GstSystemClock 0:00:00.204228106 794 0xffffa4000b70 警告 デフォルト gstlibcamera-utils.cpp:345:gst_libcamera_stream_formats_to_caps:サポートされていないDRM形式XVUY [0:04:17.578186764][799] INFO カメラ camera.cpp:1205ストリームの設定: (0) 3840x2160-NV21 0:00:00.0/ 99:99:99。 この問題を克服する方法。これについてご指導いただけますでしょうか。 Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera この問題を再現できるボードがありません。imx95-19x19-evk-os08a20-isp-it6263-lvds0.dtb で HDMI をテストしましたが、問題は発生しませんでした。ベンダーにお問い合わせしてサポートを受けるか、別の dtb ファイルを使用して再度テストしてみてください。 Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera https://community.nxp.com/t5/i-MX-Processors/OS08A20-camera-via-HDMI-LT8912 によるビデオキャプチャの表示方法/mp/2170756/page/2 上記のリンクには、ストリーミングに関する同じクエリが含まれています。解決策が見つからなかったので、どのような解決策が提供されたか確認していただけますか。ありがとう。 Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera 現在、imx95 はまだ試作段階にあるため、Verdin EVK をサポートしていません。私のボードでは再現できませんでした。ログを参照してください。問題はディスプレイ側に関連しています。NXPについてにお問い合わせして、これを検証しているかどうか確認してください。 Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera 多くの人が同じ問題で苦労しているのがわかるのですが、これに対する解決策はあるのでしょうか。カメラだけでなくキットも購入しました。ご協力いただけると大変助かります Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera 私は NXP からカーネル ソースをクローンして使用しています (SW に関して)。また、私のCASEでは、カメラは適切にプローブされ、v4l2 ストリームを取得できました。この問題を明確にするために、Verdin のお問い合わせと連絡を取っていただくことは可能でしょうか。ありがとう Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera この問題はlt8912 に関連しており、nxp imx95 evk ボードではサポートされていないため、再現してデバッグすることはできませんでした。現在の Verdin ボード サポートのポリシーでは、imx95 はまだ試作段階にあり、サードパーティ企業のボードはまだサポートされていないため、お客様は Verdin へお問い合わせして確認する必要があります。自分のボードで再現できれば、提案や解決策を提供できますが、この問題は彼らのボードのソフトウェアでのみ再現できるため、現在の段階では直接 Verdin にお問い合わせください。 Re: How to push stream to display in iMX95 Verdin EVK with the NXP os08a20 camera これにお問い合わせすることができます https://www.toradex.com/support
View full article
DEVKIT-MPC5748G:PEMICRO GDB 启动失败 当我使用 DEVKIT-MPC5748G 时,CAN0 模块被设置为禁用模式。有错误。无论开机还是关机,它都不工作。 服务上市顺序错误 peMicro GDB 上市失败:GDB 服务器无法与目标处理器建立连接。请检查连接和电源。验证调试配置中的用上市设置是否准确。 如何解决? 谢谢!
View full article
PAライセンスが必要なS32DS みなさんこんにちは。以前のプロジェクトで使用した SPC5745 シリーズ製品の IDE のライセンスが期限切れになっていることがわかりました。最近、PA プラットフォーム用に S32DS を開発および変更する必要があります。使用するための新しいライセンスを提供してもらえますか? Re: S32DS for PA lisence need こんにちは、 S32DS ライセンスが延長されました。
View full article
S32K358 RTD ICU Example with DMA Dera support, my customer Aptiv is looking for DMA based ICU handling. Based on incoming rising edge a DMA transaction should happen configured in mcl driver. In our RTD ICU user manual we find  since some releases the same remark: 3.6.1 Icu with DMA feature Tips for this feature will be added in the next release. Its in RTD5.00 / 6.0.0 and 7.0.0    Do we have a working example to show to Aptiv how to use this feature ?   Ideally for S32K358 RTD6.0.0 but if we have other versions thats fine as well. Best Regards, Viktor Priority: HIGH RTD Source: Direct Customer Re: S32K358 RTD ICU Example with DMA Hi @viktorfellinger , There are some notes for this feature: - DMA just support with IcuMeasurementMode is ICU_MODE_SIGNAL_MEASUREMENT or ICU_MODE_TIMESTAMP. - DMA feature only supports ICU_MODE_SIGNAL_MEASUREMENT in eMios SAIC mode - Just some Emios channels support DMA, you find this through the attached excel: S32K3xx_DMAMUX_map in RM, like this: In my example, I used Emios_0, channel 1 for measuring signal. In Icu: In Mcl, using DMA_TCD0 In Rm: In Platform: I attached the example here that I used the attached example in the package(RTM600) and just add this feature. I also created the ticket: ARTDCT1-637 so that SW team can update this chapter in the next release. Best regards, Nhi
View full article
MIMXRT1175 lpuart7使用DMA进行数据收发 我使用IDE中的SDK生成了lpuart1进行MDA数据收发。代码如下: /* * Copyright (c) 2015, Freescale Semiconductor, Inc. * Copyright 2016-2017 NXP * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pin_mux.h" #include "clock_config.h" #include "board.h" #include "fsl_lpuart_edma.h" #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT #include "fsl_dmamux.h" #endif /******************************************************************************* * Definitions ******************************************************************************/ #define DEMO_LPUART LPUART1 #define DEMO_LPUART_CLK_FREQ BOARD_DebugConsoleSrcFreq() #define LPUART_TX_DMA_CHANNEL 0U #define LPUART_RX_DMA_CHANNEL 1U #define LPUART_TX_DMA_REQUEST 8U #define LPUART_RX_DMA_REQUEST 9U #define EXAMPLE_LPUART_DMAMUX_BASEADDR DMAMUX0 #define EXAMPLE_LPUART_DMA_BASEADDR DMA0 #define ECHO_BUFFER_LENGTH 8 /******************************************************************************* * Prototypes ******************************************************************************/ /* LPUART user callback */ void LPUART_UserCallback(LPUART_Type *base, lpuart_edma_handle_t *handle, status_t status, void *userData); /******************************************************************************* * Variables ******************************************************************************/ lpuart_edma_handle_t g_lpuartEdmaHandle; edma_handle_t g_lpuartTxEdmaHandle; edma_handle_t g_lpuartRxEdmaHandle; AT_NONCACHEABLE_SECTION_INIT(uint8_t g_tipString[]) = "LPUART EDMA example\r\nSend back received data\r\nEcho every 8 characters\r\n"; AT_NONCACHEABLE_SECTION_INIT(uint8_t g_txBuffer[ECHO_BUFFER_LENGTH]) = {0}; AT_NONCACHEABLE_SECTION_INIT(uint8_t g_rxBuffer[ECHO_BUFFER_LENGTH]) = {0}; volatile bool rxBufferEmpty = true; volatile bool txBufferFull = false; volatile bool txOnGoing = false; volatile bool rxOnGoing = false; /******************************************************************************* * Code ******************************************************************************/ /* LPUART user callback */ void LPUART_UserCallback(LPUART_Type *base, lpuart_edma_handle_t *handle, status_t status, void *userData) { userData = userData; if (kStatus_LPUART_TxIdle == status) { txBufferFull = false; txOnGoing = false; } if (kStatus_LPUART_RxIdle == status) { rxBufferEmpty = false; rxOnGoing = false; } } /*! * @brief Main function */ int main(void) { lpuart_config_t lpuartConfig; lpuart_transfer_t xfer; lpuart_transfer_t sendXfer; lpuart_transfer_t receiveXfer; edma_config_t userConfig = {0}; BOARD_ConfigMPU(); BOARD_InitPins(); BOARD_BootClockRUN(); /* Initialize the LPUART. */ /* * lpuartConfig.baudRate_Bps = 115200U; * lpuartConfig.parityMode = kLPUART_ParityDisabled; * lpuartConfig.stopBitCount = kLPUART_OneStopBit; * lpuartConfig.txFifoWatermark = 0; * lpuartConfig.rxFifoWatermark = 0; * lpuartConfig.enableTx = false; * lpuartConfig.enableRx = false; */ LPUART_GetDefaultConfig(&lpuartConfig); lpuartConfig.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; lpuartConfig.enableTx = true; lpuartConfig.enableRx = true; LPUART_Init(DEMO_LPUART, &lpuartConfig, DEMO_LPUART_CLK_FREQ); #if defined(FSL_FEATURE_SOC_DMAMUX_COUNT) && FSL_FEATURE_SOC_DMAMUX_COUNT /* Init DMAMUX */ DMAMUX_Init(EXAMPLE_LPUART_DMAMUX_BASEADDR); /* Set channel for LPUART */ DMAMUX_SetSource(EXAMPLE_LPUART_DMAMUX_BASEADDR, LPUART_TX_DMA_CHANNEL, LPUART_TX_DMA_REQUEST); DMAMUX_SetSource(EXAMPLE_LPUART_DMAMUX_BASEADDR, LPUART_RX_DMA_CHANNEL, LPUART_RX_DMA_REQUEST); DMAMUX_EnableChannel(EXAMPLE_LPUART_DMAMUX_BASEADDR, LPUART_TX_DMA_CHANNEL); DMAMUX_EnableChannel(EXAMPLE_LPUART_DMAMUX_BASEADDR, LPUART_RX_DMA_CHANNEL); #endif /* Init the EDMA module */ EDMA_GetDefaultConfig(&userConfig); #if defined(BOARD_GetEDMAConfig) BOARD_GetEDMAConfig(userConfig); #endif EDMA_Init(EXAMPLE_LPUART_DMA_BASEADDR, &userConfig); EDMA_CreateHandle(&g_lpuartTxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL); EDMA_CreateHandle(&g_lpuartRxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_RX_DMA_CHANNEL); #if defined(FSL_FEATURE_EDMA_HAS_CHANNEL_MUX) && FSL_FEATURE_EDMA_HAS_CHANNEL_MUX EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL, DEMO_LPUART_TX_EDMA_CHANNEL); EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR, LPUART_RX_DMA_CHANNEL, DEMO_LPUART_RX_EDMA_CHANNEL); #endif /* Create LPUART DMA handle. */ LPUART_TransferCreateHandleEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, LPUART_UserCallback, NULL, &g_lpuartTxEdmaHandle, &g_lpuartRxEdmaHandle); /* Send g_tipString out. */ xfer.data = g_tipString; xfer.dataSize = sizeof(g_tipString) - 1; txOnGoing = true; LPUART_SendEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, &xfer); /* Wait send finished */ while (txOnGoing) { } /* Start to echo. */ sendXfer.data = g_txBuffer; sendXfer.dataSize = ECHO_BUFFER_LENGTH; receiveXfer.data = g_rxBuffer; receiveXfer.dataSize = ECHO_BUFFER_LENGTH; while (1) { /* If RX is idle and g_rxBuffer is empty, start to read data to g_rxBuffer. */ if ((!rxOnGoing) && rxBufferEmpty) { rxOnGoing = true; LPUART_ReceiveEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, &receiveXfer); } /* If TX is idle and g_txBuffer is full, start to send data. */ if ((!txOnGoing) && txBufferFull) { txOnGoing = true; LPUART_SendEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, &sendXfer); } /* If g_txBuffer is empty and g_rxBuffer is full, copy g_rxBuffer to g_txBuffer. */ if ((!rxBufferEmpty) && (!txBufferFull)) { memcpy(g_txBuffer, g_rxBuffer, ECHO_BUFFER_LENGTH); rxBufferEmpty = true; txBufferFull = true; } } } 我有以下几个疑问: 1、为什么不能在回调函数中直接调用LPUART_ReceiveEDMA()和LPUART_SendEDMA()函数。 2、rxBufferEmpty和txBufferFull在整个例程中起到什么作用,按照我以前开发STM32的例程的理解来说, 我只要将接收数据缓存映射到DMA的收数据地址上,数据就会自动接收,并产生接收完成中断。此芯片的DMA收发机制是怎么样的? Re: MIMXRT1175 lpuart7使用DMA进行数据收发 Hi @JerrmyLi , 感谢您关注恩智浦RT系列产品以及使用我们Community,很高兴为您服务。 1、为什么不能在回调函数中直接调用LPUART_ReceiveEDMA()和LPUART_SendEDMA()函数。 回复:回调函数也是在UART中断中调用的,在中断中代码应该是简洁的,不做过多耗时操作和逻辑处理等。通常做法是设置标志位,在主程序中处理。 2、rxBufferEmpty和txBufferFull在整个例程中起到什么作用,按照我以前开发STM32的例程的理解来说, 我只要将接收数据缓存映射到DMA的收数据地址上,数据就会自动接收,并产生接收完成中断。此芯片的DMA收发机制是怎么样的? 回复: txBufferFull状态true时表示发送buffer被使用,为false表示数据发送完成。 rxBufferEmpt状态为false时,表示接收Buffer数据已满,为true表示数据已经复制到TX Buffer, Rx Buffer可以再次接收数据。  此芯片的DMA收发机制是怎么样的? 建议您查看LPUART_SendEDMA函数具体实现。 mayliu1_0-1766042005967.png 希望以上对您有帮助。 Best Regards MayLiu
View full article