导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. hahage168
    3. 最佳
    H
    • 资料
    • 关注 0
    • 粉丝 1
    • 我的积分 494
    • 主题 2
    • 帖子 13
    • 最佳 5
    • 群组 0

    hahage168 发布的最佳帖子

    • T113开发板双核异构risc-v处理器的使用-基于tina5平台

      全志T113-i是一款双核Cortex-A7国产工业级处理器平台,并内置玄铁C906 RISC-V和HiFi4 DSP双副核心,可流畅运行Linux系统与Qt界面,并已适配OpenWRT系统、Preempt Linux系统。
      而其中的RISC-V属于超高能效副核心,标配内存管理单元,可运行RTOS或裸机程序。T113的主核运行Linux(Openwrt或者Preempt Linux)进行人机界面的交互和应用流程,而RISC-V则是后台
      英雄,可进行大数据数据采集,或者相关编码器的控制等,降低主核被中断的次数,大大提供了主核的运行效率。那么到底这个双核异构怎么用呢?今天盈鹏飞嵌入式就与你分享。

      以盈鹏飞嵌入式SBC-T113主板为例(以T113-i为主控的主板),我们先介绍下主板特性:

      产品特性

      • 采用Allwinner公司Cortex-A7双核T113-i处理器,运行最高速度为1.2GHZ;

      • 列表内置64-bit XuanTie C906 RISC-V协处理器;

      • 列表支持JPEG/MJPEG视频编码,最大分辨率1080p@60fps;支持多格式1080P@60fps视频解码 (H.265,H.264, MPEG-1/2/4);

      • 列表支持双通道LVDS/MIPI-DSI,分辨率最高1920x1080;

      • 列表支持512-1G Bytes DDR3 SDRAM;

      • 列表支持SPI NAND存储和启动(默认:256MB;可选128MB)或者EMMC启动(默认:4GB,最大32GB);

      • 列表支持四路USB2.0 HOST;

      • 列表支持六路RS232通信;

      • 列表支持双路CAN BUS通信(隔离);

      • 列表支持双路以太网,一路10/100M;一路10/100/1000M;

      • 列表稳定的操作系统的支持,可预装Ubuntu20.04/LINUX 5.4 Preempt/Tina5.0;

      • 列表标准3.5寸主板, 尺寸为:146*102MM;

      SBC-T113产品功能图:

      SBC-T113.png

      1、RTOS系统概述

      1.1、概述

      全志Tina Linux SDK中包含了RTOS系统,该系统是基于FreeRTOS内核的软件开发包,包含了系统开发用到的内核源码、驱动、工具、组件与应用程序包。通过Makefile脚本和Kconfig配置文件,使得用户可以通过menuconfig进行个性化裁减,编译出一个可以直接烧写到机器上运行的RTOS系统软件。

      1.2、系统框图

      e28014db-faf1-40b1-8aee-4c82580cf06e-image.png

      RTOS 系统框图如图所示,仅从软件的角度来看,从下至上分为内核层、组件层、应用层三个层次。各层次主要内容如下:

      • Kernel:内核层包括 FreeRTOS核心系统、文件系统、网络系统、BSP驱动等。

      • Component:组件层包括控制台、多媒体、功耗管理、OTA、音频系统、显示系统、图像采集等。

      • APP:应用层包括各种应用 demo。

      发布在 T Series
      H
      hahage168
    • T113开发板TINA5平台TVIN接口的测试(使用trecorderdemo)

      T113平台tina5使用TVIN接口开发连载
      T113平台具有两个TVIN接口,在全志内部通常把 TNIN 模块称为 TVD 或者 TVIN 模块,是一种用于采集模拟 CVBS视频的硬件模块,可将输入的 CVBS 信号或 YPbPr 信号转换成 YUV 信号。T113平台(sun8iw20p1)双通道共用一个ADC,使用时需切换,因此配置时也认为该平台只有单通道。以下是它内核层的总体框架:
      99b61885-6037-46bf-af9e-2289857c9790-image.png
      从以上框架得知,tvd 驱动只是负责把 tvd 的硬件描述完成并注册进 V4L2 框架,具体对 tvd 的使用还是放在用户态的应用层。也就说,在软件层面,使用V4L2的相关程序即可。因此V4L2的相关驱动在内核上务必选择上,否则无法工作。这里归纳关于用户态操作使用 tvd 模块的流程。 演示程序的操作过程(操作单路 tvd):

      1. 用 open 打开/dev/videox 节点,执行执行Ioctl:VIDIOC_S_INPUT 完成通道和 ADC 的 mapping,然后执行 Ioctl:VIDIOC_G_INPUT 确认通道和 ADC mapping 正确
      2. 执行 ioctl:VIDIOC_G_FMT,用于初始化 format以及获取当前 tvd 的锁状态
      3. 执行 ioctl:VIDIOC_S_FMT,定制 format,包括颜色空间,一般来说 V4L2_PIX_FMT_NV61 要好于 V4L2_PIX_FMT_NV12,多路拼接的时候,在这个 ioctl 中检测锁信号
      4. 执行 ioctl:VIDIOC_REQBUFS,通过 V4L2 框架申请 buffer
      5. 执行 ioctl:VIDIOC_QUERYBUF,获取 buffer
      6. 执行 ioctl:VIDIOC_QBUF,将获取到的 buffer 入列,供 tvd 模块写入数据
      7. 执行 ioctl:VIDIOC_STREAMON,使能 tvd 模块工作采集输入数据
      8. 通过 poll/select 的方式查询 dev/videox 节点,如有数据更新,执行 ioctl:VIDIOC_DQBUF 取出已经写好数据的 buffer
      9. 执行 ioctl:VIDIOC_QBUF,将步骤 9 中已经取出数据的 buffer 重新入列,供 tvd 模块写入数据
      10. 循环步骤 9‑10,直至需要停止tvd模块,执行ioctl:VIDIOC_STREAMOFF,关闭tvd模块
      11. 用 close 释放获取的 fd

      以下我们以盈鹏飞嵌入式SBC-T113S主板为例(该主板运行tina5.0),

      SBC-T113S产品特性:

      • 采用Allwinner公司Cortex-A7双核T113-S3/S4处理器,运行最高速度为1.2GHZ;

      • 内置64-bit XuanTie C906 RISC-V协处理器(仅T113-S4支持);

      • 支持JPEG/MJPEG视频编码,最大分辨率1080p@60fps;支持多格式1080P@60fps视频解码 (H.265,H.264, MPEG-1/2/4);

      • 支持RGB666/LVDS/MIPI-DSI,分辨率最高1920x1080;

      • 支持128-256M Bytes DDR3 SDRAM,其中T113-S3内置128MB;T113-S4内置256MB;

      • 支持SPI NAND存储和启动(默认:256MB)或者EMMC启动(默认:4GB,最大32GB);

      • 支持一路USB2.0 OTG(设计为TYPE-A接口);支持二路USB2.0 HOST;

      • 支持七路RS232通信或者6路RS232和1路RS485(非隔离);

      • 支持一路CAN BUS通信(非隔离);

      • 支持一路10/100M以太网;

      • 稳定的操作系统的支持,可预装LINUX 5.4(Preempt)或者OpenWRT;

      • 经典尺寸主板,尺寸为120*100MM;

      SBC-T113S产品功能评估图:
      SBC-T113S接口标示图CN_带序号 - 240805(A).jpg

      从内核配置到演示程序一一介绍;首先按照如下连接线路把SBC-T113S和摄像头连接起来:
      SBC-T113S主板可选配CVBS摄像头模块,配套转接线可接入CN27端口中,原理图如下:

      a0101c1c-2332-4f7e-b47f-40e827f48582-image.png

      以下是SBC-T113S主板与摄像头的连接示意图:
      aa9032ec-dce4-4d5f-8900-1854688a35c3-image.png

      说明:AV视频线的3.5mm一端插入主板的CN27,AV视频线的RCA白色莲花头是TVIN0信号输入;RCA红色莲花头是TVIN1信号输入;RCA黄色莲花头是TVOUT信号输出。
      图片中的AV一拖三音视频线是非标准的,线序定义是不统一的,用户获得连接线后最好用万用表测量下,保证线路连接的正确。以下是我司提供的AV一拖三音视频线的定义:
      628ed6b9-4be1-49db-ab16-eae03864780f-image.png

      发布在 其它全志芯片讨论区
      H
      hahage168
    • 回复: T113开发板双核异构risc-v处理器的使用-基于tina5平台

      2、RTOS SDK目录结构

      rtos
      ├──board	#包含各SoC板级配置目录
      │└──mr527_e906	#mr527_e906板级配置目录
      │└──t113_s3p_c906	#t113_s3p_c906板级配置目录
      │└──t113_s4_c906	#t113_s4_c906板级配置目录
      │└──t113_s4p_c906	#t113_s4p_c906板级配置目录
      │└──XXX	#XXX平台板级配置目录
      ├──envsetup.sh	#SDK环境初始化脚本
      ├──lichee
      │├──dsp	#DSP FreeRTOS系统
      │├──rtos	#C906/E906FreeRTOS系统
      │├──rtos components#FreeRTOS公共组件
      │└──rtos hal	#BSP驱动
      └──tools	#打包相关工具脚本目录
      
      

      所使用RTOS SDK目录结构如上所示,主要包括如下几个关键目录:
      board:板级配置目录,用于存放芯片方案的配置文件,主要包括系统配置文件sys_config.fex等。
      lichee/dsp:存放DSPFreeRTOS系统、组件、应用。
      lichee/rtos:存放E906FreeRTOS系统、组件、应用。
      lichee/rtos components:公共组件目录,lichee/dsp与lichee/rtos都可以使用该组件。
      lichee/rtos hal:BSP驱动目录,用于存放各种驱动代码。对lichee/dsp与lichee/rtos通用。
      tools:工具目录,用于存放编译打包相关的脚本、工具等。
      下面对lichee/rtos、lichee/rtos hal目录进行详细说明。lichee/dsp目录与lichee/rtos目录类似,此处不做介绍。

      2.1、lichee/rtos目录

      ├──arch	#处理器架构相关
      ├──build	#编译临时文件输出目录
      ├──components	#组件
      ├──drivers#驱动
      ├──include#头文件
      ├──kernel#FreeRTOS内核#方案工程
      ├──projects
      ├──scripts
      └──tools#工具链
      
      

      lichee/rtos目录主要包括arch(架构相关)、components(组件)、drivers(驱动)、include(头文件)、kernel(内核)、projects(工程)、toos(工具链)等目录,下面对常用重要目录分别进行介绍。

      2.1.1、arch目录

      arch目录主要放置跟SoC架构相关的内容,每个SoC单独目录管理,主要包括跟risc v架构相关的ARCH初始化、中断处理、异常处理、内存映射相关功能的实现。

      lichee/rtos/arch/
      ├──common
      └──risc v
      ├──arch.mk
      ├──c906
      ├──common
      ├──e906
      ├──includes
      ├──Kconfig
      ├──Makefile
      ├──sun55iw3p1
      └──sun8iw20p1
      
      

      2.1.2、components目录

      components 目录包含 allwinner 和第三方的组件。

      lichee/rtos/components/
      ├──aw
      │├──blkpart
      │├──bluetooth
      │├──csi
      │├──devfs
      │├──healthd
      │├──......
      │├──watchpoint
      │└──wireless_video
      ├──common >../../rtos components
      └──thirdparty
      ├──common
      ├──console
      ├──cplusplus
      ├──elmfat
      ├──finsh_cli
      ├──......
      └──vfs
      
      

      2.1.3、drivers目录

      drivers目录包含所需的外设驱动,主要包括各外设控制器驱动的具体实现(hal软连接)以及OSAL层接口(osal)。

      lichee/rtos/drivers/
      ├──drv
      ├─ CPUfreq	#POSIX头文件
      ├──leds
      ├── uart
      ├──.....
      ├── wireless
      ├─hal ->.../../rtos-hal/
      └──osal
      
      

      2.1.4、include 目录

      include 目录统一管理各模块提供的数据结构定义及函数声明。

      lichee/rtos/include/ 
      ├── arch 
      # 架构相关头文件 
      ├── FreeRTOS_POSIX # POSIX头文件 
      ├── ...... 
      └── vsprintf.h
      
      

      2.1.5、kernel目录

      kernel目录主要包含FreeRTOS的kernel源码,全志实现的系统功能相关代码。

      lichee/rtos/kernel/
      ├──FreeRTOS orig
      │└──Source
      └──Posix
      

      2.1.6 projects 目录

      projects目录下的每一个子目录代表一个project,实现main入口,选择不同的project编译出来的bin具有不同功能,每个project有独立的FreeRTOSConfig配置。例如t113-s4,其对应于t113_s4_c906子目录,这个子目录下面根据应用的不同建立不同的应用配置,如下有evb1_auto应用和evb1_auto_fastboot_video应用。

      rtos/lichee/rtos/projects/t113_s4_c906/
      ├── evb1_auto
      │   ├── defconfig
      │   ├── defconfig_org
      │   ├── freertos.lds.S
      │   ├── Kconfig
      │   ├── Makefile
      │   └── src
      │       ├── alsa_config.c
      │       ├── assert.c
      │       ├── card_default.c
      │       ├── FreeRTOSConfig.h
      │       ├── hooks.c
      │       └── main.c
      ├── evb1_auto_fastboot_video
      │   ├── defconfig
      │   ├── freertos.lds.S
      │   ├── Kconfig
      │   ├── Makefile
      │   └── src
      │       ├── alsa_config.c
      │       ├── assert.c
      │       ├── card_default.c
      │       ├── FreeRTOSConfig.h
      │       ├── hooks.c
      │       └── main.c
      └── Makefile
      
      

      2.1.7、tools目录

      这个目录主要包含一些预编译好的交叉编译工具链。

      xxx@xxx:lichee/rtos/tools$ ls -al
      total 663248
      drwxrwxr-x  3 ping ping      4096 Oct 21 14:28 .
      drwxrwxr-x 13 ping ping      4096 Oct 21 16:02 ..
      -rw-rw-r--  1 ping ping 103333888 Jan  8  2024 gcc-arm-melis-eabi-8-2019-q3-update-linux.tar.bz2
      -rw-rw-r--  1 ping ping 106566166 Jan  8  2024 gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
      -rwxrwxr-x  1 ping ping 137020992 Jan  8  2024 gcc-arm-none-eabi-8-2019-q3-update-win32.zip
      drwxr-xr-x  9 ping ping      4096 Oct 21 14:29 riscv64-elf-x86_64-20201104
      -rwxrwxr-x  1 ping ping 164604965 Jan  8  2024 riscv64-elf-x86_64-20201104.tar.gz
      -rwxrwxr-x  1 ping ping 167614189 Jan  8  2024 Xuantie-900-gcc-elf-newlib-mingw-V2.6.1-20220906.tar.gz
      xxx@xxx:lichee/rtos/tools$
      
      

      目前risc v基于GCC8.4.0的交叉编译器。

      xxx@xxx:lichee/rtos/tools$./riscv64-elf-x86_64-20201104/bin/riscv64-unknown-elf-gcc -v
      Using built-in specs.
      COLLECT_GCC=./riscv64-elf-x86_64-20201104/bin/riscv64-unknown-elf-gcc
      COLLECT_LTO_WRAPPER=/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/tools/riscv64-elf-x86_64-20201104/bin/../libexec/gcc/riscv64-unknown-elf/8.4.0/lto-wrapper
      Target: riscv64-unknown-elf
      Configured with: /ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/build/../source/riscv/riscv-gcc/configure --target=riscv64-unknown-elf --with-mpc=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/lib-for-gcc-x86_64-linux/ --with-mpfr=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/lib-for-gcc-x86_64-linux/ --with-gmp=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/lib-for-gcc-x86_64-linux/ --prefix=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/install --disable-shared --disable-threads --enable-languages=c,c++ --with-system-zlib --enable-tls --enable-libgcctf --with-newlib --with-sysroot=/ldhome/software/toolsbuild/slave/workspace/riscv64_build_elf_x86_64/install/riscv64-unknown-elf --with-native-system-header-dir=/include --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --src=../../source/riscv/riscv-gcc --with-pkgversion='T-HEAD RISCV Tools V1.10.2 B20201104' --enable-multilib --with-abi=lp64d --with-arch=rv64gcxthead 'CFLAGS_FOR_TARGET=-Os  -mcmodel=medany' 'CXXFLAGS_FOR_TARGET=-Os  -mcmodel=medany' CC=gcc CXX=g++
      Thread model: single
      gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.2 B20201104)
       
      

      2.2、lichee/rtos hal目录

      lichee/rtos hal目录为BSP驱动目录,用于存放各种驱动代码。lichee/rtos/drivers目录下的rtos hal子目录软链接到该目录,下面对该目录进行介绍。

      lichee/rtos hal
      ├──hal	#BSP驱动代码
      ├──include	#驱动相关头文件
      └──tools
      

      lichee/rtos hal目录主要包括hal(BSP驱动代码)、include(驱动相关头文件)等目录,下面分别对其进行介绍。

      2.2.1、hal目录

      hal目录主要包含各外设驱动代码以及驱动测试代码,source子目录为驱动代码,test子目录为驱动测试代码

      lichee/rtos hal/hal
      ├──Makefile
      ├──source
      │├──ccmu
      │├──gpio
      │├──......
      │├──uart
      │└──watchdog
      └──test
      ├──ccmu
      ├──gpio
      ├──......
      ├──uart
      └──watchdog
      

      2.2.2、include目录

      include目录主要包含驱动相关头文件以及系统相关接口头文件。

      lichee/rtos hal/include
      ├──hal
      │├──aw alsa lib
      │├──aw_common.h
      │├──......
      │├──sunxi_hal_usb.h
      │├──sunxi_hal_watchdog.h
      │└──video
      └──osal
      ├──hal_atomic.h
      ├──hal_cache.h
      ├──......
      ├──hal_waitqueue.h
      └──hal_workqueue.h
      
      
      发布在 T Series
      H
      hahage168
    • 回复: T113开发板双核异构risc-v处理器的使用-基于tina5平台

      8、RTOS系统定制开发

      此处以在rtos/components/aw目录下创建一个简单的软件包为例,帮助客户了解RTOS环境,为RTOS系统定制开发提供基础。
      RTOS环境下的软件包主要由三部分组成,源文件,Makefile,Kconfig,如下:

      hello_world
      ├──hello_world.c
      ├──Kconfig
      └──Makefile
      
      

      其中Makefile指定该模块的编译规则,Kconfig则指定该模块的编译配置,从而达到功能可裁剪,镜像文件大小可灵活配置的目的。
      示例软件包实现简单的打印字符串“hello,world!”的功能,如下:

      #include<stdio.h>#include<
      intcmd_hello_world(void)
      {
      printf("hello,world!\n");return0;
      }
      FINSH_FUNCTION_EXPORT_CMD(cmd_hello_world,hello_world,helpforhello_world)
      /*这一行表示将函数cmd_hello_world封装成一个名为hello_world的命令,在RV控制台输入hello_world,即运行cmd_hello_world函数,最后一个参数为帮助信息。此外,头文件需要加上hal_cmd.h.*/
      
      

      Kconfig的写法如下:

      configCOMPONENT_HELLO_WORLD
      bool"HELLO_WORLDSupport"defaultn
      defaultn
      help
      supporthello_worldcommand.
      
      

      Kconfile的写法如下:

      obj-$(CONFIGCOMPONENTHELLOWORLD)+=hello_world.o
      

      此外,需要在上层目录的Kconfile以及Kconfig中加上该软件包,如下:

      上层Makefile
      obj-$(CONFIGCOMPONENT_HELLO_WORLD)+=helloworld
      
      上层Kconfig
      sourcecomponents/aw/hello_world/Kconfig
      
      

      开发完成后,运行mrtos_menuconfig,选中该模块对应的CONFIG后退出,然后mrtos进行编译,这样新增的软件包便可以编译到RTOS镜像文件中了。
      将RTOS镜像文件移动到TinaLinux环境下重新编译打包,新生成的固件打包烧录进开发板后,启动RV核,在RV核控制台输入help命令。

      ca1b9cd8-13d0-4c04-8044-b0484894ee2c-image.png

      可以看到有新增的hello_world命令,控制台输入hello_world命令,控制台输出如下:

      hello,world!
      

      RTOS下一个简单的软件包便创建成功了。

      发布在 T Series
      H
      hahage168
    • 回复: T113开发板双核异构risc-v处理器的使用-基于tina5平台

      4、异构双核通信简介

      本章节以SBC-T113S4主板为例,SBC-T113S4采用的处理器是T113-S4,该处理器集成了双核Cortex-A7,同时集成了RISC-V核C906,异构双核系统通讯在硬件上使用的是 MSGBOX,在软件层面上使用的是 AMP 与 RPMsg 通讯协议。其中 Cortex-A7 上基于 Linux 标准的 RPMsg 驱动框架,C906基于 OpenAMP 异构通信框架。

      4.1、AMP与RPMsg简要介绍

      T113-S4所带有的 A7 主核心与 C906 辅助核心是完全不同的两个核心,为了最大限度的发挥他们的性能,协同完成某一任务,所以在不同的核心上面运行的系统也各不相同。这些不同架构的核心以及他们上面所运行的软件组合在一起,就成了 AMP 系统 (Asymmetric Multiprocessing System, 异构多处理系统)。

      由于两个核心存在的目的是协同的处理,因此在异构多处理系统中往往会形成 Master - Remote 结构。主核心启动后启动从核心。当两个核心上的系统都启动完成后,他们之间就通过 IPC(Inter Processor Communication)方式进行通信,而 RPMsg 就是 IPC 中的一种。
      在AMP系统中,两个核心通过共享内存的方式进行通信。两个核心通过 AMP 中断来传递讯息。内存的管理由主核负责。

      cfd10cb6-c6d4-49a5-b2a3-06f4b4409223-image.png

      AMP 系统在每个通信方向上都有两个缓冲区,分别是 USED 和 AVAIL,这个缓冲区可以按照 RPMsg 中消息的格式分成一块一块链接形成一个环。

      d78996c4-f094-4d33-9741-d0ae8a54dd95-image.png

      当主核需要和从核进行通信的时候可以分为四步:
      (1)主核先从USED中取得一块内存(Allocate)
      (2)将消息按照消息协议填充
      (3)将该内存链接到 AVAIL 缓冲区中(Send)
      (4)触发中断,通知辅助核有消息处理

      3eb8ec1f-b7d7-44fb-8641-d553360d6c25-image.png

      反之,从核需要和主核通信的时候也类似:
      (1)从核先从AVAIL中取得一块内存(Allocate)
      (2)将消息按照消息协议填充
      (3)将该内存链接到 USED 缓冲区中(Send)
      (4)触发中断,通知主核有消息处理。

      6ef49569-310c-4568-99be-628bd703d3a3-image.png

      4.2、RPMsg协议

      既然 RPMsg 是一种信息交换的协议,与TCP/IP类似,RPMsg 协议也有分层,主要分为三层,分别是传输层、MAC层和物理层。

      c374526e-80c6-46fb-a981-36db50408a82-image.png

      其中 MAC层 的 VirtIO 是一种I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化 Hypervisor 中的一组通用 I/O 设备的抽象。 提供了一套上层应用与各 Hypervisor 虚拟化设备之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率。
      RPMsg 总线上的消息都具有以下结构,包含消息头和数据两个固定的部分,该消息格式的定义位于drivers/rpmsg/virtio_rpmsg_bus.c中,具体定义如下:

      struct rpmsg_hdr {
          u32 src;
          u32 dst;
          u32 reserved;
          u16 len;
          u16 flags;
          u8 data[];
      } __packed;
      
      

      4.4、RPBuf通信

      由于RPMsg不适合大数据通信,全志公司提供了大数据传输的办法-RPBuf。
      RPBuf 全志基于 RPMsg 开发的一套通信机制,其实现原理是使用 RPMsg 传输数据的地址,而不是数据的本身,避免了数据的多次拷贝以及每次传输不能大于 496 字节的限制。
      rpbuf 中使用名字和长度来唯一标识一个 buffer,故不能创建相同名字的 buffer。
      rpbuf 中的 buffer 有 3 个状态:

      1. remote_dummy_buffers:该 buffer 远端已创建,本地未创建
      2. local_dummy_buffers:该 buffer 本地已创建,远端未创建
      3. buffers:远端、本地已创建,此时 buffer 才可用 后续章节将介绍如何定制系统并进行RPBuf通信。

      4.5、SBC-T113S主板的TinaLinux与Freertos通信

      SBC-T113主板运行的是Tina Linux,提供 AMP 与 RPMsg 对接 C906

      1. Linux remoteproc 管理控制 C906
      2. RPMsg 与 C906 通讯

      4.5.1、C906-FreeRTOS系统

      T113-S4的辅助核心 C906 上运行的是FreeRTOS操作系统。其独立于 A7 主核心中的 Linux 系统,可以独立运行。在FreeRTOS中,提供 OpenAMP 软件框架来与 A7 Linux 系统进行通信。

      • 提供了处理器的生命周期管理(LCM,Life Cycle Management),与 Linux 的remoteproc 兼容

      • 提供了处理器间的消息传输机制,与 Linux 的 RPMsg 兼容

      4.5.2、异构系统启动流程

      首先,由芯片内部的 BROM 寻找启动介质,在 SBC-T113主板上便是 eMMC 储存器(也有从NAND启动的版本)。找到启动介质后会运行其中的 BOOT0 代码。BOOT0 会在 A7 主核心中运行Linux 系统,也会在C906核心中运行RTOS系统。启动的两个系统是独立运行的。

      29df8a39-322f-4f63-b7a3-35ba7d5ddb91-image.png

      发布在 T Series
      H
      hahage168
    • 1 / 1