网站开发兼职合同住房城乡建设部网站诚信平台
2026/2/19 10:03:01 网站建设 项目流程
网站开发兼职合同,住房城乡建设部网站诚信平台,vs2008做html5网站,网站建设上传服务器步骤文章目录1 概要2 Remoteproc 框架简介2.1 Remoteproc 框架2.2 实验准备2.2.1 硬件连接2.2.2 启动 Linux 操作系统3 使用 STM32CubeIDE 进行调试3.1 操作步骤3.2 fw_cortex_m4.sh 脚本分析1 概要 本章节将介绍如何A7和M4进行联合调试#xff0c;我们在分析 STM32CubeMP1 固件包…文章目录1 概要2 Remoteproc 框架简介2.1 Remoteproc 框架2.2 实验准备2.2.1 硬件连接2.2.2 启动 Linux 操作系统3 使用 STM32CubeIDE 进行调试3.1 操作步骤3.2 fw_cortex_m4.sh 脚本分析1 概要本章节将介绍如何A7和M4进行联合调试我们在分析 STM32CubeMP1 固件包的时候固件包下有一个 OpenAMP文件夹AMP 是指非对称多处理Asymmetric Multiprocessing非对称多处理是指各核的结构并非对称例如 STM32MP1 是两个 Cortex-A7 内核加一个 Cortex-M4 内核的组合各个核结构并非对称。OpenAMP 常用于处理器间通信OpenAMP 软件框架的组件主要包括 RPMsg远程处理器消息传递、VirtIO虚拟化模块和 Remoteproc为开发 AMP 系统提供了必要的 API函数可以实现核间通信。OpenAMP 下的 Remoteproc 允许本地处理器与系统上可用的远程处理器进行通信对于STM32MP157本地处理器就是指 Cortex-A7远程处理器指 Cortex-M4本节我们就利用Remoteproc 来让 Cortex-A7 远程控制 Cortex-M4 的生命周期即加载、启动和停止 Cortex-M4上的固件.elf 或者.axf 文件。前面的 Cortex-M4 开发实验部分我们是在线仿真的即通过 ST-Link 将程序下载到 SRAM中运行开发板掉电后程序就会丢失这种方式适合在 Cortex-M4 开发调试阶段也叫工程模式Engineering Mode。如果在核间通信的时候我们就需要使用量产模式Production Mode来进行联合调试下面我们讲解如何实现 Cortex-A7 和 Cortex-M4 联合调试。关于 Cortex-A7 和 Cortex-M4 双核通信的相关实验正点原子会有独立的文档章节进行讲解。本节我们只是讲解如何在 Linux 操作系统中使用 Cortex-A7 去加载、启动和停止运行 Cortex-M4 的固件。本章将分为如下几个小节Remoteproc 框架简介使用 STM32CubeIDE 进行调试拷贝文件后手动调试2 Remoteproc 框架简介2.1 Remoteproc 框架对于具有非对称多处理的 SOC不同的核心可能跑不同的操作系统例如 STM32MP157的 Cortex-A7 运行 Linux 操作系统Cortex-M4 可以运行 RTOS 操作系统。为了使运行 Linux 的主处理器与协处理器之间能够轻松通信Linux 引入了 Remoteproc 框架该框架允许不同的平台/体系结构在抽象硬件差异的同时控制那些远程协处理器如主处理器加载协处理器固件打开、关闭或配置协处理器等。此外Remoteproc 框架还添加了 RPMsg 和 Virtio所以 Remoteproc驱动只需要提供一些低级处理程序其它 RPMsg 驱动程序就可以正常工作。Remoteproc 驱动提供可直接调用的 API方便用户层去调用在 Linux 操作系统下已经有remoteproc 的相关驱动和 API这里我们就不需要过多地去关注 remoteproc 了我们直接使用它来控制 M4 内核即可Remoteproc、RPMsg 和 Virtio 是 OpenAMP 下重要的框架在后面的章节我们会对它们进行讲解。STM32MP157 的 Linux 下 Remoteproc 框架如下在 Remoteproc 框架框图中我们查看两个重要的组成部分remoteproc 是通用远程处理框架部分其作用是1将.axf 文件加载到 Cortex-M4 内核中在 STM32CubeIDE 下是.elf 文件2解释.axf 文件资源表以设置关联的资源例如 IPC 和内存分割等3控制 Cortex-M4 内核启动、关闭4提供监视和调试远程服务stm32_rproc 是远程处理器平台即 M4驱动程序其作用是1向 Remoteproc 框架注册供应商特定的功能如回调部分2处理 Cortex-A7 和 Cortex-M4 关联的平台资源例如寄存器看门狗复位时钟和存储器3通过邮箱框架将通知转发到 M4以上 Cortex-A7 称为主处理器Cortex-M4 称为协处理器主处理器先启动然后引导协处理器启动主处理器再加载协处理器固件。总之Remoteproc 框架实现了对远程协处理器生命周期的控制它允许 Cortex-A7 主处理器将.axf 固件加载到 Cortex-M4 内核中然后解析固件资源列表后再启动/关闭/配置 Cortex-M4 内核。而 RPMsg远程处理器消息传递英文Remote Processor Messaging通过共享内存向远程 CPU 发送消息或从远程 CPU 接收消息。下面我们利用 Remoteproc 来实现 Cortex-A7 加载并运行 Cortex-M4 固件.axf 文件。2.2 实验准备实验前我们需要以下硬件资源1正点原子 STM32MP157 开发板配套电源线22 根 Type-C 线3ST-Link 下载器加转接板和 T 口 USB 线4一张 TF 卡或 U 盘5一根网线以上的第 3 和第 4 项根据选择的环境不同而需求不同例如如果使用 STM32CubeIDE 将固件通过 Remoteproc 下载到开发板的 Linux 操作系统中的话那么 ST-Link 下载器就必须要用到如果选择通过将 TF 卡或者 U 盘拷贝固件到开发板的话则不需要 ST-Link 下载器如果使用网络如 FTP 或 SSH的方式传输固件的话则第 3 和第 4 项都不需要但是要一根网线。注意事项一开始 ST 推出了 STM32CubeIDE1.4.0 版本本教程一直使用的也是 STM32CubeIDE1.4.0版本 使 用 正 常 没 发 现 什 么 问 题 。 后 来 ST 又推 出 了 STM32CubeIDE1.5 以及STM32CubeIDE1.6.1测试发现 STM32CubeIDE1.6.1 无法识别 MPU Serial详情请见第 28.2小节可能是新版本软件的 Bug 或者其它原因目前遇见这种情况的小伙伴他们将STM32CubeIDE1.6.1 卸载再安装 STM32CubeIDE1.4.0然后再安装 STM32CubeIDE1.6.1 就可以了这也是奇怪笔者还未发现具体是什么原因如果找到原因的朋友可以在正点原子论坛http://www.openedv.com/forum.php 发表你的解决办法大家一起学习共同进步2.2.1 硬件连接1使用 STM32CubeIDE 进行调试下面我们采用 STM32CubeIDE 将固件通过 Remoteproc 下载到开发板的 Linux 操作系统中我们先进行连线操作。首先需要使用一根 Type-C 线将开发板的 USB_OTG 接口接到 PC的 USB 接口用于模拟出一个 USB 网卡然后再用一根 Type-C 线将开发板的 USB_TTL 接口接到 PC 的 USB 接口用于模拟通过串口获取 USB 网卡的 IP以实现开发板和电脑通信如下图2网络传输文件如果不是使用 STM32CubeIDE 进行调试而是使用网络的方式传输固件的话硬件连接方式如下只需要接电源线以及在 USB_TTL 口接 Type-C 线外加网口接一根网线网线另一端可以接路由器或者和电脑直连根据个人情况来选择3 采用 TF 或者 U 盘卡拷贝固件如果使用 TF 卡或者 U 盘等存储设备来拷贝的话开发板只需要接电源线以及在 USB_TTL接口接 Type-C 线即可。2.2.2 启动 Linux 操作系统先接好线开发板拨码开关拨到 010即 eMMC 启动方式因为开发板出厂 Linux 系统已经烧录在 eMMC 里了接好电源线启动开发板等待 A7 启动完成。判断 A7 是否启动完成可以通过观察底板的 LED0 是否在闪烁出厂的 Linux 系统在设备树里已经默认配置 LED0 为心跳灯启动进入 Linux 系统后LED0 会闪烁或者在串口终端查看串口的打印信息如果开发板底板的 LED0 在闪烁或者串口终端已经打印―rootATK-stm32mp1‖则说明 Linux 系统已经完全启动。此时查看设备管理器网络适配器下多出了―Remote NDIS Compatible Device #2该设备是 USB_OTG 模拟的 USB 网卡端口下多出了一个 CH340 设备口是 USB_TTL 的 COM 口这里显示 COM65如下图所示如下在网络连接处也可以看到模拟的 USB 网卡―Remote NDIS Compatible Device #2如果没有看到模拟的 USB 网卡可以检查开发板 Linux 系统是否正常运行、连接在USB_OTG 口的 Type-C 线是否接好以及线是否有问题等可以尝试重启开发板或者重新接好Type-C 线。下面我们利用此 USB 网卡并借助 Remoteproc 将固件.elf 文件传输到 Linux操作系统中。3 使用 STM32CubeIDE 进行调试3.1 操作步骤如果使用 STM32CubeIDE 来开发 M4最终生成.elf 文件可通过 STM32CubeIDE 将.elf文件上传到开发板的―/lib/firmware‖目录下并自动运行。我们本小节实验以第十一章的实验来进行测试首先按照 28.1.2 小节讲解的步骤接好线再将 ST-Link 接在开发板 JTAG 口然后开发板从 eMMC 启动等待进入 Linux 操作系统注意观察是否有 USB 网卡然后打开 STM32CubeIDE我们需要设置串行过滤器因为默认情况下STM32CubelDE是只将 STMicroelectronics 和 FTDI 设备作为首选的串行设备其它设备无法识别所以我们要关闭默认选项而选择我们需要的设备点击―Windows PreferencesSTM32CubeMPU Serial, 设置如下可能会出现多个 COM 口根据设备管理器显示的设备来选中对应的 COM 口点击 Debug 配置选项进入 Debug Configurations 配置界面如下选中默认已有的 BEEP_CM4 Debug 配置项如果没有此配置项可以双击―STM32Cortex-M C/C Applications‖来新建一个配置项关于这些操作相信大家都已经很熟悉了如果不清除的可以看前面第四章的实验部分。进入调试器配置部分按照如下来配置在 Load Mode配置项选中―thru JTAG/SWD link(Production mode)Serial Port‖处根据设备管理器显示部分选择COM口这里选择―MPU Serial (COM65)‖―Inet Address‖处会自动显示192.168.7.1此IP地址就是USB网卡的IP地址如果此时在 Linux 操作系统下输入 ifconfig可以看到 USB 网卡的 IP 为 192.168.7.1STM32CubeIDE 就是通过此 IP 地址将.elf 文件传输到 Linux 操作系统的。点击 Debug 后STM32CubeIDE 开始将 BEEP_CM4.elf 文件下载到 Linux 文件系统的/lib/firmware‖下下载好后系统会自动解析 BEEP_CM4.elf 文件资源然后设置相关的资源并运行程序此时开发板的蜂鸣器开始嘀嗒嘀嗒发出声响在串口终端的―/lib/firmware‖下也可以找到BEEP_CM4.elf 文件同时串口终端打印一些调试信息1remoteproc remoteproc0:powering up m42remoteproc remoteproc0:Booting fw image BEEP_CM4.elf,size19202763remoteproc remoteproc0:header-less resource table4remoteproc remoteproc0:no resource table foundforthis firmware5remoteproc remoteproc0:header-less resource table6remoteproc remoteproc0:remote processor m4 is now up以上的打印信息中第 1 行启动 M4第 2 行启动固件 BEEP_CM4.elf并提示该固件文件大小为 1920276指文件大小不是程序大小第 3 和第 5 行A7 打印―header-less resource table‖表示资源表大小为 0资源表是描述固件资源的一个条目或者说数据结构在加载 M4 固件的时候A7 会去解析固件并检查资源表的信息如果资源表大小为 0就会打印“header-less resource table‖第 4 行打印提示没有这个固件的资源表第 6 行远程处理器 M4 已经启动这里主处理器是 A7。可以点击 STM32CubeIDE 的暂停键暂停调试蜂鸣器就停止发声或者点击停止键退出调试3.2 fw_cortex_m4.sh 脚本分析前面操作完成后跑 Linux 操作系统的 A7 成功运行了跑裸机的 M4 的固件这个过程其实是由一个 fw_cortex_m4.sh 脚本参与完成的该脚本我们在前面的 8.3 小节里有简单提到过因为还没有实验用到该脚本所以我们前面未对该脚本进行解释。下面我们来看看这个脚本。在 STM32CubeIDE 的 RemoteProc 目录下可以看到该脚本不能直接在 STM32CubeIDE 上双击查看此脚本可以使用代码查看软件来查看此脚本的内容内容如下如果学过 shell 的基本语法这段脚本很容易可以看懂我们简单了解一下改脚本做了什么第 3 行/sys/class/remoteproc/remoteproc0 是加载、启动和停止固件的文件操作路径Linux下一切皆文件我们实际上是通过操作文件来实现对应的功能。我们查看此路径下有什么可以看到/sys/class/remoteproc/remoteproc0/firmware 文件的内容是 BEEP_CM4.elf这个就是本实验 M4 固件的名字默认情况下该文件的内容是 rproc-m4-fw在 A7 加载 M4 固件后此文件内容就会被修改。第 4 行/lib/firmware 是固件或者固件的软链接文件所在的路径我们看看该路径下有什么可以看到/lib/firmware 下的 BEEP_CM4.elf 文件指了/usr/local/projects/BEEP_CM4/lib/firmware/BEEP_CM4.elf也就是/lib/firmware/BEEP_CM4.elf 文件是软连接文件实际的文件是/usr/local/projects/BEEP_CM4/lib/firmware/BEEP_CM4.elf也就是运行固件时实际上是运行/usr/local/projects/BEEP_CM4/lib/firmware/下的固件如下图可以看到 BEEP_CM4.elf 文件大小是 1.9MB同时我们注意到在/usr/local/projects/BEEP_CM4 下有一个 fw_cortex_m4.sh 文件此文件的内容和 STM32CubeIDE 上的 fw_cortex_m4.sh 文件内容一样第 5 行固件的名字是 BEEP_CM4.elf第 7 行熟悉 shell 基本指令的话就知道/usr/bin/dirname 表示获取当前脚本的路径(/usr/bin/readlink -f 0)表示找出软连接所指向的位置也就是 fw_cortex_m4.sh 文件的位置整个语句$(/usr/bin/dirname $(/usr/bin/readlink -f $0))就是指获取当前脚本文件 fw_cortex_m4.sh 所在的目录。上图中我们已经知道脚本位与/usr/local/projects/BEEP_CM4 下了cd $(/usr/bin/dirname $(/usr/bin/readlink -f $0))就表示进入了/usr/local/projects/BEEP_CM4 目录该目录就是当前脚本所在的位置如果执行 pwd 指令的话就显示当前目录为/usr/local/projects/BEEP_CM4第 9 行如果指令的第二个字符是start则执行第 10~16 行的 shell 语句。shell 的基本语法中如果执行如下指令./test.sh start BEEP_CM4.elf$0 就是./test.sh$1 就是 start$2 就是 BEEP_CM4.elf大家理解器操作含义即可。我们看看 10~16 行做了什么2. fw_cortex_m4.sh 的使用经过前面分析我们大体知道 STM32CubeIDE 做了如下工作1STM32CubeIDE 将 fw_cortex_m4.sh 文件传输到 Linux 文件系统的/usr/local/projects/BEEP_CM4 目录下将 BEEP_CM4.elf 文件传输到/usr/local/projects/BEEP_CM4/lib/firmware 目录下2)执行 fw_cortex_m4.sh 脚本文件将/lib/firmware/BEEP_CM4.elf 链接到/usr/local/projects/BEEP_CM4/lib/firmware/BEEP_CM4.elf然后再将字符串 BEEP_CM4.elf 写入到文件/sys/class/remoteproc/remoteproc0 /firmware 中再去运行或者停止 BEEP_CM4.elf 固件。我们可以模仿 fw_cortex_m4.sh 脚本自己去编写一个类似的脚本来实现加载、启动、停止固件。如下我们在/lib/firmware 目录下新建一个 test.sh 脚本脚本内容如下#!/bin/sh rproc_class_dir/sys/class/remoteproc/remoteproc0fmw_dir/lib/firmwarecd/sys/class/remoteproc/remoteproc0if[$1start]then/bin/echo-n $2$rproc_class_dir/firmware/bin/echo-n start$rproc_class_dir/state fiif[$1stop]then/bin/echo-n stop$rproc_class_dir/state fi编写好脚本文件后执行如下指令给脚本文件可读可写可执行权限chmod777test.sh因为/lib/firmware 目录下已经有了 BEEP_CM4.elf我们可以执行如下指令来加载、运行以及停止 BEEP_CM4.elf 固件/* 加载、运行固件 */./test.sh start BEEP_CM4.elf/* 停止运行固件 */./test.sh stop BEEP_CM4.elf

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询