【STM32MP157 异核通信框架学习篇】(4)驱动文件介绍
* 使能 Mailbox *//* 使能 stm32_ipcc *//* 使能 Remoteproc *//* 使能 stm32_rproc */ CONFIG_STM32_RPROC=y/* 使能 rpmsg_vrtio *//* 使能 rpmsg_tty,可用于虚拟串口 */ CONFIG_RPMSG_TTY=y可以看到,以上选项默认配置为“y”,即默认将相关驱动编译进内核中,我们启动 Lin
文章目录
1 概要
使用正点原子的stm32mp157mini进行RPMSG多核通信试验。
硬件:STM32MP157
软件:STM32CubeIDE / STM32CubeMX
本章节将会介绍相关驱动文件,STM32MP157的A核和M核之间通信底层将会使用这个框架进行消息交互。
2 驱动文件介绍
2.1 Linux 驱动编译配置
Linux 下的 IPCC、Mailbox、Remoteproc、Virtio 和 RPMsg 相关驱动在 Linux 内核下已经默认使能了,打开 Linux 内核源码的 arch/arm/configs/stm32mp1_atk_defconfig 配置文件,可以找到如下配置:
/* 使能 Mailbox */
CONFIG_ARM_SMC_MBOX=y CONFIG_PL320_MBOX=y
/* 使能 stm32_ipcc */
CONFIG_STM32_IPCC=y
/* 使能 Remoteproc */
CONFIG_REMOTEPROC=y
/* 使能 stm32_rproc */ CONFIG_STM32_RPROC=y
/* 使能 rpmsg_vrtio */
CONFIG_RPMSG_VIRTIO=y
/* 使能 rpmsg_tty,可用于虚拟串口 */ CONFIG_RPMSG_TTY=y
可以看到,以上选项默认配置为“y”,即默认将相关驱动编译进内核中,我们启动 Linux系统后,以上驱动已经在内核启动时自行加载了,不需要我们手动去加载相关驱动了。也可以通过 Linux 内核的 menuconfig 配置界面去查看以上驱动的配置选项,例如,执行如下 menuconfig配置指令,在 Device driversMailbox Hardware Support 下可以看到已经默认使能了邮箱驱动,如下图 3.4.1.1 所示:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig
其它的驱动配置选项,也可以在 menuconfig 下找到,这里就不一一列出了。
2.2 Linux 驱动文件
以上是 Linux 下的驱动编译配置选项,之所以可以编译出以上驱动,是因为在 Linux 内核源码下已经有芯片厂商移植好的对应的驱动文件了,无需我们编写驱动,只要编译内核后就可以使用这些驱动了,而我们更应该关注的是如何去使用这些驱动。
2.2.1 IPCC 和 Mailbox 驱动源码
Mailbox 相关说明文档或示例代码如下表 3.4.2.1 所示:
在 Linux 内核源码 drivers/mailbox 目录下的是 Mailbox 和 IPCC 相关的驱动源码文件,如下图 3.4.2.1 所示:
2.2.2 Remoteproc 驱动源码
Remoteproc 相关说明文档或示例代码如下表 3.4.2.2 所示:
在 Linux 内核源码的 drivers/remoteproc 目录下就有 Remoteproc 相关的驱动文件,如下图 3.4.2.2 所示:
2.2.3 Virtio 驱动源码
在 Linux 内核源码的 drivers/virtio 目录下就有 Virtio 相关的驱动文件,如下图 3.4.2.3 所示:
2.2.4 RPMsg 驱动源码
RPMsg 相关说明文档或示例代码如下表 3.4.2.3 所示:
在 Linux 内核源码的 drivers/rpmsg 目录下就有 RPMsg 相关的驱动文件,如下图 3.4.2.4 所示:
2.3 M4 工程驱动文件
2.3.1 OpenAMP 库文件
在前面新建的 M4 工程 RPMsg_TEST 的 OPENAMP 目录以及Middlewares\Third_Party\OpenAMP 目录下可以找到 OpenAMP 库有关的驱动文件,其实这些文件就是从 STM32Cube 的固件包STM32Cube_FW_MP1_V1.2.0\Middlewares\Third_Party\OpenAMP 下拷贝得来的,如下图 3.4.3.1 所示:
我们简单介绍几个重要的文件,如下表 3.4.3.1 所示是:

其它文件我们就不一一进行介绍了,感兴趣的小伙伴可以自行研究这些文件。
OpenAMP 旨在通过AMP的开源解决方案来标准化嵌入式异构系统中操作环境之间的交互,基于现有的 RemoteProc、RPMsg 和 Virtio 的实现,涵盖了生命周期管理、消息传递和底层抽象等操作,OpenAMP 的标准化工作还在进行中,未来还会继续优化并添加更多的功能,OpenAMP源码的结构还是会有变动的。
Linux 下的驱动代码和 OpenAMP 库的代码是比较多的,也比较复杂和不易于理解,对于我们来说,先理解其框架,再基于代码分析就更加容易理解其实现的过程。采用库开发的好处就是不需要我们从 0 到 1 去编写底层的实现,我们只需要在上层调用对应的 API 即可完成对应的功能,这将加快产品应用程序迁移的速度,大大节省了开发时间和开发成本。
3 总结
本章节介绍了相关驱动文件,STM32MP157的A核和M核之间通信底层将会使用这个框架进行消息交互。
4 其他章节
【STM32MP157 异核通信框架学习篇】(1)SMP和AMP架构
【STM32MP157 异核通信框架学习篇】(2)IPCC通信框架
【STM32MP157 异核通信框架学习篇】(3)OpenAMP框架
【STM32MP157 异核通信框架学习篇】(4)驱动文件介绍
【STM32MP157 异核通信框架学习篇】(5)Remoteproc 相关驱动简析 ---- 资源表
【STM32MP157 异核通信框架学习篇】(6)Remoteproc 相关驱动简析 ---- 存储和系统资源分配
【STM32MP157 异核通信框架学习篇】(7)Remoteproc 相关驱动简析 ---- 链接脚本
【STM32MP157 异核通信框架学习篇】(8)Remoteproc 相关驱动简析 ---- 重新划分存储区域
【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (上)
【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (下)
【STM32MP157 异核通信框架学习篇】(11)链接脚本
【STM32MP157 异核通信框架学习篇】(11)链接脚本 – [额外补充: MP157板子存储分配]
【STM32MP157 异核通信框架学习篇】(12)Remoteproc 的使用 [加载和启动M4固件] (上)
【STM32MP157 异核通信框架学习篇】(12)Remoteproc 的使用 [加载和启动M4固件] (下)
更多推荐



所有评论(0)