导航

    全志在线开发者论坛

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

    aldfaaa 发布的帖子

    • 超4K分辨率(2888x2888)的视频流还可以通过H265硬解吗?

      硬要用tplayerdemo播放2888x2888是可以运行, 但是画面(从上之下)的下半部分会出现绿油油马赛克失真.
      同样的, 通过decodertest取YV12同样发现上述的失真现象.

      想请教:

      1. 这是硬解的上限了吗?
      2. 只取样, 不对帧率作要求的话, 硬解还能走通吗?
      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 在Ubuntu中交叉编译Opencv 4.5.1 运行于Tina Linux中(整合帖)

      @aldfaaa OpenCV的remap成功跑起来了

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 哪吒D1-年轻人的第一块RISC-V开发板开箱

      ELEXCON见过@IAMLIUBO 大佬😊

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 在Ubuntu中交叉编译Opencv 4.5.1 运行于Tina Linux中(整合帖)

      @nihui 要是能写个remap就好了

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 毫无PS痕迹的芒果派-哪吒MQ(也叫小麻雀)定妆照,一体化(Almost All-in-One)设计

      @mangogeek 碰上冬天这种可怕的有静电季节,赶紧把外壳也做了吧。

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 求教:关于Tina linux SDK代码架构问题

      @wadedeng
      你翻翻我的一些帖子,移植应用或者库的。
      你完全可以照抄我交叉编译cmake的写法。
      https://gitee.com/YJHmath/image-transmission-d1-tina/blob/master/CMakeLists.txt

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 求教:关于Tina linux SDK代码架构问题

      @wadedeng busybox就是一个模仿linux常用程序的程序,好度集成了呗。
      这方面应该看看韦东山老师的linux驱动入门课。(不用钱)

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 求教:关于Tina linux SDK代码架构问题

      @wadedeng 写/魔改 uboot kernel busybox 用SI.
      写应用,有cmake加有提示报错就好

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 求教:关于Tina linux SDK代码架构问题

      @wadedeng 善用 find . -name "*.h/c" | xargs grep -irn "(包含的字符串)"
      找到相应文件的路径,再酌情打开相应模块目录。
      SI就应该只打开你要看和写的部分文件。它还有个引用的功能,只需要指向编译器的头文件或者tina头文件路径即可,切勿添加这些文件进项目。
      最大的程序无非uboot, kernel, busybox等,都会有独立配置,不妨make menuconfig试试。至少对应3个SI项目。

      比如你只要看fbviewer这个显示图像的函数,你只需要打开对应方法目录添加相应源文件看实现即可。

      记住SI只是看和改大型项目代码的,好看c结构体模样等等。
      写/创造代码的话,最好用cmake+qtcreator/clion.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: D1s 烧录/调试 SPI NOR FLASH 记录

      @whycan 太强了

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: golang开发哪吒D1?

      其实我是想用Crystal的(一种基于LLVM的又神似Ruby的语言)😀

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 想做一个视频网口发送的demo有什么方案可以参考

      编码和传输也还好说...至少编码是有硬件支持

      发布在 其它全志芯片讨论区
      aldfaaa
      whycan矿工-小叶
    • 回复: 想做一个视频网口发送的demo有什么方案可以参考

      看看怎么把采集先干起来先....
      也不知道有没有配套的VB, ISP, VENC等等....
      MIPI采集应该比V4L UVC快吧

      发布在 其它全志芯片讨论区
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      即将开源硬石F1 PRO开发板(F103)图传源码.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • Tina Linux如何选择复用Pin的功能

      如题, 想编个串口通信程序.
      但Tina默认只有/dev/ttyS0, /dev/ttyS1两个串口设备.
      我该如何启用更多串口呢?

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 哪吒Tina Linux启用Telnetd

      在Tina SDK目录下 按官方文档加载环境:

      source build/envsetup.sh
      lunch d1_nezha-tina
      make menuconfig
      

      然后沿路径进入:
      Base system->BusyBox->Network Utilities->telnetd
      功能全开.(telnet工具可选, 除非你要telnet到别的设备)

      如图:
      JI6L39)Z3}5~8SHA}Z0)YNQ.png

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: muduo网络库在哪吒上编译

      muduo库依赖几个BOOST头文件, 单纯就是头文件而已.
      下载boost_1.75.0无需编译即可.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      阶段性进展, 再捞一下

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      捞一下, 目前项目已经进展到在哪吒上接收协议帧

      wqdwqd.jpg

      166d757b-7df3-481a-9bd7-7689eb43d4b2-image.png

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 动手让LVGL8带的Music-Demo音乐响起来(代码已上传)

      flac的音质也太棒了吧

      发布在 GUI
      aldfaaa
      whycan矿工-小叶
    • muduo网络库在哪吒上编译

      看懂了陈硕大佬的muduo库, 才算从C++入门到现代C++(应该从C++11算起). 最喜欢大佬做库的同时顺便写本书, 踏踏实实收稿费, 谁说搞开源不赚钱?
      eacaeb0d-49e4-4c68-957c-0e220198f740-image.png

      库地址:
      https://github.com/chenshuo/muduo.git

      遇到的问题

      static const int kMaxNumericSize = 48;
      // 该行报错:kMaxNumericSize is large enough
      static_assert(kMaxNumericSize - 10 > std::numeric_limits<long double>::digi
                      "kMaxNumericSize is large enough");
      

      于是注释上面的问题.

      暴力过编译后文件修改差异:

      # git diff
      diff --git a/CMakeLists.txt b/CMakeLists.txt
      index 6071a4e..e151a00 100644
      --- a/CMakeLists.txt
      +++ b/CMakeLists.txt
      @@ -1,8 +1,13 @@
       cmake_minimum_required(VERSION 2.6)
      
      +set(CMAKE_CROSSCOMPILING TRUE)
      +set(CMAKE_C_COMPILER "riscv64-unknown-linux-gnu-gcc")
      +set(CMAKE_CXX_COMPILER "riscv64-unknown-linux-gnu-g++")
      +set(CMAKE_FIND_ROOT_PATH /home/tao/tina-d1-open/out/d1-nezha/staging_dir/toolchain)
      +
       project(muduo C CXX)
      
      -enable_testing()
      +#enable_testing()
      
       if(NOT CMAKE_BUILD_TYPE)
         set(CMAKE_BUILD_TYPE "Release")
      @@ -20,7 +25,7 @@ set(CXX_FLAGS
        -D_FILE_OFFSET_BITS=64
        -Wall
        -Wextra
      - -Werror
      + # -Werror
        -Wconversion
        -Wno-unused-parameter
        -Wold-style-cast
      @@ -28,7 +33,7 @@ set(CXX_FLAGS
        -Wpointer-arith
        -Wshadow
        -Wwrite-strings
      - -march=native
      + # -march=native
        # -MMD
        -std=c++11
        -rdynamic
      diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
      index bed84ad..1f3f021 100644
      --- a/examples/CMakeLists.txt
      +++ b/examples/CMakeLists.txt
      @@ -34,7 +34,7 @@ else()
         add_subdirectory(curl EXCLUDE_FROM_ALL)
       endif()
      
      -if(PROTOBUF_FOUND)
      +if(FALSE)
         add_subdirectory(ace/logging)
         add_subdirectory(protobuf)
       else()
      diff --git a/muduo/base/CMakeLists.txt b/muduo/base/CMakeLists.txt
      index 96e2d02..7ff4597 100644
      --- a/muduo/base/CMakeLists.txt
      +++ b/muduo/base/CMakeLists.txt
      @@ -30,5 +30,5 @@ file(GLOB HEADERS "*.h")
       install(FILES ${HEADERS} DESTINATION include/muduo/base)
      
       if(MUDUO_BUILD_EXAMPLES)
      -  add_subdirectory(tests)
      +    #  add_subdirectory(tests)
       endif()
      diff --git a/muduo/base/LogStream.cc b/muduo/base/LogStream.cc
      index cafd5b8..518e742 100644
      --- a/muduo/base/LogStream.cc
      +++ b/muduo/base/LogStream.cc
      @@ -223,14 +223,14 @@ void FixedBuffer<SIZE>::cookieEnd()
      
       void LogStream::staticCheck()
       {
      -  static_assert(kMaxNumericSize - 10 > std::numeric_limits<double>::digits10,
      -                "kMaxNumericSize is large enough");
      -  static_assert(kMaxNumericSize - 10 > std::numeric_limits<long double>::digits10,
      -                "kMaxNumericSize is large enough");
      -  static_assert(kMaxNumericSize - 10 > std::numeric_limits<long>::digits10,
      -                "kMaxNumericSize is large enough");
      -  static_assert(kMaxNumericSize - 10 > std::numeric_limits<long long>::digits10,
      -                "kMaxNumericSize is large enough");
      +  //static_assert(kMaxNumericSize - 10 > std::numeric_limits<double>::digits10,
      +  //              "kMaxNumericSize is large enough");
      +  //static_assert(kMaxNumericSize - 10 > std::numeric_limits<long double>::digits10,
      +  //              "kMaxNumericSize is large enough");
      +  //static_assert(kMaxNumericSize - 10 > std::numeric_limits<long>::digits10,
      +  //              "kMaxNumericSize is large enough");
      +  //static_assert(kMaxNumericSize - 10 > std::numeric_limits<long long>::digits10,
      +  //              "kMaxNumericSize is large enough");
       }
      
       template<typename T>
      diff --git a/muduo/net/CMakeLists.txt b/muduo/net/CMakeLists.txt
      index 7510d87..28cfffe 100644
      --- a/muduo/net/CMakeLists.txt
      +++ b/muduo/net/CMakeLists.txt
      @@ -60,10 +60,10 @@ if(MUDUO_BUILD_EXAMPLES)
         add_subdirectory(tests)
       endif()
      
      -if(PROTOBUF_FOUND)
      -  add_subdirectory(protobuf)
      -  add_subdirectory(protorpc)
      +if(FALSE)
      +    add_subdirectory(protobuf)
      +    add_subdirectory(protorpc)
       else()
      -  add_subdirectory(protobuf EXCLUDE_FROM_ALL)
      -  add_subdirectory(protorpc EXCLUDE_FROM_ALL)
      +    add_subdirectory(protobuf EXCLUDE_FROM_ALL)
      +    add_subdirectory(protorpc EXCLUDE_FROM_ALL)
       endif()
      

      过编~RPC走起, TCP应用走起

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 《Unix网络编程》例程库在哪吒上编译

      有时候想静下心来温故而知新, 顺带把书的附带的历程给编到哪吒上.
      ae951278-f038-4415-b9dd-25af8f8175d3-image.png
      例程库库:
      https://github.com/unpbook/unpv13e.git

      编译过程:

      # assert 编译器已在环境变量中
      ./configure --host=riscv64-unknown-linux-gnu CC=riscv64-unknown-linux-gnu-gcc
      
      # libunp.a
      cd lib
      make all
      
      # 进你所想编译的例程
      cd udpcliserv
      make all
      

      顺便推介另外两本配套, 均适合放书架供程序猿瞻仰的
      cffea242-21d5-4168-93a2-4a54ca1e9125-image.png
      45781eb8-ffa4-4d19-b995-5ff2c2c639f2-image.png

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      @anruliu 后续: 能否解释一下官方文档给出的HDMI指令的含义?

      cd /sys/kernel/debug/dispdbg
      echo disp0 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
      

      使用该命令切换到HDMI输出, 显示只占屏幕的左1/3左右. 只能显示图片的局部.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      @anruliu 谢谢!!!第一个指令好像好使!

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 别裸奔了,看大佬@lovexulu 给哪吒做的裤衩。 (转载) 外壳建模,3D打印

      恕我直言, 不够凸显哪吒气息😊

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      @xiaowenge jpeg转yuv的demo都有了, 输出你们熟悉的肝一下就出来....虽然开源木有钱...

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 「RVBoards-哪吒」开启 SSH 和 VNC 远程访问,摆脱烦人的鼠标键盘显示器

      @tigger 真的不行, 情况一样. 你实测一下再分享下呗

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      请问大佬指点一下如何将图片通过HDMI输出到屏幕.
      像官方文档HDMI测试指令和视频播放那样.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 「RVBoards-哪吒」开启 SSH 和 VNC 远程访问,摆脱烦人的鼠标键盘显示器

      输入telnetd会要求登录
      输入
      root
      123456
      后, 就好像telnet自己了
      QQ截图20210908130204.png

      但是外部设备依旧没法远程访问哪吒呀

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 「RVBoards-哪吒」开启 SSH 和 VNC 远程访问,摆脱烦人的鼠标键盘显示器

      @tigger t2.png t1.png

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 「RVBoards-哪吒」开启 SSH 和 VNC 远程访问,摆脱烦人的鼠标键盘显示器

      @tigger 实测不可行, 外部telnet到哪吒报Connection refused.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • Tina通过命令行连接WiFi

      首先配置wpa_supplicant的配置文件:/etc/wifi/ake.conf

      ctrl_interface=/var/run/wpa_supplicant
      update_config=1
      network={
              ssid="(SSID)"
              psk="(PWD)"
      }
      

      然后

      # 主要连接操作
       wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wifi/ake.conf -B
      # 通过DHCP服务获得IP地址等信息
      udhcpc -i wlan0 -B
      
      # 搜索WIFI
      wpa_cli -iwlan0 scan
      wpa_cli -iwlan0 scan_result
      
      # 检查WiFi连接状态
      wpa_cli -iwlan0 status
      
      

      WiFi已连接的应答

      ttt.png

      想开机配置网络和WiFi, 可以修改/etc/init.d/wpa_supplicant文件第48行左右:

      if [ x$brlan=="xbr-lan" ]; then
          echo "change the default ip address 192.168.1.1"
          ifconfig br-lan 192.168.100.1
          # 加你所想操作的指令
      fi
      
      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • MCU通过以太网(UDP)发送图片到哪吒开发板进行处理

      前端时间带实习生的过程中顺带学习了一下F103调OV2640传感器获取图片,顺带把图像通过以太网抛出。MCU采用状态机写法(整理后开源),通过TCP/UDP传输在PC上解包不要太顺利了.(这里要感谢实习生wyr填好的路)
      _-2018208784_20210907_192052_1631013654000_wifi_0.jpg

      Cache_-61b3cb7962535efa..jpg

      接下来,主要想把上位机解包程序移植到哪吒开发板上,目标平台:Tina.

      开源项目

      哪吒开发板实现TCP/UDP图传:
      https://gitee.com/YJHmath/image-transmission-d1-tina

      图传协议:
      https://docs.qq.com/doc/DVkRZUXhSa3prbXZp

      预期需求:

      • JPEG图片输出到HDMI, 或者MIPI.
      • 整合NCNN, 直观看识别效果.
      • 或许会支持更通用(复杂)的PES协议.

      阶段性成果汇报

      2021年9月30日

      HDMI调通

      • 感谢 @anruliu 指出了sdk中显示编码图像文件的工具fbviewer.
      • 感谢 @anruliu 在D1设置hdmi分辨率中9楼指出Tina Linux启动时默认选择MIPI作为显示输出, 并给出了开机默认选择HDMI输出的方案.

      开发过程

      一开始着重快速地把协议移植, 所以我会使用cmake工具在win下qtcreator编写, 在Ubuntu20.10交叉编译.
      开发语言自然是C++和C混着搭. 因为C++有着丰富的轮子,
      程序采用了:

      • 陈硕大佬的muduo网络库(C++)的Buffer类作为接收缓冲区.
      • UNP例程库(C)来做一个简单的UDP Server, 就喜欢它足够简单纯粹.

      这两个库在哪吒上的编译过程可以参考:
      muduo网络库在哪吒上编译
      《Unix网络编程》例程库在哪吒上编译

      技术受限

      一开始我想把接收到的图片一气呵成地输出到HDMI时, 但发现若将fbviewer目录(tina-d1-open/out/d1-nezha/compile_dir/target/fbviewer)下除main.o外的.o文件链接成静态库(.a), 再编译出来的程序无法正常运行:

      root@TinaLinux:/mnt/nfs/tina# ./fbtest
      ./fbtest: line 1: ELF�8@@
                                      : not found
      ./fbtest: line 3: syntax error: EOF in backquote substitution
      

      这是一道坎, 望各位大佬指教.

      寻求解决

      既然验证了链接到静态库存在问题. 那能想到解决思路有3种:

      1. 把已经正常运行的图传程序从C++改成C语言, 直接链接到fbviewer相关的.o文件, 这样程序大概率能正常运行. 但相当于弃盔卸甲, 还要用C把缓存区再造一遍.
      2. 把整个fbviewer里jpeg输出到HDMI的代码搬到图传程序里, 然后笃定地相信它会编译成功.
      3. 不要忘了操作系统扮演协调资源的角色. 图传程序将接收到的图片储存到运行目录下, 然后再魔改一下fbviewer, 通过stat读取运行目录下对应图像文件的最后修改时间有无发生变化来决定是否要通过HDMI输出图像. 这样就不用再纠结高层代码和底层代码之间千丝万缕的关系.

      对于下班的闲暇抽空写码的我, 毫不犹豫地选择了第3种.

      #include <stdio.h>
      #include <stdint.h>
      #include <unistd.h>
      #include <sys/stat.h>
      
      int main()
      {
          printf("Hello world\n");
          char* path = "pic.jpg";
          uint32_t ts = 0;
          struct stat tmp;
          stat(path, &tmp);
         
          uint8_t* image = (uint8_t*)malloc(1600 * 1200 * 3);
          int is_need_output = 0;
          while(1)
          {
              stat(path, &tmp);
              //printf("st_ctime:%d\n", tmp.st_ctime);
              if(ts != tmp.st_ctime)
              {
                  
                  ts = tmp.st_ctime;
                  is_need_output = 1;
              }
              if(is_need_output)
              {
                  fh_jpeg_load(path, image, NULL, 1600, 1200);
                  fb_display(image, NULL, 1600, 1200, 0, 0, 160, 0);
                  is_need_output = 0;
              }
              usleep(25 * 1000);
          }
          free(image);
          return 0;
      }
      

      既然程序需要频繁地读写, 那就直接放到挂载到RAM的目录吧!
      于是乎:

      下一步把ncnn的demo整合应该也不是什么难事.


      效果如上.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 想请问怎么在d1开发板上通过摄像头实时输出图像到显示器上

      @xiaowenge 催更,如何把图像文件(流)输出到HDMI显示器

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 「RVBoards-哪吒」开启 SSH 和 VNC 远程访问,摆脱烦人的鼠标键盘显示器

      Tina-SDK就怎么开启SSH或者telnet服务呢?

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【DIY教程】用D1哪吒开发板做一个卡牌识别机,可以玩游戏王、狼人杀、三国杀、剧本杀

      大佬, 666呀

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【DIY教程】用D1哪吒开发板做一个卡牌识别机,可以玩游戏王、狼人杀、三国杀、剧本杀

      我有个想法, 想做个VR级别的射击游戏.

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 在Ubuntu中交叉编译Opencv 4.5.1 运行于Tina Linux中(整合帖)

      -fpermissive这是错误是可以忽略的.
      在CMakeLists.txt加一句

      add_compile_options(-fpermissive)
      或
      set(CMAKE_CXX_FLAGS "-fpermissive ${CMAKE_CXX_FLAGS}")
      

      即可将错误转为警告

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 在Ubuntu中交叉编译Opencv 4.5.1 运行于Tina Linux中(整合帖)

      @lijyhh
      在Tina SDK目录下运行这些脚本

      source build/envsetup.sh
      lunch d1_nezha-tina
      

      这样环境变量一般是可以了, 因为连系统都能编译出来, 何况是个库呢😊

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 在Ubuntu中交叉编译Opencv 4.5.1 运行于Tina Linux中(整合帖)

      @lijyhh 建议用Tina工具链编译东西前, 按照编译Tina SDK的方法, 先加载编译环境:

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: Ubuntu20.04交叉编译OpenCV 4.5.2, 运行在Tina Linux

      不皮了. 补充一点:

      1. Tina Linux中运行test会遇到libatomic.so库缺失.
        应从SDK目录中复制到板子上:
      # -d 是复制快捷方式. *号会把实体也一起复制.
      cp -d tina-d1-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/riscv64-unknown-linux-gnu/lib64/lp64d/libatomic.so* (target_path)
      
      1. diff如何应用?
      • 百度一下: linux patch用法
      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • Ubuntu20.04交叉编译OpenCV 4.5.2, 运行在Tina Linux

      本着尽可能快完成编译和能用则用的原则, 谈谈编译目前最新的OpenCV 4.5.2编译过程.

      工具链

      • Tina Linux工具链

      ▲ 用平头哥的工具链(riscv64-linux-x86_64-20210512)编译出来:

      • 在Tina Linux能跑, 但会段错误,
      • 在RVBoard debian运行报运行库版本缺失(不匹配), 替换的话, 分分钟要重新烧录系统

      背景

      Linux tao 5.8.0-59-generic #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
      
      cmake: 3.16.3
      
      工具链选用: (Tina SDK 自带)
      tina-d1-open/out/d1-nezha/staging_dir/toolchain/bin/riscv64-unknown-linux-gnu-gcc等...
      版本: gcc version 8.1.0 (C-SKY RISCV Tools V1.8.4 B20200702)
      
      要编译的OpenCV版本: 4.5.2
      

      开始编译

      这里先提几个tips:

      1. ippicv库是给Intel CPU加速用的, 哪吒表示无感. 可以窜改:opencv-4.5.2/3rdparty/ippicv/ippicv.cmake中的URI导致其下载失败, 从而跳过cmake过程的下载.(亦可断网)
      2. 所有与python的相关库都可跳过(本人主要涉猎C/C++)

      编译的指令在此. CV目录下的cmake我可能窜改了一下, 在下文补充.

      opencv-4.5.2 mkdir build-tina && cd build-tina
      
      # 能编尽编原则, 可自行删减. 
      cmake \ 
      -DCMAKE_C_COMPILER=riscv64-unknown-linux-gnu-gcc \
      -DCMAKE_CXX_COMPILER=riscv64-unknown-linux-gnu-g++ \
      -DOPENCV_FORCE_3RDPARTY_BUILD=ON \
      -DBUILD_ZLIB=ON \
      -DBUILD_SHARED_LIBS=ON \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_INSTALL_PREFIX=./output ..
      
      # 嗯, 是Xeon.
      make -j12
      

      CMakeLists.txt的diff:

      #diff tmp/opencv-4.5.2/CMakeLists.txt opencv-4.5.2/CMakeLists.txt
      223,227c223,224
      < OCV_OPTION(BUILD_IPP_IW             "Build IPP IW from source"           (NOT MINGW OR OPENCV_FORCE_3RDPARTY_BUILD) IF (X86_64 OR X86) AND NOT WINRT )
      < OCV_OPTION(BUILD_ITT                "Build Intel ITT from source"
      <     (NOT MINGW OR OPENCV_FORCE_3RDPARTY_BUILD)
      <     IF (X86_64 OR X86 OR ARM OR AARCH64 OR PPC64 OR PPC64LE) AND NOT WINRT AND NOT APPLE_FRAMEWORK
      < )
      ---
      > OCV_OPTION(BUILD_IPP_IW             "Build IPP IW from source"           ON)
      > OCV_OPTION(BUILD_ITT                "Build Intel ITT from source" OFF)
      416c413
      < OCV_OPTION(WITH_ITT "Include Intel ITT support" ON
      ---
      > OCV_OPTION(WITH_ITT "Include Intel ITT support" OFF
      614c611
      <   include(cmake/OpenCVDetectPython.cmake)
      ---
      >     #  include(cmake/OpenCVDetectPython.cmake)
      731a729,730
      > set(PYTHON_DEFAULT_AVAILABLE 0)
      > set(ENABLE_PYLINT 0)
      1454a1454,1456
      > set(WITH_IPP 0)
      > set(HAVE_IPP 0)
      > set(HAVE_IPP_IW 0)
      1608a1611,1612
      > set(BUILD_opencv_python2 0)
      > set(BUILD_opencv_python3 0)
      

      完整的CMakeLists.txt.bmp如下图:

      base64 -d CMakeLists.txt.bmp > CMakeLists.txt
      

      ![0_1626758920883_CMakeLists.txt.bmp](正在上传 100%)

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 小白在线求大佬们教学

      @shawn227 因为是新的指令集和硬件, 所以差异会有的. 但是, 韦老师(@100ask )也在论坛里, 所以能看懂实践这个帖子就算完成入门啦:使用builroot 2021一键编译生成D1 nezha 系统镜像

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!

      @xiaowenge 把哪吒寄去清华,他们期末要写OS……期待用RUST写的OS😂

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【转载】在全志d1开发板上玩ncnn

      快跟上大佬们的脚步~~~~

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 小白在线求大佬们教学

      @shawn227 那可以开始韦东山的嵌入式Linux的疗程了, uboot, kernel, rootfs......然后基本就可以实现你的创意了
      http://download.100ask.net/videos_tutorial/embedded_linux/full_range_phase1/index.html

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!

      @bedrock 非常感谢, 马上去实践

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!

      韦老师, 我一直在上你的高级驱动课!
      现在的也入手了D1,
      不过好像原生系统的NFS没有启用? 也没有现成的ftp服务器程序,
      老师有什么开发调试的建议呢?😊

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 小白在线求大佬们教学

      @shawn227 弄个Ubuntu做交叉编译环境, 写个hello world先, 参考https://d1.docs.allwinnertech.com/

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 有大佬要组团移植OpenHarmony系统吗?

      萌新时刻准备fork学习~~~~!
      df6df49664d5b67c9e095ea12f4fb27.jpg

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 1
    • 2
    • 2 / 2