导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. baiwen
    3. 最佳
    • 资料
    • 关注 3
    • 粉丝 24
    • 我的积分 4383
    • 主题 66
    • 帖子 136
    • 最佳 52
    • 群组 1

    baiwen 发布的最佳帖子

    • 基于LVGL编写的windows串口工具: LCOM

      LCOM: Serial Port Tools based on LVGL (PC Software)

      一直以来我都想用LVGL做一个真正意义上的PC软件,来验证或者表达LVGL出色的特性,现在我用LCOM做到了!

      LCOM 是一个基于LVGL编写的串口工具,界面简洁,功能出色,并且上手简单。

      LCOM的一些功能包括:

      • 以HEX或ASCII格式发送和接收数据。
      • 实时刷新COM端口列表。可设置COM端口的连接参数包括波特率、奇偶校验、数据位、停止位和流控。
      • 支持定时发送
      • 支持换行发送(CR、LR、CRLF)
      • 多种字符编码格式支持,比如 ASII,GBK(Chinese),UTF-8,UTF-16 等
      • Modbus模式支持(为
        百问网STM32H5 modbus解决方案准备(学习教程))
      • 界面多语言支持
      • 多条字符串发送
      • 自动保存设置(退出保存)
      • 串口自动检测,支持记住上次使用的串口号
      • 串口断线自动重连
      • TCP/UDP 支持,包括客户端和服务端模式支持
      • 自定义主题
      • More todo

      演示视频:https://www.bilibili.com/video/BV1bK4y1z7se

      Get LCOM

      • GitHub: https://github.com/100askTeam/LCOM/releases
      • Gitee:https://gitee.com/weidongshan/LCOM/releases

      Source code

      Not yet open source (soon)

      • GitHub: https://github.com/100askTeam/LCOM
      • Gitee:https://gitee.com/weidongshan/LCOM

      Issues

      https://github.com/100askTeam/LCOM/issues

      发布在 GUI
      baiwen
      100ask
    • 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!

      使用buildroot编译构建系统

      • buildroot gitee仓库地址 https://gitee.com/weidongshan/neza-d1-buildroot.git
      • buildroot github仓库地址 https://github.com/100askTeam/neza-d1-buildroot.git
      • opensbi gitee仓库地址 https://gitee.com/weidongshan/NezaD1-opensbi.git
      • u-boot gitee仓库地址 https://gitee.com/weidongshan/NezaD1-u-boot-2018.git
      • Linuxkernel gitee仓库地址 https://gitee.com/weidongshan/NezaD1-linuxkernel.git
        欢迎大家编译使用提交问题和建议到对应的仓库

      编译完整系统或者各个部分

      • 我们编译使用的是ubuntu 18.04 系统,在进行如下编译之前需要先配置基本编译环境,参考下述命令来安装必须的软件包。
      book@virtual-machine:~/Neza-D1/buildroot-2021$ sudo apt-get install -y which sed make binutils build-essential  gcc g++ bash patch gzip bzip2 perl  tar cpio unzip rsync file  bc wget python ncurses5  bazaar cvs git mercurial rsync scp subversion android-tools-mkbootimg
      
      • 使用git命令clone源码
      book@virtual-machine:~$ mkdir -p  ~/Neza-D1/ &&  cd ~/Neza-D1/
      book@virtual-machine:~/Neza-D1$ git clone https://gitee.com/weidongshan/neza-d1-buildroot.git buildroot-2021
      

      构建完整系统镜像

      • 编译完整系统镜像
      book@virtual-machine:~/Neza-D1/buildroot-2021$ make  neza-d1_defconfig  //加载配置文件 
      book@virtual-machine:~/Neza-D1/buildroot-2021$ make  all //完整编译系统
      
      • 编译生成的系统镜像在output/image目录下,其中sdcard.img为完整的系统镜像。
      book@virtual-machine:~/Neza-D1/buildroot-2021/output/images$ ls
      board.dtb         boot.img          boot_package.fex  boot.vfat      env.cfg  fw_dynamic.bin  fw_jump.bin  Image        rootfs.cpio     rootfs.ext2  rootfs.tar  sunxi.fex              uImage
      boot0_sdcard.fex  boot_package.cfg  boot.scr          dragonsecboot  env.fex  fw_dynamic.elf  fw_jump.elf  ramdisk.img  rootfs.cpio.gz  rootfs.ext4  sdcard.img  u-boot-sun20iw1p1.bin
      book@virtual-machine:~/Neza-D1/buildroot-2021/output/images$
      

      单独编译各个部分

      • 单独编译 opensbi阶段
      book@virtual-machine:~/Neza-D1/buildroot-2021$  make opensbi-rebuild V=1
      
      • 单独编译 uboot阶段
      book@virtual-machine:~/Neza-D1/buildroot-2021$  make uboot-rebuild V=1
      
      • 单独编译 kernel阶段
      book@virtual-machine:~/Neza-D1/buildroot-2021$  make kernel-rebuild V=1
      
      • 单独编译文件系统
        • 指定完成工具链 系统配置 需要安装的包 以及所需的格式 执行如下命令,最后生成的镜像在 output/image目录下。
      book@virtual-machine:~/Neza-D1/buildroot-2021$ make  all //完整编译系统
      

      烧写启动

      • windows下使用wind32diskimage工具烧写,Linux下直接使用dd 命令完整写入
        19a6fbbe-0b81-417a-807c-59058de41c23-NezaD1wind32diskimag.png
        ![image-20210701105748748]

      • 烧写成功后把卡插入开发板 开发板上电 即可自动从sd卡启动进入系统
        ed025a88-2a7c-4578-8228-438338276627-nezaD1startupLog.png

      ToDoList

      已实现功能

      • 支持平头哥 rv64d外部工具链。
      • 支持buildroot构建 Tina sdk 内 Thead c910 opensbi 。
      • 支持buildroot 构建Tina sdk 内 u-boot 2018
      • 支持buildroot构建Linux kernel 5.4自动生成Image并后续打包为boot.img
      • 自动构建并打包生成SD卡 busybox udev最小系统启动。

      未实现 计划实现

      • 支持qt python mqtt gst等常用软件包。
      • 支持systemD init服务。
      • 支持板载wifi 模块。

      如何参与此项目

      提交PR

      提交issues


      20210706更新:
      Buildroot Git仓库最新支持如下图所示更丰富的常用软件包和lib库 方便大家学习与调试。
      e541b9a5-ecb7-498c-be6c-3103d9c85f82-image.png

      发布在 MR Series
      baiwen
      100ask
    • T527 AvaotaPI-A1 高清靓照来了!!!

      0b119481-eeb2-4e6a-91c7-a0e8c4022df1-image.png
      0676d954-4087-4f9b-8077-61d4cd2db6be-image.png
      5bd97c5d-41ea-4c9a-bc11-2d1cf3b1cc7e-image.png
      a2ad7c1b-0a74-414e-a215-f71aede163f6-image.png
      e6389f20-fbcc-4388-ae64-df4781f4342c-image.png

      发布在 T Series
      baiwen
      100ask
    • 全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT

      模组

      Pin2Pin ESP32S3

      可以直接无缝焊接使用(但是软件不是兼容的,R128支持的是FreeRTOS系统)。
      R128开发板4.jpg

      来一张超高清对比图
      FtA8SRxaAAM1hhx.jpg

      系统已经启动,来一张启动log图证明一下:

      41612ce3-aa97-4bf7-901a-26ef49438326-image.png

      启动流程示意图
      e854ca31-4c0b-4ac4-a8e2-9eabdd4339ad-image.png

      (屏蔽盖镭雕丝印打错了,应该是R128-S2,之前是想做S3的,因为样片还没到位,先做了S2)

      补充价格信息(预估):
      预计R128模组价格 29.99,
      最小核心板价格 59.99 ,
      还会做一个带屏幕摄像头的开发板套装版本 预计价格 499。
      (芯片价格全志原厂还不让透露,只能说非常美丽,不然我们模组也做不到29.99这么便宜)

      发布在 A Series
      baiwen
      100ask
    • 【R128学习案例】R128平衡小车

      R128是一颗专为“音视频解码”而打造的全新高集成度 SoC,主要应用于智能物联和专用语音交互处理解决方案。

      如果做一台能通过发挥R128的wifi&蓝牙特性的平衡小车,从而能通过wifi或蓝牙连接的方式进行控制,那将会是非常有趣的项目!
      但是我们还有一个计划,那就是发挥R128的音频处理单元功能,从而能通过语音识别进行控制。试想一下,我们可以动动嘴就能操控小车,这样项目将会更有趣!

      我们将这个项目命名为: B_ROBOT_100ASK
      项目代码及模型文件将会上传到git仓库:

      • Gitee: https://gitee.com/weidongshan/100ask_r128_demos
      • GitHub: https://github.com/100askTeam/100ask_r128_demos

      使用的R128硬件(淘宝购买链接):

      • https://item.taobao.com/item.htm?id=736154682975

      文档教程阅读地址:

      • https://aw-r128.100ask.net

      功能特性:

      自平衡功能

      WiFI控制功能(微信小程序或手机APP)

      蓝牙控制功能(微信小程序或手机APP)

      语音控制功能

      最后,希望大家喜欢这个项目,在边玩边学习的同时收获到有用的知识!😊

      发布在 A Series
      baiwen
      100ask
    • V853我们来了!!!

      感谢全志在线的大力支持,感谢晕哥的芯片支持,也感谢YuzuKi,芒果大佬的指点,我们终于设计好了 V853开发板核心板与底板,接下来将会进行打样生产,作为AI入门 与 多媒体框架学习的配套专用开发板。

      • 下图,左侧是V853核心板是BTB封装,右侧是YuzuKi大佬赏脸打100ask设计的V851s最小板。
      • V851S最小板,我们会将售价做到低至99元单板,接口丰富而且完善,详细的参数可以 @YuzukiTsuru
        2f52f2c6-676d-473d-9440-bea186eed507-image.png
      • 下面这张图是 配套的 项目1底板,我们暂且叫他 全功能底板,这个板子是用来学习Tina-SDK 开发与摄像头显示等,同时,我们正在设计针对于不同场景需要的不同底板,可以共用一款核心板。
        d0515e29-fd82-4150-a23b-a373ac199494-75e485ffd409f93830baa3c4caca0bb.jpg
      发布在 V Series
      baiwen
      100ask
    • R128适配SPI LCD+LVGL

      硬件

      • 板子: 全志R128开发板
      • 屏幕:SPI LCD 1.54寸 240x240分辨率

      bc93af96-fefc-4d7b-8268-afcc6a54e2f7-ccee4b66-13a0-4a8f-9f70-749ce8a0d94f.jpg

      效果演示

      [Video]

      发布在 A Series
      baiwen
      100ask
    • 分析Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写。
      • 镜像文件 tina_d1-h-nezha_uart0.img 欢迎烧写体验。

      b8a097c7-e4fd-4a31-bb07-3c8290d7f572-image.png
      68352bac-9caa-446c-93be-13d799e7c306-image.png
      eb965c91-015a-4a29-9c32-07332ff0a424-image.png

      步骤简述

      首先记录下官方 tina-sdk 打包的log输出。

      book@virtual-machine:~/D1s-Core/tina-d1-h$ pack
      --==========--
      PACK_CHIP         sun20iw1p1
      PACK_PLATFORM     tina
      PACK_BOARD        d1-h-nezha
      PACK_KERN
      PACK_DEBUG        uart0
      PACK_SIG          none
      PACK_SECURE       none
      PACK_MODE         normal
      PACK_FUNC         android
      PACK_PROGRAMMER   none
      PACK_TAR_IMAGE    none
      PACK_TOPDIR       /home/book/D1s-Core/tina-d1-h
      --==========--
      No kernel param, parse it from d1-h
      copying tools file
      copying configs file
      storage_type value is 5
      rm /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition_nor.fex
      rm /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/image_nor.cfg
      copying boot resource
      
      LZMA 4.65 : Igor Pavlov : Public domain : 2009-02-03
      copying boot file
      make user resource for : /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex
      handle partition user-res
      no user resource partitions
      APP_PART_DOWNLOAD_FILE = /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/app.fex
      Need size of filesystem
      no data resource partitions
      don't build dtbo ...
      
      create sys_partiton.fex +++++++++++++++++++++++++++++++++++++++++++++++++++++4
      argc = 2
      input name sys_partition.fex
      Script 1 source file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex
      Script 1 bin file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
      update_fdt: num 1752 randto1k
      parser 1 file ok
      create sys_partiton.fex+++++++++++++++++++++++++++++++++++++++++++++++++++++5
      update_chip
      pack boot package
      GetPrivateProfileSection read to end
      content_count=3
      LICHEE_REDUNDANT_ENV_SIZE config in BoardConfig.mk
      --mkenvimage create redundant env data!--
      ---redundant env data size 0x20000---
      packing for tina linux
      normal
      update mbr use 4++++++++++++++++++++++
      mbr count = 4
      partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
      mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex
      download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex
      
      mbr size = 252
      mbr magic softw411
      disk name=boot-resource
      disk name=env
      disk name=env-redund
      disk name=boot
      disk name=rootfs
      disk name=dsp0
      disk name=recovery
      this is not a partition key
      update_for_part_info 0
      crc 0 = 4c7bc2df
      crc 1 = d9c69382
      crc 2 = bc706624
      crc 3 = 29cd3779
      gpt_head->header_crc32 = 0x892c53ba
      GPT----part num 8---
      gpt_entry: 128
      gpt_header: 92
      GPT:boot-resource: a1f8          c177
      GPT:env         : c178          c36f
      GPT:env-redund  : c370          c567
      GPT:boot        : c568          1161f
      GPT:rootfs      : 11620         1b597
      GPT:dsp0        : 1b598         1b987
      GPT:recovery    : 1b988         227c7
      GPT:UDISK       : 227c8         ffffffde
      update gpt file ok
      update mbr file ok
      temp = 20
      mbr count = 4 total_sectors = 15269888 logic_offset = 40960
      
      partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
      mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex
      download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex
      
      mbr size = 252
      mbr magic softw411
      disk name=boot-resource
      disk name=env
      disk name=env-redund
      disk name=boot
      disk name=rootfs
      disk name=dsp0
      disk name=recovery
      this is not a partition key
      update_for_part_info 0
      crc 0 = 4c7bc2df
      crc 1 = d9c69382
      crc 2 = bc706624
      crc 3 = 29cd3779
      gpt_head->header_crc32 = 0x1328fa28
      GPT----part num 8---
      gpt_entry: 128
      gpt_header: 92
      GPT:boot-resource: a1f8          c177
      GPT:env         : c178          c36f
      GPT:env-redund  : c370          c567
      GPT:boot        : c568          1161f
      GPT:rootfs      : 11620         1b597
      GPT:dsp0        : 1b598         1b987
      GPT:recovery    : 1b988         227c7
      GPT:UDISK       : 227c8         e8ffde
      update gpt file ok
      update mbr file ok
      cp sys parttion.fex  for dragon.fex ++++++++++++++++++++++++++++
      ====================================
      show "sys_partition_for_dragon.fex" message
      ------------------------------------
        [mbr]
        mbr_size  : 252 Kbyte
      ------------------------------------
        partition_name  : boot-resource
        partition_size  : 8064
        downloadfile  : boot-resource.fex
        boot-resource.fex size : 3.0M byte
      ------------------------------------
        partition_name  : env
        partition_size  : 504
        downloadfile  : env.fex
        env.fex size : 128K byte
      ------------------------------------
        partition_name  : env-redund
        partition_size  : 504
        downloadfile  : env.fex
        env.fex size : 128K byte
      ------------------------------------
        partition_name  : boot
        partition_size  : 20664
        downloadfile  : boot.fex
        boot.fex -> /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/boot.img
        boot.img size : 5.0M byte
      ------------------------------------
        partition_name  : rootfs
        partition_size  : 40824
        downloadfile  : rootfs.fex
        rootfs.fex -> /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/rootfs.img
        rootfs.img size : 5.9M byte
      ------------------------------------
        partition_name  : dsp0
        partition_size  : 1008
        downloadfile  : dsp0.fex
        dsp0.fex size : 249K byte
      ------------------------------------
        partition_name  : recovery
        partition_size  : 28224
      ------------------------------------
      /home/book/D1s-Core/tina-d1-h/out/host/bin/
      /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image
      Begin Parse sys_partion.fex
      Add partion boot-resource.fex BOOT-RESOURCE_FEX
      Add partion very boot-resource.fex BOOT-RESOURCE_FEX
      FilePath: boot-resource.fex
      FileLength=2f8c00Add partion env.fex ENV_FEX000000000
      Add partion very env.fex ENV_FEX000000000
      FilePath: env.fex
      FileLength=20000Add partion env.fex ENV_FEX000000000
      Add partion very env.fex ENV_FEX000000000
      FilePath: env.fex
      FileLength=20000Add partion boot.fex BOOT_FEX00000000
      Add partion very boot.fex BOOT_FEX00000000
      FilePath: boot.fex
      FileLength=4f4000Add partion rootfs.fex ROOTFS_FEX000000
      Add partion very rootfs.fex ROOTFS_FEX000000
      FilePath: rootfs.fex
      FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000
      Add partion very dsp0.fex DSP0_FEX00000000
      FilePath: dsp0.fex
      FileLength=3e38cBuildImg 0
      Dragon execute image.cfg SUCCESS !
      ----------image is for nand/emmc----------
      ----------image is at----------
      
      /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/tina_d1-h-nezha_uart0.img
      
      pack finish
      
      

      分析打包过程

      从上述log可以看出整个打包过程大致分为这么几个步骤

      1. 指定一些比较环境变量,比如镜像输出目录 镜像的一些配置信息。
      2. 之后将镜像拷贝到需要打包的目录下,开始进行统一处理
      3. 根据文件系统分区信息,将其转换成 适合后续程序使用的格式。
      4. 转换分区信息为 专门的GPT/MBR分区头部。
      5. 使用dragon打包,将所有配置文件里指定的文件,进行汇总,打包输出。

      使用命令操作 主要分为4步

      busybox unix2dos sys_partition.fex
      tina-d1-h/tools/pack-bintools/src/script  sys_partition.fex
      tina-d1-h/tools/pack-bintools/src/update_mbr  sys_partition.bin 4
      tina-d1-h/tools/pack-bintools/src/dragon  image.cfg sys_partition.fex
      

      dragon分析

      这里面 最关键的就是 sys_partition.fex 文件,它定义了分区的信息 以及大小等。
      可以进入 编译后的 tina-d1-h/out/d1-h-nezha/image 目录下查看。
      714dc37f-d024-4ffd-86e1-5dabd9519a13-image.png
      我们可以直接cat sys_partition.fex文件

      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ cat sys_partition_for_dragon.fex
      ;---------------------------------------------------------------------------------------------------
      ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
      ;---------------------------------------------------------------------------------------------------
      
      
      ;---------------------------------------------------------------------------------------------------
      ;                                   固件下载参数配置
      ;---------------------------------------------------------------------------------------------------
      ;***************************************************************************************************
      ;    mbr的大小, 以Kbyte为单位
      ;***************************************************************************************************
      [mbr]
      size = 252
      
      ;***************************************************************************************************
      ;                                              分区配置
      ;
      ;
      ;  partition 定义范例:
      ;    [partition]                ;  //表示是一个分区
      ;    name        = USERFS2      ; //分区名称
      ;    size        = 16384        ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T
      ;    downloadfile = "123.fex"   ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径
      ;    keydata     = 1            ; //私有数据分区,重新量产数据将不丢失
      ;    encrypt     = 1            ; //采用加密方式烧录,将提供数据加密,但损失烧录速度
      ;    user_type   = ?            ; //私有用法
      ;    verify      = 1            ; //要求量产完成后校验是否正确
      ;
      ; 注:1、name唯一, 不允许同名
      ;     2、name最大12个字符
      ;     3、size = 0, 将创建一个无大小的空分区
      ;     4、align to logical block size(504 sectors), leb size = 2*(1 nand phy block size - 1 phy page size)
      ;***************************************************************************************************
      [partition_start]
      
      [partition]
          name         = boot-resource
          size         = 8064
          downloadfile = "boot-resource.fex"
          user_type    = 0x8000
      
      
      [partition]
          name         = env
          size         = 504
          downloadfile = "env.fex"
          user_type    = 0x8000
      
      [partition]
          name         = env-redund
          size         = 504
          downloadfile = "env.fex"
          user_type    = 0x8000
      
      [partition]
          name         = boot
          size         = 20664
          downloadfile = "boot.fex"
          user_type    = 0x8000
      
      [partition]
          name         = rootfs
          size         = 40824
          downloadfile = "rootfs.fex"
          user_type    = 0x8000
      
      [partition]
          name         = dsp0
          size         = 1008
          downloadfile = "dsp0.fex"
          user_type    = 0x8000
      
      [partition]
          name         = recovery
          size         = 28224
          ;downloadfile = "recovery.fex"
          user_type    = 0x8000
      
      

      这里面所有的 downloadfile文件 都是我们编译出来要烧写的文件。所以只需要把相应的文件放到这个目录下,就可以进行打包操作了。
      如果你在不改变 文件大小的前提下,可以直接执行tina-d1-h/tools/pack-bintools/src/dragon image.cfg sys_partition.fex 命令,你会发现它生成了一个 tina_d1-h-nezha_uart0.img,镜像,这个镜像是和使用pack命令打包生成的一样。

      那么这里面还有一个 img.cfg文件。这个文件里面包含了很多 fex二进制文件,目前我认为这些文件都是和全志官方的烧写工具绑定死的,所以不用管它,只要制作的时候 当前目录下有这些工具即可。
      d3bfa508-7883-4286-bda4-9bbbd981cd98-image.png

      有了这两个文件以后,就可以直接使用 dragon打包生成可以用 凤凰烧写器 烧写的系统镜像啦。

      sys_partiton分析

      如果你的系统镜像格式 一直保持大小不变,那么上面这个命令 就可以一直用,但是这个时候 我想自己编译内核 增加 驱动模块,编译文件系统 增加组件 导致系统镜像变大了 这要怎么办?

      简单点,直接修改 sys_partition.fex为 文件大小不就可以了吗?
      但是你会发现 这样做不行,他会提示错误。
      这个时候 我们就要继续分析 log日志输出了,会发现,我们执行 dragon打包 只有下面这些输出信息,没有上面的 GPT/MBR分区信息。

      /home/book/D1s-Core/tina-d1-h/tools/pack-bintools/src/
      /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image
      Begin Parse sys_partion.fex
      Add partion boot-resource.fex BOOT-RESOURCE_FEX
      Add partion very boot-resource.fex BOOT-RESOURCE_FEX
      FilePath: boot-resource.fex
      FileLength=2f8c00Add partion env.fex ENV_FEX000000000
      Add partion very env.fex ENV_FEX000000000
      FilePath: env.fex
      FileLength=20000Add partion env.fex ENV_FEX000000000
      Add partion very env.fex ENV_FEX000000000
      FilePath: env.fex
      FileLength=20000Add partion boot.fex BOOT_FEX00000000
      Add partion very boot.fex BOOT_FEX00000000
      FilePath: boot.fex
      FileLength=4f4000Add partion rootfs.fex ROOTFS_FEX000000
      Add partion very rootfs.fex ROOTFS_FEX000000
      FilePath: rootfs.fex
      FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000
      Add partion very dsp0.fex DSP0_FEX00000000
      FilePath: dsp0.fex
      FileLength=3e38cBuildImg 0
      Dragon execute image.cfg SUCCESS !
      
      

      那么这个时候 就需要往回找,这个文件是哪里来的 怎么生成的?
      通过 搜索 分析 发现是 来自于 sys_partiton.bin 文件,但是这个文件又是一个 二进制文件,而且也是后面打包生成的,那么还是要继续往回找 sys_partition.bin文件又是怎么生成的。

      64808bf4-975f-43bb-98a7-c9da0ce574f1-image.png

      同样是结合log 加打印
      a99c9ce5-8358-41c0-924f-25836a7db6ee-image.png

      找到了 如下这两个命令。
      busybox unix2dos sys_partition.fex
      script sys_partition.fex

      一开始以为这个 script 是ubuntu的某一个包,后来发现也是一个全志自家提供的工具。
      既然 工具都找全了 那我们可以修改试试看。

      修改 sys_partition.fex 把它的大小 调整为 70824
      c12aa287-2654-4674-aecd-563a9a0e735e-image.png
      之后保存退出,从头执行如下命令 来确认猜想是否正确。

      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ busybox unix2dos sys_partition.fex
      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/script  sys_partition.fex
      argc = 2
      input name sys_partition.fex
      Script 1 source file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex
      Script 1 bin file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
      update_fdt: num 1752 randto1k
      parser 1 file ok
      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/update_mbr  sys_partition.bin 4
      mbr count = 4
      
      partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
      mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex
      download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex
      
      mbr size = 252
      mbr magic softw411
      disk name=boot-resource
      disk name=env
      disk name=env-redund
      disk name=boot
      disk name=rootfs
      disk name=dsp0
      disk name=recovery
      this is not a partition key
      update_for_part_info 0
      crc 0 = ea84dacc
      crc 1 = 7f398b91
      crc 2 = 1a8f7e37
      crc 3 = 8f322f6a
      gpt_head->header_crc32 = 0x53fc3a66
      GPT----part num 8---
      gpt_entry: 128
      gpt_header: 92
      GPT:boot-resource: a1f8          c177
      GPT:env         : c178          c36f
      GPT:env-redund  : c370          c567
      GPT:boot        : c568          1161f
      GPT:rootfs      : 11620         22ac7
      GPT:dsp0        : 22ac8         22eb7
      GPT:recovery    : 22eb8         29cf7
      GPT:UDISK       : 29cf8         ffffffde
      update gpt file ok
      update mbr file ok
      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$
      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/dragon  image.cfg sys_partition.fex
      /home/book/D1s-Core/tina-d1-h/tools/pack-bintools/src/
      /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image
      Begin Parse sys_partion.fex
      Add partion boot-resource.fex BOOT-RESOURCE_FEX
      Add partion very boot-resource.fex BOOT-RESOURCE_FEX
      FilePath: boot-resource.fex
      FileLength=2f8c00Add partion env.fex ENV_FEX000000000
      Add partion very env.fex ENV_FEX000000000
      FilePath: env.fex
      FileLength=20000Add partion env.fex ENV_FEX000000000
      Add partion very env.fex ENV_FEX000000000
      FilePath: env.fex
      FileLength=20000Add partion boot.fex BOOT_FEX00000000
      Add partion very boot.fex BOOT_FEX00000000
      FilePath: boot.fex
      FileLength=4f4000Add partion rootfs.fex ROOTFS_FEX000000
      Add partion very rootfs.fex ROOTFS_FEX000000
      FilePath: rootfs.fex
      FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000
      Add partion very dsp0.fex DSP0_FEX00000000
      FilePath: dsp0.fex
      FileLength=3e38cBuildImg 0
      Dragon execute image.cfg SUCCESS !
      book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$
      
      

      最后在当前目录下 生成了一个 名为 tina_d1-h-nezha_uart0.img 文件,把它用 凤凰烧录 工具烧录进去。
      你会发现你可以把你增加过文件的分区 烧进去 并启动啦。

      那么这个时候,还存在一个问题,就是D1使用的都是 squashfs 类型的文件系统,这个时候,你也需要分析一下 他们的这个文件系统 生产方式,这个就可以借助 grep 命令了,参考如下。

      分析文件系统生成方式

      72d42ef5-7dfe-4f6a-b9cb-a4bbc92602b0-image.png
      1c42a072-d173-4915-a342-93eab5e022ac-image.png
      ec4624ab-1368-434d-b409-56e15977b52c-image.png
      92a50753-628e-4338-bf6f-145ae53f7efd-image.png

      最后得到 这个
      rootfs.squashfs -noappend -processors 9 -nopad -noappend -root-owned -comp xz -b 256k -p '''/dev d 755 0 0''' -p '''/dev/console c 600 0 0 5 1''' -processors 4\n' >> /home/book/buildroot_dshannezhastu/buildroot-awol/output/build/buildroot-fs/squashfs/fakeroot

      然后 把它 扔进 buildroot 就可以制作出 可以供 D1内核使用的系统,
      注意 tina的环境变量里面的 init 进程位置和buildroot 不一样 需要修改。
      注意 tina的环境变量里面的 init 进程位置和buildroot 不一样 需要修改。
      注意 tina的环境变量里面的 init 进程位置和buildroot 不一样 需要修改。

      最后 给大家放上,我们已经支持过 NEZHA D1的buildroot完整系统镜像源码
      https://github.com/DongshanPI/buildroot_dshannezhastu

      clone下来后,需要更新git 子模块 执行如下命令来拉取子模块的源码。

      git submodule update --init --recursive
      git submodule update --recursive --remote
      git pull --recurse-submodules

      之后进入 buildroot-awol 目录下,稍等一会 就可以生成 供spi nand 烧写的flash镜像了。 当然,也可以烧到tf卡启动。。
      buildroot_dshannezhastu/buildroot-awol$ make BR2_DL_DIR=../Download BR2_EXTERNAL=../br2nezhastu/ dshannezhastu_spinand_core_defconfig

      编译完成后的输出信息。
      04ae1d5f-065b-4602-96ff-5325042b89b7-image.png

      镜像输出在 output/images/目录下
      77648afc-4b4c-45d3-81a7-64440c44a9f5-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      【2023年11月8日更新】自平衡功能已实现,运行效果:

      发布在 A Series
      baiwen
      100ask
    • 百问网 哪吒D1-H 双屏异显项目板来啦!!!

      您还在为拿到D1-H不知道可以做什么而苦恼么?
      您还在为拿到D1-H不知道学什么而苦恼么?
      您的D1-H板还在吃灰么?
      d072e70d-6611-4237-9563-4b7e1a40a3c2-2743a471049ecbb53dd07ce7eda0d06.jpg
      这次我们专门针对于D1-H的显示特性,推出了首款D1-H项目板,专门用来学习 双屏异显项目,提供深入的MPP开发教程,显示接口开发教程等,欢迎大家了解!

      发布在 MR Series
      baiwen
      100ask
    • 在Linux下快捷对R128进行烧录

      给Linux版的PhoneixSuit封了一层,这样烧写就便捷多了

      准备烧写:
      4e39dcb7-f526-44dd-ac79-3de8c822dae7-image.png

      烧写结束:
      4a4593ee-f534-4a77-8936-261eb0391d95-f38b6d062f9c5f52167deb9227da4c7.png

      发布在 MR Series
      baiwen
      100ask
    • 嵌入式LinuxAI开发卷起来!!!

      感谢@YuzukiTsuru 大佬的认可和支持,授权给我们生产销售V851s蜥蜴 H616变色龙开发板,目前开发板已经售卖,文档已经在逐步支持并发布中,争取给大家提供一个最有趣完善的快速上手版本。
      https://dongshanpi.com/YuzukiHD-Lizard/01-BoardIntroduction/
      6c65b8b3-508f-4ac1-ade0-e5c2c8fdc5f1-image.png
      a1d7ae54-4c63-495e-8a26-37acb8f36eab-image.png
      不过单只有快速上手怎么能满足大家的需求呢?
      为此我们专门花了非常大的精力提供一个 针对于全志Tina-sdk源码的在线开发文档中心,可以深入学习了解更多关于Tina-SDK产品级的知识。
      https://tina.100ask.net/
      b06ed38f-b933-46f4-9926-758409c05ba7-image.png
      cac9d4a2-0f0a-4471-a66f-50346f2d0f15-image.png

      我们的文档都是采用了CC4.0 协议,大家可以直接COPY使用,另外我们会逐步完整支持 D1-H D1s T113 V851 V853等系列。

      顺便给大家透露一下 我们自己也做了一款全功能的 V853教育开发板,感兴趣的同学可以关注一下哦!
      d20067ca-4ecb-4832-9613-3f80f1941ee4-image.png

      发布在 V Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      【2023年11月15日更新】实现网络通信控制(UDP):

      [Video]

      发布在 A Series
      baiwen
      100ask
    • 完整支持buildroot 2021 LTS构建D1开发板SD卡系统镜像

      完整支持使用社区buildroot 2021自动编译构建D1 TF卡启动镜像,可以专门用来研究D1启动流程 工具链或者研究各个部分 boot0 opensbi u-boot kernel rootfs 等 对于深入理解RISC V 64有很大的帮助,目前正在整理合并源码 预计下周之前可以发布 获取最新动态请关注 https://gitee.com/weidongshan/neza-d1-buildroot.git
      buildroot -2021 .gif

      发布在 MR Series
      baiwen
      100ask
    • 100ASK-V853-PRO开发板回来了,这周将会发布重磅资料!!!

      这是一款百问网推出的首款 嵌入式AI 开发板
      使用BTB + 全功能 底板的方式设计,专门针对于 嵌入式开发学习使用,
      请忽略核心板的绿色,这只是第一批,后续我们会使用亚蓝!
      底板将所有的V853核心板信号全部引出,支持主芯片的所有功能开发
      屏幕支持 RGB、MIPI 摄像头支持双路 CSI以及单路CSI,
      板载4路USB HUB 芯片
      支持百兆以太网,以及WIFI 蓝牙无线通信。
      拥有全面的 GPADC 用户按键,
      以及一个LEDC可编程RGB灯
      提供 512MB DDR3 8/32GB Emmc配置,以及1GB DDR3 /32GB Emmc超高配。
      让性能可以充分发挥。
      6cd4c762-dfb0-4d5b-a3e4-b7c1f9cfbff4-a91981dad167efa6cb5222be6efc63a.jpg
      更多资料 敬请期待!!!

      发布在 V Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      【2023年11月19日更新】遥控手柄UI (LVGL) 第一个版本 (joystick 100ask v0.1):

      发布在 A Series
      baiwen
      100ask
    • 【实践操作】自己从头构建riscv 64 ubuntu等发行版系统!
      • 相关参考资料及源码仓库地址
        • gitee仓库地址 https://gitee.com/weidongshan/riscv-release-rootfs.git
        • github仓库地址 https://github.com/100askTeam/riscv-release-rootfs.git

      第一章 使用官方提供的源码包进行构建

      1.搭建开发环境

      1.1 开发涉及的环境/工具:

      • Windows下虚拟化工具VMware workstation pro。

      • vmware 下运行的ubuntu /debian 虚拟机系统。

      • riscv 架构的ubuntu根文件系统源码包。

      • ch-mount.sh挂载文件系统脚本。

      1.2 安装qemu虚拟化工具

      1.2.1 apt安装

      Ubuntu终端下需要安装qemu虚拟化工具,在终端下执行如下命令。

      book@100ask:~$ sudo apt-get install qemu-user-static
      

      安装完成后,在文件系统下执行如下命令测试是否安装成功。

      book@100ask:~$ qemu-riscv64-static -version

      1.2.2 手动交叉编译安装

      # see https://wiki.qemu.org/Hosts/Linux#Required_additional_packages
      book@100ask:~$ sudo apt-get install -y pkg-config git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
      book@100ask:~$ git clone https://git.qemu.org/git/qemu.git -b v4.2.0 --depth=1
      book@100ask:~$ cd qemu && mkdir build && cd build
      book@100ask:~$ mkdir out
      # You have to build as a static binary.
      book@100ask:~$ ../configure --static --target-list=riscv64-linux-user --prefix=$(pwd)/out
      book@100ask:~$ make && make install
      book@100ask:~$ cd ../../
      

      2. 获取riscv架构ubuntu根文件系统

      使用浏览器访问 http://cdimage.ubuntu.com/ubuntu-base/ 此地址,即可看到ubuntu基本系统所有的版本镜像文件,这里我们选择releases发布版。

      ​ 我们点击 release 发布版本的连接后进入如下图所示界面,这里列出了ubuntu base各个版本的下载地址,如下图根据红框所示,点击20.04 目前只有ubuntu 20支持了riscv64架构。

      ​ 点击20.04后在弹出新的页面内继续点击 releases 。

      ​ 之后页面就跳入ubuntu base 20.04 lts文件系统的下载页面了,这里列出了各种架构的文件系统源码包,不同的历史版本,我们页面往下滑,找到最新的架构为 riscv64的ubuntu系统源码包,如下图红框所示,下载 ubuntu-base-20.04.2-base-riscv64.tar.gz 到电脑磁盘上,让后上传此文件到VMware Ubuntu系统内。

      3.Vmware ubuntu-16.04挂载arm架构ubuntu文件系统

      3.1. 解压缩arm架构ubuntu-16.04文件系统到ubuntu下

      在VMware Ubuntu-16.04虚拟机家目录下创建一个 ubuntu-rootfs目录,用于解压缩保存文件使用。

      book@100ask:~$ mkdir ubuntu-rootfs
      
      book@100ask:~$ sudo tar -xvf ubuntu-base-20.04.2-base-riscv64.tar.gzz -C ubuntu-rootfs/
      

      查看当前路径下的文件结构已经OK

      3.1.2 拷贝qemu模拟工具到riscv64架构ubuntu-rootfs文件系统下

      book@100ask:~$ sudo cp usr/bin/qemu-riscv64-static ubuntu-rootfs/usr/bin/
      

      注意:qemu-riscv64-static 指的是riscv64架构的虚拟化工具,果是其他架构的则拷贝其他文件。

      如果你是手动编译生成的qemu-riscv64-static文件,则参考下述命令。

      book@100ask:~$ sudo cp ./qemu/build/out/bin/qemu-riscv64 ./riscv/usr/bin/qemu-riscv64-static
      

      ubuntu-roofs/usr/bin/ 指的是你当前解压riscv64架构的ubuntu20.04文件系统后的所在目录下的 usr/bin。

      拷贝主机DNS配置文件到arm架构Ubuntu文件系统内(必须拷贝,否则可能会导致下面操作无法进行)。

      book@100ask:~$  sudo cp /etc/resolv.conf  ubuntu-rootfs/etc/resolv.conf
      

      3.1.2 chroot到模拟riscv64文件系统下

      我们需要使用chroot 改变根目录来挂载riscv架构的ubuntu根文件系统,并配置或安装一些必要资源,首先创建ch-mount.sh 脚本。

      book@100ask:~$ vi ch-mount.sh
      

      将以下的内容复制到ch-mount.sh中。

      #!/bin/bash
      
      function mnt() {
          echo "MOUNTING"
          sudo mount -t proc /proc ${2}proc
          sudo mount -t sysfs /sys ${2}sys
          sudo mount -o bind /dev ${2}dev
      
          sudo chroot ${2}
      }
      
      function umnt() {
          echo "UNMOUNTING"
          sudo umount ${2}proc
          sudo umount ${2}sys
          sudo umount ${2}dev
      
      }
      
      
      if [ "$1" == "-m" ] && [ -n "$2" ] ;
      then
          mnt $1 $2
      elif [ "$1" == "-u" ] && [ -n "$2" ];
      then
          umnt $1 $2
      else
          echo ""
          echo "Either 1'st, 2'nd or both parameters were missing"
          echo ""
          echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
          echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
          echo ""
          echo "For example: ch-mount -m /media/sdcard/"
          echo ""
          echo 1st parameter : ${1}
          echo 2nd parameter : ${2}
      fi
      
      
      

      考虑到shell脚本对空格很灵敏,所以将我使用的文件放在如下地址处。

      book@100ask:~$ wget \
      https://weidongshan.coding.net/p/DevelopmentEnvConf/d/DevelopmentEnvConf/git/raw/master/ubuntu_rootfs-mount/ch-mount.sh
      book@100ask:~$ chmod +x ch-mount.sh
      

      接下来我们使用ch-mount.sh脚本挂载arm架构ubuntu-16.04文件系统,挂载命令如下所示,挂载成功后会提示 MOUNTING。

      book@100ask:~$ sudo ./ch-mount.sh -m ubuntu-rootfs/
      

      此时我们可以在此执行 uname -a来查看系统内核的详细信息,你会发现现在是 riscv架构。

      4. 配置arm架构的ubuntu系统

      4.1 安装基础软件包

      Chroot进入模拟的arm架构Ubuntu系统后需要先安装如下必须的安装包,安装包安装过程会根据你的网络下载速率可能会需要一段时间。

      安装基础软件包之前需要先执行 apt-get update命令来更新软件源,用以获取软件包的地址等。

      软件源更新完成后,可以安装必要软件包,安装速度根据个人网速绝定。

      apt-get install \
      language-pack-en-base sudo ssh  net-tools network-manager iputils-ping rsyslog \
      bash-completion  language-pack-zh-hans vim resolvconf kmod usbutils alsa-base
      

      4.2 用户名密码等相关设置

      • 添加用户、设定合适的组并设置密密码

      添加book用户并加入admin sudo用户组,设置密码为123456

      root@100ask:/#  useradd -s '/bin/bash' -m -G adm,sudo book 
      root@100ask:/#  echo "Set password for book:" 
      root@100ask:/#  passwd book 
      

      初始化root用户密码,这里设置为123456

      root@100ask:/#  passwd root
      

      4.3 其它配置

      • 设置主机名称和hosts

      在模拟的arm架构ubuntu根文件系统下执行如下两条命令即可设置主机名称。

      root@100ask:/# echo 100ask > /etc/hostname
      root@100ask:/# echo 100ask  > /etc/hosts
      
      • 配置登陆的启动串口脚本

      因为暂时未安装桌面,所以这里的配置要具体和内核中登录的串口的设备对应起来,不然对导致无法通过串口登录的问题。

      在 /etc/init/ 下添加或修改ttyS0.conf

      root@100ask:/# cat > /etc/init/ttyS0.conf << EOT
      start on stopped rc RUNLEVEL=[2345]
      stop on runlevel [!2345]
      respawn
      exec /sbin/getty -L 115200 S0
      EOT
      

      • 配置网卡接口
      root@100ask:/# cat >> /etc/network/interfaces << EOT
      auto lo
      iface lo inet loopback
      auto eth0
      iface eth0 inet dhcp
      EOT
      

      4.4 退出arm模拟文件系统

      配置或安装完基本的设置后,就可以退出模拟的arm架构文件系统了,操作步骤如下,先在模拟的arm架构文件系统内执行exit 退出到 VMware ubuntu虚拟机终端界面,让后卸载chroot挂载。

      root@100ask:/#  exit
      book@100ask:~$  sudo  ./ch-mount -u ubuntu-rootfs
      

      ​ 完成这些后,我们需要把内核镜像设备树,以及模块驱动等文件拷贝到riscv架构的ubuntu文件系统相应目录内。

      4.5 配置系统内核模块以及固件

      ​ 安装内核模块到riscv架构的ubuntu文件系统内,如下命令所示,INSTALL_MOD_PATH后面的目录地址为arm架构ubuntu文件系统所在绝对路径(模块安装前需要先编译模块)。

      book@100ask:~$ sudo make ARCH=riscv INSTALL_MOD_PATH=/home/book/ubuntu-rootfs modules_install
      

      ​ 安装完成后查看risv架构ubuntu文件系统的 lib/modules/ 目录下是否有如下相应文件生成

      ​ 自此,riscv架构的ubuntu文件系统已经基本制作完成,接下来我们需要制作为可烧录的镜像文件。

      4.6 使用nfs方式启动系统系统

      ​ 目前uboot不支持网卡,据说官方正在适配中。

      5. 制作可烧录的固件

      5.1 制作ext4文件系统镜像

      ​ 如下命令所示,需要先生成一个大小为2GB的 ubuntu-rootfs.ext4 镜像文件,让后格式化镜像为ext4格式,之后通过挂载镜像方式把制作好的镜像文件拷贝到文件系统内。

      book@100ask:~$ dd if=/dev/zero of=ubuntu-rootfs.ext4 bs=1M count=2048 
      book@100ask:~$ sudo mkfs.ext4 -F  ubuntu-rootfs.ext4
      

      ​ 如下命令所示,创建一个ubuntu-mount 目录,并挂载ubuntu-rootfs.ext4 镜像到该目录下,之后拷贝制作好的文件系统内所有文件到此挂载目录,紧接着使用sync命令同步数据缓存保证拷贝完成,完成后可以使用sudo umount ubuntu-mount/卸载当前挂载的镜像。

      book@100ask:~$ mkdir ubuntu-mount
      book@100ask:~$ sudo mount ubuntu-rootfs.ext4 ubuntu-mount/
      book@100ask:~$ sudo cp -rvfp ubuntu-rootfs/* ubuntu-mount/
      book@100ask:~$ sync
      book@100ask:~$ sudo umount ubuntu-mount/
      

      5.2 使用genimage制作可烧录镜像

      我们只制作好ext4格式的文件系统并不能直接烧录到开发板启动,此时我们需要使用buildroot下的genimage工具来帮我们打包生成一个完整的镜像文件。

      首先把制作好的 ubuntu-rootfs.ext4 镜像拷贝到已经编译过的 buildroot output/images目录下。

      book@virtual-machine:~/Neza-D1/buildroot-2021/output/images$
      

      ​ 修改buildroot根目录下board/Neza/d1/genimage.cfg 分区配置文件,来指定一下rootfs分区用的镜像文件。

        1 image Neza-d1-ubuntu-20-sdcard.img {
        2         hdimage{
        3                 gpt = true
        4                 gpt-location = 1M
        5         }
        6         partition boot0 {
        7                 in-partition-table = "no"
        8                 image = "boot0_sdcard.fex"
        9                 offset = 8K
       10         }
       11         partition boot-packages {
       12                 in-partition-table = "no"
       13                 image = "boot_package.fex"
       14                 offset = 16400K
       15         }
       16         partition env {
       17                 image = "env.fex"
       18                 size = 128k
       19         }
       20         partition env-redund {
       21                 image = "env.fex"
       22                 size = 128k
       23         }
       24         partition boot {
       25                 partition-type = 0xC
       26                 bootable = "true"
       27                 image = "boot.vfat"
       28         }
       29         partition rootfs {
       30                 partition-type = 0x83
       31                 image = "ubuntu-rootfs.ext4"
       32         }
       33 }
       34
       35 image boot.vfat {
       36         vfat {
       37         files = {
       38                 "boot.img",
       39                 "Image",
       40                 "board.dtb"
       41         }
       42         }
       43         size = 32M
       44 }
      
      

      ​ 执行上述步骤以后,保存退出 在buildroot根目录下执行make all命令来打包生成完整的镜像,最后生成的镜像输出在 buildroot根目录下的output/images/ 可以拷贝出来用windows下的wind32diskimage工具进行烧录 烧录成功后即可启动。

      文件系统只读问题

      • 开发板启动 切换终端 一直按 s 键 进入uboot命令行模式,来给设置bootargs 增加rw 读写权限。

      setenv bootargs earlyprintk=sunxi-uart,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyS0,115200 loglevel=8 root=/dev/mmcblk0p4 rw init=/sbin/init partitions=ext4 cma=8M gpt=1
      saveenv
      

      设置成功后 保存重启。

      6. 启动后常见问题

      6.1 网络相关问题

      • 不能上网

      配置dns服务器文件

      vim /etc/resolv.conf

      添加你的dns地址,至于怎么获取就不过多阐述

      route add default gw 192.168.1.1

      关于发行版文件系统的想法与建议

      统一一个可大家长期维护的发行版系统镜像

      • 目前看到有很多自己做的发行版系统镜像,各有各的优势与问题,我们是否可以统一成一个开源镜像大家一起维护升级,给更多的新的朋友一个更好的体验呢?

      使用github自动化工作流来自行构建生成系统镜像

      • 发现每次修改ubuntu文件系统只是做了一次小的改动 却要机械化的处理整个打包编译生成的过程,太过于浪费时间效率,想使用GitHub的CI自动化来根据我们每次的修改自动编译构建生成系统镜像文件,方便你我他。
      发布在 MR Series
      baiwen
      100ask
    • 回复: 【实践操作】自己从头构建riscv 64 ubuntu等发行版系统!

      @allwinnertech 附上两张启动logs 大家可以自行构建尝试哦 neza-ubuntu-18.0400.jpg neza-ubuntu-18.0401.jpg

      发布在 MR Series
      baiwen
      100ask
    • DongshanNezhaSTU RISCV架构学习开发板来啦!

      感谢 全志陈总、酷哇社区晕哥、芒果大佬 的鼎力相助。历经3个月的不间断折腾,东山哪吒STU 教育 开发板终于批量生产出来了。
      东山哪吒STU开发板是 百问网公司作为 进入RISCV全国产架构的首款开发板,它具有 最基本的常用接口,同时为了更好扩展学习,也有更加丰富的配套扩展接口用于更深入的了解riscv在嵌入式Linux中与arm架构的开发差异,她的主要配置如下

      • 板载 Allwinner D1 主控芯片
      • 板载 512M DDR3 内存芯片
      • 板载千兆 RTL RJ45有线网卡
      • 板载 TYPEC 转 TTL调试芯片
      • 板载 标准HDMI显示接口
      • 板载 TF卡可弹出式座子
      • 板载 TYPEC OTG烧写接口
      • 预留 SPI FLASH芯片焊盘

      另外我们也提供了多种产品级的配套底板,目前已有 全阵脚引出的 DIY 底板,用于广大爱好者进行扩展,另外还有一个针对于 产品级的86控制面板 项目在准备阶段。
      说了这么多废话,给大家来点实际的:

      • 价格上:主板仅售149元,配套DIY底板 售 29元。
      • 配套资源上:支持 Tina-sdk 支持新版buildroot 支持riscv裸机 当然还有 产品级项目,有文档 视频 以及专门的交流社区。

      下面给大家先来几张产品图。
      DongshanNezhaSTU-Core-TOP.jpg
      DongshanNezhaSTU-Core-Bottom.jpg
      另外底板由于样板还没生产出来 就先给大家看一下 PCB图吧
      企业微信截图_16467168123573.png Snipaste_2022-03-08_19-31-04.png
      对了 我们配套的DIY底板 是全开源的,工程文件也给大家放出来吧。还有配套的原理图等。
      DongshanNezhaSTU-DIY-BASE_v1.0.zip
      DongshanNezhaSTU_DIY-BASE_SCH_V1.0.pdf
      DongshanNezhaSTU_CORE_SCH_V1.0.pdf
      同时也欢迎大家留言交流你们对 东山哪吒STU 开发的建议与看法!

      发布在 MR Series
      baiwen
      100ask
    • LVGL+NES模拟器

      最近我有一个想法,既然LVGL能担任显示和外部输入(触摸和按键)的工作,为什么不用LVGL来写一个游戏模拟器呢?

      这是我的试验成果,只是简单的效果还没有进行更多的优化,接下来我会继续添加更多的功能,大家觉得好玩吗?

      发布在 MR Series
      baiwen
      100ask
    • DongshanPI-D1板载RISC-V调试器,作为一款全国产RV64底层学习开发板,期待您的加入!!!

      经过漫长的等待,百问网联合 全志在线x阿里平头哥xSipeed 共创的全国产RISC-V体系架构学习开发板来了,它的定位主要是偏向于喜欢研究底层的同学,如操作系统,裸机程序,驱动模块等。
      板子板载了D1s的RISC-V调试器,可以直接进行芯片级的调试开发,同时平头哥会针对这个板子支持CDK RT-Thread也会去支持,当然还有更多更多。
      a7efa70b-4815-4ec8-b51f-f0a63f032095-image.png
      另外,我们内部主要支持Linux和一款RTOS,对于有能力且感兴趣的同学,可以在此开发板上发挥你的长处,实现一些功能,我们将会给予赞助,可以是开发板,也可以是 我们的课程,当然也可以是Money。
      我们征集的内容不限,可以是 一个新的系统 一个Linux传感器模块的完整示例 也可以是一个新的裸机Demo ,反正您做的越多 我们能赞助给您的费用就越多。

      • 擅长做底层系统的:可以在我们的板子上移植新的操作系统,可以是FreeRTOS、RT-Tthread、YoC等
      • 擅长做组件的:制作一个组件库/包,如MQTT 库等
      • 擅长做应用的:开发一个应用,比如传感器的一个混合应用

      如果您想要实现相应的功能,可以在 https://forums.100ask.net/t/topic/1307/4 下面留言,当然也可以在此贴下留言,同时为了避免大家做重复的工作,尽量一个模块/系统 最多3个人做。

      发布在 MR Series
      baiwen
      100ask
    • 看图猜板,猜对的同学可以免费获得!

      给大家一点提示,这是一个 RTOS/Linux二合一开发板,板载芯片级调试器!
      82e20c5b-dfd2-4d4b-9820-78254ca26044-34f2f24e0de1edf995c801a80e9ff19.png [图片]
      8bdd955c-edce-4b44-886a-e5669bea9d86-企业微信截图_16603019423898.png [图片]

      发布在 V Series
      baiwen
      100ask
    • DshanMCU-R128s2-EVT 最全最强最丰富的企业评估套件来啦!!!

      微信图片_20231019155513.jpg

      微信图片_20231019155507.jpg

      微信图片_20231019155511.jpg

      微信图片_20231019155458.jpg

      发布在 A Series
      baiwen
      100ask
    • 同学们 东山哪吒STU 开发板 一次打样成功!

      71e89d14-7d5b-4bfa-9d99-00134f14d860-image.png
      af058491-665b-4aab-8e1c-5e8718ffc92e-0337196fb9f60582166edb7bca6b3878.jpg ea75850e-5b43-4814-91f9-88291a0ba83d-b30741801063669f48c9e042c5aa6567.jpg
      a4fdfba1-80ed-478d-b01e-e2a61071cf6c-image.png
      75628871-5802-4327-b46a-477de5f7858b-5716081f62b809a67979c7f419e47da5(1).jpg

      有个不好的消息是,网卡座子和tf卡座子封装搞反了😰 导致看起来很别扭。

      • 配套源码与镜像地址 https://github.com/DongshanPI/buildroot-external-DongshanNezhaSTU
      发布在 MR Series
      baiwen
      100ask
    • 全志T113 运行 谷歌 Flutter UI 示例,请问有没有哪位大佬了解怎么移植适配最新 Flutter 版本呢?

      ad7b6afe-a9da-4a7a-8dfe-31774e786a55-dccf71682fe1c2061c46daab0ffb7b9.jpg
      80b35408-babf-420d-be5d-df736a5fac7e-f30889f8bd30c55a2a537d859bc4bcf.jpg
      bd535d94-512c-4278-a41a-e23c2af2c6f7-image.png
      d254b762-a3cc-43c9-a6cc-b80d1608c494-image.png

      发布在 GUI
      baiwen
      100ask
    • Buildroot-2022.2主线已经支持Nezha开发板,原来有这么多大佬喜欢这款芯片,真的太香了!

      尝试编译运行

      1. 配置开发环境

      参考 之前文章 安装必要软件包 链接文本

      获取源码

      buildroot官网 点击下载 最新长期支持稳定版本 https://buildroot.org/download.html
      6117d136-673e-4bce-a9b4-2b00c234f614-image.png

      配置编译

      1. 拷贝下载下来的压缩包到 Ubuntu系统下,进行解压缩。
      2. 进入 buildroot-2022.02 目录下
      3. 执行 make nezha_defconfig 指定配置文件
      4. 执行 make 命令开始编译。
        等待编译结束......

      编译输出文件

      b98d1329-ad20-4751-afa1-5002da609dc9-image.png
      进入output找到 sdcard.img 使用 dd命令 或者Windows下使用 wind32diskimg工具 直接烧录进TF卡 插到开发板 上电启动。

      • 如果您的网络环境不是很好 可以使用下面我编译好的整个项目工程,工程正在压缩 后面再单独回复。

      • 我们可以看到 buildroot其实早在 去年就已经首次支持了
        392b1711-b96b-4026-8573-782191e61f25-129d14d793f0d8fef8dde64d250b995.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请教各位大佬,如何使能D1-H/D1s uboot下的有线网卡?

      问题已经解决,原因是 kernel 板级设备树 board.dts 要在父级设备树 根节点下 aliases 增加 节点 gmac0 = &gmac0;

      b415d855-ee70-4145-b4ff-a42fc1869300-image.png

      1da57658-62df-4814-8f7b-573e489b794a-企业微信截图_16553529977937.png

      其中uboot下要做几个配置。
      679204e9-950c-4f46-8502-504ed41efe0d-image.png
      aac01161-fad4-44ac-a33c-256ece77b886-image.png

      有了这些以后 启动uboot进入终端内 就可以使用网卡设备了,具体可以分析
      Tina-u-boot-2018\drivers\net\sunxi_geth.c
      文件。

      1b25c933-875d-4caa-8356-05a85b2c5b61-image.png

      这个时候我们就可以接上网线 使用 网络方式 更新 内核 设备树了,大大缩短 拔 卡插卡 烧写系统 繁琐的时间浪费。
      设置一下
      网卡MAC地址 setenv ethaddr AA:BB:CC:DD:EE:FF
      开发板的IP地址 setenv ipaddr 192.168.1.36
      你的服务器的IP地址 setenv serverip 192.168.1.133
      以及启动的bootargs setenv bootargs earlycon=${earlycon} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1
      15e9a8e3-b31c-4df5-b2c8-8f0928fd2f7a-image.png
      设置完成以后,把我们单独编译出来的 boot_package.fex 文件 boot.img 放到我们Ubuntu主机上的tftp目录下。
      我的服务器是 192.168.1.133

      tftp 43000000 192.168.1.133:boot_package.fex

      0cf04788-792e-47be-8b86-faad3fcc7b85-image.png

      下载完成后 执行如下命令 进行烧写。
      sunxi_card0_probe;mmcinfo;mmc part
      mmc write 43000000 0x00008020 0x1800
      注意:我这里烧写的是TF卡。
      820ac1f9-b850-4e28-af81-9ca39fccc55b-image.png
      烧写完成后 重启,你会发现 用的就是最新的 设备树了。
      这里有个问题,就是 原厂将 uboot optee 板级board.dtb 打包进了一个文件,所以无法单独烧写board.dtb ,只能一次烧所有。

      这里 给大家提供另一种 思路,就是使用 DTBO 来通过 uboot的 fdt overlay方式 单独去加载你修改的设备,然后应用。

      更新完了 板级 board.dtb以后,就可以通过tftp获取 你的 内核文件,然后 网络启动了。

      tftp 45000000 192.168.1.133:boot.img;bootm 45000000

      只需要一条命令,获取到 boot.img内核镜像文件,然后启动即可。
      d3407727-cb5c-4b06-9f3f-ac185ba06a60-image.png

      启动信息如下
      644f20cd-9595-4127-b7a5-fd569e59a4ed-image.png

      那么到这里 我们就可以很方便开发你的设备驱动 调试了。
      当然你也可以用 nfs_rootfs网络根文件系统,这个 步骤网上很多文章 我就不再截图了。
      在使用tftp的时候 发现了一个很烦人的 log信息。
      CACHE: Misaligned operation at range [47fea2c0, 47fea2ee]
      发现在 Tina-u-boot-2018\arch\arm\lib\cache.c
      里面,我目前的做法是将其 注释掉,
      17bf7e8b-106e-4e68-afcc-5bd16b94c0f6-image.png

      但是个人感觉 这种做法不标准,应该有宏开关 去控制的。希望知道的同学告知一下。

      发布在 MR Series
      baiwen
      100ask
    • R818 DshanPI-ROSx 高清靓图来啦! WiFi6 + 千兆网卡 + 800万 MIPI 摄像头 + MIPI HDMI显示 + OTG USB 串口 + 电池BAT!

      76399dd2-a17a-4554-9bc7-fe02dc0c304d-未标题-1_09.jpg
      45a197fe-b757-47d4-82c4-d86dbec1a12e-未标题-1_07.jpg

      发布在 MR Series
      baiwen
      100ask
    • 回复: mCore R818使用genimage 打包镜像通过dd if烧录 提示如下错误!

      @awwwwa 感谢大佬的回复,我通过分析 build/pack 使用 ./build.sh packraw
      找到了下面那个最终生成的命令
      c19acd14-595f-406c-9374-4dba960b0427-image.png

      fded34af-2f9f-46d8-8648-5b2d5a9d9b93-image.png
      然后把 programmer_img 丢进 buildroot 打包目录,直接编译打包,生成的镜像就可以直接用啦!
      bb1056bc-0d52-41b5-bb02-b1c10b7e6b3b-image.png

      sunxi_gpt这个我学习一下 怎么融进去 让他自己转换打包。

      不得不说,这个 programmer_img 很强大,但是里面怎么实现的我很好奇,当时修改了各种 genimage.cfg的分区类型和头部都不行。

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • AvaotaSBC 系列 A1 自带SPI显示屏 T527 开源版来啦!!!

      AvaotaA1_01.jpg
      详情_11.jpg
      详情_10.jpg
      详情_09.jpg
      详情_08.jpg
      详情_07.jpg
      详情_06.jpg
      详情_05.jpg
      详情_04.jpg
      详情_03.jpg
      详情_02.jpg
      详情_01.jpg
      详情_13.jpg
      详情_12.jpg

      发布在 T Series
      baiwen
      100ask
    • 麻雀D1s开发板支持buildroot 一件构建了。
      • 麻雀Buildroot扩展支持 https://github.com/100askTeam/buildroot-external-mq.git
      • 全志在线buildroot https://github.com/100askTeam/buildroot_aw-ol.git

      MQ-D1S Buildroot external tree

      这个Git仓库专门支持全志在线 RV64 的平台。这个是针对 芒果PI MQ 开发板专门支持的 BR2_EXTERNAL 外部扩展支持。

      快速开始

      环境配置

      为了使用 Buildroot,您需要在您的工作站上安装 Linux 发行版。 任何最新的 Linux 发行版(Ubuntu、Debian、Fedora、Redhat、OpenSuse 等)都可以正常工作。
      但是你需要安装一些必要软件包至您的Linux工作站才可以使用Buildroot manual System requirements section. 对于 Debian/Ubuntu发行版系统,需要参考下述命令安装列出来的软件包。

      $ sudo apt install debianutils sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio unzip rsync file bc git
      

      获取代码

      这个 BR2_EXTERNAL会配合着最新的LTS版本一起使用,所以版本会随着 上游的更新而建立新的分支进行更新,目前Buildroot最新 BR2_EXTERNAL最新LTS版本是 2021-02 。

      首先我们获取 buildroot最新lts版本源码。

      • 使用git clone
      $ git clone https://github.com/100askTeam/buildroot_aw-ol.git  buildroot
      

      获取buildroot源码后,可以单独获取 芒果PI MQ 的 BR2_EXTERNAL 源码。

      $ git clone -b main https://github.com/100askTeam/buildroot-external-mq.git
      

      获取完成后,可以看到 一个 buildroot目录和一个 buildroot-external-mq目录。

      配置并构建

      首先进入到buildroot目录

      $ cd buildroot/
      

      接下来执行配置命令,来使用 mq_core_defconfig配置文件进行配置。

      buildrot/ $ make BR2_EXTERNAL=../buildroot-external-mq mq_core_defconfig
      

      指定配置文件后,可以使用 make menuconfig 命令来增加自己需要的包。

      增加完成软件包后,就可以直接执行 make 命令开始编译了。

      buildroot/ $ make
      

      编译时会自动下载所需的软件包,进行配置编译最后打包成一个完成的系统镜像,整个时间受网络环境而定,一般情况下 只需要60分钟。

      烧写并启动系统

      编译完成后,会生成一个sdcard.img 系统镜像,镜像文件存放在 output/images/目录下。
      6257fb94-a41b-4be8-b386-d0b52f162838-image.png
      执行如下命令讲镜像烧录进 tf卡即可,注意 /dev/sdX sdX 指的是tf卡设备的主分区。
      或者可以使用 wind32diskimage进行烧写。

      buildroot/ $ dd if=output/images/sdcard.img of=/dev/sdX bs=1M
      

      烧写完成后,将卡插入至开发板,连接电源线,设置为 tf卡启动,即可启动开发板,之后连接串口,等待进入终端命令行,系统默认的登录用户名是 root 。

      注意这个只是最小系统,大家想做什么二次开发 直接在上面进行适配即可。
      5704024d-1aea-44d9-bb70-c999fceb322d-image.png

      发布在 MR Series
      baiwen
      100ask
    • 来了,百问网的工业场景专用学习开发板来了!!!

      09bec9d4-ee48-4f16-a6f4-2b3e3f2dc80d-58d5ddaa09031b18d9a49e6082a0919.jpg
      19696711-6157-4f49-8497-76e6c5115413-65f916125a6e5de3ce5692d6898ac74.jpg

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 回复: 【素材汇总】R128素材汇总

      主图

      主图_01.jpg
      主图_02.jpg
      主图_03.jpg
      主图_04.jpg

      详情

      详情_01.jpg
      详情_02.jpg
      详情_03.jpg
      详情_04.jpg
      详情_05.jpg
      详情_06.jpg
      详情_07.jpg
      详情_08.jpg
      详情_09.jpg
      详情_10.jpg

      发布在 公告
      baiwen
      100ask
    • 100ASK-V853-PRO开发板支持WIFI和有线网卡

      100ASK-V853-PRO开发板支持WIFI和有线网卡

      0.前言

      ​ 通过上一章节,我们已经成功下载Tina SDK包,完成编译并烧写Tina Linux系统,接下来展示100ASK-V853-PRO开发部如何通过WIFI和有线网卡进行上网。

      1.使用WIFI实现上网

      ​ 100ASK-V853-PRO全功能底板上板载有全志XR829,烧录的开发板系统已经进行了适配,可以直接使用,在开发板上输入ifconfig,可以显示已经使能的网络设备。

      root@TinaLinux:/# ifconfig
      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:65536  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
      wlan0     Link encap:Ethernet  HWaddr 84:B0:AC:67:95:EE
                UP BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      

      可以看到wlan0默认已经使能了,如果没有使能可以输入ifconfig -a,查看所有网络接口是否存在wlan0设备,如果存在wlan0,则可输入ifconfig wlan0 up使能wlan0。

      root@TinaLinux:/# ifconfig -a
      eth0      Link encap:Ethernet  HWaddr 92:A8:E0:01:3D:F9
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
                Interrupt:59
      
      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:65536  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
      p2p0      Link encap:Ethernet  HWaddr 84:B0:AC:67:95:EF
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
      wlan0     Link encap:Ethernet  HWaddr 84:B0:AC:67:95:EE
                UP BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
      root@TinaLinux:/# ifconfig wlan0 up
      

      使能完成后,由于系统内置wifimanager-v2.0,可以使您快速实现配网,输入wifi -h,可以获得参数帮助

      root@TinaLinux:/# wifi -h
      =======================================================================
      *************************  sta mode Options  **************************
      =======================================================================
      wifi -o sta
              : open sta mode
      wifi -f
              : close sta mode
      wifi -s
              : scan wifi
      wifi -c ssid [passwd]
              : connect to an encrypted or non-encrypted ap
      wifi -d
              : disconnect from ap
      wifi -a [enable/disable]
              : Auto reconnect
      wifi -l [all]
              : list connected or saved ap information
      wifi -r [ssid/all]
              : remove a specified network or all networks
      wifi -p [softap/ble/xconfig/soundwave]
              : softap/ble/xconfig/soundwave distribution network
      
      =======================================================================
      *************************  ap mode Options  ***************************
      =======================================================================
      wifi -o ap [ssid] [passwd]
              : open ap mode
              : if ssid and passwd is not set, start the default configuration: (allwinner-ap Aa123456)
              : if only set ssid, start the ap without passwd
      wifi -l
              : list current ap mode information
      wifi -f
              : close ap mode
      =======================================================================
      ***********************  monitor mode Options  ************************
      =======================================================================
      wifi -o monitor
              : open monitor mode
      wifi -f
              : close monitor mode
      =======================================================================
      ***************************  other Options  ***************************
      =======================================================================
      wifi -D [error/warn/info/debug/dump/exce]
              : set debug level
      wifi -g
              : get system mac addr
      wifi -m [macaddr]
              : set system mac addr
      wifi -h
              : print help
      =======================================================================
      

      接下来可以进行扫描wifi,注意扫描前需要检查天线是否安装好,安装位置如下图所示。

      image-20230411145903077.png

      检查安装完成后,在开发板的串口终端输入wifi -s

      root@TinaLinux:/# wifi -s
      root@TinaLinux:/# 1970-01-01 04:00:42:003: WMG_DEBUG [wifi_daemon.c:cmd_handle_thread:702]:  get cmd: s
      1970-01-01 04:00:42:003: WMG_DEBUG [wifi_daemon.c:cmd_handle_s:196]:  cmd handle s:
      1970-01-01 04:00:42:004: WMG_DEBUG [src/wmg_sta.c:sta_mode_ctl:463]:  =====sta_mode_ctl  cmd: 8=====
      1970-01-01 04:00:42:004: WMG_EXCESSIVE [src/os/linux/linux_wpa.c:command_to_supplicant:195]: do cmd SCAN
      1970-01-01 04:00:42:004: WMG_EXCESSIVE [src/os/linux/linux_wpa.c:command_to_supplicant:203]: do cmd SCAN, reply: OK
      ...
      1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]:  bss[00]: bssid=94:d9:b3:b7:c9:0a  ssid=100ASK  channel=7(freq=2442)  rssi=-23  sec=WPA_PSK
      1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]:  bss[01]: bssid=d0:76:e7:f8:93:d8  ssid=TP-LINK_93D8  channel=6(freq=2437)  rssi=-70  sec=WPA_PSK
      1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]:  bss[02]: bssid=7a:60:5b:29:22:ab  ssid=  channel=2(freq=2417)  rssi=-70  sec=WPA2_PSK
      1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]:  bss[03]: bssid=7a:60:5b:59:22:ab  ssid=  channel=2(freq=2417)  rssi=-70  sec=WPA_PSK
      1970-01-01 04:00:45:517: WMG_INFO [wifi_daemon.c:cmd_handle_s:222]:  ===Wi-Fi scan successful, total 21 ap(buff size: 60) time 3180.000000 ms===
      

      扫描完成后会打印Wi-Fi scan successful和所用的时间time,可以看到输出信息中的ssid为扫描出来的WIFI名称,注意WIFI名称如果是含有中文字符可能会无法显示。

      接下来可以进行连接WIFI进行上网,输入wifi -c ssid [passwd],其中ssid为WIFI名,passwd为密码

      假设我现在连接的WIFI名称为100ASK,密码为12345678,则需要输入wifi -c 100ASK 12345678

      root@TinaLinux:/# wifi -c 100ASK 12345678
      root@TinaLinux:/# 1970-01-01 04:16:49:482: WMG_DEBUG [wifi_daemon.c:cmd_handle_thread:702]:  get cmd: c 100ASK 12345678
      1970-01-01 04:16:49:482: WMG_DEBUG [wifi_daemon.c:cmd_handle_c:232]:  cmd handle c: 100ASK 12345678
      1970-01-01 04:16:49:482: WMG_INFO [wifi_daemon.c:cmd_handle_c:256]:  connect to sta(100ASK) with pask(12345678)
      ...
      1970-01-01 04:16:51:670: WMG_EXCESSIVE [src/os/linux/event.c:evt_read:128]: Excessive: read event 14
      1970-01-01 04:16:51:670: WMG_DUMP [src/os/linux/linux_wpa.c:linux_supplicant_connect_to_ap:1531]: receive wpas event 'CONNECTED'
      1970-01-01 04:16:51:671: WMG_EXCESSIVE [src/os/linux/linux_wpa.c:command_to_supplicant:195]: do cmd SAVE_CONFIG
      1970-01-01 04:16:51:691: WMG_WARNG [src/os/linux/linux_wpa.c:linux_supplicant_connect_to_ap:1559]:  failed to save config to wpa_supplicant.conf
      1970-01-01 04:16:51:691: WMG_DEBUG [src/wifimg.c:__wifi_sta_connect:87]:  wifi station connect success
      1970-01-01 04:16:51:691: WMG_INFO [wifi_daemon.c:cmd_handle_c:265]:  ===Wi-Fi connect successful,time 2210.000000 ms===
      udhcpc: started, v1.33.2
      udhcpc: sending discover
      udhcpc: sending select for 192.168.0.163
      udhcpc: lease of 192.168.0.163 obtained, lease time 122
      1970-01-01 04:16:53:689: WMG_DEBUG [src/os/linux/udhcpc.c:start_udhcpc:83]:  vflag= 4
      1970-01-01 04:16:53:689: WMG_INFO [src/os/linux/udhcpc.c:start_udhcpc:85]:  get ip addr 192.168.0.163
      

      可以看到当我们输入完成后,开发板会自动连接到WIFI并会自动获取IP地址,此时我们可以执行ping www.100ask.net,测试wifi是否可以ping通百问网的官方网址,按下Crtl+C结束测试。

      root@TinaLinux:/# ping www.100ask.net
      PING www.100ask.net (118.25.119.100): 56 data bytes
      64 bytes from 118.25.119.100: seq=0 ttl=53 time=34.627 ms
      64 bytes from 118.25.119.100: seq=1 ttl=53 time=34.894 ms
      64 bytes from 118.25.119.100: seq=2 ttl=53 time=34.477 ms
      64 bytes from 118.25.119.100: seq=3 ttl=53 time=36.828 ms
      ^C
      --- www.100ask.net ping statistics ---
      4 packets transmitted, 4 packets received, 0% packet loss
      round-trip min/avg/max = 34.477/35.206/36.828 ms
      

      2.使用有线网卡实现上网

      ​ 对于有线网卡,我们在我们的补丁文件中已经做了支持,但没有默认使能,需要我们手动进行使能,在开发板的串口终端输入ifconfig -a查看所有支持的网络设备,我们可以看到输入后会出现eth0有线网卡的设备。

      root@TinaLinux:/# ifconfig -a
      eth0      Link encap:Ethernet  HWaddr 92:A8:E0:01:3D:F9
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
                Interrupt:59
      
      lo        Link encap:Local Loopback
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:65536  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
      p2p0      Link encap:Ethernet  HWaddr 84:B0:AC:67:95:EF
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
      wlan0     Link encap:Ethernet  HWaddr 84:B0:AC:67:95:EE
                inet addr:192.168.0.163  Bcast:192.168.0.255  Mask:255.255.255.0
                inet6 addr: fe80::86b0:acff:fe67:95ee/64 Scope:Link
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:2676 errors:0 dropped:14 overruns:0 frame:0
                TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:440957 (430.6 KiB)  TX bytes:3968 (3.8 KiB)
      

      ​ 确认eth0有线网卡的设备存在,此时输入ifconfig eth0 up,使能有线网卡。

      root@TinaLinux:/# ifconfig eth0 up
      [ 3183.253385] libphy: gmac0: probed
      [ 3183.302411] sunxi-gmac gmac0 eth0: eth0: Type(6) PHY ID 001cc816 at 0 IRQ poll (gmac0-0:00)
      [ 3183.322880] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
      

      ​ 此时从路由器上引出一条网线,插上开发板的有线网口处。

      image-20230411153509284.png

      当网线插入开发板后,开发板的串口终端则会输出以下信息,表示有线网络已经连接成功

      root@TinaLinux:/# [ 3318.532310] sunxi-gmac gmac0 eth0: Link is Up - 100Mbps/Full - flow control rx/tx
      [ 3318.540797] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
      

      此时需要为开发板设备的有线网口获取IP,输入udhcpc eth0

      root@TinaLinux:/# udhcpc eth0
      udhcpc: started, v1.33.2
      udhcpc: sending discover
      udhcpc: sending select for 192.168.1.38
      udhcpc: lease of 192.168.1.38 obtained, lease time 86400
      udhcpc: ip addr add 192.168.1.38/255.255.255.0 broadcast + dev eth0
      udhcpc: setting default routers: 192.168.1.1
      

      此时我们可以执行ping www.100ask.net,测试wifi是否可以ping通百问网的官方网址,按下Crtl+C结束测试。

      root@TinaLinux:/# ping www.100ask.net
      PING www.100ask.net (118.25.119.100): 56 data bytes
      64 bytes from 118.25.119.100: seq=0 ttl=54 time=34.836 ms
      64 bytes from 118.25.119.100: seq=1 ttl=54 time=32.367 ms
      64 bytes from 118.25.119.100: seq=2 ttl=54 time=31.824 ms
      ^C
      --- www.100ask.net ping statistics ---
      4 packets transmitted, 3 packets received, 25% packet loss
      round-trip min/avg/max = 31.824/33.009/34.836 ms
      
      
      发布在 V Series
      baiwen
      100ask
    • 回复: 麻雀D1s开发板支持buildroot 一件构建了。

      大家可以试试白嫖 Github CI自动化构建,快还省事。
      https://github.com/100askTeam/buildroot-external-mq/blob/main/.github/workflows/buildroot-external-mq.yml
      自己增加一个专门的自动构建脚本,在上面的Actions里面启用自动化构建。
      c7683d48-f732-45a5-9945-6fc307a99763-image.png

      构建完成后,会在当前页面输出一个 sdcard.img镜像文件 可以直接下载。
      感觉大大增加了开发效率,最主要是免费😀 。

      发布在 MR Series
      baiwen
      100ask
    • 100ASK_V853-PRO开发板支持按键输入

      100ASK_V853-PRO开发板支持按键输入

      0.前言

      ​ 100ASK_V853-PRO开发板上共有5个功能按键,本章节跟大家讨论如何使能这五个按键。

      image-20230417154108195.png

      1.V853功能按键原理

      ​ 100ASK_V853-PRO开发板上提供的5个按键是通过GPADC高精度数模转换模块模拟出5个功能按键。GPADC 是 12bit

      分辨率,8 位采集精度的模数转换模块,具体通道数可以查看对应的 spec 说明⽂档,模拟输⼊范 围 0〜1.8V,最⾼采样率

      1MHz,并且⽀持数据⽐较,⾃校验功能,同时⼯作于可配置⼀下⼯作模式:

      1. Single mode:在指定的通道完成⼀次转换并将数据放在对应数据寄存器中;
      2. Single-cycle mode:在指定的通道完成⼀个周期转换并将数据放在响应数据寄存器中;
      3. Continuous mode:在指定的通道持续转换并将数据放在响应数据寄存器中;
      4. Burst mode:边采样边转换并将数据放⼊ 32 字节的 FIFO,⽀持中断控制。

      image-20230417172938775.png

      ​ 部分 GPADC 接⼝也开始慢慢⽤于 KEY 模块按键的读取,⼀般包括 VOL+、VOL-、HOME、MENU、ENTER 等等, GPADC0 ⽤于 KEY 的电路如上图。 AVCC-AP 为 1.8V 的供电,不同的按键按下,GPADC0 ⼝的电压不同,CPU 通过对这个电压的采样来确定具体是那 ⼀个按键按下。如上图,VOL+、VOL-、MENU、ENTER、HOME/UBOOT 对应的电压分别为 0.21V、0.41V、 0.59V、0.75V、0.88V。具体可以查看《100ASK-V853_Pro系统开发手册.pdf》中第五篇驱动开发的第⼗三章 Linux GPADC 开发指南。

      2.GPADC驱动

      GPADC驱动存放的位置为

      tina-v853-open/kernel/linux-4.9/drivers/input/sensor/sunxi_gpadc.c
      tina-v853-open/kernel/linux-4.9/drivers/input/sensor/sunxi_gpadc.h
      

      3.GPADC内核配置

      在Tina的根目录下输入make kernel_menuconfig

      book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig
      

      进入如下目录中,输入Y使能SUNXI GPADC驱动。

      → Device Drivers 
      	→ Input device support 
      		→ Sensors
      			 <*>   SUNXI GPADC
      

      配置完成后如下图所示。

      image-20230417174743552.png

      保存并退出内核配置界面。

      4.GPADC设备树配置

      内核设备树存放位置:

      tina-v853-open/device/config/chips/v853/configs/100ask/board.dts
      

      进入该目录后输入vi board.dts

      book@100ask:~/workspaces/tina-v853-open$ cd device/config/chips/v853/configs/100ask/
      book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ ls
      BoardConfig.mk  board.dts  buildroot  env.cfg  linux-4.9  sys_config.fex  uboot-board.dts
      book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi board.dts
      

      找到&gpadc节点,这个节点保存有采样相关的配置,键值,电压数据等。

      &gpadc {
          channel_num = <1>;                        // 使用1通道
          channel_select = <0x01>;                  // 选择 0x01 通道
          channel_data_select = <0>;                // 启用数据通道
          channel_compare_select = <0x01>;          // 启用通道比较功能
          channel_cld_select = <0x01>;              // 启用数据小于比较功能
          channel_chd_select = <0>;                 // 启用数据大于比较功能
          channel0_compare_lowdata = <1700000>;     // 小于这个值触发中断
          channel0_compare_higdata = <1200000>;     // 大于这个值触发中断
          channel1_compare_lowdata = <460000>;      // 小于这个值触发中断
          channel1_compare_higdata = <1200000>;     // 大于这个值触发中断
          key_cnt = <5>;                            // 按键数量
          key0_vol = <210>;                         // 按键电压,单位mv
          key0_val = <115>;                         // 按下按键的键值
          key1_vol = <410>;                         // 按键电压,单位mv
          key1_val = <114>;                         // 按下按键的键值
          key2_vol = <590>;                         // 按键电压,单位mv
          key2_val = <139>;                         // 按下按键的键值
          key3_vol = <750>;                         // 按键电压,单位mv
          key3_val = <28>;                          // 按下按键的键值
          key4_vol = <880>;                         // 按键电压,单位mv
          key4_val = <102>;                         // 按下按键的键值
          status = "okay";                          // 启用GPADC
      };
      

      我们还能通过board.dts文件中知道还有一部分不经常需要修改的配置保存在sun8iw21p1.dtsi文件中,进入该目录,并打开该文件。

      book@100ask:~/workspaces/tina-v853-open$ cd kernel/linux-4.9/arch/arm/boot/dts/
      book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/arch/arm/boot/dts$ vi sun8iw21p1.dtsi
      

      查看gpadc节点,可以发现这里的配置保存有中断和时钟等信息,但默认不使能。注意:这里可以不修改,因为这里的所设置的status配置会被board.dts中的status覆盖,只要在board.dts设置为使能,最终生成打包进镜像的设备树都为使能状态。

      gpadc:gpadc@2009000 {
          compatible = "allwinner,sunxi-gpadc";         // 用于驱动和设备的绑定
          reg = <0x0 0x02009000 0x0 0x400>;             // 设备使用的寄存器地址
          interrupts = <GIC_SPI 57 IRQ_TYPE_NONE>;      // 设备使用的中断
          clocks = <&clk_gpadc>;                        // 设备使用的时钟
          status = "disabled";                          // 配置默认不启用GPADC
      };
      

      5.增加getevent测试包

      在Tina根目录下执行make menuconfig

      book@100ask:~/workspaces/tina-v853-open$ make menuconfig
      

      进入Utilities目录下,输入Y选中getevent

       > Utilities
       	 <*> getevent.................................... getevent for Android Toolbox 
      

      选中完成后如下图所示。

      image-20230417183138871.png
      保存并退出Tina配置界面。

      6.编译、打包和烧写

      在Tina的根目录下,输入make -j32

      book@100ask:~/workspaces/tina-v853-open$ make -j32
      ...
      book@100ask:~/workspaces/tina-v853-open$ pack
      ...
      

      ​ 生成镜像后,将tina-v853-open/out/v853/100ask/openwrt/目录下的v853_linux_100ask_uart0.img镜像拷贝到Windows电脑主机中,使用全志PhoenixSuit烧写工具烧写到开发板上。

      ​ 插上12V的电源线,和两条Type-C,把开关拨向电源接口方向上电,烧写新镜像后等待启动系统,在命令行中输入getevent可以进入测试程序,通过输出的打印信息我们知道,我们的gpadc驱动上报的信息使用的

      是/dev/input/event1,此时按下按键,会读取按键的键值。

      root@TinaLinux:~# getevent
      add device 1: /dev/input/event2
        name:     "ft6336"
      add device 2: /dev/input/event1
        name:     "sunxi-gpadc0"
      add device 3: /dev/input/event0
        name:     "axp2101-pek"
      poll 4, returned 1
      /dev/input/event1: 0001 0073 00000001
      poll 4, returned 1
      /dev/input/event1: 0000 0000 00000000
      poll 4, returned 1
      /dev/input/event1: 0001 0073 00000000
      poll 4, returned 1
      /dev/input/event1: 0000 0000 00000000
      
      

      按下Crtl+C结束测试。

      7.编写一个测试应用程序

      通过上一章节的测试,我们知道gpadc使用的/dev/input/event1上报按键数据,则我们编写的应用程序中获取数据的节点应该为/dev/input/event1,应用程序如下所示。

      #include <stdio.h>
      #include <linux/input.h>
      #include <stdlib.h>
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <fcntl.h>
      #include <sys/time.h>
      #include <limits.h>
      #include <unistd.h>
      #include <signal.h>
      
      #define DEV_PATH "/dev/input/event1" //Modified to gpadc drive reporting node
      static int gpadc_fd = 0;
      
      unsigned int test_gpadc(const char * event_file)
      {
              int code = 0, i;
      
              struct input_event data;
      
              gpadc_fd = open(DEV_PATH, O_RDONLY);
      
              if(gpadc_fd <= 0)
              {
                      printf("open %s error!\n", DEV_PATH);
                      return -1;
              }
      
              for(i = 0; i < 10; i++) //read 10 times
              {
                      read(gpadc_fd, &data, sizeof(data));
                      if(data.value == 1)
                      {
                              printf("key %d pressed\n", data.code);
                      }
                      else if(data.value == 0)
                      {
                              printf("key %d releaseed\n", data.code);
                      }
              }
              close(gpadc_fd);
              return 0;
      }
      
      int main(int argc,const char *argv[])
      {
          int rang_low = 0, rang_high = 0;
              return test_gpadc(DEV_PATH);
      
      

      8.编译应用程序并进行测试

      新建一个gpadc目录,存放应用程序和可执行程序。

      book@100ask:~/workspaces$ mkdir gpadc_test
      book@100ask:~/workspaces$ cd gpadc_test/
      book@100ask:~/workspaces/gpadc_test$ vi gpadc_test.c
      

      将上一小节编写的应用程序复制到gpadc_test.c中保存。

      编写完成后,我们需要提供编译环境给gpadc_test应用程序,输入

      book@100ask:~/workspaces/gpadc_test$ export STAGING_DIR=~/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchainsunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi
      

      使用交叉编译工具链编译二进制文件,注意:需要Tina SDK包目录需要更换为自己的目录。

      book@100ask:~/workspaces/gpadc_test$ ~/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc -o gpadc_test gpadc_test.c
      

      编译完成后会再当前目录下生成一个gpadc_test可执行程序,将其拷贝到开发板上运行即可。下面使用TF卡的方式将文件拷贝到开发板上,此时假设你已经将文件拷贝到TF卡中,插入开发板后,在命令行中输入以下命令挂在SD卡到/mnt/目录下,并将gpadc_test应用程序拷贝到、root目录下。

      root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/
      [   26.744697] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
      root@TinaLinux:/# cd /mnt/
      root@TinaLinux:/mnt# ls
      System Volume Information  gpadc_test
      root@TinaLinux:/mnt# cp gpadc_test /root/
      

      进入/root目录下执行测试程序,该程序读取10次值会自动结束才测试

      root@TinaLinux:/mnt# cd /root/
      root@TinaLinux:~# ./gpadc_test
      key 115 pressed
      key 0 releaseed
      key 115 releaseed
      key 0 releaseed
      key 114 pressed
      key 0 releaseed
      key 114 releaseed
      key 0 releaseed
      key 139 pressed
      key 0 releaseed
      
      发布在 V Series
      baiwen
      100ask
    • 搞嵌入式Linux开发 感觉就很离谱!

      6c034d45-7d33-4a77-b0aa-ae779188a28a-嵌入式Linux开发领域.jpg
      欢迎各位大佬在此 提交建议&反馈
      https://github.com/100askTeam/Embedded-Linux-Development-Learning-Path/discussions此

      发布在 MR Series
      baiwen
      100ask
    • 100ASK-V853-PRO开发板支持yolov5模型部署

      100ASK_V853-PRO开发板支持yolov5模型部署

      0.前言

      ​ 本章节主要讲述如何获取yolov5单阶段目标检测算法,并将yolov5原始模型转换为ONNX格式。使用模型转换工具进行模型的转换,并将转换后的模型部署到开发板上。

      ​ 本章使用的软件列表:

      1. anaconda(Windows)
      2. Git(Windows)
      3. Tina SDK(Linux)
      4. 全志NPU扩展包(Linux)
      5. OpenCV库(Linux)

      硬件列表:
      百问网100ASK_V853-PRO开发板:https://www.aw-ol.com/boards/16

      这里提供Source资源包:source (包含conda配置yolov5环境依赖包文件,端侧部署代码)

      yolov5体验镜像:v853_linux_100ask_uart0.img (测试方法:yolov5 /etc/models/yolov5_model.nb <测试图像>)

      YOLOV5官方提供的V6.0版本的资源:

      yolov5s ONNX模型文件:https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.onnx

      yolov5s PT模型文件:https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt

      yolov5-v6.0代码:https://github.com/ultralytics/yolov5/archive/refs/tags/v6.0.zip

      1.配置yolov5环境

      yolov5官方网址为:https://github.com/ultralytics/yolov5

      使用Git工具在任意目录下获取源码V6.0版本,输入

      git clone -b v6.0 https://github.com/ultralytics/yolov5
      

      image-20230613182944474.png

      如果您使用Git下载出现问题,也可以直接点击下面网址直接下载源码压缩包,下载完成解压即可正常使用。

      https://github.com/ultralytics/yolov5/archive/refs/tags/v6.0.zip

      等待下载完成,下载完成后会在当前目录下,查看到yolov5项目文件夹

      100askTeam@DESKTOP-F46NFJT MINGW64 /d/Programmers/ModelDeployment/2.yolov5
      $ ls
      yolov5/
      
      100askTeam@DESKTOP-F46NFJT MINGW64 /d/Programmers/ModelDeployment/2.yolov5
      $ cd yolov5/
      
      100askTeam@DESKTOP-F46NFJT MINGW64 /d/Programmers/ModelDeployment/2.yolov5/yolov5 (master)
      $ ls
      CITATION.cff     README.zh-CN.md  detect.py   requirements.txt  tutorial.ipynb
      CONTRIBUTING.md  benchmarks.py    export.py   segment/          utils/
      LICENSE          classify/        hubconf.py  setup.cfg         val.py
      README.md        data/            models/     train.py
      

      打开Anaconda Prompt (Anaconda3)软件,进入yolov5项目目录中,输入以下命令

      (base) C:\Users\100askTeam>D:
      
      (base) D:\>cd D:\Programmers\ModelDeployment\2.yolov5\yolov5
      
      (base) D:\Programmers\ModelDeployment\2.yolov5\yolov5>
      

      使用conda创建yolov项目环境,输入

      conda create -n my-yolov5-env python=3.7
      

      激活yolov5环境

      conda activate my-yolov5-env
      

      安装依赖

      pip install -U -r requirements.txt -i https://pypi.doubanio.com/simple/
      

      替代文字

      FAQ:

      ​ 搭建环境时由于版本的不同会遇各种问题,下面我会提供我配置好的环境所需的包文件版本,文件位于压缩包的requirements文件夹中的conda-yolov5_6-env.yaml。在Conda终端中创建新环境,执行

      conda env create -f conda-yolov5_6-env.yaml
      

      执行python detect.py,测试环境是否搭建成功,执行后会自动下载模型权重文件

      image-20230614115122455.png

      这里下载速度可能会很慢,建议直接访问官网下载https://github.com/ultralytics/yolov5/tree/v6.0,点击下图红框处的YOLOV5s。这里我下载 v6.0 版本的 yolov5s.onnx 模型作为示例。

      下载地址:https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt

      替代文字

      点进入后会进去yolov5资源中心,往下找到V6.0版本的资源下载界面,找到您所需的资源即可。

      替代文字

      将该模型文件放在yolov5项目文件夹下,如下图所示:

      替代文字

      在conda终端中输入python detect.py,可得到如下执行结果

      (my-yolov5-env) D:\Programmers\ModelDeployment\2.yolov5\yolov5-6.0>python detect.py
      detect: weights=yolov5s.pt, source=data\images, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False
      YOLOv5  2021-10-12 torch 2.0.1+cpu CPU
      
      Fusing layers...
      D:\Anaconda3\envs\my-yolov5-env\lib\site-packages\torch\functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\native\TensorShape.cpp:3484.)
        return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]
      Model Summary: 213 layers, 7225885 parameters, 0 gradients
      image 1/2 D:\Programmers\ModelDeployment\2.yolov5\yolov5-6.0\data\images\bus.jpg: 640x480 4 persons, 1 bus, Done. (0.274s)
      image 2/2 D:\Programmers\ModelDeployment\2.yolov5\yolov5-6.0\data\images\zidane.jpg: 384x640 2 persons, 1 tie, Done. (0.189s)
      Speed: 4.5ms pre-process, 231.3ms inference, 2.8ms NMS per image at shape (1, 3, 640, 640)
      Results saved to runs\detect\exp1
      

      FAQ:

      ​ 如果您执行此命令时,遇到如下报错:
      替代文字

      原因:torch版本过高,可以通过修改代码或者降低版本。

      下面我使用修改代码的方式解决:

      ​ 修改D:\Anaconda3\envs\my-yolov5-env\lib\site-packages\torch\nn\modules\upsampling.py文件中的Upsample类中forward函数的返回值。

      原本:

          def forward(self, input: Tensor) -> Tensor:
              return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
                                   recompute_scale_factor=self.recompute_scale_factor)
      

      修改后:

          def forward(self, input: Tensor) -> Tensor:
              return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
      

      修改结果如下图所示:

      替代文字

      执行python detect.py完成后,可以在yolov5项目文件夹下的runs\detect\exp1目录下找到执行后的输出结果,如下所示。

      替代文字

      替代文字

      2.导出yolov5 ONNX模型

      2.1 export程序导出模型

      在export.py程序找到parse_opt函数,查看默认输出的模型格式。如果默认支持有onnx格式,就无需修改,如果默认没有填写onnx,修改默认格式为onnx格式。

      image-20230619163348744.png

      执行export.py函数前需要需要确保已经安装了onnx包,可手动安装,如下所示

      pip install onnx==1.13.0 -i https://pypi.doubanio.com/simple/
      

      执行export.py函数导出yolov5的onnx格式动态模型,在conda终端输入

      python export.py --weights yolov5s.pt --include onnx --dynamic
      

      image-20230619164049085.png

      执行完成后会在yolov5项目目录中生成一个名称为yolov5s.onnx的文件,如下图所示:

      image-20230619164141069.png

      2.2 简化模型

      ​ 由于转换的模型是动态 Shape 的,不限制输入图片的大小,对于 NPU 来说会增加处理工序,所以这里我们需要转换为静态 Shape 的模型。

      ​ 需要安装 onnxsim 工具,在conda终端输入

      pip install onnxsim -i https://pypi.doubanio.com/simple/
      

      image-20230614145945598.png

      然后使用这条命令转换:

      python -m onnxsim yolov5s.onnx yolov5s-sim.onnx --input-shape 1,3,640,640
      

      image-20230625153004215.png

      执行完成后会导出名为yolov5s-sim.onnx文件,文件位于yolov5项目文件夹下,如下图所示:

      image-20230619164602355.png

      2.3 查看模型

      使用开源网站Netron网站

      https://netron.app/

      访问上面网址查看模型结构。

      image-20230619165052151.png

      选择yolov5s-sim.onnx文件,点击打开。

      image-20230619165209306.png

      查看如下图所示输出节点

      image-20230625153134978.png

      可看到模型有 4 个输出节点,其中 ouput 节点为后处理解析后的节点;在实际测试的过程中,发现 NPU 量化操作后对后处理的运算非常不友好,输出数据偏差较大,所以我们可以将后处理部分放在 CPU 运行;因此保留 350,498,646 三个后处理解析前的输出节点即可,后文在导入模型时修改输出节点。

      3.转换NPU模型

      3.1 创建转换目录

      ​ 打开NPU工具包的虚拟机Ubuntu20.04,创建yolov5-6.0文件夹,存放模型和量化图像等。

      ubuntu@ubuntu2004:~$ mkdir yolov5-6.0
      

      进入yolov5模型转换目录。

      ubuntu@ubuntu2004:~$ cd yolov5-6.0/
      

      创建data目录存放量化图像

      mkdir data
      

      将量化图像传入data文件夹下,例如,传入test01.jpg图像到data

      ubuntu@ubuntu2004:~/yolov5-test$ ls data
      test01.jpg
      

      在yolov5模型转换目录中创建dataset.txt

      ubuntu@ubuntu2004:~/yolov5-6.0$ touch dataset.txt 
      

      修改dataset.txt文件

      ubuntu@ubuntu2004:~/yolov5-6.0$ vi dataset.txt
      

      在dataset.txt文件中增加量化图片的路径.

      ./data/test01.jpg
      

      image-20230619175830410.png

      将yolov5s-sim.onnx模型传入yolov5模型转换文件夹下。例如:

      ubuntu@ubuntu2004:~/yolov5-6.0$ ls
      data  dataset.txt  yolov5s-sim.onnx
      

      工作目录的文件如下所示:

      ubuntu@ubuntu2004:~/yolov5-6.0$ tree
      .
      ├── data
      │   └── test01.jpg
      ├── dataset.txt
      └── yolov5s-sim.onnx
      
      1 directory, 3 files
      

      3.2 导入模型

      导入模型前需要知道我们要保留的输出节点,由之前查看到我们输出的三个后处理节点为:350,498,646 。

      pegasus import onnx --model yolov5s-sim.onnx --output-data yolov5s-sim.data --output-model yolov5s-sim.json --outputs 350 498 646
      

      导入生成两个文件,分别是是 yolov5s-sim.data 和 yolov5s-sim.json 文件,两个文件是 YOLO V5 网络对应的芯原内部格式表示文件,data 文件储存权重,cfg 文件储存模型。

      3.3生成 YML 文件

      YML 文件对网络的输入和输出的超参数进行描述以及配置,这些参数包括,输入输出 tensor 的形状,归一化系数 (均值,零点),图像格式,tensor 的输出格式,后处理方式等等

      pegasus generate inputmeta --model yolov5s-sim.json --input-meta-output yolov5s-sim_inputmeta.yml
      

      image-20230619181406282.png

      pegasus generate postprocess-file --model yolov5s-sim.json --postprocess-file-output yolov5s-sim_postprocess_file.yml
      

      修改 yolov5s-sim_inputmeta.yml 文件中的的 scale 参数为 0.0039216(1/255),目的是对输入 tensor 进行归一化,和网络进行训练的时候是对应的。

      vi yolov5s-sim_inputmeta.yml
      

      image-20230621183150357.png

      3.4 量化

      生成量化表文件,使用非对称量化,uint8,修改 --batch-size 参数为你的 dataset.txt 里提供的图片数量。

      pegasus quantize --model yolov5s-sim.json --model-data yolov5s-sim.data --batch-size 1 --device CPU --with-input-meta yolov5s-sim_inputmeta.yml --rebuild --model-quantize yolov5s-sim.quantize --quantizer asymmetric_affine --qtype uint8
      

      image-20230619181548262.png

      3.5 预推理

      利用前文的量化表执行预推理,得到推理 tensor

      pegasus inference --model yolov5s-sim.json --model-data yolov5s-sim.data --batch-size 1 --dtype quantized --model-quantize yolov5s-sim.quantize --device CPU --with-input-meta yolov5s-sim_inputmeta.yml --postprocess-file yolov5s-sim_postprocess_file.yml
      

      image-20230619181729205.png

      3.6 导出模板代码与模型

      输出的模型可以在 ovxilb/yolov5s-sim_nbg_unify 文件夹中找到network_binary.nb文件。

      pegasus export ovxlib --model yolov5s-sim.json --model-data yolov5s-sim.data --dtype quantized --model-quantize yolov5s-sim.quantize --batch-size 1 --save-fused-graph --target-ide-project 'linux64' --with-input-meta yolov5s-sim_inputmeta.yml --output-path ovxilb/yolov5s-sim/yolov5s-simprj --pack-nbg-unify --postprocess-file yolov5s-sim_postprocessmeta.yml --optimize "VIP9000PICO_PID0XEE" --viv-sdk ${VIV_SDK}
      

      image-20230619181923864.png

      将生成的network_binary.nb文件拷贝出来备用。

      4.YOLOV5端侧部署

      4.1 配置yolov5端侧部署环境

      ​ 在进行端侧部署前,由于后处理需要使用OpenCV库,所以请先按照如下步骤

      • 配置NPU拓展包:https://forums.100ask.net/t/topic/3224

      • 配置OpenCV库:https://forums.100ask.net/t/topic/3349

        配置完成后才能编译端侧部署程序。

      ​ 下载source压缩包中的yolov5.tar.gz,将该压缩包拷贝到虚拟机中,解压压缩包

      tar -xzvf yolov5.tar.gz
      

      将解压出来的文件夹拷贝到tina-v853-open/openwrt/package/npu/目录下

      cp yolov5/ ~/workspaces/tina-v853-open/openwrt/package/npu/ -rf
      

      注意:上面的~/workspaces/tina-v853-open/openwrt/package/npu/目录需要更换为您自己的SDK实际的目录。

      拷贝完成后,如下所示:

      book@100ask:~/workspaces/tina-v853-open/openwrt/package/npu$ ls
      lenet  viplite-driver  vpm_run  yolov3  yolov5
      

      4.2 编译端侧部署代码

      配置编译环境

      book@100ask:~/workspaces/tina-v853-open$ source build/envsetup.sh 
      ...
      book@100ask:~/workspaces/tina-v853-open$ lunch
      
      You're building on Linux
      
      Lunch menu... pick a combo:
           1  v853-100ask-tina
           2  v853-vision-tina
      Which would you like? [Default v853-100ask]: 1
      ...
      

      进入Tina配置界面

      book@100ask:~/workspaces/tina-v853-open$ make menuconfig
      

      进入如下目录,选中yolov5后即可编译端侧部署程序

      > 100ask 
      	> NPU 
      		<*> yolov5....................................................... yolov5 demo             
      		<*>   yolov5-model...................................... yolov5 test demo model
      

      注意:yolov5-model该选择后会将yolov5_model.nb打包进镜像中,该模型文件会在/etc/models/目录下。

      image-20230625170009845.png

      保存并退出Tina配置界面。

      编译Tina SDK镜像,编译完成后打包生成镜像

      book@100ask:~/workspaces/tina-v853-open$ make
      ...
      book@100ask:~/workspaces/tina-v853-open$ pack
      

      注意:如果您将模型打包进镜像中,可能会出现文件系统大小设置值太小的问题们可以参考https://forums.100ask.net/t/topic/3158解决。

      打包完成后,使用全志烧写工具进行烧写新镜像,如果您还不会烧写系统,请参考:https://forums.100ask.net/t/topic/3403

      4.3 测试yolov5端侧部署

      测试图像文件要求:

      • 图片
      • 尺寸:640*640

      开发板端:

      ​ 使用ADB将测试图片传输到开发板上,将USB0的模式切换到 Device 模式

      cat /sys/devices/platform/soc/usbc0/usb_device
      

      image-20230625171158725.png

      主机端:

      将ADB设备连接上虚拟机,并将虚拟机中的测试图片传输到开发板中,查看ADB设备

      book@100ask:~/workspaces/testImg$ adb devices
      List of devices attached
      20080411	device
      

      查看需要传输的文件

      book@100ask:~/workspaces/testImg$ ls bus_640-640.jpg 
      bus_640-640.jpg
      

      传输文件到开发板中

      book@100ask:~/workspaces/testImg$ adb push bus_640-640.jpg /mnt/UDISK
      bus_640-640.jpg: 1 file pushed. 0.7 MB/s (97293 bytes in 0.128s)
      

      开发板端:

      进入测试图像目录

      root@TinaLinux:/# cd /mnt/UDISK/
      root@TinaLinux:/mnt/UDISK# ls
      bus_640-640.jpg  lost+found       overlay
      

      yolov5程序参数要求:yolov5 <模型文件路径> <测试图像路径>

      如果您打包了默认的yolov5模型文件,可以输入

      yolov5 /etc/models/yolov5_model.nb ./bus_640-640.jpg
      

      如果您需要选择自己的模型文件进行测试,可以将上面的/etc/models/yolov5_model.nb更换为自己的模型路径,下面我以默认的模型文件进行测试。
      image-20230625172157448.png

      查看输出图像文件yolov5_out.jpg

      root@TinaLinux:/mnt/UDISK# ls 
      bus_640-640.jpg  lost+found       overlay          yolov5_out.jpg
      

      主机端:

      拉取输出文件yolov5_out.jpg到当前文件夹下

      book@100ask:~/workspaces/testImg$ adb pull /mnt/UDISK/yolov5_out.jpg ./
      /mnt/UDISK/yolov5_out.jpg: 1 file pulled. 0.9 MB/s (184894 bytes in 0.202s)
      

      ![image-20230625172512521](${media}/image-20230625172512521.png image-20230625172512521.png)

      4.4 测试其他图像

      对于人形的识别,该模型还是比较准确的

      image-20230625175804726.png

      对于交通道路这种复杂的情况,对于行人丢失些许目标,但对于车辆效果很好,丢失情况较少。

      image-20230625180437728.png

      测试动物,对于动物的检测该模型是十分准确的,检测效果即预测精度都较高。

      image-20230625181808524.png

      image-20230625184657791.png

      发布在 V Series
      baiwen
      100ask
    • D1-H/D1s真的要卷起来了!!!
      • 拥有功能最丰富的D1s底板+ D1s邮票孔核心板,真的要把D1使劲卷起来了。
        3006cff9-c84d-4683-b524-43a76a71ac8f-image.png
      发布在 MR Series
      baiwen
      100ask
    • V851SE TinyVision地表最帅AI开发板来了! @yuzukihd

      74a00aef-0701-43da-9bd2-d849ef85169b-F_MFmsVbEAAHHys.jpg
      F_rIkkQaUAESNzD.jpg
      F_rIkjfa8AAmKfQ.jpg

      d4fad1c9-dabf-4bd3-be53-528765985121-副图.png

      发布在 V Series
      baiwen
      100ask
    • 真离谱:使用主线Buildroot编译Tina Linux系统,然后使用全志官方PhoenixSuit烧写SPI NAND

      45dc8ab2-2639-487c-b9ad-b1f1d85ce05d-image.png
      39f8acdb-4079-404e-aa28-0d2baeecf1c2-8d39fa3751e3f033e74ba0e5455ca77.png
      这么做的用意到底何在?
      难不成 只是为了让大家更容易上手?
      e17f7c9a-7103-4ff6-bc78-640ef8518786-D1全新课程框架.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: V851S上的ISP真的坏了吗?

      @kanken6174 非常抱歉,给您带来了 不好的体验, V851S商品没有下架,平台最近对认证有着非常严格的要求,导致我们的商品无法在 欧盟地区 售卖。
      37d46937-2780-42fe-8f3c-11db02fde5f1-image.png
      有相关问题,可以 发 邮件到 support@100ask.net
      我们会单独处理。
      484085b5-c426-4c09-8491-c754e5c828b2-image.png

      发布在 V Series
      baiwen
      100ask
    • 回复: 分析Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写。

      @allwinnertech 知道了这些以后,后面就可以 直接抛开 任何的 自动构建系统,来从零自己撸Linux系统了。前面已经告诉了 大家怎么 兼容buildroot 编译各个部分。。

      发布在 MR Series
      baiwen
      100ask
    • 回复: D1-H/D1s真的要卷起来了!!!

      @feng_snail_aw 刚刚上架 热乎的很 https://item.taobao.com/item.htm?id=677988583398
      cdcd7363-aac5-4d89-9dee-4f69334e5487-image.png

      发布在 MR Series
      baiwen
      100ask
    • 请教大佬,有没有开源支持D1s SPINor RTOS系统的boot引导程序,可以直接跑RTOS系统那种!!!

      经过漫长的折腾工作,DongshanPI-D1s V2版已经回来,但是无奈 发现了很多坑!!!
      95904544-00a2-4375-869a-6fd960d77425-bf2d562a0c2aa3bf03cc14f26c05fc5.jpg
      我们想把它作为一个RISC-V的RTOS教育开发板,但是看起来它更适合跑Linux系统😖

      问题一

      BL702模拟CKlink固件 无法和TF卡同时使用,这也就是说,我们无法同时用TF卡和Cklink功能
      详情看: https://forums.100ask.net/t/topic/1683/3

      问题二

      单独使用Cklink烧录Yoc系统,原本计划使用它们的那套工程来进行烧录,但是最后发现是一个product bin文件来进行的烧录操作。
      cdf2c00d-b142-449f-a61d-3274982e138b-image.png
      看来没法通过Yoc的CKlink烧录方式进行单独烧录了。
      换个思路使用Melis系统那套打包工具进行单独替换 RTOS系统来加载启动,但是最后发现 也是一堆bin文件 按照特定的格式打包才可以,最后使用凤凰烧录工具进行烧录,也是麻烦。

      问题三

      抛开上述两种使用 平头哥Cklink 和全志的凤凰烧写工具打包烧录,
      第三种全部使用社区主线的 源码,进入uboot下进行烧录操作,
      但是我参考了xfel里面的 ddr2参数,启动到boot部分就凉凉,难不成D1s和F133的ddr参数不同?
      488425a4-3417-4589-bb93-785c20fab9c6-1ed40025604f522d2e504cd4177b2fc.png
      然后无奈,继续尝试使用把Tina-SDK里面的 spi nor镜像 boot0部分 boot-package部分,单独抽取出来,进行烧写,可是xfel在spi nor有系统的状态下一直无法擦除。无解

      最后只能还按照我们支持的tina buildroot那套,把kernel换成rtos镜像,然后打包成一个可以烧录的镜像 最后使用凤凰烧写工具烧写启动,但是这样也太麻烦了吧。。。

      各位大佬 有什么好的建议 或者思路 欢迎留言,不胜感激!!!

      发布在 MR Series
      baiwen
      100ask
    • 基于DongshanPI-D1S开发板的《RISC-V体系结构编程与实践》学习教程来啦

      感谢
      笨叔在我们适配书籍代码的过程中给予指导与帮助!
      感谢全志给我们提供这么给力的芯片以及资源支持!
      感谢平头哥优先给我们提供 支持TUI GDB工具以及相关问题解答!

      话不多说,直接上文档~ RISC-V体系结构编程与实践_基于百问网D1S的学习指南.pdf

      《RISC-V体系结构编程与实践》是张天飞老师编写的书,必定是RISC-V架构的经典书。里面的内容丰富而有深度,他使用QEMU来做实验。但是在真实开发板上,这些源码不能直接使用。我们把书上的源码移植到了DongshanPI-D1S上,并且录制相关的学习视频。

      DongshanPI-D1S是百问网推出的一款基于RISC-V 架构的学习裸机、RTOS的最小开发板。集成CKLink调试器,支持OTG烧录、GDB调试、串口打印,并将主芯片所有的信号全部引出,其中左右两侧兼容了树莓派的电源信号定义,可以很方便扩展模块。

      图片1.png

      • 板子资料:http://download.100ask.net/boards/Allwinner/D1s/index.html
      • 购买地址:https://item.taobao.com/item.htm?id=688098912622

      资料分两部分:开发板通用资料、《RISC-V体系结构编程与实践》的D1S源码。前者比较庞大,放在百度网盘;后者放在书籍配套的GITEE网站。

      • 开发板通用资料:
        打开 http://download.100ask.net/boards/Allwinner/D1s/index.html ,可以看到“D1s课程配套通用资料”对应的百度网盘地址,请自行下载。本课程主要使用下图所示的软件:
        图片2.png

      • 《RISC-V体系结构编程与实践》的D1S源码:
        打开 https://gitee.com/weidongshan/riscv_programming_practice 登录后按如下界面操作:

      图片3.png

      点击“克隆/下载”按钮之后,如下点击“下载ZIP”即可:

      图片4.png

      如果你没有点击“下载ZIP”,而是使用GIT命令来下载,那么下载成功后还需要执行如下命令:

      git checkout DongShanPI_D1
      
      发布在 MR Series
      baiwen
      100ask
    • 回复: 百问网韦老师 D1 开发板 ---- 东山哪吒STU

      好多flash哇🤔 焊接技术

      发布在 MR Series
      baiwen
      100ask
    • 回复: 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!

      @aiminick
      使用uboot内的mkenvimage 执行如下命令。
      mkenvimage -r -p 0x00 -s 0x20000 -o env.fex env.cfg

      发布在 MR Series
      baiwen
      100ask
    • 回复: 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!

      Buildroot Git仓库最新支持如下图所示更丰富的常用软件包和lib库 方便大家学习与调试。
      198be99b-c746-4615-a586-0cb501370630-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 让T113-S3的TVIN吃上trecorder的本地预览套餐

      @baiwen 已经搞定
      84f1fef1-5066-49c7-93a2-689073709bc5-6aecaa25e15e7106681c14411cf6b2f.jpg

      发布在 MR Series
      baiwen
      100ask
    • 回复: t113(tina)加入paha.mqtt.c库,编译成固件烧录到板子上后报错找不到动态库

      我也遇到了编译QT5 无法打包所有qt so库的情况。
      经过调试发现
      是最后打包制作 rootfs.img 时 自动将 脚本认为无用的 文件资源 库 给移除掉了。所以导致最终目标系统没有包含进去。


      源码 build 目录 找到 reduce-rootfs-size.sh 脚本
      找到 downsize_rootfs 函数,注释掉里面的几个 remove函数

      6aad5b64-c79f-446e-988f-fac675fc2eee-image.png

      具体打包无效原因在。
      a552a01c-dff8-4cc1-80b5-d08e7e119784-image.png

      a2ee0e16-cfc0-4460-a51b-2ce0a98069fa-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请问,D1 Tina-SDK内的 FT5x 内核模块驱动源码在哪里呢?

      @baiwen 多次尝试FT5x依旧各种问题,主要是I2C 数据无法传输,个人认为是 I2C Core和 内核内的 edt-ft5x06.c 驱动不兼容导致得,具体原因还要排查,因不想浪费太多时间,尝试另一个 FT的驱动,修改后,安装,简单测试可以正常使用。

      	ft5336@38 {
                      compatible = "focaltech,fts";
                      reg = <0x38>;
                      status = "okay";
      				interrupt-parent = <&pio>;
      				interrupts = <PB 3 IRQ_TYPE_LEVEL_LOW>;
      				focaltech,reset-gpio = <&pio PB 2 GPIO_ACTIVE_HIGH>;
      				focaltech,irq-gpio = <&pio PB 3 IRQ_TYPE_LEVEL_LOW>;
      				focaltech,max-touch-number = <5>;
      				focaltech,display-coords = <0 0 800 480>;
      
      	};
      

      5ce9643d-da9b-470a-9252-ee15db86f773-image.png
      a9e1f7c5-ff7f-453f-b7a0-3b2611c94653-image.png
      231f8302-5594-489c-a874-7ce8401e0b61-image.png

      发布在 MR Series
      baiwen
      100ask
    • 1 / 1