Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
AN4581の最新バージョン こんにちは、 2020年からのAN4581(HABv4対応デバイスでのi.MXセキュアブート)Rev.4があります。 https://de.scribd.com/document/811030804/AN4581 しかし、Web サイトやインターネットで検索すると、2012 年または 2018 年の古いバージョンしか見つけることができません。 AN4581の最新リビジョンはどこでCAN入手できるか教えていただけますか? よろしくお願いします。 Re: Latest version of AN4581 サポートありがとうございます。 2020 バージョンはここからダウンロードできました: https://www.readkong.com/page/an4581-i-mx-secure-boot-on-habv4-supported-devices-2622907 古いバージョンは NDA なしでこちらから入手できます: https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/imx-processors/225997/1/AN4581.pdf(2012年) https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/imx-processors/194321/1/AN4581_2018.pdf(2018年) Re: Latest version of AN4581 このセキュア ブートの AN は機密情報であるため、NXP との NDA に署名する必要があります。 https://support.nxp.com/s/?language=en_USから内部チケットを作成することをお勧めします。
View full article
为 i.mx8MQ 创建 Jailhouse 虚拟机监控器 Inmate cell 时出现问题 亲爱的先生, 正在尝试通过 Jailhouse 在 NXP i.MX 8MQ EVK 板中创建自定义(e-Call)Inmate linux 演示单元。 所有操作步骤均已添加到所附的 "NXP_Jailhouse_Ticket.txt "中。锉刀 面临的问题:- 我们面临编译问题, 如何编译 linux-inmate-demo.c文件并生成 .o和 .cell文件? 如何创建正确的 .bb文件,用于编译 linux-inmate-demo.c文件并生成 .o和 .cell文件并添加到最终图像中。? 请向我们提供您在创建自定义监狱囚犯牢房时有的任何应用笔记, 或者 是否有任何指向以前具有相同解决方案的恩智浦社区门票的链接? 还请纠正上述步骤并提供解决方案。 i.MX8ULP Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 关于如何设置网络以允许囚犯访问互联网,请参阅下文,您需要更新设置以使用 USB 网或以太网。 如何使用网络为第 2 版 Linux 设置网络 首次启动 linux 后 sysctl -w net.ipv4.ip_forward=1 sysctl -p /etc/sysctl.conf 启用根细胞后 iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -o eth1 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 第二次启动 linux 后 ifconfig eth1 或 2 192.168.1.4第 1 个 Linux 根单元 ifconfig eth0 192.168.1.5为第二个 Linux 囚犯牢房 "ip route add default via 192.168.1.4dev eth0" for the 2nd linux " ip route add 10.193.100.0/24通过 192.168.1.4dev eth0" 用于第二个 linux 现在,您可以"mount -t nfs 10.193.108.xx:/home/xxx/nfs/mnt" 在步骤 3 和 4 中,根据您的网络将 10.193.xx.xx 更新为您的网络 此致 Peng 开始标志。 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 嗨,彭、 非常感谢你们的支持,我们可以将 "scp "从根单元复制到囚犯单元。 基本上,我们希望在囚犯手机上保留带有 MQTT 的电子呼叫应用程序。 我们可以共享从根节点到囚犯单元的读/写共享内存。此外,我们还可以按照您的建议,为 root/inmate 单元提供静态 IP。 现在,我们需要在囚犯牢房上建立互联网连接,以便将接收到的数据从根牢房传输到云端。 我们通过 USB 端口将 Quectel EC25 模块连接到恩智浦 i.MX8MQ 板。 根单元数据的 IFCONFIG: ” ifconfig eth0: flags=-28669 mtu 1500 ether 00:04:9f:05:a5:9c txqueuelen 1000(以太网) RX 数据包 0 字节 0 (0.0 B) RX 错误 0 丢失 0 超限 0 帧 0 TX 数据包 0 字节 0 (0.0 B) TX 错误 0 丢失 0 超出 0 载波 0 碰撞 0 eth1: flags=-28605 mtu 16384 inet 192.168.0.3 netmask 255.255.255.0 广播 192.168.0.255 inet6 fe80::88f0:a7ff:fe40:2407 prefixlen 64 scopeid 0x20 ether 8a:f0:a7:40:24:07 txqueuelen 1000(以太网) RX 数据包 41 字节 7030 (6.8 KiB) RX 错误 0 丢失 0 超限 0 帧 0 TX 数据包 71 字节 18812 (18.3 KiB) TX 错误 0 丢失 0 超出 0 载波 0 碰撞 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000(本地环回) RX 数据包 103 字节 9268 (9.0 KiB) RX 错误 0 丢失 0 超限 0 帧 0 TX 数据包 103 字节 9268 (9.0 KiB) TX 错误 0 丢失 0 超出 0 载波 0 碰撞 0 usb0: flags=-28605 mtu 1500 inet 192.168.225.39 净掩码 255.255.255.0 广播 192.168.225.255 inet6 2401:4900:4bb5:e7a7:609f:c3ff:fe2c:903b prefixlen 64 scopeid 0x0 inet6 fe80::609f:c3ff:fe2c:903b prefixlen 64 scopeid 0x20 ether 62:9f:c3:2c:90:3b txqueuelen 1000(以太网) RX 数据包 84 字节 7614 (7.4 KiB) RX 错误 0 丢失 0 超限 0 帧 0 TX 数据包 117 字节 13860 (13.5 KiB) TX 错误 0 丢失 0 超出 0 载波 0 碰撞 0 " 可以看到,互联网连接已在 ROOT 手机端建立。 以下是 PING 命令的输出结果 ” root@imx8mqevk:/home ping 8.8.8.8 PING 8.8.8 (8.8.8.8) 56 (84) 字节的数据。 来自 8.8.8.8 的 64 字节:icmp_seq=1 ttl=114 时间=193 毫秒 来自 8.8.8.8 的 64 字节:icmp_seq=2 ttl=114 时间=68.9毫秒 来自 8.8.8.8 的 64 字节:icmp_seq=3 ttl=114 时间=62.8毫秒 来自 8.8.8.8 的 64 字节:icmp_seq=4 ttl=114 时间=68.5 毫秒 来自 8.8.8.8 的 64 字节:icmp_seq=5 ttl=114 时间=66.5 毫秒 来自 8.8.8.8 的 64 字节:icmp_seq=6 ttl=114 时间=78.6 毫秒 来自 8.8.8.8 的 64 字节:icmp_seq=7 ttl=114 时间=71.0毫秒 ” 现在我在囚犯牢房遇到了网络问题,下面是 IFCONFIG 日志: ” root@imx8mqevk:~ ifconfig eth0 Link encap:Ethernet HWaddr 6E:58:98:59:01:A0 inet addr:192.168.0.4 Bcast:192.168.0.255 掩码:255.255.255.0 inet6 addr: fe80::6c58:98ff:fe59:1a0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:16384 Metric:1 RX 数据包:184 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:65 错误:0 丢弃:0 超限:0 载波:0 碰撞:0 txqueuelen:1000 RX 字节:78814 (76.9 KiB) TX 字节:14002 (13.6 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 掩码:255.0.0.0 inet6 地址:::1/128 范围:主机 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX 数据包:22 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:22 错误:0 丢弃:0 超限:0 载波:0 碰撞:0 txqueuelen:1000 RX 字节:3897 (3.8 KiB) TX 字节:3897 (3.8 KiB) ” 此外,我们还尝试在 ROOT 手机端进行 IP 转发: 允许囚犯牢房接入外部网络: 根细胞中 echo 1> /proc/sys/net/ipv4/ip_forward iptables -A FORWARD -i eth1 -o usb0 -j ACCEPT iptables -A FORWARD -i usb0 -o eth1 -j ACCEPT iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE ” 当我运行上述命令时,得到以下日志: ” root@imx8mqevk:/home iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE [ 1869.738194] audit: type=1325 audit(1755848821.593:11):table=nat 系列=2 entries=7 op=xt_replace pid=713 comm="iptables" root@imx8mqevk:/home [ 1869.749806] audit: type=1300 audit(1755848821.593:11):arch=c00000b7 syscall=208 success=yes exit=0 a0=4 a1=0 a2=40 a3=aaaafd66a400 items=0 ppid=607 pid=713 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 1869.779649] audit: type=1327 audit(1755848821.593:11):proctitle=69707461626C6573002D74006E6174002D4100504F5354524F5554494E47002D6F0075736230002D6A004D415351554552414445" ” 还将 Dmesg 日志放入根单元 ” [ 71.141601]创建了监狱牢房"ecall-linux-inmate-demo" [ 77.822386]IPv6:ADDRCONF(NETDEV_CHANGE):ETH1:链路就绪 [ 206.451703]audit: type=1325 audit(1755847158.198:4):table=nat 系列=2 个条目=0 op=xt_register pid=651 comm="iptables" [ 206.463131]audit: type=1300 audit(1755847158.198:4):arch=c00000b7 syscall=209 success=yes exit=0 a0=4 a1=0 a2=40 a3=ffffe78d01c0 items=0 ppid=607 pid=651 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 206.493176]audit: type=1327 audit(1755847158.198:4):proctitle=69707461626C6573002D74006E6174002D4100504F5354524F5554494E47002D6F0065746830002D6A004D415351554552414445 [ 206.508268]audit: type=1325 audit(1755847158.202:5):table=nat 系列=2 entries=5 op=xt_replace pid=651 comm="iptables" [ 206.519201]audit: type=1300 audit(1755847158.202:5):arch=c00000b7 syscall=208 success=yes exit=0 a0=4 a1=0 a2=40 a3=aaaabb51c230 items=0 ppid=607 pid=651 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 206.547353]audit: type=1327 audit(1755847158.202:5):proctitle=69707461626C6573002D74006E6174002D4100504F5354524F5554494E47002D6F0065746830002D6A004D415351554552414445 [ 217.506636]audit: type=1325 audit(1755847169.257:6):table=nat 系列=2 个条目=6 op=xt_replace pid=657 comm= " iptables " [ 217.517791]audit: type=1300 audit(1755847169.257:6):arch=c00000b7 syscall=208 success=yes exit=0 a0=4 a1=0 a2=40 a3=aaaaec783230 items=0 ppid=607 pid=657 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 217.547639]audit: type=1327 audit(1755847169.257:6):proctitle=69707461626C6573002D74006E6174002D4100504F5354524F5554494E47002D6F0075736230002D6A004D415351554552414445 [ 294.389911]audit: type=1325 audit(1755847246.146:7):table=filter 系列=2 entries=0 op=xt_register pid=659 comm="iptables" [ 294.401564]audit: type=1300 audit(1755847246.146:7):arch=c00000b7 syscall=209 success=yes exit=0 a0=4 a1=0 a2=40 a3=fffff5707410 items=0 ppid=607 pid=659 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 294.431369]audit: type=1327 audit(1755847246.146:7):proctitle=69707461626C6573002D4100464F5257415244002D690065746831002D6F0075736230002D6A00414343455054 [ 294.445250]audit: type=1325 audit(1755847246.150:8):table=filter 系列=2 entries=4 op=xt_replace pid=659 comm="iptables" [ 294.456430]audit: type=1300 audit(1755847246.150:8):arch=c00000b7 syscall=208 success=yes exit=0 a0=4 a1=0 a2=40 a3=aaaaeb8d3950 items=0 ppid=607 pid=659 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 294.484541]audit: type=1327 audit(1755847246.150:8):proctitle=69707461626C6573002D4100464F5257415244002D690065746831002D6F0075736230002D6A00414343455054 [ 314.598783]audit: type=1325 audit(1755847266.267:9):table=filter 系列=2 entries=5 op=xt_replace pid=662 comm="iptables" [ 314.610726]audit: type=1300 audit(1755847266.267:9):arch=c00000b7 syscall=208 success=yes exit=0 a0=4 a1=0 a2=40 a3=aaaac05eaac0 items=0 ppid=607 pid=662 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 314.640305]audit: type=1327 audit(1755847266.267:9):proctitle=69707461626C6573002D4100464F5257415244002D690075736230002D6F0065746831002D6A00414343455054 [ 849.488680]audit: type=1006 audit(1755847801.267:10):pid=671 uid=0 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=3 res=1 [ 849.501588]audit: type=1300 audit(1755847801.267:10):arch=c00000b7 syscall=64 success=yes exit=1 a0=3 a1=ffffc0aa76a0 a2=1 a3=ffff83653020 items=0 ppid=238 pid=671 auid=0uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=3 comm="crond" exe="/usr/sbin/crond" key=(null) [ 849.527425]audit: type=1327 audit(1755847801.267:10):proctitle=2F7573722F7362696E2F63726F6E64002D6E [ 1869.738194] audit: type=1325 audit(1755848821.593:11):table=nat 系列=2 entries=7 op=xt_replace pid=713 comm="iptables" [ 1869.749806] audit: type=1300 audit(1755848821.593:11):arch=c00000b7 syscall=208 success=yes exit=0 a0=4 a1=0 a2=40 a3=aaaafd66a400 items=0 ppid=607 pid=713 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttymxc0 ses=4294967295 comm="iptables" exe="/usr/sbin/xtables-legacy-multi" key=(null) [ 1869.779649] audit: type=1327 audit(1755848821.593:11):proctitle=69707461626C6573002D74006E6174002D4100504F5354524F5554494E47002D6F0075736230002D6A004D415351554552414445 " 您能帮助我们解决囚犯牢房的上述网络问题吗? Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 在 linux 中执行你的 “root” 或 “犯人” 将触发信号分段故障。 要在两个 linux 之间测试 ivshmem,可以按以下方法进行: 在根单元中: ivshmem-demo -d /dev/uio0 -t 2 在囚犯牢房中: ivshmem-demo -d /dev/uio0 -t 0 然后,你就会看到两个细胞之间的交流。 ivshmem-demo 的源代码位于 imx-jailhouse/tools/demos/ivshmem-demo.c 中。 关于如何在囚犯 Linux 启动后将文件复制到囚犯牢房、 在囚犯牢房: ifconfig eth0 192.168.0.4 在根单元中: ifconfig eth0 192.168.0.3 然后,你可以使用 scp 将文件从 root 复制到犯人。 也可以在根牢房配置 IP 转发,让囚犯访问外部网络。 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 嗨,彭, 非常感谢你的回复,现在我们可以编译 cell.c 了。代码和生成的 .cell锉刀 " 自定义 ecall-inmate-linux-demo 单元创建成功,ecall-inmate-linux-demo 客户端启动并运行。 Linux主机 root imx8mqevk:~jailhouse 牢房列表 ID 名称 状态 已分配 CPU 故障 CPU 0 imx8mq 运行中 0-1 1 ecall-inmate-linux-demo 运行 2-3 ecall-inmate-linux-demo guest " 我们正在使用 /dev/uio0 设备节点进行通信。 尝试了一些 python 代码,根单元格的写入/发送成功。同时,也无法接收到任何关于 Linux 的演示。 之后,我们转入 C 语言编程代码,并附加了 "ivshmem_common.h"、'ivshmem_inmate.c'、'ivshmem_root.c',以及 Makefile。 使用以下命令生成二进制文件 源 /opt/fsl-imx-wayland/5.15-kirkstone/environment-setup-armv8a-参考发行版、系统开发套件。 export cross_compile=aarch64-参考发行版、系统开发套件。-linux-make kird=/home/automotive/yocto_imx_linux/版本/tmp/work-shared/imx/kernel-版本-Artifacts c= " aarch64-参考发行版、系统开发套件。-linux x-gcc--sysroot=$sdktargetsysRoot " arch=arm64 cross_compile=aarch64-参考发行版、系统开发套件。-Linux-aarch64-参考发行版、系统开发套件。-linux-gcc--sysroot=/opt/fsl-imx-wayland/5.15-kirkstone/sysroots/armv8a-参考发行版、系统开发套件。-l inux-Wall-O2-o 根目录 ivshmem_root.c 我们在桌面端使用 imx8mq 工具链和上述命令进行编译。 我们想将生成的二进制文件复制到 Linux 囚犯演示单元。 我们已成功复制到根单元,但不知道在 Inmate Linux 演示单元上复制或编译的步骤? ,您能提供相同的操作方法吗? 我指的是恩智浦文档 "UG10163",名称为 "iMX_Linux_user_guide_LF6.12.20_2.0.0"。 我需要一些有效的示例代码和用户指南来使用这个 Linux 演示囚犯牢房,因此从根单元传输(一些捆绑的数据,例如 JSON 或字符串/二进制)数据,反之亦然,从 Linux Inmate 演示单元接收。 谢谢, Sumit Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 所以,我的理解是,你遇到了投诉问题。 恩智浦有一个仓库:https://github.com/nxp-imx/imx-jailhouse 我不明白你为什么要尝试版本单元文件。仅使用make即可版本监狱和所有单元文件非常简单。即使你使用的是 Simense 仓库,该文档也说: make [KDIR=/path/to/kernel/objects] 还有我版本所有内容的命令: . /opt/fsl-imx-internal-xwayland/6.12-styhead/environment-setup-armv8a-参考发行版、系统开发套件。-linux 导出 cross_compile=aarch64-参考发行版、系统开发套件。-Linux- 取消设置 CFLAGS unset LDFLAGS make kdir=$HOME/linux/linux-LTS-NXP CC= " aarch64-poky-linux-gcc--sysroot=$sdktargetsysroot " arch=arm64 cross_compile=aarch64-POKY-LINUX-LINUX-GCC arch=arm6 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 亲爱的 PENG、 非常感谢你们的建议。 我们仍面临一些问题,详情如下: 创建 .cell 的流程文件(Jailhouse Inmate 二进制文件)、SDK 编译命令: 工具链环境设置: 来源 /opt/fsl-imx-wayland/5.15-kirkstone/environment-setup-armv8a-参考发行版、系统开发套件。-linux PATH bash:/opt/fsl-imx-wayland/5.15-kirkstone/sysroots/x86_64-pokysdk-linux/usr/bin: /opt/fsl-imx-wayland/5.15-kirkstone/sysroots/x86_64-kirkstone/sysroots/x86_64-kirkstone/sysroots/sbin: /opt/fs l-imx-wayland/5.15-kirkstone/sysroots/x86_64-kirkstone/sysrox86_64-pokysdk-linux/bin: /opt/fsl-imx-wayland/5.15-kirkstone/sysroots/x86_64-pokysdk-linux/sbin: /opt/fsl-imx-wayland/5.15-kirkstone/sysroots/x86_64-pokysdk-linux/usr/bin/.../x86_64-pokysdk-linux/bin: /opt/fsl-imx-wayland/5.15-kirkstone/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-pokysdk-linux/bin/aarch64-pokysdk-linux: /opt/fsl-imx-wayland/5.15-kirkstone/sysroots/x86_64-pokysdk-linux/bin/aarch64-pokysdk-linux/bin/apoky-linux-musl: /home/automotive/.local/bin: /home/automotive/bin: /usr/local/sbin: /usr/bin: /usr/bin: /bin: /bin: /usr/bin: /bin: /usr/bin: /usr/bin: /bin: /usr/bin: /usr/bin: /usr/bin: /bin: /usr/bin: /usr/bin: /usr/bin: /bin: /usr/bin: /usr/bin: /usr/bin: /bin: /usr/b-c-i/HOME/Automotive/Jailhouse/Hypervisor/include-i/home/Automotive/Jailhouse/Hypervisor/arch/ arm64/include-i 汽车/监狱/include-nostdlib-nostartfiles-ffreestanding ecall-inux-demo.c-o ecall-inux-demo.c-o ecall-inumate-inmate-inmate-inmate-inmate-inmat 注意:-Jailhouse 头文件不是工具链的一部分,因此我们从 Seimens 的 Jailhouse 文件夹中单独下载(github 版本)。我们使用头文件 inmate-linux-demo.cell 进行编译。 我们没有对 .c锉刀 第 1 步:链接 .o 生成平面 ELF aarch64-poky-linux-ld\-ttext=0x0\-nostdlib\-o ecall-inux-demo.elf\ ecall-inux-demo.elf\ ecall-inumate-linux-demo.o -ttext=0x0 放置 .text 地址为 0x0 的部分,用于平面二进制布局。 -nostdlib阻止链接标准 C 库(队友不需要它)。 第 2 步:将 ELF 转换为原始二进制 .cell aarch64-poky-linux-objcopy\-O 二进制\ ecall-inimate-linux-demo.elf\ ecall-inumate-linux-demo.cell 验证结果:文件 ecall-inumate-linux -demo.cell 验证结果:文件 ecall-inux-demo. 打印信息: ecall-inmate-linux-demo.cell: data 删除默认的 imx8mq.cell 和 imx8mq-linux-demo.cell 生成 "imx8mq.cell 和 imx8mq-linux-demo.cell文件被推送到目标文件夹:"/usr/share/jailhouse/cells 之后,使用生成的 imx8mq.cell 启用 Jailhouse,并面临以下错误 / jailhouse enable /usr/share/jailhouse/cells/imx8mq.cell [ 2533.385877] jailhouse:不是系统配置 JAILHOUSE_ENABLE:无效参数 请提供指导,如果可能的话,请提供一些用户指南/应用笔记或 Makefile/Proper GCC 命令来解决问题。 附上 makefile(它包含所有命令,如上所述) 编译,制 作 aarch64-poky-linux-gcc-nostdlib-nostartfiles-ffreestanding-i/home/automotive/Jailhouse/Hypervisor/include-i-i/home/jailhouse/Hypervisor/include-i-home/automotive/Jailhouse/Hypervisor/include-i-home/automotive/Jailhouse/Hyp-imx8mq.o aarch64-poky-linux-ld-ttext=0x0-nostdlib-o imx8mq.elf imx8mq.elf imx8mq.elf imx8mq.o aarch64-poky-linux-ld: 警告 :找不到入口符号 _start;默认为 0000000000000000 aarch64-poky-linux-objcopy -O 二进制 imx8mq.elf imx8mq.cell 它生成了 .elf.cell 和 .o. 使用以下命令验证文件格式: 文件 imx8mq.elf imx8mq.elf:ELF 64 位 LSB 可执行文件,ARM aarch64,版本 1 (SYSV),静态链接,未删除文件 imx8mq.o imx8mq.o:ELF 64 位 LSB 可重定位,ARM aarch64,版本 1 (SYSV),未删除 文件 imx8mq.cell imx8mq.cell:数据 感谢您的支持。 苏米特 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ BTW: 这是不对的 "敲击 export pythonpath=/HOME/automotive/yocto_imx_linux/版本/tmp/work/x86_64-linux/jailhouse-native/0.12-r0/image/USR/Share/Jailhouse/Tools export c_include_path=/HOME/Automotive/yocto_imx_linux/版本/tmp/work/x86_64-linux/jailhouse-native/0.12-r0/image/USR/Include/Jailhouse      /home/automotive/yocto_imx_linux/版本/tmp/work/x86_64-linux/jailhouse-native/0.12-r0/image/usr/bin/jailhouse-cell-linux \      /home/automotive/yocto_imx_linux/版本/tmp/work/armv8a-参考发行版、系统开发套件。-linux/jailhouse-ecall/1.0-r0/ecall-inmate-linux-demo.c \ -o ecall-inmate-linux-demo.cell 单元格是由 GCC 编译出来的,而不是 jailhouse-cell-linux 编译出来的。 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 我对 Yocto 的东西知之甚少。只需分享我的版本命令即可: . /opt/fsl-imx-internal-xwayland/6.12-styhead/environment-setup-armv8a-参考发行版、系统开发套件。-linux make kdir=$HOME/linux/linux-LTS-NXP CC= " aarch64-poky-linux-gcc--sysroot=$sdktargetsysroot " arch=arm64 cross_compile=aarch64-POKY-LINUX-V=1 然后将版本牢房。 5.10 也应类似。 也请分享您编译出来的单元格文件,让我看看 jailhouse-cell-linux 为什么会在单元格上报错。 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 亲爱的彭凡 感谢您就 i.MX 8MQ 上 Jailhouse 的 IVSHMEM 内存区域提供的宝贵指导,您在回复中提供了有关状态表、RW 部分和输入/输出部分的信息。我们已经将你的建议纳入了我们的牢房配置,但是当我们尝试在i.MX 8MQ EVK板上使用Yocto 5.15 Kirkstone(Linux 5.15.71-2.2.0)创建自定义的E-Call囚犯单元时,仍然面临持续的编译错误。以下是该问题的详细摘要、我们为解决该问题所做的努力以及目前的状况。如果您能提供任何具体的参考、应用笔记或进一步的指导,以帮助我们解决这个问题,我们将不胜感激。 问题摘要 我们正在尝试编译一个自定义的 E-Call 囚犯单元配置(最初基于 `imx8mq-linux-demo.c`、现在使用简化的 "ecall-inmate-linux-demo.c"),使用 "jailhouse-cell-linux "工具。在 "jailhouse-ecall.bb "的 "do_compile "任务中编译失败配方出现以下错误: " 错误:jailhouse-ecall-1.0-r0do_compile:执行错误('/home/automotive/yocto_imx_linux/版本/tmp/work/armv8a-参考发行版、系统开发套件。-linux/jailhouse-ecall/1.0-r0/temp/run.do_compile.225085 ',1,无,无)日志数据如下:调试:执行 shell 函数 do_compile 不是单元配置:/home/automotive/yocto_im_imbild x_linux/版本/tmp/work/armv8a-参考发行版、系统开发套件。-linux/jailhouse-ecall/1.0-r0/imx8mq-linux-demo.c 警告:从 shell 命令中退出代码 1。 错误:任务(/home/automotive/yocto_imx_linux/sources/meta-ecall/recipes-jailhouse/jailhouse-cells/jailhouse-cells/jailhouse-call/jailhouse-cells/jailhouse-call.bb: " 该错误表明 `jailhouse-cell-linux` 无法识别单元配置文件。尽管多次尝试解决,但问题依然存在。 尝试解决的详细信息根据社区反馈和反复试验, 我们对Yocto配方、细胞配置和环境进行了多次更新。以下是主要工作的摘要: 1.初始设置和错误: - 以 `jailhouse-ecall.bb` 开始使用 `imx8mq-linux-demo.c`.和 `jailhouse-native.bb`基于西门子 Jailhouse fork (`git://github.com/siemens/jailhouse.git;branch=master;SRCREV=e57d1eff`)。 - 遇到与缺少`pyjailhouse`模块和不正确的`jailhouse-cell-linux`命令语法有关的错误(例如,将`-I`误解为`CELLCONFIG`)。 2。配方更新: -jailhouse-native.bb: -最初缺少标题安装(`jailhouse/types.h`,jailhouse/cell-config.h`)。更新为包含: " bitbake install -d${D}${includedir} /jailhouse cp -r${S}/include/jailhouse/*.h${D}${includedir} /jailhouse/ " - 切换到 NXP Jailhouse fork (`git://source.codeaurora.org/external/imx/imx-jailhouse.git;branch=imx_5.4.47_2.2.0;SRCREV=8bbe203`),与 `jailhouse_0.12.bb` 看齐,以兼容 i.MX 8MQ。 - 确保 `pyjailhouse_0.12.bb` 与 `jailhouse_0.12.bb` 兼容。 - jailhouse-ecall.bb: - 更正了 "jailhouse-cell-linux "命令,删除了无效的"/dev/null "参数,并使用正确的语法: " bitbake ${STAGING_BINDIR_NATIVE} /jailhouse-cell-linux \ ${S} /ecall-inmate-linux-demo.c\ -o${S}/ecall-inmate-linux-demo.cell " - 更新了 'SRC_URI',以使用 `ecall-inmate-linux-demo.c` 而非 `imx8mq-linux-demo.c`,从而专注于 E-Call 用例。 - 添加了 'export C_INCLUDE_PATH' 和 'PYTHONPATH',以确保找到头文件和 Python 模块。 3.单元配置更新: - 基于 "imx8mq-linux-demo.c "简化了 "ecall-inmate-linux-demo.c"。以及您的 IVSHMEM 指南: - 状态表:0xbfdf0000`,4 KB,只读。 - RW 部分:`0xbfdf1000`,64 KB,读/写。 - 根输出:`0xbfdfa000`, 8 KB, 读/写。 - 根输入:0xbfdfc000`,8 KB,只读。 - 包括 UART1(`0x30860000`)、RAM(`0xc0000000`,256 MB)和通信区域(`0x80000000`)。 - 删除了复杂宏(如 `JAILHOUSE_SHMEM_NET_REGIONS`),以避免解析问题。 - 配置示例片段: " .c .mem_regions= { /* IVSHMEM 状态表 */ { .phys_start= 0xbfdf0000, .virt_start= 0xbfdf0000, .size= 0x1000, .flags= JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, /* IVSHMEM RW 部分 */ { .phys_start= 0xbfdf1000, .virt_start= 0xbfdf1000, .size= 0x10000, .flags= JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, /* IVSHMEM 根输出 */ { .phys_start= 0xbfdfa000, .virt_start= 0xbfdfa000, .size= 0x2000, .flags= JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, /* IVSHMEM 根输入 */ { .phys_start= 0xbfdfc000, .virt_start= 0xbfdfc000, .size= 0x2000, .flags= jailhouse_mem_read | jailhouse_mem_rootshared, }, ... } " 4。依赖关系和层配置: -在 bblayers.conf 中添加了 `meta-ecall` 和 `meta-freescale`。 - 更新了 `local.conf`: "conf IMAGE_INSTALL:append =" jailhouse jailhouse-ecall python3" DISTRO_FEATURES:append =" jailhouse virtualization" " - 验证过的 `jailhouse_0.12.bb` 使用 NXP fork 进行目标部署。 - 确保 `python3-native`、`pyjailhouse` 和头文件安装在本地系统根 (`${STAGING_DIR_NATIVE}/usr/share/jailhouse/tools/pyjailhouse/`, `${STAGING_DIR_NATIVE}/usr/include/jailhouse/`)。 5。手动测试: -手动测试的 “jailhouse-cell-linux”:" bash export pythonpath=/HOME/automotive/yocto_imx_linux/版本/tmp/work/x86_64-Linux/jailhouse-native/jailhouse-native/jailhouse-native/jailhouse-native/jailhouse-native/jailhouse-native/jailhouse-native/0.12-r0/imx/imx/版本/tmp/work/x86_64-linux/Jailhouse-native/0.12-r0/image/usr/include/jailhouse /home/automotive/yocto_imx_linux/版本e/tmp/work/x86_64-linux/jailhouse-native/jailhouse-native/jailhouse-linux/版本e/tmp/work/x86_64-linux/jailhouse-native/imx_linux/ 版本/tmp/ work/armv8a-参考发行版、系统开发套件。-linux/jailhouse-ecall/1.0-r0/ecall/inmate-linux-demo.c\ -o ecall-inmate-linux-demo.cell " - 同样的错误:`Not a cell configuration`。 - 已验证系统根内容:存在`pyjailhouse`模块、头文件和`jailhouse-cell-linux`。 当前状态 - 尽管: - 错误 `Not a cell configuration` 仍然存在。 - 简化单元配置。 - 将 `jailhouse-native.bb` 与 NXP fork 对齐。 - 确保已安装头文件和 `pyjailhouse`。 -其他配方(“jailhouse-native”、“jailhouse”)成功编译,这表明问题特定于 “jailhouse-ecall.bb” 和单元配置解析。 问题和指导请求 1.错误可能是由于恩智浦 Jailhouse fork (`imx_5.4.47_2.2.0`)和我们的电池配置之间的版本不匹配造成的吗?这个分叉中对 “jailhouse-cell-linux” 有具体要求吗? 2。有没有关于使用 Yocto 5.15 Kirkstone 在 i.MX 8MQ 上创建自定义监狱囚室的应用笔记或用户指南?我们找不到该平台的详细文档。 3.jailhouse-cell-linux "在解析复杂配置(如 IVSHMEM 区域)时是否存在已知问题?我们应该进一步简化配置吗? 4。你能不能提供参考 `jailhouse-ecall.bb`为 i.MX 8MQ 编译 `.cell` 文件的配方或示例? 5。我们可能缺少 i.MX 8MQ 上的 Jailhouse 所需的特定的 U-启动 或内核配置吗? 6。如何解决自定义配方/bb层的监狱依赖关系问题? 附加文件(供参考) -`jailhouse-ecall.bb`:更新了电子呼叫手机的配方。 -`jailhouse-native.bb`: - `ecall-inmate-linux-demo.c`:简化了 IVSHMEM 区域的配置。 - imx8mq-linux-demo.c`:原始配置(供参考)。 -详细的编译日志(如果需要,请确认如何共享)。 我们迫切希望解决这个问题,以便继续部署 E-Call 囚犯单元和测试共享内存通信。如果对我们的方法有任何见解、引用或更正,我们将不胜感激。 感谢您的支持! 致以最崇高的敬意, Sumit 注:-如果需要帮助改进响应或生成详细日志,请告诉我! Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 您好,Bio_TICFSL, 在您的 github 链接中,我们找到了 5.15 Kirkstone 的一些链接: https://github.com/NXP/meta-nxp-harpoon/blob/imx-linux-kirkstone/recipes-extended/jailhouse/jailhouse_%25.bbappend https://github.com/NXP/meta-nxp-harpoon/tree/imx-linux-kirkstone 这对我们的恩智浦i.mx8MQ板有帮助吗? 谢谢、 苏米特 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 让我给大家支几招: 1.Documentation/inter-cell-communication.md 描述了内存的排列方式。 每个单元的 ivshmem 都需要以下区域: - 用于保存状态表的只读区域,一般为一页大小 - 所有对等点都可读写的一个区域 - 每个对等点都有一个输出区域,仅其中一个可读写 2.至 i.MX8MQ /* 00:00.0 的 IVHSMEM 共享内存区域*/ { .phys_start= 0xbfdf0000, .virt_start= 0xbfdf0000, .size= 0x1000, .flags= JAILHOUSE_MEM_READ, ===> 这是状态表。 }, { .phys_start= 0xbfdf1000, .virt_start= 0xbfdf1000, .size= 0x9000, .flags= JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE , ===> 这是 RW 部分。您可以用它来进行交流。或者把这个放大。 }, { .phys_start= 0xbfdfa000, .virt_start= 0xbfdfa000, .size= 0x2000, .flags= JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE , ==> 这是根输入/输出 }, { .phys_start= 0xbfdfc000, .virt_start= 0xbfdfc000, .size= 0x2000, .flags= JAILHOUSE_MEM_READ, ==> 这是根目录输入 }, { .phys_start= 0xbfdfe000, .virt_start= 0xbfdfe000, .size= 0x2000, .flags= JAILHOUSE_MEM_READ, ==> 这是根目录输入信息 这与 imx8mq-inmate-linux.c 中的布局相似。 您可以配置 RW 和 INPUT/OUTPUT 部分,但不要触碰状态部分。 对于 INPUT/OUTPUT,如果定义了多个区域,则每个区域的大小应相同。 此致 Peng 开始标志。 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 你好 MX8MQ 没有监狱,但是可以以 github 或 6.6.36 为基础的 MX8M 系列是同一个系列BSP。 此致 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 你好,Bio_TICFSL 非常感谢你的快速回复。 由于我们使用的是 i.MX NXP 8MQ EVK 板 'i.MX 8MQuad',部件号为 " TDA6637 "。 目前,我已经闪存了 Linux Yocto 5.15 Kirkstone'5.15.71-2.2.0'。 但是在你回复 “ NXP Harpoon Jailhouse integration” 时,我们需要 “i.MX Linux Yocto Project 电路板支持包 6.6.36-2.1.0 Harpoon v3 版本”,。 对于 i.MX 8MQ 板它在 5.15 之前支持 Kirkstone Image,在你的 Harpoon 用户指南中 “UG10170” 和 Github 链接为 “https://github.com/NXP/meta-nxp-harpoon/tree/imx-linux-scarthgap” 在此版本中测试了以下板: 恩智浦 i.MX 8MMini LPDDR4 EVK (imx8mm-lpddr4-evk) 恩智浦 i.MX 8MNano LPDDR4 EVK (imx8mn-lpddr4-evk) 恩智浦 i.MX 8MPlus LPDDR4 EVK (imx8mp-lpddr4-evk) 更不用说了 i.MX 8MQ 了,你能否为我们的板提供具体的监狱解决方案,或者提出其他建造囚犯牢房的可能性? 非常感谢你们的支持。 谢谢, Sumit Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ 你好 你可以通过bbappend的配方遵循与恩智浦鱼叉监狱整合类似的方法。 参见示例:meta-nxp-harpoon/配方-extended/jailhouse/jailhouse-imx_%.bbappend 在 imx-linux-scarthgap · nxp/ Me... 用户指南: https://www.nxp.com/docs/en/user-guide/Harpoon_USERS_GUIDE.pdf 此致 Re: Issue with Jailhouse hypervisor Inmate cell Creation for i.MX8MQ @Peng [email protected] 请就我们面临的自定义监牢创建问题(如上述票单中所述)提出一些解决方案? 感谢您的支持。 请与我们联系,了解任何需要的更多细节。
View full article
MCUXpresso SDK:CI/CD 流水线 概述 在不断发展的嵌入式系统开发领域,支持自动化和高效的工作流程变得越来越重要。本文将探讨如何使用 GitHub Actions、Docker、MCUXpresso SDK 和 Visual Studio Code 为嵌入式项目量身打造一个强大的 CI/CD 管道。通过集成这些工具,开发人员可以自动构建、运行测试,并确保在不同团队和环境中一致地交付固件。 我们首先概述了 CI/CD 在嵌入式工作流程中的优势,包括更快的迭代周期、减少人为错误以及增强协作。接下来,我们深入探讨实际设置:使用 Docker 封装构建环境,利用 GitHub Actions 协调构建和测试,以及在 VS Code 中借助 MCUXpresso SDK 来管理和开发固件项目。真实案例和可重复使用的模板将引导读者创建一个可扩展、可维护且针对基于恩智浦的开发板进行了优化的管道。 无论您是希望实现工作流程现代化的嵌入式工程师,还是希望缩短交付时间的产品经理,本指南都将帮助您在开发生命周期中利用自动化的力量。 前提条件 MCUXpresso for VS Code MCUXpresso SDK 24.12 或更高版本 Git GitHub 帐户 Docker 目录 嵌入式工作流程中的 CI/CD 优势 容器 - Docker 自动化 - GitHub Actions 使用流水线 结束语 1. CI/CD 在嵌入式工作流中的优势 在嵌入式系统开发中实施持续集成和持续部署 (CI/CD) 具有变革性优势,尤其是在使用 MCUXpresso SDK 等复杂工具链和特定硬件限制时。以下是主要优势: 自动构建和测试 CI/CD 管道通过自动编译、链接和闪存流程,消除了手动构建步骤。这可确保每次代码更改都能在一致的构建环境中得到验证,从而降低人为错误的风险,节省宝贵的工程时间。 及早发现问题 通过将自动单元测试、静态分析和在环硬件 (HIL) 测试集成到管道中,开发者可以在错误和回归进入生产硬件前及早发现。这将使固件更加稳定,减少集成过程中的意外情况。 使用 Docker 实现一致的环境 使用 Docker 对构建环境进行容器化,可确保开发机器和 CI 运行程序之间的一致性。开发人员不再需要担心工具链版本不匹配或依赖项缺失的问题,一切都已定义并可重现。 改善协作和代码质量 CI/CD 鼓励频繁提交和拉取请求,这些请求会自动验证。这促进了团队成员间更好的协作,执行编码标准,并确保只有经过测试的代码被合并到主分支中。 更快的迭代和部署 借助自动化管道,固件更新可以快速构建、测试并部署到目标设备或暂存环境中。这加快了开发周期,实现了快速原型开发,尤其适用于敏捷或迭代开发模式。 可追溯性和可审计性 CI/CD 系统会记录每一次构建、测试结果和部署,从而提供清晰的更改历史记录。这对于在汽车或医疗设备等受监管行业中进行调试、确保合规性和维持高质量标准至关重要。 跨项目的可扩展性 管道一旦建立,就可以在多个嵌入式项目中重复使用或调整。这种可扩展性减少了新板或应用程序的设置时间,并促进了团队之间的最佳实践。 2. 容器 - Docker 什么是容器? 容器是轻量级、可移植的软件单元,它将代码与其所有依赖项、库和配置文件组成一个代码包,因此可以在不同的计算环境中可靠地运行。 将容器视为一个独立的盒子,其中包含应用程序运行所需的一切。有几个平台可以用来容器化工作区。本指南将重点介绍 Docker。 Docker是什么? Docker 是一个开源平台,它使开发人员能够在容器中构建、打包和运行应用程序。它简化了创建隔离环境的过程,该环境包括应用程序在不同系统上持续运行所需的代码、库、工具和设置等所有内容。 Docker 的核心是确保开发、测试和部署环境相同,无论您是在本地还是在云中工作,都能帮助解决“它在我的机器上运行”的问题。 使用 Docker 对 MCUXpresso SDK 和构建系统进行容器化的步骤 使用 Docker 对 MCUXpresso SDK 和构建系统进行容器化需要以下组件。 Dockerfile - 这是一个文本文件,其中定义了构建 Docker 镜像的步骤,例如安装软件包、复制文件和设置环境变量。 Docker 镜像 - 这是容器环境的快照。它由 Dockerfile 构建,用于创建容器。 Docker 容器 - Docker 镜像的运行实例。它具有隔离性、轻便性和便携性。 编写 dockerfile 1. 打开文本编辑器(例如 VS Code) 2. 创建一个新的文本文件。将其命名为 dockerfile。将此文件保存为 Docker 文件类型。 3. 创建用于容器化 MCUXpresso SDK 和构建系统的 dockerfile 时,必须指定所需的所有元器件。我们在下面提供了一个模板,你可以复制并粘贴到 dockerfile 中。 该模板的用途: - 使用 Ubuntu 22.04 作为容器的基础。这为构建和运行嵌入式工具提供了稳定的 Linux 环境。 - 防止安装期间出现交互式提示 - 安装使用 MCUXpresso SDK 所需的所有软件包(部分为可选软件包) 安装 ARM GNU 13.2 工具链 - 设置一个工作区,以便使用 West 克隆 MCUXpresso SDK - 配置工具链路径环境变量 # Use Ubuntu 22.04 as the base image FROM ubuntu:22.04 # Set environment variables for non-interactive installations ENV DEBIAN_FRONTEND=noninteractive # Install necessary packages /some optional RUN apt update && apt install -y \ curl \ wget \ ca-certificates \ xz-utils \ libncurses5 \ cmake \ ninja-build \ git \ python3 \ python3-pip \ build-essential \ device-tree-compiler \ unzip \ && rm -rf /var/lib/apt/lists/* # =========================================================================================================== # Notes on flags used: # (-LO) follows http redirects and saves the downloaded file with same name as in URL # (-k) ignores SSL certificate verification. This is needed when system security prevents certain actions # Contact IT to whitelist arm servers if needed. # ============================================================================================================ RUN curl -LO -k https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz && \ tar xf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz && \ rm arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz # Install additional Python packages RUN pip3 install --upgrade west imgtool requests # Set the workspace directory WORKDIR /workspace # Clone the mcuxsdk-manifests repository RUN git clone https://github.com/nxp-mcuxpresso/mcuxsdk-manifests.git # Set the MCUXpresso SDK path environment variable ENV MCUX_SDK_PATH=/workspace/mcuxsdk-manifests # Initialize and update the west workspace RUN cd $MCUX_SDK_PATH && \ west init -l . && \ west update # ARMGCC ENV variable ENV ARMGCC_DIR=/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi # Default command: Start a shell CMD ["/bin/bash"] 构建容器映像 在继续之前,建议设置一个 GitHub 存储库并配置凭据,以便在后续步骤中使用。 1. 创建一个新的存储库。暂时留空。稍后,它将包含以下项目: .github/workflows/docker-build.yml my_app dockerfile README.md 2. 生成个人访问令牌(PAT)。这将允许您访问 GitHub API。 - 点击“我的”图标 - 选择设置 > 开发者设置 > 个人访问令牌 > 令牌(经典版) - 选择“生成新令牌(经典)” - 范围可以根据您的需求自定义。请在本指南中使用以下范围:delete:packages、repo、write:packages - 点击“生成令牌”。生成令牌后,请务必复制并保存该令牌。 - 然后,将个人访问令牌 (PAT) 存储为 GitHub 密钥。GitHub 密钥将用于工作流文件中的身份验证。这样做是为了在不修改工作流文件的情况下提高可重用性、安全性和轮换性。 - 导航到已创建的存储库,然后单击“设置”。 - 选择密钥和变量,然后单击操作。 - 我们将在此处添加 2 个密钥。一个是用户名,另一个是个人访问令牌。点击“新建存储库密钥”。 用户名的密钥 - 这可以个性化定制。然而,在本指南稍后将介绍的工作流文件中,该变量设置为 GH_USERNAME。将名称设置为 GH_USERNAME。在 “密钥” 字段中输入您的 GitHub 用户名。 令牌的密钥 - 工作流已将变量设置为 GH_PAT。将名称设置为 GH_PAT。在 “密钥” 字段中粘贴您的个人访问令牌。 3. 现在我们可以通过命令行构建容器镜像。 - 克隆存储库的本地副本。打开该位置的命令行界面。 - 将 dockerfile 保存到克隆存储库的根目录下。 登录到 GitHub 容器注册表。运行: echo | docker login ghcr.io -u --password-stdin 输出: -构建容器镜像。这是本指南中最长的步骤,但只需构建一次镜像,就能将其推送到 ghcr 以供使用。运行: docker build -t . 输出: - 要验证您的镜像详细信息,请运行: docker images - 标记 Docker 镜像。此命令不会创建新镜像;它只为现有镜像提供新名称和标签。当你准备将镜像推送到像 GHCR 这样的注册表时尤其有用。Docker 要求在推送镜像前必须标记注册表 URL 和存储库名称。运行: docker tag - 将镜像推送到容器注册表。运行: docker push **注意:由于服务器错误,输出可能显示为失败。如果出现这种情况,只需再次运行该命令即可。 再次运行该命令: 恭喜!MCUXpresso SDK 和构建系统现已集成在容器镜像中,可以用于构建项目。接下来,我们将配置 GitHub 以实现自动化。 3. 自动化 - GitHub Actions 为什么要使用 GitHub Actions? GitHub Actions 是 GitHub 内置的自动化工具,允许你定义工作流,根据推送或拉取请求等事件来构建、测试和部署代码。它使用 YAML 文件来配置这些工作流,从而可以直接在存储库中轻松设置 CI/CD 管道。 1. 在本地克隆您的存储库。然后导航到其根目录。 - 在项目根目录内创建 .github/workflows 目录。 - 导航至 VS 代码并创建一个新文件。将其命名为:docker-build.yml - 我们在下面提供了一个模板,您可以将其复制并粘贴到 docker-build.ymll 中。 该模板的用途: 在推送或 PR 时运行 使用包含 MCUXpresso SDK 工具的容器 检查您的存储库 将您的应用复制到 West 工作区 使用 West 为 FRDM-MCXA153 构建它 name: Build MCUXpresso Project on: push: # branches: [ main ] pull_request: jobs: build: runs-on: ubuntu-latest container: image: ghcr.io/nxp-jose/mcuxpresso-sdk:latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Copy my_app into west workspace run: | cp -r $GITHUB_WORKSPACE/my_app /workspace/mcuxsdk-manifests/my_app - name: Build project using west working-directory: /workspace/mcuxsdk-manifests run: | echo "Building project..." west build -b frdmmcxa153 my_app 4. 使用管道 完成您的工作区设置 该过程的最后一步是创建一个项目以用于我们的管道。 1. 打开适用于 VS Code 的 MCUXpresso 2. 点击“从存储库导入示例” 3. 从 MCUXpresso SDK 24.12 或更高版本导入一个项目,作为独立示例。将导入位置设置为克隆存储库的根目录。 4. 将更改暂存、提交并推送到您的存储库。现在,您的存储库中应该包含: *注意:如果在本地构建项目,您将看到 .vscode 目录。将此目录推送到存储库是完全可选的。 5. 推送完成后,在 GitHub 上启用工作流。启用工作流后。连续的推送或拉取请求将触发自动项目构建。 6. 检查构建细节。 - 导航至 GitHub 上的“操作”选项卡 - “操作”选项卡将显示工作流已运行的所有实例。 - 点击“构建”查看详细信息。 - 显示的详细信息是构建过程中执行的各个步骤。点击步骤以查看具体详情。 5. 结论 本指南中概述的 CI/CD 管道为使用 Docker、MCUXpresso SDK 和 GitHub Actions 自动构建提供了一个简单而有效的起点。虽然该示例以基本工作流为重点,但可对其进行广泛自定义,以满足项目的特定需求,例如集成自动测试、添加质量检查或使用自定义 MCUXpresso SDK 清单。利用这些工具,团队可以简化开发流程,确保一致性,并以最少的人工干预来扩展流程。 MCUXpresso SDK
View full article
AMF-DES-T2360 - EMI Made Simple: It's All About the Space! Signal integrity, EMI, RFI...They are all the result of how well you manage the Electromagnetic fields in your designs. EM fields live in spaces, not conductors. The material presented focuses on the basic physics of electromagnetic energy, presented in an entertaining and easy-to-understand format with plenty of diagrams. Attendees will discover how understanding the behavior of EM fields can help them to design PCBs that will be more robust and have better EMC performance. This is not rocket science, but an easy-to-understand application of PCB geometry. Signal integrity, EMI, RFI...They are all the result of how well you manage the Electromagnetic fields in your designs. EM fields live in spaces, not conductors. The material presented focuses on the basic physics of electromagnetic energy, presented in an entertaining and easy-to-understand format with plenty of diagrams. Attendees will discover how understanding the behavior of EM fields can help them to design PCBs that will be more robust and have better EMC performance. This is not rocket science, but an easy-to-understand application of PCB geometry.
View full article
适用于 Yocto 1.6 的 ads7846-driver.patch <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 与 yocto 1.6(Daisy,Linux 3.10.17)一起分发的 ads7846 驱动程序不支持设备树配置挂钩。 附件是 ads7846 触摸屏驱动程序的补丁,用于支持设备树。驱动程序中还添加了钩子以忽略电压调节器配置的要求。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 与 yocto 1.6(Daisy,Linux 3.10.17)一起分发的 ads7846 驱动程序不支持设备树配置挂钩。 附件是 ads7846 触摸屏驱动程序的补丁,用于支持设备树。驱动程序中还添加了钩子以忽略电压调节器配置的要求。
View full article
P2020-MSC8156AMCRD: P2020-MSC8156 AdvancedMC™ Reference Design Block Diagram Features Block Diagram Board Design Resources Block Diagram The NXP® P2020-MSC8156 AdvancedMC™ (AMC) reference design is a multi-standard baseband development platform for the next generation of wireless standards such as LTE, WiMAX, WCDMA and TD-SCDMA. This AMC platform integrates the QorIQ® P2020 processor with its MSC8156 DSP A P2020 and MSC8156 mezzanine card provide the system building blocks to enable rapid prototyping systems Ideal for developing solutions for the next generation of wireless standards Features Key P2020-MSC8156 AMC Reference Design Features: Single width, full height AMC form factor QorIQ ®  P2020 processor Dual e500v2 cores at 1.2 GHz 1 GB of DDR2 (SOCDIMM) TCP/IP acceleration eSDHC USB MSC8156 DSP Six SC3850 cores, built on StarCore ®  technology, at 1 GHz each Multi Accelerator Platform Engine for Baseband (MAPLE-B) Programmable Turbo and Viterbi decoder Two banks of 512 MB 64-bit DDR3-800 Block Diagram Board Design Resources Legacy Designs
View full article
车辆动力学:通过 IGBT 栅极驱动集成驱动器的进步简化高压/大电流逆变器 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本课程将对高压 (HV) 电力进行深入的系统分析,我们将回顾 MCU、GDIC 和 IGBT 如何单独运行以及作为一个系统运行。我们将讨论 EV 和 HEV 电力系统和组件,以实现高效、安全的 HV 电机驱动。使用 NXP 新型 HV IGBT GDIC、GD3100 和 Fuji GEN 7 IGBT 模块的系统框图和示波器屏幕截图,我们将考虑如何实现更小、更高效和更低成本的 HV 逆变器设计。我们将审查 SPI 接口可编程性,该可编程性使任何 IGBT 都能进行调整以实现最高效率、热设计考虑、布局考虑、功率预算评估、上电排序、管理短路故障、温度监控和高级功能达到系统 ASIL D 级和 ISO26262 认证。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本课程将对高压 (HV) 电力进行深入的系统分析,我们将回顾 MCU、GDIC 和 IGBT 如何单独运行以及作为一个系统运行。我们将讨论 EV 和 HEV 电力系统和组件,以实现高效、安全的 HV 电机驱动。使用 NXP 新型 HV IGBT GDIC、GD3100 和 Fuji GEN 7 IGBT 模块的系统框图和示波器屏幕截图,我们将考虑如何实现更小、更高效和更低成本的 HV 逆变器设计。我们将审查 SPI 接口可编程性,该可编程性使任何 IGBT 都能进行调整以实现最高效率、热设计考虑、布局考虑、功率预算评估、上电排序、管理短路故障、温度监控和高级功能达到系统 ASIL D 级和 ISO26262 认证。
View full article
FIR滤波器套件 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本内容最初由 Steve Sabram 贡献给 lpcware.com 该示例项目使用 LPC4350 演示板和 ARM CMSIS DSP 库实现了声学范围、有限无限响应 (FIR) 滤波器。科幻“电击枪”的声音资源从演示板的耳机插孔中播放出来。该声音样本非常适合演示,因为它在声学带中具有许多低频、中频和高频成分。您可以通过触摸演示板上的电容式触摸按钮来播放声音资源,如演示板 LCD 上显示的菜单所示。最好使用耳机或耳塞聆听声音。四个按钮分别播放相同的声音资源 不同之处: 1) Raw – 未处理的声音按照其格式播放(采样率为 44.1 kHz、16 位样本和单声道)。 2) 低通——通过低通巴特沃斯滤波器滤波,截止频率为 5 kHz,类似于普通模拟电话的带宽。播放时,请注意高音部分被移除,类似 通过电话听到的声音。 3) 高通——通过高通巴特沃斯滤波器滤波,低频截止频率为 8 kHz。请注意,由于仅播放高音谐波成分,因此音量较低。 4) 后向掩码——声音资源样本以相反的顺序播放。“Zap!”现在变成了“Zoup!”数字滤波器是使用广受欢迎的公共领域工具 WinFilter ( http://www.winfilter.20m.com/ ) 设计的。 伴随这个例子。随着 NXP 推出这款免费 DSP 设计工具,我希望它的作者能够扩展其功能。 用户内容
View full article
LPC177x_8x u-boot端口 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 该项目解释了如何使用 LPC177x_8x 设备为平台构建和部署 u-boot。要构建 u-boot,您需要运行 Linux 操作系统的系统、适用于 Linux 操作系统的最新 CodeSourcery GNU 工具、u-boot 源代码以及适用于 LPC1788 的 u-boot 补丁。 已实现的功能 -------------------------------------------------------------------------------- 支持带有 32 位 DRAM(32MB)的 EA1788 主板 支持EA1788板的NAND FLASH 支持LPC177x_8x内部FLASH 以太网支持 有限的 MPU 支持 u-boot 已知问题 -------------------------------------------------------------------------------- 问题:“重置”命令导致电路板崩溃 解决方法:改用“cmreset”命令 问题:“boot”命令导致主板崩溃 解决方法:使用环境变量和 go 命令编写脚本 问题:bootvx 命令导致主板崩溃 解决方法:无,但没有理由使用此命令 未实现的功能 -------------------------------------------------------------------------------- FLASH“保护”命令和功能未实现(易于实现) 未实现中断/NVIC 支持(易于实现) 可能的改进 -------------------------------------------------------------------------------- Systick 可以代替 LPC1788 匹配定时器 重定位代码已被“绕过”,并且未正确实施 针对设备特定 IRQ 的宏文件,即需要包含弱链接 在启动文件中(特定于架构的设备覆盖) 有一个基本的 MPU 驱动程序,似乎可以工作,但可以改进 以太网驱动程序和 PHY 设置是“特定于板的”,但可以移动 到驱动程序区域,可以使用通用 PHY 支持 u-boot 启动操作概述 -------------------------------------------------------------------------------- 以下是 u-boot 如何在 LPC1788 上启动的概述。 - LPC1788 启动 ROM 将控制权转移到内部 FLASH 中的 u-boot 代码 每个 CM3 启动过程的地址 0x0 - u-boot 代码首先设置 MPU - 引脚复用、时钟和 DRAM 均已初始化 - 代码和数据从 FLASH 迁移到 DRAM - DRAM 中的 BSS 段被清除 - 控制权转移到 DRAM 中的 u-boot 代码 - 调用 u-boot board_init_f() 进行初始 u-boot 设置 - board_init_r() 用于稍后的 u-boot 设置 - u-boot 在 DRAM 之外正常运行 移植文件的位置 -------------------------------------------------------------------------------- arch/arm/cpu/cortex-m3 - Cortex M3 特定文件(mpu、启动等) arch/arm/cpu/cortex-m3/lpc1788 - LPC1788 特定文件(计时器、串行等) arch/arm/include/asm/arch-cortex-m3 - Cortex M3 头文件 arch/arm/include/asm/arch-lpc17xx - LPC177x_8x 特定的头文件 board/nxp - 使用 NXP 设备的电路板专用区域 board/nxp/ea1788 - EA1788 板特定文件(设置、nand 等) include/configs/ea1788.h - EA1788 板特定配置文件
View full article
FTF-IND-F1348 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本课程基于 FRDM-K22F 开发板和多功能新型 Arduino 兼容 Shield,讨论如何实现:使用 Kinetis K2 和 LS Research 预认证的 Wi-Fi(TiWi-CW)和 BLE(SaBLE-x)无线模块的物联网应用。使用 TiWiConnect LIFT 软件协议流式传输到云端(大大简化了软件开发)。使用与 Freescale Freedom 板连接的第三方 Pmod 兼容(I2C 和 SPI)板进行传感器和 I/O 扩展。使用加速软件开发和预认证无线模块,加快您的物联网产品的上市时间。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本课程基于 FRDM-K22F 开发板和多功能新型 Arduino 兼容 Shield,讨论如何实现:使用 Kinetis K2 和 LS Research 预认证的 Wi-Fi(TiWi-CW)和 BLE(SaBLE-x)无线模块的物联网应用。使用 TiWiConnect LIFT 软件协议流式传输到云端(大大简化了软件开发)。使用与 Freescale Freedom 板连接的第三方 Pmod 兼容(I2C 和 SPI)板进行传感器和 I/O 扩展。使用加速软件开发和预认证无线模块,加快您的物联网产品的上市时间。
View full article
S32Kの例 S32K1xx S32K144 例:S32K144 CMPラウンド・ロビンS32DS2.0  例:S32K144バックドア・アクセス・キー検証S32DS1.3  例:S32K144 FlexCAN0 RXFIFO DMA非SDK S32DS13  例:S32K144 PDB ADCトリガDMA ISR S32DS  例:S32K144 Flash RWシンプルS32DS  例:S32K144 DMAメモリ・コピー・テストS32DS  例:S32K144 EEEPROMの使用方法 例:S32K144 EEEPROMの使用方法 - 非SDK  例:S32K144 RTC VLPS  例:S32K144 WDOG RCM割り込み  例:S32K144 SRAM ECC注入  例 S32K144 RAM 保持 S32DS.R1 例:S32K144 I2CマスタMPL3115A2 S32DSR1_v3  例:S32K144 FlexCAN RXFIFO DMA S32DS.ARM.2018.R1  例:S32K144_printf_implementation - S32DS_1.0  例:FreeRTOS環境でのS32k144 UART printf/scanf - S32DS 例:S32K144 LPITタイマを使用した構成可能期間に対するSDK関数の呼び出し  例:S32K144 .noinitセクションの使用方法 例:S32K144 PDB ADC DMA S32DS.ARM.2018.R1   例:S32K144 RAMセルフテスト・シンプルS32DS 2018.R1  例:S32K144ポジショニング独立コード 例:S32K144 FlexCAN疑似ネットワーキングSTOPモードのテストS32DS.ARM.2.2  例:S32K144 LPIT DMA LPSPI  例:S32K144 FlexCAN TX/RX/エラーISRテストS32DS2.2  例:S32K144 FlexIOアイドル検出S32DS2.2 S32K146 S32K146 Set_whole_FlexRAM-as_RAM S32DS.ARM.2.2の例 S32K148 例:S32K148 PDB0-PDB1リングS32DS3.4 RTM4.0.3  例:S32K148 PDB0-PDB1 ring DMA S32DS3.4 RTM4.0.3  例:S32K148 GPIO割り込み  S32K116 例:S32K116 WDOG高速テスト  例:S32K116 LPUART LINスレーブTXRX ISR S32DS.ARM.2.2  例 S32K116 FlexCAN PN STOP S32DS.ARM.2.2 例:S32K116 FlexCAN VLPRテストS32DS.ARM.2.2 S32K118 例 S32K118-SRAM-keep_data_over_SW_reset v0_1 S32DS.ARM.2.2 S32K3XXシリーズ S32K344 例:S32K344 PIT BTCU ADC DMA DS3.4 RTD100   例:S32K344 FlexCAN_Ip TX/RX/EnhanceRXFIFOテストS32DS3.4 RTD200     例Siul2_Port_Ip_Example_S32K344_ITCM_DTCM S32DS3.4RTD300   例:S32K358 FlexCAN TXRX ISR S32DS35 RTD400/500     
View full article
LX2160 定制板上模块的掉电 在我们基于 LX2160 的定制主板中,没有 SPDT 开关可用于通过软件控制电源轨。 不过,我们的目标是降低 USB、WiFi、BT、PoE 和蜂窝模块的功耗。 我方提出了当前的意见和做法: 1.WiFi、BT 和蜂窝模块通过 PCIe 连接。 我们观察到,这些功能可以通过 SerDes 配置禁用。 通过将 SerDes 协议配置为 S2 = 9,所有相应的通道都被配置为 SGMII,而不是 PCIe,从而有效禁用 PCIe 连接的模块。 2.USB 模块似乎没有类似的基于 SerDes 的禁用选项。 对于 USB,我们目前正在尝试使用以下方法基于 GPIO 禁用: USB1_MUX_EN USB2_MUX_EN RCW 配置已经过验证,相应引脚已确认配置为 GPIO。 然而,即使驱动这些 GPIO 进行禁用操作,也无法观察到预期的功耗降低。 3.PoE 模块(AQR113c 用于以太网) 请就可能需要修改的其他文件或配置提出意见/建议,以便完全禁用和降低功耗。 Re: Power down of modules on LX2160 custom board 闲置时是否可以对 USB、WiFi、BT、PoE 和蜂窝模块掉电?还是产品的配置不同,这些接口根本不会被使用?   请注意,即使接口未使用,仍需为其电源轨供电。LX2160A 不支持从其轨道上拔下电源。 如果断开接口设备的电源,则需要确保 LX2160A I/O 不会发生泄漏   你能做什么? 1) 内核消耗最大功率。SDK 支持在不使用 CPU 时降低其频率,以节省功耗。 Refer 电源管理单元 - [Layerscape Software Development Kit User Guide | NXP 半导体|https://docs.nxp.com/bundle/GUID-487B2E69-BB19-42CB-AC38-7EF18C0FE3AE/page/GUID-2E8E375E-7DCD-4671-B0CF-D4713D8BB9EB.html] 2) 未使用的 IP 可通过 DEVDISR 进行时钟门控。不过,一旦禁用,就无法再启用。 3) 如果 SerDes 通道未使用,可将其断电。参见第 26.10.2 节LX2160A 参考手册中未使用的车道 4) 当通过 RCW 设置选择 SerDes 协议时,它还会根据协议要求配置与该协议相关的寄存器。因此,重新配置车道并不是正确的方法。 5) 从原理图片段来看,您已将 SerDes#2 配置为 SRDS_PRTCL_S2 =3,但只使用了单通道。 你可以使用 SRDS_PRTCL_S2=11 并按照 (4) 对未使用的通道进行掉电。类似的机制也可应用于其他 SerDes。 6) 如果 PCIe 未使用 Gen3,则 PLLF 可以断电。同样,未使用的 PLL 也可以断电 谢谢! Re: Power down of modules on LX2160 custom board 如何测量耗电量? 请注意,对于 SerDes 通道,您需要检查为 SerDes I/O 供电的 0.9V 和 1.8V 电源通道。 对于 DFS,请检查 VDD(0.8V)电源的功耗。 既然这是你的定制电路板,你有电源轨的功率测量电路吗? 如果你在自定义主板的输入上进行衡量,我不确定你会看到多大的差异。这还取决于测量的最小计数。 为进行检查,可在较低配置下运行核心/平台。查看设计检查表,其中有 VDD 轨功耗图表。 Re: Power down of modules on LX2160 custom board 你好, 感谢您的及时回复。我附上了我对您分享的有关功率优化建议的观察和测试结果。请查看它们,并与我们联系是否建议进行其他检查或配置。 要点 说明 CPU 热插拔/频率缩放观测 我们使用以下方法测试了 CPU 热插拔、CPU 频率缩放和不同的 CPU 模式: lscpu | grep line 观察结果: On-line CPU(s): 9 Off-line CPU(s): 0-8,10-15 不过,在这些情况下都没有观察到明显的功耗降低。 通过 DEVDISR 进行未使用的 IP 时钟门控 我们知道未使用的 IP 可以通过 devDisr 进行时钟门控。但是,由于禁用这些区块如果不重置就不可逆转,我们认为这种方法风险很高,因此不建议在我们当前的测试中使用这种方法。 未使用的 SerDes 通道掉电 寄存器写入成功。 不过,迄今为止还没有观察到明显的功耗降低。 SerDes 协议配置优化 PLL 掉电未使用的 Gen3 PCIe 应用配置: SRDS_REFCLKF_DIS_S2 = 1 SRDS_PRTCL_S2 = 11 SRDS_INTRA_REF_CLK_S2 = 0 SRDS_PLL_PD_PLL3 = 1 Re: Power down of modules on LX2160 custom board 你好, 我们正在使用这些连接到 BMC 的电流传感器来测量功耗,其中 VCC_12V 感应定制板的输入,而 VCC_0V8 正在感应恩智浦 (LX2160A) 芯片组的输入。 同样 在闪存时(这些以 VCC_12V 即总功耗测量)-使用 CodeWarrior(可能会下降约 10W)和 -使用 (echo mem > /sys/power /state & echo freeze > /state sys/power/state)(可能会下降约 6W)(但在此之下,由于不存在用户交互,因此不建议将其用于我们的测试), Re: Power down of modules on LX2160 custom board 与内部团队讨论,我们我们已经回答了 您的与配置相关的问题。 在 12V 输入电压下,10 瓦的功耗在我们看来是相当合理的。 我们对于 LX2160A 而言,这是很合理的。 请 请分享您的目标,您的 示意图和配置、日志和应用。我们将检查还能实现哪些功能。
View full article
S32K376 整车控制器VCU – 如何在 S32DS 中实现基于 SPI 的 DIO (MSDI)? 我正在开发 S32K376 整车控制器VCU POC 板,其中 MSDI 设备通过 SPI 连接。 从原理图来看,使用了以下 MSDI 相关信号: SPI 信号:MSDI_CS、MSDI_SCLK、MSDI_MOSI、MSDI_MISO 控制/状态信号:msdi_intb, msdi_wakeb 模拟/多路复用信号:MSDI_AMUX 用于数字输入和输出的MSDI SGx / SPx 引脚 我想使用带有 S32 配置工具 (S32CT) 的 MBDT(Simulink)来实现这一目标,但我不清楚正确的软件方法。 具体来说,我需要以下方面的指导: 如何在 S32CT 中配置和使用 SPI 引脚以使其与外部 MSDI 设备配合使用 MSDI_INTB 和 MSDI_WAKEB 应如何配置(DIO 与 ICU/EXTI)并在 MBDT 中处理 如何在软件中访问MSDI 数字输入/输出(SGx / SPx) 是否有任何 MCAL 支持模式? 还是应该通过自定义 SPI 命令 + 应用级抽象来实现? MSDI_AMUX 通常应如何处理(ADC 路径/预期用途) 我没有有效的参考资料或示例来展示在 S32K376/96 整车控制器VCU & 电池管理系统 示例 POC 项目中使用 MBDT + S32CT 的流程。 请提出建议的实施方法(分步实施或分块实施) Re: S32K376 VCU – How to implement SPI-based DIO (MSDI) in S32DS? 你好@mariuslucianand 能否请您对此发表评论? 先行致谢。 BR, Petr Re: S32K376 VCU – How to implement SPI-based DIO (MSDI) in S32DS? 大家好 由于没有人回复,我尝试了很多方法,但在使用 S32K396 在同一 VCU POC 板上工作时发现,外部 MSDI 设备通过 LPSPI3 连接。但是,SPI 初始化在运行时会出现总线故障。 观察到的问题 在执行 Lpspi_Ip_Init() 时,代码在以下位置出现故障: Base->CFGR1 = PhyUnitConfigPtr->Cfgr1; 调试器观察: 实例 = 3 基地址 = 0x40364000 寄存器内容如下verid = 53248 param = 53249 cr = 53249 sr = 53249 紧随其后:BusFault: imprecise data access error HardFault escalation:在访问 LPSPI3 的寄存器时发生。 请提供以下帮助: 具体是哪些配置/设置(参见附件)不正确?或 要正确访问 MSDI I/O 引脚数据,还需要哪些额外设置/MBDT 块集? Re: S32K376 VCU – How to implement SPI-based DIO (MSDI) in S32DS? 你好 请查看以下文章,获取有关配置 SPI 外设以从 MC33CD1030 IC 获取数据的帮助: 如何:使用恩智浦 MBDT 在 S32K396BMS-EVB 上安装 MSDI MC33CD1030 请注意,本文主要介绍从 MC33CD1030 IC 发送和接收数据的 SPI 配置。有关 CD1030 的更多信息,请查阅其数据表。 顺祝商祺! 索林-班奇拉
View full article
こんにちは、NPU!i.MX 9でTFLiteモデルを実行 以下は、Pytorch と Tensorflow でシンプルなモデルをトレーニングし、i.MX93 Ethos-65 ニューラル プロセッシング ユニット (NPU) を使用してアプリケーションにデプロイするためのガイドです。 このガイドに従うと、次のことが達成されます。 MNISTデータセットでシンプルなCNNをトレーニングする モデルを tflite に変換し、量子化して i.MX93 NPU (Ethos-65) 用にコンパイルします。 モデルによって数字を描画および識別できる簡単なアプリケーションを実行します。 前提条件 このガイドに従うには次のものが必要です: Yocto イメージ、C++ の例では GTKMM3 のサポートが必要ですが、Python の例では事前にビルドされたイメージを使用できます。 i.MX93ボード Pythonの例を実行する アプリケーションの実装は Python と C++ の両方で提供されます。Pythonアプリケーションを使用する場合は、代わりに事前に構築された完全なイメージを使用できます。Python スクリプトをターゲットにコピーして、次のように実行するだけです。 # Running quantized example on the CPU ./run.py -m cnn_tf_quant.tflite # Running example on the Ethos NPU ./run.py -m cnn_tf_quant_vela.tflite -d /usr/lib/liblitert_ethosu_delegate.so 添付ファイルには事前に構築されたモデルが提供されていますが、モデルのトレーニングと生成に使用される手順とスクリプトも含まれています (以下を参照)。 GTKMM3 サポート付きのイメージのビルディング (C++ の例のみ) デモンストレーションに使用される GUI アプリケーションはGTKMM3 ( GTKライブラリの C++ ラッパー) で記述されているため、GTKMM3 をサポートするイメージが必要ですが、幸いなことに、これを Yocto イメージに簡単に統合できるレシピが既にあります。 イメージをビルドするには、 Yocto ユーザー ガイドの指示に従うだけです。この記事の執筆時点では最新の BSP は 6.12.49_2.2.0 なので、これを使用します。 ホストとインストールされたリポジトリですべての要件を設定したら、次のようにビルド環境を設定できます。 リポジトリ init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-walnascar -m imx-6.12.49-2.2.0.xml リポジトリ同期 ターゲットに応じてビルド ディレクトリを設定できるようになりました。例として、X11 をサポートする Wayland グラフィックスとiMX93 Freedomボードを使用します。 ディストリビューション=fsl-imx-xwayland マシン=imx93-11x11-lpddr4x-frdm ソース imx-setup-release.sh -b 93-frdm-xwayland ボードに合った MACHINE 構成を選択するだけです。 これでビルドを開始する準備がほぼ整いました。まだイメージに GTKMM3 サポートを追加する必要があります。conf/local.conf の下にある local.conf ファイルを変更し、次のコードを追加するだけです。 IMAGE_INSTALL:append = "gtkmm3" ビルド時に問題が発生しないように、gtkmm3 の前にスペースがあることを確認してください。ビルドはリソースを大量に消費するため、ビルド中にメモリ不足の問題が発生する可能性があります。一度にビルドを試みる同時レシピの数を制限するために、以下も追加することをお勧めします。 BB_NUMBER_THREADS="8" PARALLEL_MAKE="-j8" BB_PRESSURE_MAX_CPU ?= "50000" BB_PRESSURE_MAX_IO ?= "100000" BB_PRESSURE_MAX_MEMORY ?= "25000" その後、local.conf は次のようになります。 注意:ビルドを完了するには 500 GB 以上必要なので、マシンに十分なストレージ容量があることを確認してください。 これでビルドを開始できます。GTKMM アプリケーションをソースからビルドする場合は、利用可能な SDK が必要であり、次のように作成します。 bitbake imx-image-full -c populate_sdk 画像を作成するには、次のようにするだけです。 bitbake imx-image-full すべての Tensorflow Lite ライブラリとさまざまな例が含まれているため、完全なイメージが必要です。 ビルドが完了したら、ツールチェーンをインストールし、イメージをボードにフラッシュできます。 ツールチェーンをインストールするには: ./tmp/deploy/sdk/fsl-imx-xwayland-glibc-x86_64 -imx-image-full-armv8a-imx93-11x11-lpddr4x-frdm-toolchain-6.12-walnascar.sh その後、ツールチェーンを使用するたびに次の操作を実行します。 ソース /opt/fsl-imx-xwayland/6.12-walnascar-full-gtkmm3/environment-setup-armv8a-poky-linux イメージを SD カードにフラッシュするには: zstdcat imx-image-full-imx93-11x11-lpddr4x-frdm.rootfs.wic.zst | sudo dd of=/dev/mmcblk0 bs=1M conv=fsync これで、アプリケーションを構築し、いくつかのモデルをトレーニングしてデプロイする準備が整いました。 GTKMM3 ビルディング アプリケーション (C++) アプリケーションのソースはここにあります。また、ビルド済みのバイナリも提供されており、ここに添付されています。 アプリケーションには、マウスまたはタッチ ディスプレイを使用して数字を簡単に描画できる描画領域と、描画領域をクリアするためのボタンと、モデルの実行をトリガーして数字を予測するためのボタンの 2 つのボタンが含まれています。 最初からビルドするには、CMake と、GTKMM3 をサポートするツールチェーン (上記参照) が必要です。プロジェクトをビルドするには、次の手順に従ってください。 sudo apt install cmake git クローンhttps://github.com/ManRod2982/drawing_window_imx cd drawing_window_imx/drawing_window_cpp/ ソース /opt/fsl-imx-xwayland/6.12-walnascar-full-gtkmm3/environment-setup-armv8a-poky-linux cmake -B ビルド -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake cmake --build ビルド この後、ビルド ディレクトリの下に window というバイナリが作成され、それをターゲットの SD カードに簡単にコピーできるようになります。 Linux を使用している場合はファイルシステムがマウントされるので、バイナリをルート ディレクトリにコピーするだけです。 sudo cp build/window /media/user/root/root/ ボードへの接続がすでに確立されている場合も SCP を使用できます。 scp ビルド/ウィンドウ [email protected]:/root そして、この後、ターゲット上でアプリケーションを次のように起動できます。 ./window -m model_path [オプション] -d delegate_path [オプション] -v アプリケーションでは次の 3 つのパラメータが受け入れられます。 モデルへのパス: -m または --model_path [オプション] デリゲートへのパス(存在する場合): -d または --delegate_path。指定されていない場合は、 XNN デリゲートを使用して CPU 上でモデルの実行が試行されます。 [オプション] 詳細フラグ。存在する場合、モデルはより多くの情報を出力します。 ここで、実行するモデルが必要です。 シンプルなCNNモデルのトレーニング このリリースの機械学習ユーザーガイドを見てみましょう。各デバイスで利用可能なコンピューティング エンジンに関するさまざまなフレームワークのサポートは次のとおりです。 Tensorflow Lite とLiteRT (Tensorflow Lite の最新リリースであり、今後リリースされる唯一のもの) は、i.MX9 ファミリのほとんどのコンピューティング エンジンで広くサポートされているフレームワークです。このガイドでは、例として C++ を使用し、LiteRT の現在のリリースでは Python のみがサポートされているため、Tensorflow Lite を使用しますが、インターフェースとプロセスはほぼ同じです。 環境の設定 サンプル リポジトリには、モデルをトレーニングして tflite 形式に変換するために使用されるさまざまな Python スクリプトが含まれています。次の手順を実行するには、python3 のインストールが必要です。 仮想環境を設定することをお勧めします。 python3 -m venv myenv ソース myenv/bin/activate pip インストール -r 要件.txt これにより、Tensorflow と Pytorch の両方に必要なすべてのパッケージがインストールされます。 Tensorflowでモデルをトレーニングする Tensorflow を使用すると、モデルを量子化して Tensorflow Lite に変換するための簡単なパスが可能になり、畳み込みニューラル ネットワーク (CNN) アーキテクチャは次のようになります。 model = tf.keras.models.Sequential([ tf.keras.layers.Input(batch_shape=(1, 28, 28, 1)), tf.keras.layers.Conv2D(16, 5, padding='same', activation='relu'), tf.keras.layers.Conv2D(32, 3, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.MaxPool2D(2, strides=(2,2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(100, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) train_tf.pyスクリプトを実行してモデルをトレーニングすることができます。通常のノートPCでトレーニングするには約 2 分かかり、テスト データセットで 99.05% の精度を達成します。フレームワークの詳細については、公式のTensorflow ドキュメントを参照してください。 スクリプトを実行した後、 eIQ ツールキットモデル ビジュアライザーまたはNetron.app を使用してモデルを視覚化できます。 i.MX93 には、重み、バイアス、入力が整数である必要があるArm Ethos-65 NPUが搭載されており、現在のモデルは float32 を使用しているため、モデルを量子化する必要があります。これを実現するには、モデルを量子化して tflite に変換する tf2quant_tflite.py を実行します。 整数の入力と出力を取り、重みとバイアスも量子化されており、ファイル サイズの違いが簡単に確認できます。 量子化モデルは 555 KB ですが、float32 モデルは 2.2 MB です。これは、float32 では重みとバイアスをそれぞれ保存するのに 4 バイトが必要なのに対し、量子化モデルでは 1 バイトしか必要ないからです。 これで、ターゲットで使用できるモデルができました。ただし、現状では、XNN デリゲートを使用して CPU 上で実行されます。モデルを実行するには、次のようにするだけです。 ./window -m cnn_tf_quant.tflite これで、Arm Ethos NPU 用に量子化モデルをコンパイルできるようになりました。eIQ ツールキットが使用されます。モデル ツールを使用してモデルを開きます。 量子化されたモデル(この場合は cnn_tf_quant.tflite)があるフォルダーに移動して開きます。モデルを視覚化できるはずです。オプション メニューをクリックして変換を選択します。 i.MX93 コンバータを選択すると、保存先フォルダも選択するように求められます。 宛先フォルダを選択した後、すべてがうまくいけば変換が完了し、Ethos で実行できるように最適化されたモデルを視覚化できるようになります。NPU でサポートされていない操作はすべて CPU によって表示および実行されます。この単純な例では、すべての操作は NPU によって実行されます。 そして、次のようにしてターゲット上でモデルを実行できるようになりました。 ./window -m cnn_tf_quant_vela.tflite -d /usr/lib/libethosu_delegate.so Pytorchでモデルをトレーニングする リポジトリには、畳み込みニューラル ネットワークを使用して MNIST データ セットをトレーニングするサンプル モデルが含まれています。モデル構造は次のとおりです。 NeuralNetwork( (cnn): Sequential( (0): Conv2d(1, 16, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (1): ReLU() (2): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1)) (3): ReLU() (4): Dropout(p=0.2, inplace=False) (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (6): Flatten(start_dim=1, end_dim=-1) (7): Linear(in_features=5408, out_features=100, bias=True) (8): ReLU() (9): Dropout(p=0.2, inplace=False) (10): Linear(in_features=100, out_features=10, bias=True) ) ) Pytorch モデルは、Tensorflow lite (量子化なし) に簡単に変換して CPU 上で実行できます。また、 Open Neural Network Exchange モデル (ONNX)も同様です。ただし、最近リリースされたExecutorchは組み込みデバイス上の Pytorch モデル用の推論モデルであり、現在そのサポートが進められています。 Pytorch モデルは pytorch_model.py で定義されています。 #!/usr/bin/env python3 import torch from torch import nn # Define model class NeuralNetwork(nn.Module): def __init__(self): super().__init__() self.cnn = nn.Sequential( # Input 28x28x1, after padding 32x32x1, output 28x28x16 nn.Conv2d(in_channels=1, out_channels=16, kernel_size=5, padding=2), nn.ReLU(), # Input 28x28x16, output 26x26x32 nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3), nn.ReLU(), nn.Dropout(p=0.2), # Input 26x26x32, output 13x13x32 nn.MaxPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(13*13*32, 100), nn.ReLU(), nn.Dropout(p=0.2), nn.Linear(100, 10) ) def forward(self, x): logits = self.cnn(x) return logits トレーニングは train_pytorch.py を実行して実行され、テスト データセットで 99.3% の精度を達成し、通常のノートPCで完了するまでに約 7 分かかります。フレームワーク自体とトレーニング プロセスの詳細については、公式のpytorch ドキュメントを参照してください。 その後、pytorch モデルは pytorch_model.pth に保存されますが、pytorch はグラフ情報ではなく重みとバイアスのみを保存します。保存したモデルをnetronまたはeIQ ツールキットモデル ビジュアライザーで視覚化すると、分離された重みとバイアスを観察できます。 モデルをより良く視覚化するために、スクリプトpytorch2onnx.pyを使用してONNX形式に変換するだけです。そして、Neutron 上でモデルのグラフを視覚化できるようになりました。 注: ONNX は量子化して量子化されたモデルを tflite に変換する方法も提供している可能性がありますが、onnx-tf のテストではツールが最新の Tensorflow フレームワークと同期していないようでした。Tensorflow で同様のモデルを作成し、量子化してエクスポートする方が簡単でした。 これでモデルを tflite にエクスポートできるようになりました。モデルは量子化されていないため、CPU (XNN デリゲート) 上で実行されます。エクスポートするには、 pytorch2tflite.py を実行し、エクスポートされたモデルを視覚化できるようになりました。 そして、次のようにしてこのモデルをターゲット上で実行できます。 ./window -m pytorch_cnn.tflite モデルのデプロイと実行 これで、数字を描画できるアプリケーションと、それらの数字を検出できるモデルができましたが、アプリケーションはそのモデルを実行して結果を取得できる必要があります。これが次のステップです。 ターゲット上でモデルを実行できるようにするには、次のことが必要です。 モデルをロードする tfliteインタープリターを作成する 外部デリゲートがある場合はロードする テンソルを割り当てる C++の例 ここでは最小限の例が提供されていますが、NPU でモデルを実行するために必要な外部デリゲートの読み込みは含まれていません。 必要なヘッダーは次のとおりです。 #include "tensorflow/lite/delegates/external/external_delegate.h" #include "tensorflow/lite/interpreter.h" #include "tensorflow/lite/interpreter_builder.h" #include "tensorflow/lite/kernels/register.h" #include "tensorflow/lite/model_builder.h" TFLite APIを使用して次のようにモデルをロードできるようになりました。 std::unique_ptr<:flatbuffermodel> model = tflite::FlatBufferModel::BuildFromFile(model_path); ここでインタープリターを作成する必要があります。そのためには、モデルだけでなく操作リゾルバーも必要です。 tflite::ops::builtin::BuiltinOpResolver resolver; std::unique_ptr<:interpreter> interpreter; tflite::InterpreterBuilder(*model, resolver)(&interpreter); デリゲートが必要な場合は、それを作成して実行グラフを更新し、インタープリターがサポートされている操作でデリゲートを呼び出すことを認識できるようにする必要があります。 // Create external delegate option and pass the delegate library TfLiteExternalDelegateOptions external_delegate_options = TfLiteExternalDelegateOptionsDefault(delegate_path); // Create the External Delegate. This will load the delegate. TfLiteDelegate *external_delegate = TfLiteExternalDelegateCreate(&external_delegate_options); // Add External Delegate into TFLite Interpreter to automatically delegate nodes. if (interpreter->ModifyGraphWithDelegate(external_delegate) != kTfLiteOk) { std::cerr << "Failed to add delegate" << std::endl; } これで、モデルにテンソルを割り当てることができます。 // Allocate tensors for the model if (interpreter->AllocateTensors() != kTfLiteOk) { std::cerr << "Failed to allocate tensors" << std::endl; } これで、モデルを使用して推論を実行する準備が整いました。 最後のステップは、入力バッファにデータを入力し、インタープリタを呼び出して、出力バッファから結果を取得することです。次の例では、float モデルを使用しています。 // Fill input buffers // Note: The buffer of the input tensor with index `i` of type T can // be accessed with `T* input = interpreter->typed_input_tensor (i);` float *input_tensor = interpreter->typed_input_tensor (0); std::memcpy(input_tensor, input.data(), input.size() * sizeof(float)); // Run inference if (interpreter->Invoke() != kTfLiteOk) { std::cerr << "Failed to invoke Interpreter!" << std::endl; return {}; } // Read output buffers // Note: The buffer of the output tensor with index `i` of type T can // be accessed with `T* output = interpreter->typed_output_tensor (i);` float *output_tensor = interpreter->typed_output_tensor (0); std::memcpy(output, output_tensor, output.size() * sizeof(float)); 私たちのサンプル アプリケーションでは、インタープリターの作成と推論の呼び出しは NnModel というクラスにラップされています。その実装はリポジトリで確認できますが、変更なしで float モデルと int8 モデルの両方を処理できます。 クラスはメイン ルーチン内でインスタンス化され、予測ボタンがクリックされるたびに推論が呼び出されます。 // Create model with parsed parameters NnModel nn(model_path, delegate_path, verbose); void Window::on_predict_clicked() { // Save screen to file std::cout << "Predict clicked!" << std::endl; // Call inference on NnModel depending on the type // the model expects int number; auto data_type = nn_.get_dtype(); switch (data_type) { case kTfLiteFloat32: { std::vector drawing = mouse_drawing.export_to_vector (28, 28, 255.0); std::vector output_vec_f = nn_.infer (drawing); number = get_max_index (output_vec_f); break; } case kTfLiteInt8: { std::vector drawing = mouse_drawing.export_to_vector (28, 28, 255.0); std::vector output_vec_int = nn_.infer (drawing); number = get_max_index (output_vec_int); break; } default: std::cerr << "Cannot handle input type: " << std::to_string(data_type) << std::endl; break; } std::string display = "You drew a: " + std::to_string(number); std::cout << display << std::endl; text_view.set_text(display); } Pythonの例 Python でインタープリターを作成するプロセスはほぼ同じですが、デリゲートが使用されている場合はそれをロードし、モデルをロードしてテンソルを割り当てる必要があります。 この例では、代わりに LiteRT が使用されていますが、API は同じままで、必要な変更は解釈されたものがどこからインポートされるかだけです。 次の最小限のコードを使用して、モデルと外部デリゲートを読み込むことができます。 from ai_edge_litert.interpreter import Interpreter # Create interpreter if delegate_path is not None: # attempt to load external delegate if provided (platform specific) try: from ai_edge_litert.interpreter import load_delegate delegate = load_delegate(delegate_path) self.interpreter = Interpreter(model_path=model_path, experimental_delegates=[delegate]) except Exception as e: raise RuntimeError(f"Failed to load delegate: {e}") else: self.interpreter = Interpreter(model_path=model_path) self.interpreter.allocate_tensors() これで使用できるインタープリターができました。入力テンソルを入力し、インタープリターを呼び出して、モデルからの結果を含む出力テンソルを取得するだけです。 # Set input input_details = self.interpreter.get_input_details()[0] self.interpreter.set_tensor(input_details['index'], input_data) # Run inference self.interpreter.invoke() # Get results out_details = self.interpreter.get_output_details()[0] output_data = self.interpreter.get_tensor(out_details['index']) これらの手順は、 nn_model.pyの下のラッパー クラスに含まれています。 モデルのベンチマーク リリースには、ランダムな入力を生成し、モデルで推論を実行するのにかかる時間を測定するための事前構築されたベンチマーク ツールが付属しています。以下は、i.MX93 でさまざまなモデルを実行した結果です。 ./benchmaark_model --graph=モデル --num_threads=コア数   CPU 1コア CPU 2コア NPU pytorch_cnn.tflite 1559.61米ドル 1023.22米ドル N/A cnn_tf_quant.tflite 585.37米ドル 379.69米ドル N/A cnn_tf_quant_vela.tflite N/A N/A 221.84米ドル これはもちろん単なる例ですが、専用ハードウェア上で実行すると推論速度が大幅に向上することがわかります。 以下は、Pytorch と Tensorflow でシンプルなモデルをトレーニングし、i.MX93 Ethos-65 ニューラル プロセッシング ユニット (NPU) と i.MX95 eIQ Neutron NPU を使用してアプリケーションにデプロイするためのガイドです。
View full article
在 i.MX9 板上为扩展接头启用 3.3 V 和 5 V 稳压器 该补丁系列支持 i.MX93-QSB、i.MX93-FRDM 和 i.MX91-FRDM 板上的树莓派扩展连接器使用的外部 3.3 V 和 5 V 电源轨。 这些调节器已在设备树中定义,但默认情况下处于禁用状态。通过激活它们,兼容 RPI 的扩展接头可以正确地为外部模块、HAT 和附加板供电。 董事会变更: i.MX93-QSB 启用 RPI 连接器使用的 3.3 V 和 5 V 外部供电线路。 i.MX93-FRDM 启用 RPI 连接器使用的 3.3 V 和 5 V 外部供电线路。 i.MX91-FRDM 启用 RPI 连接器使用的 3.3 V 和 5 V 外部供电线路。 目的是 为兼容 Raspberry Pi 的扩展端口提供适当的电源。 为连接外部 HAT 或模块的用户提高硬件兼容性。 对齐所有 i.MX9 参考板,为 RPI 连接器使用一致的电源树配置。
View full article
NETC IEEE 1588 定时器软件不符合 RM 要求 在 S32ZE NETC 参考手册 " 文档标识符:S32E27NETCRM 参考手册修订版 4,2024-12-12 ",3.2.5.3.1 带漂移和误差调整的正常模式中,它声称 " 在正常运行期间,对 1588 计时器配置(例如 TMROFF_H/L)的任何更改(例如 TMR_ADD 更新除外)都需要禁用 TSN 相关功能,例如时间门调度、特定时间出发安排、直播门控和速率管制。"但是 gPTP 软件或非 NETC 设备驱动程序都不符合此规范。 GPTP_STACK RTD Re: NETC IEEE 1588 timer software does not meet the requirement of RM 我们有恩智浦的 gPTP 软件模块,对吗? 它将调用函数"EthSwt_43_NETC_CorrectPtpClk" 更新当前时间。 我说的不是"提供的有关修正定时器" 的功能。 我的问题是,当 gPTP 调用 EthSwt_43_NETC_CorrectPtpClk() 函数更新当前时间时,如何使 802.1Qbv 功能不受影响? Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 ETH 驱动程序 RTD2.0.1 遵循 ASR 21-11,其中只包括一些用于时间戳的 api 函数,如 因此,我认为他们没有提供你所说的修正定时器的功能。似乎 ASR23-11 将支持有关修正计时器的功能,或者 gPTP 如果需要在 ASR21-11 中使用这些功能,则必须提出更改要求的请求。 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 感谢您的关注。正如您所说,"驱动程序目前只支持从 TMR 寄存器获取当前定时器,不支持配置" ,我不明白。 用 gPTP 软件更改 OFFSET 寄存器如何?我认为 gPTP 软件肯定需要更改 OFFSET 寄存器。我的问题是,当 gPTP 软件试图更改 OFFSET 寄存器时,如何跟进 RM,以保持 TSN 功能(例如 802.1Qbv 功能)的顺利运行? Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 我来回答 NETC 司机的这个问题。 -针对ZE用上市的最新版本是继RM rev 3之后的RTD 2.0.1,据我所知,下一个版本RTD 2.0.2仍遵循RM Rev 3。但是,如果有任何关于 RM 版本的更新,SW 团队会开票检查新旧 RM 之间的变化。我想他们能察觉到这种变化。 - 据我所知,直到现在,驱动程序支持的时间戳都是默认计数 TMR_CTRL[TE] = 0,而 EthEnableFreeRunningTimer 功能刚刚添加到 RTD 2.0.1,可在 1588 定时器 TMR_CTRL[TE] = 1 中工作。当前定时器将从 1588 寄存器 TMR_FRT_L/H 中获取,但这里似乎存在一个错误,因为我没有在任何地方设置 TE(详情请参见票据:ARTDCC1-593)。总之,到目前为止,驱动程序只支持从 TMR 寄存器获取当前定时器,而不支持对其进行配置。如果用户想更改 1588 寄存器配置,就会出现你所说的情况。 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 您的意思是,在更改 1588 寄存器列表之前停止 TSN 功能,对吗? 我看到当前的驱动程序不支持停止 TSN 的功能。如果要禁用 TSN 中的每个功能,似乎需要删除每个表中的条目。例如 - 费率策略:Netc_EthSwt_Ip_DeleteRatePolicerTableEntry(); - Netc_EthSwt_Ip_DeleteStreamGateControlListTableEntry(); -EthSwt_43_NETC_StopTas(); 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 在我看来,问题不仅在于启用了多少 TSN 功能,因为如果客户使用 ASR 上下文,这些功能在预编译时会通过宏启用/禁用,但也会在每个功能中启用/禁用。大家都知道,每个功能 Rate policing、流闸......都是通过下表控制的: 如果用户只是在配置工具中配置了元素,那么在禁用此功能时,SW 团队可以控制删除多少带有条目 ID 的条目。但是,如果用户通过调用函数来添加元素,那么 SW 就无法知道。但我认为用户可以在自己的应用程序中进行控制。也许我错过了一些东西,但我知道TSN将引用计时器值,因此在更改计时器配置之前将其停止并重新开始以获取新的计时器值是有意义的。我相信 SW 团队在分析该票据时会有深刻的见解。 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 如果您不再了解 ETH 驱动程序,请将 RTD 从本主题中删除,以便 gPTP 的人可以回答您的问题。 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 您好, 在 gPTP 更改计时器偏移寄存器之前,我并不想禁用 TSN 功能。这是 NETC RM 的要求。 客户要求 NXP 提供符合 RM 规范的官方解决方案:如何禁用 TSN 功能,即在这种情况下,IEEE802.1Qbv客户认为这应该由恩智浦提供,因为这是硬件要求和与硬件相关的编码。 顺便说一句,我认为你的建议需要精心设计。特别是对于 802.1Qbv,如何使应用流量不受 gPTP 同步操作的影响。例如,某些流量是否可能会延迟一个 Qbv 计划周期? 谢谢! 杰夫 Re: NETC IEEE 1588 timer software does not meet the requirement of RM 您好, 是的,我还有一个问题。请帮助检查如何从以太网驱动程序的角度禁用/重新启用 802.1Qbv。并请帮助分析这种操作是否会导致 802.1Qbv 计划周期中的一个关键流量延迟? 谢谢! 杰夫 Re: NETC IEEE 1588 timer software does not meet the requirement of RM 您好, 感谢您的大力帮助。 请允许我为 AUTO 客户强调一件非常重要的事情,即当他们使用 TSN IEEE802.1Qbv 功能时,当然也需要根据 802.1Qbv 时间同步要求启用 gPTP。 他们担心 gPTP 是否会影响一个 802.1 Qbv 时隙内的关键流量。我们(恩智浦)需要澄清这一点,并提供如何做到这一点。这是一个非常专注和明确的要求。这是一个很好的例子或用例,可以让你了解情况。 是的,我们不知道客户启用了多少 TSN 功能。但是,对于每个可能使用的人,我们都需要一个解决方案。客户可以根据自己的使用情况做出正确的选择。 谢谢! 杰夫 Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 在我看来,ETH 驾驶员的这一要求很难得到满足,因为其官方职能就是停止 TSN 的运行。如你所见,要禁用端口门时间表,只需要 RESET 位时间门启用 PTGSCR[ TG E] 即可。但对于某些 TSN 功能(如费率策略),该功能是根据该表中的元素启用/禁用的。但是从ETH来看,我们不知道该表中添加了条目来删除或更新元素以禁用它们,上层可以更好地处理这个问题。因此,我在之前的答复中建议调用函数删除每个表中的条目。 如果用户没有启用选项功能:速率 Policing、流闸控制列表......,可以使用函数EthSwt_43_NETC_StopTas()禁用 TSN。 总之,我创建了 ARTDCC1-607 票据,您可以关注它以获得 SW 团队的分析,以防我遗漏了什么。而且 RM Rev4 尚未适用于 RTD 版本。如果您对 ETH 这个主题没有更多的了解,请告诉我,我会把这个案例交给 gPTP,让他们继续从他们的角度回答您的问题。 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 你好@双君竹、 我看到 802.1 Qbv 功能同时支持 NETC 和交换机。因此,您可以通过以下方式配置该功能: - Eth_NETC: - 端口开关: 这些功能是 用于 ETH_NETC: - Eth_43_NETC_StartTas() - Eth_43_NETC_StopTas() 用于端口交换机: -EthSwt_43_NETC_StartTas() -EthSwt_43_NETC_StopTas() 对于这个问题:" 从我的角度来看,分析这种操作是否会导致 802.1Qbv 计划周期 " 中的关键流量延迟,因为你可以看看启用/禁用此功能的 netc/portswt_ip_configportTimegateScheduling () 函数,要禁用此功能,只需要 RESET 一点但启用此功能,需要启用门禁时间并设置门禁时间表。这次可以测量。 我理解您的意思是"802.1Qbv 计划周期之一" 是指网关控制列表的执行时间应重复,对吗?如果是,则可以进行配置。 顺祝商祺! Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM 您好, 看来你还没明白我的问题。请给我更详细的描述。假设客户有一个 Qbv 配置,它处于运行状态,参数如下: 1. 周期时间为 10ms 2. 在一个 10 毫秒的时间段内,有两个时隙,每个时隙 5 毫秒。换句话说,闸门列表中有两个条目。 3.假设在第一个时隙开放时,NETC 正在传输关键帧。此时 gPTP 开始更新当前时间,根据 RM 的要求,客户需要禁用/重新启用 802.1Qbv。 4.802.1Qbv 重新启用后,NETC 硬件可能会继续打开时隙 1,或进入门列表第 2 项,或等待新的 Qbc 计划周期。 如果硬件进入第 2 个条目,则表示 NETC 队列中的关键帧将在下一个 10 毫秒周期内发送。这可能会造成严重的延误,影响应用。 5.客户询问如何避免这种情况。换句话说,如何平稳地禁用/重新启用 Qbv,以减少对应用程序的影响。 希望这能让你明白。 谢谢! Re: NETC IEEE 1588 timer software does not meet the requirement of RM 您好, 除了我在之前的回复中提到的两个功能外,我没有看到其他启用/禁用 TAS 的方法。在我看来,当禁用时间门控制时,它的所有功能也会被禁用,如时间间隔、周期......。禁用和启用 TAS 之间的时间间隔,包括完成更新 gPTP 定时器的时间。启用 TAS 后,基准时间将根据当前时间更新。除非新的基准时间 = 下一个旧的间隔时间,否则无法满足您的要求。 我对此没有更多的了解,我也在上述票单中更新了这个问题,以便 SW 团队对您的情况提出建议。 顺祝商祺! Nhi
View full article
高级声明式用户界面框架 是否有适用于 i.MX RT 跨界 MCU 的高级声明式用户界面框架?我希望能用 Swift 或 JavaScript 等高级语言编写代码,然后使用类似 SwiftUI 或 React 的东西创建用户界面。 Re: High level declarative UI framework 你好@MatthewRuzzi、 感谢您关注恩智浦 MIMXRT 系列! 恩智浦正式提供 GuiGuider 工具,以 LVGL 作为底层框架,帮助客户快速开发用户界面软件。此外,SDK 还包括 emWin 和 VGLite 的示例项目。虽然目前官方并不支持高级语言的实现,但我建议探索以下方法: 1.https://doc.qt.io/QtForMCUs/qtul-zephyr-mimx1060-evk.html https://www.embeddedartists.com/wp-content/uploads/2023/06/QtMCUs_ProgramDevelopment.pdf 2https://www.nxp.com/design/design-center/training/TIP-CREATE-USER-INTERFACE-QT 3.https://docs.microej.com/en/latest/GettingStarted/gettingStartedIMXRT1170.html 4.https://github.com/lvgl/lv_micropython 5.https://www.swift.org/blog/embedded-swift-examples/ 我希望这些资源能对您的发展有所启发。 致以最诚挚的问候, Gavin Re: High level declarative UI framework 目前是否有任何项目正在开展这方面的工作?我非常希望能够使用 Swift 或 JavaScript 这样的语言。有什么办法能让我今后更有可能这样做吗?我应该在哪些地方提交或投票表决功能请求,或者在哪些地方发布此信息?
View full article
EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 这个McuPGOOD_POLARITYControl配置项在该路径下找不到 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 我不确定你是否可以下载,你可以尝试一下,如果不可以,请联系你的代理商或者FAE来获取评估权限。 https://www.nxp.com/design/design-center/software/automotive-software-and-tools/real-time-drivers-rtd:AUTOMOTIVE-RTD Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 在哪可以下载30.0.0吗?30.0.0能打开29.0.0的工程吗? Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 我看这个版本适配的EB Tresos版本应该是30.0.0,不是你所使用的版本。 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 你这界面的风格不对阿,新版本的风格和之前旧的完全不一样的,你的界面还是老版本的风格。 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh ok,不客气 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 Hi@WeiCh 在下载界面有这样的提示,你要修改后缀 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 好像有点问题,运行setup提示没有安装包,可以解压EBtresosStudio_EBtresosStudio.zip后直接打开应用,但应用界面还是旧的: Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 这是30.0.0的界面,好像还是没有这个配置项。 Re: EB更新RTD 7.0.0_QLP03时报告McuPGOOD_POLARITYControl配置错误 已经可以了,感谢!
View full article
如何替换自定义板的 Yocto 电路板支持包中的 DDR 二进制文件? 你好 正在尝试替换自定义板的 Yocto 电路板支持包 中的 DDR 二进制。 新计算机已创建,配方 ddr-firmware 的目录也是在自定义元层中创建的,其中包含所需的文件。但是,为 SRC_URI 分配新值并删除配方附加中的原始值并不能阻止 Bitbake 在评估板的原始路径中搜索。不使用配方追加也不会改变本次搜索的任何内容。 似乎唯一有效的方法是掩盖原始配方并在自定义层中创建新配方。 但我不认为这是一种可取的方式。使用为自定义计算机创建的 DDR 二进制文件应该很容易做到这一点。这里可能遗漏了什么? 谢谢您! 起重机 Re: How to replace DDR binaries in Yocto BSP for the custom board? 好的,它能用。似乎与 NXP_FIRMWARE_LOCAL_DIR 中设置的文件夹不一致。但不管怎么说,它还是有用的。 还有一个问题,如何关闭自定义层 .bbappend 中的 NXP-EULA 许可证? 此致, 起重机 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,仙鹤 感谢您的回复。 客户的 DDR 还应该有 DDR 固件,你能否尝试参考 S32G3_Linuxbsp_44.0_user_Manual.pdf 在 Yocto 中版本电路板支持包期间添加 DDR 固件。 BR 乔伊 Re: How to replace DDR binaries in Yocto BSP for the custom board? 你好,乔伊、 感谢您的回复。 它是 S32G3,电路板支持包 是 "bsp44.0"。 此致, 起重机 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,起重机 感谢您与我们联系。 你使用的是哪个版本的电路板支持包? 您使用的是 S32G3 还是 S32G2 芯片? BR 乔伊 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,乔伊、 添加 .bbappend 时尝试过,但不起作用用于定制板。 ERROR: /home/crane/work/yocto/sources/meta-alb/meta-alb-bsp/recipes-bsp/ddr-firmware/ddr-firmware.bb: Unable to get checksum for ddr-firmware SRC_URI entry NXP-EULA: file could not be found The following paths were searched: 尝试了 .bbappend只有 SUMMARY,LICENSE ="CLOSED" 和 LIC_FILES_CHKSUM ="" ,也试过不使用 .bbappend、都得到了相同的错误信息。 这是处理自定义 DDR 二进制文件的唯一方法是掩盖恩智浦的原始配方并创建自定义配方,而不是根据原始配方添加配方附加吗? 此致, 起重机 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,仙鹤 请尝试修改文件夹 (fsl-auto-yocto-电路板支持包-build_s32g274ardb2/conf) 中 local.conf 文件。 accept_fsl_eula ="1" BR 乔伊 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,起重机 您是否在文件夹中添加了 NXP-EULA 文件? BR 乔伊 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,乔伊、 我试图将这个文件复制到原始配方或自定义配方中,但都不起作用。两种方法都能找到文件,但都会产生以下错误信息: ERROR: No recipes in default available for: /home/crane/work/yocto/sources/meta-crane/recipes-bsp/ddr-firmware/ddr-firmware_%.bbappend 由于我没有使用恩智浦的DDR二进制文件,我认为使用恩智浦生成的NXP-EULA没有意义。禁用检查 NXP-EULA 是感知的,对吧? 此致, 起重机 Re: How to replace DDR binaries in Yocto BSP for the custom board? 嗨,起重机 感谢您的回复。 我们应该找到问题的根源。请尝试在 Yocto 中版本 BSP44 以使用恩智浦的 DDR 固件和 NXP-EULA 文件。如果你能成功版本 BSP44,你可以尝试更换 DDR 固件,然后重新版本。 BR 乔伊
View full article
针对同步动态随机存取存储器(SDRAM)版本构建的 RT1170 调试 您好, 我正在使用 MCUXpresso 及其 SDK 为 RT1170 开发一个应用程序。 所提供的示例项目似乎都是使用 “DTC” RAM 版本的。与许多其他用户一样,我的应用程序太大了,无法容纳在那里,所以我正在尝试使用“同步动态随机存取存储器(SDRAM)”。 在尝试了论坛上其他一些帖子(尤其是https://community.nxp.com/t5/i-MX-RT/MCUXpresso-and-RT1050-download-and-debug-in-SDRAM/m-p/896979)中提出的解决方案后现在,我可以执行我的程序,如果应用程序已闪存,我还可以调试程序。 但是,如果我使用 “将应用程序链接到RAM” 进行版本和执行,那么一旦遇到断点,应用程序通常会卡在那里。 我的假设是这是因为我没有正确初始化同步动态随机存取存储器(SDRAM)。上述文章使用 “rt1050_SDRAM_init.scp 作为调试器初始化 同步动态随机存取存储器(SDRAM) 控制器的连接脚本”。如果我使用这个文件,失败也就不足为奇了。 我不知道如何调整这个脚本才能在 RT1170 上运行。有没有人这样做过,或者能提供如何生成的建议? 感谢您提供的任何帮助。 Re: RT1170 debugging when application is built for SDRAM 你好@ Jingpan 按照提供的步骤,使用 RT1170_BriefOverview_v210.pdf 中提到的修改刷新 hello world,我可以在调试模式下使用同步动态随机存取存储器(SDRAM)。 但是在这种变化之后,同步动态随机存取存储器(SDRAM)也用于存储代码。 在我的应用程序中,我希望代码存储在闪存中,而 BOARD_SDRAM 仅用于堆和堆栈部分。 我将把我的应用程序闪存到闪存中,该应用程序的堆和栈部分将使用 BOARD_SDRAM。 请指导我进行所需的更改。 Re: RT1170 debugging when application is built for SDRAM 谢谢@ Jingpan、 我只需要添加 .scp文件,结果成功了。 我已经掌握了第 5、第 6 和第 8 步,但我会试试其他步骤。 如果有帮助我还在 board.c 中做了以下更改,我认为这等同于<https://community.nxp.com/t5/i-MX-RT/MCUXpresso-and-RT1050-download-and-debug-in-SDRAM/m-p/896979>中描述的 RT1170_SDRAM_NOT_CACHED: #ifdef USE_SDRAM #ifndef RT1170_SDRAM_NOT_CACHED /* 区域 9 设置:内存为普通类型,不可共享,外部/内部回写 */ MPU->RBAR = ARM_MPU_RBAR(9, 0x80000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_64MB); #else MPU->RBAR = ARM_MPU_RBAR(9, 0x80000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 1, 0, 0, 0, ARM_MPU_REGION_SIZE_64MB); #endif /* RT1170_SDRAM_NOT_CACHED */ #endif Re: RT1170 debugging when application is built for SDRAM 你好@robert_s、 此脚本适用于 RT1050/60,但不适用于 RT1170/60。您可以使用附带的脚本。除脚本文件外,您还需要执行其他步骤。 在 C/C++ 版本 > MCU 属性设置中的内存详细信息中,将 BOARD_SDRAM 移至 SRAM_DTC_M7 上方。 连接脚本使用 RT1170_connect_M7_wake_M4_SDRAM_init.scp。 在附加选项中添加 --cachelib libm7_cache.so。 如果使用 USB/以太网/SDHC,请将 DMA 缓冲区放入非缓存区。 在 MCU C 编译器> 预处理器中添加 USE_SDRAM。 在属性中选择链接到 ram->设置->受管链接器脚本 如果项目与 USB 关联,则在 MCU C 编译器> 预处理器中添加 DATA_SECTION_IS_CACHEABLE=1。 如果项目与不带 freertos 的 USB 主机相关联,则将堆放入 DTCM 或不可缓存区域 (bm) 此致, 景
View full article