搜索
bottom↓
回复: 0

《STM32MP1 M4裸机HAL库开发指南》第三十四章 A7和M4联合调试

[复制链接]

出0入234汤圆

发表于 2022-11-29 16:16:27 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2022-11-29 16:16 编辑

1)实验平台:正点原子STM32MP157开发板
2)购买链接:https://item.taobao.com/item.htm?&id=629270721801
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-318813-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子STM32MP157技术交流群:691905614 lQLPJxaFi2zaB4UWWrDAMgIsFEW2pwLb3abnwDMA_90_22.png
lQDPJxaFi2nfFizMjM0CbLCPlxn_FVheIQLb3aGrwFQA_620_140.jpg

lQLPJxaFi2nfFhLMkM0BXrDNvOUyeU_FPgLb3aGvQNIA_350_144.png
第三十四章  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的固件。
        本章将分为如下几个小节:
        34.1、Remoteproc框架简介;
        34.2、实验测试;

34.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框架如下:
第三十四章  A7和M4联合调试1331.png
图34.1. 1 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文件)。
34.2 实验测试
        实验前,我们需要以下硬件资源:
        1)正点原子STM32MP157开发板(配套电源线);
        2)1根Type-C线;
        3)一张TF卡或U盘;
        4)一根网线;
        以上的第3和第4项根据选择的环境不同而需求不同,例如:如果选择通过将TF卡或者U盘拷贝固件到开发板的话,则不需要网线;如果使用网络(如FTP或SSH)的方式传输固件的话,则不需要第3项。
34.2.1 硬件连接
1. 网络传输固件
        如果使用网络的方式传输固件的话,硬件连接方式如下,只需要接电源线以及在USB_TTL口接Type-C线,外加网口接一根网线(网线另一端可以接路由器或者和电脑直连,根据个人情况来选择):
第三十四章  A7和M4联合调试2321.png
图34.2.1.1硬件连接图1

2.采用TF或者U盘卡拷贝固件
如果使用TF卡或者U盘等存储设备来拷贝的话,开发板只需要接电源线以及在USB_TTL接口接Type-C线即可,开发板就可以不接网线。
34.2.2 启动Linux操作系统
        先接好线,开发板拨码开关拨到010,即eMMC启动方式,因为开发板出厂Linux系统已经烧录在eMMC里了,接好电源线启动开发板,等待A7启动完成。判断A7是否启动完成,可以通过观察底板的LED0是否在闪烁(出厂的Linux系统在设备树里已经默认配置LED0为心跳灯,启动进入Linux系统后,LED0会闪烁),或者在串口终端查看串口的打印信息,如果开发板底板的LED0在闪烁或者串口终端已经打印“root@ATK-stm32mp1”,则说明Linux 系统已经完全启动。
第三十四章  A7和M4联合调试2677.png
图34.2.2.1串口打印信息

34.2.3 将M4固件传输到开发板
本节我们使用网络的方式将M4固件传输到开发板的Linux文件系统的“/lib/firmware”目录下,如果没有网线的小伙伴也可以将M4固件拷贝到TF卡或者U盘等存储介质中,再将TF卡或者U盘插到开发板的对应接口中,然后从TF卡或者U盘拷贝到Linux文件系统中。
        本节我们以第十六章 蜂鸣器的实验为例子,成功编译工程后,进入工程的Output下可以看到atk_mp1_m4.axf文件,同时按下Shift键并按下鼠标右键,可以打开选项界面,如下,可以看到Powershell选项,或者如果电脑安装了Git的话,可以看到Git Bash Here,这两个也就是shell终端,可以打开shell后操作Linux指令,两者选其中一个就可以,下面我们就选择使用Powershell吧。
第三十四章  A7和M4联合调试3056.png
图34.2.3.1 打开Powershell

        打开Powershell后,输入ls后按下回车,可以看见当前目录下有什么文件:
第三十四章  A7和M4联合调试3122.png
图34.2.3.2 查看文件

        开发板启动进入Linux操作系统,输入ifconfig可以查看开发板的IP地址,如下IP地址是192.168.1.241:
第三十四章  A7和M4联合调试3202.png
图34.2.3.3查看开发板的IP地址

        我们就是通过此IP将文件传输到开发板的,先检查开发板和Windows是否能正常通信,在Powershell中ping开发板IP地址可以ping通,说明两者通信正常,可以互传文件:
第三十四章  A7和M4联合调试3315.png
图34.2.3.4测试Windows和Linux通信

        执行如下指令将BEEP_CM4.elf文件传输到开发板的/lib/firmware目录下:
scp atk_mp1_m4.axf root@192.168.1.241:/lib/firmware
第三十四章  A7和M4联合调试3443.png
图34.2.3.5 将文件传输到Linux

        在开发板的“/lib/firmware”目录下可以看到已经有该文件了:
第三十四章  A7和M4联合调试3504.png
图34.2.3.6文件传输成功

34.2.4 加载固件和测试
传输atk_mp1_m4.axf文件成功后,通过执行以下指令来手动加载、运行或者关闭固件:
/* 加载固件 */
echo atk_mp1_m4.axf > /sys/class/remoteproc/remoteproc0/firmware
/* 开启,此时程序就会运行,蜂鸣器就嘀嗒嘀嗒发出响声 */
echo start > /sys/class/remoteproc/remoteproc0/state
/* 关闭,停止固件运行 */
echo stop > /sys/class/remoteproc/remoteproc0/state
不过要注意的是,执行最后一条stop指令的时候,如果此时蜂鸣器刚好由不响到响,执行此条指令以后蜂鸣器会一直响,如果此时蜂鸣器刚好由响到不响,执行此指令以后蜂鸣器就不响了,也就是停止在执行指令的那个状态。
第三十四章  A7和M4联合调试3913.png
图34.2.4.1串口打印信息

再次输入启动指令后,蜂鸣器又会继续鸣响。
echo start > /sys/class/remoteproc/remoteproc0/state
34.2.5 编写脚本
以上执行的指令是我们手动输入执行的,如果不想每次手动输入指令,我们可以自己将以上的指令写到一个shell脚本里。我们在/lib/firmware目录下新建一个test.sh脚本,脚本内容如下:
#!/bin/sh

rproc_class_dir="/sys/class/remoteproc/remoteproc0"
fmw_dir="/lib/firmware"

cd /sys/class/remoteproc/remoteproc0

if [ $1 == "start" ]
then
    /bin/echo -n $2 > $rproc_class_dir/firmware
    /bin/echo -n start > $rproc_class_dir/state
fi

if [ $1 == "stop" ]
then
    /bin/echo -n stop > $rproc_class_dir/state
fi
        编写好脚本文件后,执行如下指令给脚本文件可读可写可执行权限:
chmod 777 test.sh
第三十四章  A7和M4联合调试4492.png
图34.2.5. 1给脚本可读可写可执行权限

因为/lib/firmware目录下已经有了atk_mp1_m4.axf文件,我们可以执行如下指令来加载、运行以及停止atk_mp1_m4.axf固件:
/* 加载、启动M4固件 */
./test.sh start atk_mp1_m4.axf
/* 停止M4固件 */
./test.sh stop atk_mp1_m4.axf
第三十四章  A7和M4联合调试4713.png
图34.2.5. 2加载、运行、停止固件

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 02:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表