0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

异构R5实时系统开发笔记-基于芯驰D9360

米尔电子 2024-06-13 08:01 次阅读

本篇测评由与非网的优秀测评者“短笛君”提供。


本文将介绍基于米尔电子MYD-YD9360商显板的R5协处理器开发方案测试。

本处参考对D9360中的协处理器进行开发测试

开发之前请确认编译环境正常可以正常对镜像进行编译

具体参考之前编译Ubuntu系统文章,自行编译buildroot系统测试

1.1打开RTOS驱动

freeRTOS的源码放在ssdk包下面,我们可以通过图形化界面启动RTOS系统。D9的ssdk图形化界面是通过menuconfig.sh脚本配置打开,此脚本在ssdk/tools下。以D9360为例,如下:

ddj@ubuntu:~/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk$ pwd/home/ddj/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk
~/MYD-JD9X-ubuntu/MYD-JD9X-SDK_V1.0/source/ssdk$ ./tools/menuconfig.sh -b d9360_ref -p ref -c secure

214c9af2-2918-11ef-bd4a-92fbcf53809c.png

2183e412-2918-11ef-bd4a-92fbcf53809c.png

1.2 添加RTOS例程驱动

RTOS系统例程在examples/kunlun/drivers

ddj@ubuntu:~/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk/examples/kunlun/drivers$ ls

21b35c2e-2918-11ef-bd4a-92fbcf53809c.png

21e740ac-2918-11ef-bd4a-92fbcf53809c.png

新建一个abc目录

并配置Kconfig和rules.mk文件

22214036-2918-11ef-bd4a-92fbcf53809c.png


返回driver目录下 配置Kconfig添加ABC去东门模块初始状态和图形界面类型

ABC驱动模块的初始状态和图形界面类型

2253c664-2918-11ef-bd4a-92fbcf53809c.png


在rules.mk文件下,添加如下内容

22849140-2918-11ef-bd4a-92fbcf53809c.png

MODULES += $(LOCAL_DIR)/abc: 如果配置选项 CONFIG_ABC_TEST 为 "y",则会将 $(LOCAL_DIR)/abc 添加到变量 MODULES 中。这意味着当启用了 "ABC Test" 功能时,会将 $(LOCAL_DIR)/abc 模块添加到模块列表中。

R5核数据发送到A55核中

将rpmsg目录下的rpmsg_test.c文件复制到abc.c文件中,该驱动描述如何通过RPMSG协议进行核间通信。我们可以在此程序基础上加入自己的协议,以下是R5核发送“Hello, RPMSG!”字符串到A55核,并打印出接收到的信息的函数。

void send_receive_string(rpmsg_channel_t channel, const char *message) {
int max_payload; struct dcf_ccm_hdr *snd_pkg; struct dcf_ccm_hdr *rcv_pkg; status_t ret;
max_payload = rpmsg_channel_max_payload(channel); snd_pkg = osAlloc(max_payload); rcv_pkg = osAlloc(max_payload); ASSERT(snd_pkg && rcv_pkg);
memset(snd_pkg, 0x0, max_payload); memset(rcv_pkg, 0x0, max_payload);
snd_pkg->dmsg.msg_type = COMM_MSG_CCM_ECHO; snd_pkg->dmsg.opflags |= DCF_MSGF_TMS; snd_pkg->dmsg.msg_len = sizeof(struct dcf_ccm_hdr) - sizeof(struct dcf_message);
strncpy(snd_pkg->data, message, max_payload - sizeof(struct dcf_ccm_hdr));
ret = rpmsg_channel_send(channel, RPMSG_ECHO_EPT_ADDR, snd_pkg, max_payload, 3000); if (ret == RPMSG_SUCCESS) { printf("Sent: %s\n", message); } else { printf("Failed to send message\n"); }
int received_len; ret = rpmsg_channel_recv(channel, rcv_pkg, max_payload, &received_len, 3000); if (ret == RPMSG_SUCCESS) { printf("Received: %s\n", rcv_pkg->data); } else { printf("Failed to receive message\n"); }
osFree(snd_pkg); osFree(rcv_pkg);}

将以上函数添加至abc.c文件内,并在主函数(rpmsg_test)编写调用该函数条件,如下:

