导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    Melis4.0系统架构以及V833/V831-IPC开发QuickStart

    RTOS
    1
    1
    1782
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • q1215200171
      budbool LV 9 最后由 q1215200171 编辑

      本帖转自CSDN:https://blog.csdn.net/tugouxp/article/details/116980346
      作者:papaofdoudou

      Melis4.0简介

      Melis3.0及之前的版本过于严格的模块化设计,增加了系统不必要的复杂性,有过度设计之嫌,随着新的特性和问题fix补丁的不断引入,系统出现了僵化,顽固,粘滞,重复的问题, 使设计难以改变,难以重用,难以做正确的事情,八股文式的模块封装机制,产生了大量重复的代码,不但增加了系统运行时负载,还限制了系统的开放能力和方案容量。有鉴于此,Melis4.0在Melis3.0的基础上,对系统架构进行了重新设计,去除了全系统模块化,混合内核等复杂的内核机制,淡化模块化带来的影响,采用大内核小模块,弱化混合内核机制,增强宏内核特性等措施。增加和完善了对Posix,V4L2, OpenMax,MPP, Debug子系统,USB UVC Class, Linux style的设备管理以及抽象Hardware层的支持,整体开发风格向Linux靠拢,不但使系统更容易使用, 而且在多媒体处理能力上得到了增强。

      Sunxi OS 全家福以及Melis的定位:

      20210819194531636.png

      Melis4.0整体架构如下图所示.

      20210625093921190.png

      内核仍然是基于熊大的rt-thread进行拓展,作为一款有高度的高性能内核,RT-Thread不但可以适配MCU级的应用方案,还可以支撑Linux级的大型应用方案,这是zephyr, freeRTOS等内核无法比拟的,另外,pthread, shell,以及网络组件等部分也是从熊大社区直接拿来用的,在这里向熊大表示深深的感谢 @熊大.RT-Thread, RTOS, 物联网操作系统 - RT-Thread物联网操作系统

      Melis4.0的方案架构如下图所示,其中核心的两大块,Middleware和Framework起到呈上启下,继往开来的作用,呈的是应用端的枝繁叶茂,花团锦簇,启的是内核乃至硬件的各种潜能。

      具体的讲,浅色的ffmpeg/gstreamer组件是未来计划引入的部分,之所以引用gstreamer是因为相对于其它的多媒体框架,Gstreamer整体框架调度性能更优秀,而FFMPEG的跨平台性性能和软编性能够好,可以作为核心编解码组件,两者相辅相成,并不冲突。

      20210903070316383.png

      V4L2,OMX, MPP的引入增强的了系统对多媒体的扩展能力和兼容能力,不但可以降低sensor移植时的难度,还能够有效利用既有Linux上的方案成果,使用户能够快速从Linux向小成本的Melis4.0方案上迁移。

      其中,RTOS HAL存在的目的就是为了屏蔽Sunxi F,V,R三系平台的差异,本来计划用CMSIS,结果搞着搞着,渐渐发现CMSIS面向的主要是MCU级的接口定义,针对偏重型一些的SOC并不适用,所以我就自定义了一套HAL API标准,取名 RTOS-HAL。

      20210917143547205.png

      驱动操作SOP:

      20210917143451526.png

      环境配置:
      配置环境变量:
      20210518134129880.png

      选择工程,公版工程为:v833-smart-doorbell

      20210518135110547.png

      如果需要进行自定义配置,可以在lunch基础上执行make menuconfig

      20210518134330497.png

      如果不需要,PASS掉这一步即可。

      编译:
      执行make -j4,启动多线程编译:
      2021051813522298.png

      打包:
      执行pack,进行打包:
      20210518135248852.png

      烧录:
      20210518134724805.png

      验证:
      启动系统:
      20210802153911843.png

      链接好串口终端,在终端下,输入vin_preview,即可从屏幕端观察到图像输出。
      20210518182524530.png

      Sensor->CSI->ISP->V4L2->VIPP通路显示:
      20210518182902877.png

      Melis4.0 RoadMap
      Melis系统的强项是多媒体处理,未来Melis系统开发的三个方向:

      1.图形图显增强,支持用户界面设计工具.
      2.网络:melis虽然移植了各种各样的协议栈,但支持的模组却不多,这方面有待加强。
      3.开源.

      Melis4.0上的网络
      物联网时代,大家都很关连接能力,那么在Melis上,是如何使用网络的呢?

      关于Melis系统对外挂模组集成的支持这一块,现在基本所有模组都需要下载一个firmware,这个firmware是三方原厂提供,质量保证,驱动这边需要负责对其装载到模组端,运行以及控制进行管理。

      我们则提供了完整的,经过验证过的lwip协议栈,WPA_supplicant实现和稳定的SDIO接口支持,其它的工作包括:

      1.解决一些模组驱动的编译问题,firmware的装在还是驱动自己做的.

      2.sdio驱动适配, 调试。

      3.配置供电,引脚等。

      4.主控主要和wpa_supplicant对接,做指令下发,数据接收。

      5.按照传统的TCP/IP理解的话,主控协议栈都在网络层及以上,驱动层主要处理的都在mac层,驱动层我们不需要太多关心,但是也不全是库,具体看驱动厂商愿意开源多少了。

      另外,不同的模组MAC层的实现不同,分为softmac和fullmac,支持工作量也不一样,softmac需要在SOC端跑mac协议,工作量会大一些,但总体还好.

      Norflash方案一例:
      典型方案的flash layout
      20210607135610860.png

      产品优势
      Melis4.0的一大优势是快启动,体验快起的丝滑:

      快速出图内核配置

      -# CONFIG_BOOTUP_TURBO is not set
      -# CONFIG_DISABLE_ALL_DEBUGLOG is not set
      +CONFIG_BOOTUP_TURBO=y
      +CONFIG_DISABLE_ALL_DEBUGLOG=y
      +CONFIG_SDK_THUMB_MODE=y
      

      同时为了加快启动速度,减少不必要的打印,要把sys_config.fex中的debug_mode配置为0
      2021082414065363.png

      boot0阶段会根据debug_mode来决定是否初始化串口,没有打印,系统会更快的进入应用。

      debug_mode设置为0会带来一个小小的技术性问题,就是由于卡量产固件中也会使用这个配置,没有打印,卡量产、卡升级的进度无法显示出来,用户会误以为卡升级功能卡死,问题误报,实际上只是一个打印,功能仍然是正常的.

      298ms出图效果:
      20210518182524530.png
      20210701121048895.png
      20210610112626783.png

      关于性能:
      固件SIZE大小优化,Melis系统支持全系统Thumb编译,所以最终生成的固件是16位/32位指令混合的形式。可以减少1/3的固件SIZE。

      性能优化,NEON优化在复制内存块时提供了1.5倍的加速。 在melis上,针对支持SIMD的ARM处理器,Melis支持全系统NEON编译,典型的,通过它连接使用的C库就可以看得出来:

      2021082815291241.png

      关于智能应用:
      基于V833平台,运行目标检测网络的用例:
      bd425dd1a80a4d26892a3beaf99a9c62.gif

      USB UVC Camera设备支持:

      UVC Camera设备功配置单:
      8b2f297573e34e3fa7d78431b451336c.png

      重新编译,打包,烧录,启动后,确认是否存在/dev/uvcout设备节点,此节点是用于输出视频流到PC端的节点:
      b2d7ed24f651403b9408bb89592c36d6.png

      用例已经编译到系统中,首先将USB线连接 Mircro USB Port(端侧)和USB-Type A port(PC侧),执行用例命令uvcout:
      358fa8aa421b44ec8382d06291366011.png

      此时,PC侧已有响应:
      300464019e15452b83e7c14e000188cc.png

      用guvcview工具查看:
      3c087ae3dfec46739e6fd5391e1ff805.png

      作为MSC设备挂载:
      有些产品形态在使用过程中,由于外壳的层层保护,内置的TF卡不宜拆装,比如打猎机这种形态,由于常年安装在野外,TF是由产品外壳保护的,这个时候,就需要一种机制将设备里面的数据读出来,Melis4.0支持MSC功能,可以将设备的存储器挂载到PC上直接读取。
      588e0b691d9d4d71aa924785a8f710c8.png

      最终配置如下:
      d986aa208da843a1bed7ef342fa6d9ac.png

      编译,烧录固件,执行mscd命令:
      b3e4519c8d264bd692a16480e0618caf.png

      执行mscd命令后显示如下,红色的部分是打印的调试信息,可忽略。

      903b75a1278d44e0add338ce073f322f.png

      此时,盘符已经在PC上出现了,截图如下:
      fe9b4cd92b724fe1937f15ab7a3bbc7b.png

      ADB调试:
      首先在端侧开启ADBD服务:
      9cdf9c32bbcd452a96b78abe023aee19.png

      重新编译,打包,烧录,启动后,在PC端控制台执行adb shell连接端侧ADBD服务。
      105bc019c4b34f36b6fcd8487c0fc4cc.png

      注意:MSC 和 ADBD属于两个configuration,不能同时使用。

      总结:
      之前和熊大交流过melis新架构和rtt smart架构的变化的对比,熊大意味深长的讲“RTT 拥抱多进程,你们放弃多进程”。熊大说的不假,但是放弃模块化和多进程不一定意味着远离Linux的开发风格,Melis系统可以认为是单进程多线程的应用方案,整个系统就是一个进程,在一个进程中当然可以做到与Linux的风格很像的。

      1 条回复 最后回复 回复 引用 分享 0
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策