A53与M4核通过共享内存方式通信,使用rpmsg机制传递数据,做到系统间的通信;
驱动
drivers/rpmsg/imx_rpmsg_tty.c
static struct rpmsg_device_id rpmsg_driver_tty_id_table[] = {
{ .name = "rpmsg-virtual-tty-channel-1" },
{ .name = "rpmsg-virtual-tty-channel" },
{ .name = "rpmsg-openamp-demo-channel" },
{ },
};
MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_tty_id_table);
imx_rpmsg_tty.ko
imx_rpmsg_pingpong.ko
/lib64/modules/4.14.98/
配置
fsl-imx8mm-evk-m4.dts
包含image-fsl-imx8mm-ubox-evk.dts
只开rpmsg,开其他的sail和i2s会导致内核启动报错
#include "fsl-imx8mm-ubox-evk.dts"
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
m4_reserved: m4@0x80000000 {
no-map;
reg = <0 0x80000000 0 0x1000000>;
};
};
&rpmsg{
/*
* 64K for one rpmsg instance:
* --0xb8000000~0xb800ffff: pingpong
*/
vdev-nums = <1>;
reg = <0x0 0xb8000000 0x0 0x10000>;
status = "okay";
};
uboot加载M4内核
0x7e0000 imx8mm_m4_TCM_rpmsg_lite_str_echo_rtos.bin
M4打印:RPMSG String Echo FreeRTOS RTOS API Demo...
加载Image和fsl-imx8mm-evk-m4.dtb
内核启动马上M4打印:Nameservice sent, ready for incoming messages...
Linux下加载驱动
root@OpenWrt:/# modprobe imx_rpmsg_tty
[ 42.182949] imx_rpmsg_tty virtio0.rpmsg-virtual-tty-channel-1.-1.30: new channel: 0x400 -> 0x1e!
[ 42.191966] Install rpmsg tty driver!
M4打印:Get Message From Master Side : "hello world!" [len : 12]
root@OpenWrt:/# ls /dev/ttyRPMSG30 -l
crw-rw---- 1 root dialout 243, 0 Oct 22 23:34 /dev/ttyRPMSG30
root@OpenWrt:/# echo 1111 > /dev/ttyRPMSG30
M4打印:
Get Message From Master Side : "1111" [len : 4]
Get New Line From Master Side
Get Message From Master Side : "test" [len : 4]
Get New Line From Master Side
rpmsg pingpong测试
imx8mm_m4_TCM_rpmsg_lite_pingpong_rtos_linux_remote.bin
加载打印
RPMSG Ping-Pong FreeRTOS RTOS API Demo...
RPMSG Share Base Addr is 0xb8000000
内核启动打印
Link is up!
Nameservice announce sent.
详细打印如下:
Linux下打印:
root@OpenWrt:/# modprobe imx_rpmsg_pingpong
[ 150.747722] imx_rpmsg_pingpong virtio0.rpmsg-openamp-demo-channel.-1.30: new channel: 0x400 -> 0x1e!
root@OpenWrt:/# [ 150.760174] get 1 (src: 0x1e)
[ 150.764588] get 3 (src: 0x1e)
[ 150.769001] get 5 (src: 0x1e)
[ 150.773422] get 7 (src: 0x1e)
[ 150.777828] get 9 (src: 0x1e)
[ 150.782241] get 11 (src: 0x1e)
................................
[ 150.973936] get 95 (src: 0x1e)
[ 150.978437] get 97 (src: 0x1e)
[ 150.982932] get 99 (src: 0x1e)
[ 150.987699] get 101 (src: 0x1e)
[ 150.990846] imx_rpmsg_pingpong virtio0.rpmsg-openamp-demo-channel.-1.30: goodbye!
M4核打印:
RPMSG Ping-Pong FreeRTOS RTOS API Demo...
RPMSG Share Base Addr is 0xb8000000
Link is up!
Nameservice announce sent.
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
.....................
Sending pong...
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
Ping pong done, deinitializing...
Looping forever...