const char* message_to_send = "Hello,rpmsg";
if (argc == 0) { rpmsg_test_show(); goto exit; }
if (argc == 2) { test_case = 0; type = atoi(argv[0]); rproc = atoi(argv[1]); } else if (!strcmp(argv[0], "ping")) { test_case = 1; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]); } else if (!strcmp(argv[0], "iperf")) { test_case = 2; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]);}//新添加的条件 else if(!strcmp(argv[0], "send")){ test_case = 3; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]); } else { printf("Unknown cmd %s\n", argv[0]); goto exit; }switch (test_case) { case 0: do_rpmsg_echo_test(channel); break;
case 1: do_rpmsg_ping_test(channel, times); break; case 2: do_rpmsg_iperf_test(channel, times); break;
case 3: send_receive_string(channel, message_to_send); break;
default: printf("Unknown case %d\n", test_case); break; }
//加入串口打印提示(跳至rpmsg_test_show函数)printf("\nTest command:\n"); printf("\trpmsg_test \n"); printf("\trpmsg_test ping \n"); printf("\trpmsg_test iperf \n"); printf("\trpmsg_test send \n");
printf("\ne.g: test ping rpmsg.virtio 10 times with secure, use command:\n"); printf("\trpmsg_test ping 0 1 10\n");


通过5.1小节打开图形化配置界面,进入到Driver and Application Examples/Driver Example Support下,可以看到我们新加的abc test Support驱动配置选项,需要关闭RPMSG Example Application Support选项,如下:

22a8d258-2918-11ef-bd4a-92fbcf53809c.png

22ec756c-2918-11ef-bd4a-92fbcf53809c.png

232938d0-2918-11ef-bd4a-92fbcf53809c.png

23597ffe-2918-11ef-bd4a-92fbcf53809c.png


选中此选项编译进内核,将串口线(debug)接到10_TX,10_RX和GND,打开终端调试工具。编辑source/ssdk/ middleware/rpmsg_service/rpmsg_echo.c文件,添加代码如下:

static int echo_channel_cb(void *data, int len, unsigned long src, void *arg){ rpmsg_channel_t chan = arg; struct dcf_ccm_hdr *ccm_pkg = data; const char *char_data = (char *)data; int ret = 0;
if (ccm_pkg->dmsg.msg_type == COMM_MSG_CCM_ECHO) { ccm_pkg->time[2] = timer_get_current_time(g_syscnt_timer) * g_sdrv_syscnt_dev.cnt_per_us; ret = rpmsg_channel_send(chan, src, data, len, 1000); printf("Sending data (length %d): ", len); for (int i = 8; i < len; i++) { printf("%c ", char_data[i]); } printf("\n"); } else if (ccm_pkg->dmsg.msg_type == COMM_MSG_CCM_ACK) { ret = rpmsg_channel_send(chan, src, (char *)"ACK", 4, 1000); ssdk_printf(SSDK_INFO,"send ACK\n"); } else { ssdk_printf(SSDK_WARNING, "echo_channel_cb: unknown %d bytes from addr %ld\n", len, src); }
if (ret != 0) { ssdk_printf(SSDK_WARNING, "echo_channel_cb: channel send failed\n"); }
return ret;}

A55发送数据给R5

自定义一个发送和接收字符串的函数,如下:

int send_receive_string(int fd, const char *send_str,int ntimes, int seconds) { int i = 0, j = 0; int size, bytes_rcvd, bytes_sent; long elapse = 0;
err_cnt = 0; i_payload = (struct _payload *)malloc(sizeof(struct _payload) + payload_max_size); r_payload = (struct _payload *)malloc(sizeof(struct _payload) + payload_max_size);
if (i_payload == 0 || r_payload == 0) { printf("ERROR: Failed to allocate memory for payload.\n"); return -1; }
if (seconds) gettimeofday(&start_test, NULL);
i_payload->magic = 0xA5;
for (j = 0; j < ntimes; j++) { i_payload->num = i; i_payload->size = size; strcpy(i_payload->data, send_str);
if (verbose) printf("\r\n sending payload number"); if (verbose) printf(" %d of size %lu\r\n", i_payload->num, (sizeof(struct _payload)) + strlen(i_payload->data));
bytes_sent = write(fd, i_payload, sizeof(struct _payload) + strlen(i_payload->data)); if (bytes_sent <= 0) { if (verbose) { perror("\r\n Error sending data\n"); break; } else fprintf(stderr, "#");
err_cnt++; continue; } printf("send string:%s\n",i_payload->data);
r_payload->num = 0; bytes_rcvd = read(fd, r_payload, sizeof(struct _payload) + payload_max_size); while (bytes_rcvd <= 0) { usleep(10000); bytes_rcvd = read(fd, r_payload, sizeof(struct _payload) + payload_max_size); } r_payload->data[bytes_rcvd] = '\0'; printf("receive string:%s\n",r_payload->data);
if (interval) sleep(interval); }
free(i_payload); free(r_payload);
return 0;}

238bd062-2918-11ef-bd4a-92fbcf53809c.png


在main函数内添加新增函数条件:

23b79170-2918-11ef-bd4a-92fbcf53809c.png

编辑source/linux/ drivers/rpmsg/virtio_rpmsg_bus.c文件,代码如下:

23edcb28-2918-11ef-bd4a-92fbcf53809c.png

242280c0-2918-11ef-bd4a-92fbcf53809c.png


保存所有代码

编译系统 烧录

21e740ac-2918-11ef-bd4a-92fbcf53809c.png

1.5结果显示

在R5核调用rpmsg_test例程,向A55核发送信息

R5界面>rpmsg_test send 0 3 1>Sent: 123456789Received: 123456789
>rpmsg_test send 1 3 1>Sent: 123456789Received: 123456789
A55界面root@myd-jd9x:~# [ 22.223170] virtio_rpmsg_bus virtio0: virtio send susses[ 34.943644] sd,rpmsg-ipcc soc:ipcc@1: ipcc send susses

在A55核调用echo_test例程,向R5发送信息,打印如下:

A55界面root@myd-jd9x:~# echo_test -d virtio0.rpmsg-echo.-1.30 -c 1
Echo test startupdate rpmsg-mtu=496 from kernelsend string:Hello,RPMsg!receive string:Hello,RPMsg!
R5界面>Sending data (length 20): H e l l o , R P M s g !


MYC-YD9360核心板及商显板

  • 采用国产CPU:集成了6个ARM Cortex-A55@1.6GHz 高性能CPU和1个ARM Cortex-R5@800MHz;
  • 高性能的高安全HSM安全的处理器,支持TRNG、AES、RSA、SHA、SM2/3/4/9;
  • 它包含100GFLOPS 3D GPU以及H.264和H.265/VP8/VP9视频编/解码器,三屏异显;
  • 集成 PCIe3.0,USB3.0,2x千兆TSN以太网,4xCAN-FD,16xUART,SPI 等丰富的外设接口
  • 工业级-40℃~85℃,邮票孔324PIN引脚,尺寸为52mmx50mm。
  • 应用:高端商显、新一代电力智能设备、工业互联网设备、工业控制设备、工业机器人、工程机械、轨道交通等

247147dc-2918-11ef-bd4a-92fbcf53809c.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19404

    浏览量

    230958
  • 实时系统
    +关注

    关注

    0

    文章

    38

    浏览量

    14504
  • 米尔电子
    +关注

    关注

    0

    文章

    113

    浏览量

    486
收藏 人收藏

    评论

    相关推荐

    国产六核CPU,三屏异显,赋能新一代商显

    当今时代,以数字化、网络化、智能化为特征的第四次工业革命正在进行,伴随着国内汽车新能源的普及,加速了国产高安全芯片的快速发展,D9360推出的一款六核CPU的高度集成、低功耗化、高安全性芯片
    发表于 12-22 18:07

    【米尔-D9360商显板试用评测】2、配置QT开发环境

    【前言】 D9360商显板,开发显示界面,安装QT的开发环境是迈出的第一步,所谓万丈高楼平地起。迈开这一步,花了我整整两天的时间,在这里先要给米尔的技术支持点个赞,特别是李工,耐心的指导我,迈出
    发表于 04-01 21:42

    【米尔-D9360商显板试用评测】3、LED闪起来

    板,就得到了一个闪烁的LED的效果了: 【总结】 本次实验,实现了QT定时器在米尔-D9360商显板上的运行,相比MCU开发板,有了QT的界入,在程序
    发表于 04-02 18:00

    【米尔-D9360商显板试用评测】成功解决QCamera的模块调用,并编写简单的查找摄像头程序

    鉴于【新提醒】【米尔-D9360商显板试用评测】QT5添加 multimedia multimediawidgets,提示找不到模块 - 米尔电子 - 电子技术论坛 - 广受欢迎的
    发表于 04-07 18:12

    【米尔-D9360商显板试用评测】米尔-D9360商显板开发环境搭建

    媒体方面的应用。 米尔-D9360商显板做工优秀,PCB线路规整,芯片布局合理,各种元器件毫不节省,从板上密密麻麻的黄色贴片钽电容可见一斑。 二、开发板网络配置 简单点,直接修改
    发表于 04-09 22:39

    【米尔-D9360商显板试用评测】使用ffmpeg实现远程视频监控

    【硬件】 1、米尔-D9360商显板 2、usb摄像头 【软件】 1、ffmpeg 2、EasyDarwin 3、vlc播放器 【实现步骤】 1、从ffmpeg下载aarch64编译好的版本
    发表于 04-11 13:07

    国产上运行TinyMaxi轻量级的神经网络推理库-米尔基于D9国产商显板

    本篇测评由优秀测评者“短笛君”提供。本文将介绍基于米尔电子MYD-YD9360商显板(米尔基于D9360国产开发板)的TinyMaxi轻
    发表于 08-09 18:26

    基于STM32的USB程序开发笔记 汇总

    忙了一下午终于有时间整理了,基于STM32的USB程序开发笔记汇总,需要的亲们点击链接阅读哈!{:4_95:}基于STM32的USB程序开发笔记(一)https://bbs.elecfans.com
    发表于 03-20 16:08

    迅为RK3568开发板Android11系统开发笔记分享

    1、迅为RK3568开发板Android11系统开发笔记Android11 预安装应用功能在进行本章节时,需要将迅为提供的Android11源码编译通过。Android11上的应用预安装功能,主要
    发表于 08-25 18:06

    【米尔-D9开发板- 国产平台试用】-- 01 -- 开箱上电

    ,那么接下来说一下关于芯片的一些介绍吧。 D9其实是一个系列的代称,这个系列有多款芯片自称,单核、四核、八核,配套的还有R5实时协处理
    发表于 08-16 17:45

    STM32的USB程序开发笔记

    STM32的USB程序开发笔记
    发表于 09-29 14:55 27次下载
    STM32的USB程序<b class='flag-5'>开发笔记</b>

    六核国产CPU,自主可控、安全可信的高性能显控方案

    前段时间,米尔上市了D9系列的国产核心板和开发板。这款核心板既能跑安卓、Linux、RTOS系统,还有单核、双核、
    的头像 发表于 08-31 08:01 1046次阅读
    六核国产CPU,自主可控、安全可信的高性能显控方案

    新品!D9-Pro六核国产CPU,自主可控、安全可信的高性能显控方案

    前段时间,米尔上市了D9系列的国产核心板和开发板。这款核心板既能跑安卓、Linux、RTOS系统,还有单核、双核、
    的头像 发表于 09-01 13:55 1496次阅读
    新品!<b class='flag-5'>芯</b><b class='flag-5'>驰</b><b class='flag-5'>D</b>9-Pro六核国产CPU,自主可控、安全可信的高性能显控方案

    米尔-D9360商显板-国产六核CPU开发

    D9-Pro 自主可控、安全可信的高性能商显方案采用国产CPU:集成了6个ARM Cortex-A55@1.6GHz 高性能CPU和1个ARM Cortex-R5@800MHz;高
    发表于 01-09 14:17 2次下载

    米尔-D9360商显板开发环境搭建

    一、硬件介绍 米尔-D9360商显板搭载的SoC为D9360。   是公司推出的高性能嵌
    的头像 发表于 04-10 09:42 1025次阅读
    米尔-<b class='flag-5'>芯</b><b class='flag-5'>驰</b><b class='flag-5'>D9360</b>商显板<b class='flag-5'>开发</b>环境搭建