Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页
    1. Home
    2. allwinnertech
    • Profile
    • Following 3
    • Followers 16
    • my integral 0
    • Topics 31
    • Posts 69
    • Best 22
    • Groups 0

    100askLV 1

    @allwinnertech

    0
    integral
    40
    Reputation
    288
    Profile views
    69
    Posts
    16
    Followers
    3
    Following
    Joined Last Online

    allwinnertech Unfollow Follow

    Best posts made by allwinnertech

    • 【极简操作】使用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

      posted in D1系列-RISC-V
      allwinnertech
      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
      posted in V853系列-AI视觉
      allwinnertech
      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 开发的建议与看法!

      posted in D1系列-RISC-V
      allwinnertech
      100ask
    • LVGL+NES模拟器

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

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

      posted in D1系列-RISC-V
      allwinnertech
      100ask
    • 看图猜板,猜对的同学可以免费获得!

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

      posted in V853系列-AI视觉
      allwinnertech
      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

      posted in D1系列-RISC-V
      allwinnertech
      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自动化来根据我们每次的修改自动编译构建生成系统镜像文件,方便你我他。
      posted in D1系列-RISC-V
      allwinnertech
      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
      posted in D1系列-RISC-V
      allwinnertech
      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

      posted in D1系列-RISC-V
      allwinnertech
      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

      posted in D1系列-RISC-V
      allwinnertech
      100ask

    Latest posts made by allwinnertech

    • Reply: MangoPi Dual T113 主线内核编译记录

      @ftwtwzy 好的,谢谢

      posted in Linux
      allwinnertech
      100ask
    • Reply: MangoPi Dual T113 主线内核编译记录

      @evler 在 MangoPi Dual T113 主线内核编译记录 中说:

      sudo dd if=awboot.bin of=/dev/sdd bs=1024 seek=8
      神奇,使用百问网的t113 pro开发板,不管改不改内核设备树里面的 uart接口,都是boot启动不了 内核,明天再排查排查🤒
      5f867373-0a3b-4e30-8a96-1aa4c900d86d-image.png

      posted in Linux
      allwinnertech
      100ask
    • 请问,有人在D1s成功运行过主线Linux系统么?

      147de011-6bcf-4a45-828c-8d87f3f2fce1-image.png
      修改 sun20i-d1-spl nboot/main/boot0_head.c

      		/*unsigned int     dram_para[32] ;*/
      		{
      			0x00000210,
      			0x00000002,
      			0x007b7bf9,
      			0x00000000,
      			0x000000d2,
      			0x00000000,
      			0x00000e73,
      			0x00000002,
      			0x00000000,
      			0x00000000,
      			0x00471992,
      			0x0131a10c,
      			0x00057041,
      			0xb4787896,
      			0x00000000,
      			0x48484848,
      			0x00000048,
      			0x1621121e,
      			0x00000000,
      			0x00000000,
      			0x00000000,
      			0x00030010,
      			0x00000035,
      			0x34000000,
      		},
       /*normal_gpio_cfg   uart_ctrl[2];*/
        {
                {5, 3, 6, 1, 0xff, 0xff, {0} }, /*PE3: 6--RX*/
                {5, 2, 6, 1, 0xff, 0xff, {0} }, /*PE2: 6--TX*/
        },
      
      

      修改主线内uboot设备树
      uart0引脚为PE2 PE3,打包方式保持不变
      烧写启动,提示如下
      8ad3e971-391a-4067-bb84-fcd4f473fc43-image.png

      posted in D1系列-RISC-V
      allwinnertech
      100ask
    • 请教各位大佬,D1的start.s __start部分是参考哪里怎么实现的? 还有dram.c又是从那里得到的这些数据,最后的mksunxi 也是搞不懂依据在哪

      最近在使用D1s录制RISC-V体系架构与C编程的课程,参考xboot作者的裸机实验(一直联系不到作者本人),目前可以直接烧录在DongshanPI-D1s spinor上运行,但是有几个问题 不明所以,不知道到底是怎么得来的,有懂的大佬能帮忙解析一下么?

      https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/tree/master/source/start.S

      fab41273-30a9-40b7-9ecd-35e77d8b0640-image.png
      c6993bf7-2462-47a4-88b2-2bc0885b5ea1-image.png

      https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/tree/master/source/sys-dram.c

      bf4c1d6b-8f25-4170-8980-2fa17bf8fdef-image.png

      https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/blob/master/source/tools/mksunxi.c

      #include <stdio.h>
      #include <string.h>
      #include <stdint.h>
      #include <stdlib.h>
      
      #if 0
      static inline uint32_t __swab32(uint32_t x)
      {
      	return ( (x<<24) | (x>>24) | \
      		((x & (uint32_t)0x0000ff00UL)<<8) | \
      		((x & (uint32_t)0x00ff0000UL)>>8) );
      }
      #define cpu_to_le32(x)	(__swab32((uint32_t)(x)))
      #define le32_to_cpu(x)	(__swab32((uint32_t)(x)))
      #else
      #define cpu_to_le32(x)	(x)
      #define le32_to_cpu(x)	(x)
      #endif
      
      struct boot_head_t {
      	uint32_t instruction;
      	uint8_t magic[8];
      	uint32_t checksum;
      	uint32_t length;
      	uint8_t spl_signature[4];
      	uint32_t fel_script_address;
      	uint32_t fel_uenv_length;
      	uint32_t dt_name_offset;
      	uint32_t reserved1;
      	uint32_t boot_media;
      	uint32_t string_pool[13];
      };
      
      int main (int argc, char *argv[])
      {
      	struct boot_head_t * h;
      	FILE * fp;
      	char * buffer;
      	int buflen, filelen;
      	uint32_t * p;
      	uint32_t sum;
      	int i, l, loop;
      	
      	if(argc != 2)
      	{
      		printf("Usage: mksunxi <bootloader>\n");
      		return -1;
      	}
      
      	fp = fopen(argv[1], "r+b");
      	if(fp == NULL)
      	{
      		printf("Open bootloader error\n");
      		return -1;
      	}
      	fseek(fp, 0L, SEEK_END);
      	filelen = ftell(fp);
      	fseek(fp, 0L, SEEK_SET);
      	
      	if(filelen <= sizeof(struct boot_head_t))
      	{
      		fclose(fp);
      		printf("The size of bootloader too small\n");
      		return -1;
      	}
      
      	buflen = (filelen + 0x2000) & ~(0x2000 - 1);
      	buffer = malloc(buflen);
      	memset(buffer, 0, buflen);
      	if(fread(buffer, 1, filelen, fp) != filelen)
      	{
      		printf("Can't read bootloader\n");
      		free(buffer);
      		fclose(fp);
      		return -1;
      	}
      
      	h = (struct boot_head_t *)buffer;
      	p = (uint32_t *)h;
      	l = le32_to_cpu(h->length);
      	h->checksum = cpu_to_le32(0x5F0A6C39);
      	loop = l >> 2;
      	for(i = 0, sum = 0; i < loop; i++)
      		sum += le32_to_cpu(p[i]);
      	h->checksum = cpu_to_le32(sum);
      	
      	fseek(fp, 0L, SEEK_SET);
      	if(fwrite(buffer, 1, buflen, fp) != buflen)
      	{
      		printf("Write bootloader error\n");
      		free(buffer);
      		fclose(fp);
      		return -1;
      	}
      
      	fclose(fp);
      	printf("The bootloader head has been fixed\n");
      	return 0;
      }
      
      posted in D1系列-RISC-V
      allwinnertech
      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

      posted in V853系列-AI视觉
      allwinnertech
      100ask
    • Reply: 请教大佬,有没有开源支持D1s SPINor RTOS系统的boot引导程序,可以直接跑RTOS系统那种!!!

      @aozima 我专门对比了 xfel 和 sun20i_d1_spl MQ 发现是一样的,
      4eb47712-4865-4e5d-a610-3cfbc29fc34e-image.png
      b6e1a8ce-fd34-407d-bbb4-5a419a7f93ae-image.png

      posted in D1系列-RISC-V
      allwinnertech
      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镜像,然后打包成一个可以烧录的镜像 最后使用凤凰烧写工具烧写启动,但是这样也太麻烦了吧。。。

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

      posted in D1系列-RISC-V
      allwinnertech
      100ask
    • 请教各位大佬,Melis是如何将编译出来的 melis.elf app等文件打包进melis.img生产一个可以烧录的系统!

      这次我们也设计了一个 板载CkLink的D1s RISC-V教育开发板,目的是为了用来学习RISC-V体系架构与编程,裸机开发,YoC RTOS系统(已支持helloword),RTT等系统。
      bb81255b-183a-4271-a7e8-1c8ebd8425e8-image.png

      这两天有看到RT-Smart支持了D1s的RTT系统,但是是基于SDCard或SD-Nand存储实现,因为我们的板子flash是NorFlash,所以想研究一下怎么在NorFlash运行。

      编译RTT

      • 参考 https://mp.weixin.qq.com/s/XznlHTqiTijgJ8uwPWXBBw
        800b69c3-bdd8-4e0d-808c-45184eef8f9b-3f5c72834090c19dec6e311c7c8f444.png
        最后编译生成对应的sd.bin文件,可以直接烧录,但是我想烧录到NorFlash 要怎么做呢?
        根据RISC-V的启动流程来看,opensbi-->u-boot-->rtt kernel -->app
        因为存储介质的区别,我要确定烧录的地址,这里无从得知,
        那面我需要获取到 前面 opensbi u-boot是从哪里来的,这个我一开始认为是全志提供,后来经过对比,发现并不是,询问RTT内部人员,他们也不知从何而来,这就比较尴尬,我只能除了IDA换个思路去解决。

      分析Melis

      • 全志有一款自家RTT系统,已经完整支持了D1s/F133,但是因为某些原因,无法对外公开,但是它却支持了NorFlash的系统,大家都知道Melis系统底层也是RTT的内核,所以我是不是可以把Melis里面的打包过程 单独领出来,去给 rt-smart支持,这样就能完美解决 不同flash支持的问题了。

      分析1

      • 每个芯片厂家都有自己的一套特定启动流程,烧录标准,以及打包的特定格式,所以简单的打包就是指定头部 指定分区文件,用特定的工具把一堆bin按照特定的要求生成一个img镜像格式,使用凤凰烧写工具烧写并启动。https://bbs.aw-ol.com/topic/1532/分析tina打包流程-并在buildroot上来实现打包生成tina镜像-支持phoenixsuit烧写?_=1668677556734

      分析2

      • 在D1s Melis系统里面 它的打包也是从 /D1s-Melis$ vim ./tools/scripts/pack_img.sh 开始入手
        我们可以通过执行pack命令 来看 对应的过程。
      INFO: running the function do_dragon with file "image_nor.cfg sys_partition_nor.fex"
      ====================================
      show "sys_partition_nor.fex" message
      ------------------------------------
        [mbr]
        mbr_size  : 16 Kbyte
      ------------------------------------
        partition_name  : bootA
        partition_size  : 2048
        downloadfile  : melis_pkg_nor.fex
        melis_pkg_nor.fex size : 608K byte
      ------------------------------------
        partition_name  : ROOTFS
        partition_size  : 10240
        downloadfile  : data_udisk.fex
        data_udisk.fex size : 5.0M byte
      ------------------------------------
        partition_name  : UDISK
      ------------------------------------
      /home/book/D1s-Melis/tools/packtool/
      /home/book/D1s-Melis/out/d1s-nezha/image
      Begin Parse sys_partion.fex
      Add partion melis_pkg_nor.fex MELIS_PKG_NOR_FEX
      Add partion very melis_pkg_nor.fex MELIS_PKG_NOR_FEX
      FilePath: melis_pkg_nor.fex
      FileLength=98000Add partion data_udisk.fex DATA_UDISK_FEX00
      Add partion very data_udisk.fex DATA_UDISK_FEX00
      FilePath: data_udisk.fex
      FileLength=500000sys_config_nor.fex Len: 0x1132d
      config_nor.fex Len: 0xc000
      split_xxxx.fex Len: 0x200
      sys_partition_nor.fex Len: 0xc81
      sunxi.fex Len: 0x12c00
      boot0_nor.fex Len: 0xc000
      boot0_card.fex Len: 0x10000
      boot_pkg_uboot_nor.fex Len: 0x4c000
      boot_pkg_uboot_nor.fex Len: 0x4c000
      u-boot_nor.fex Len: 0x48000
      fes1.fex Len: 0x7de0
      usbtool.fex Len: 0x24400
      usbtool_crash.fex Len: 0x1ec00
      aultools.fex Len: 0x288b7
      aultls32.fex Len: 0x2511f
      cardtool.fex Len: 0x11e00
      cardscript.fex Len: 0x766
      sunxi_gpt.fex Len: 0x2000
      sunxi_mbr_nor.fex Len: 0x4000
      dlinfo.fex Len: 0x4000
      arisc.fex Len: 0xf
      melis_pkg_nor.fex Len: 0x98000
      Vmelis_pkg_nor.fex Len: 0x4
      data_udisk.fex Len: 0x500000
      Vdata_udisk.fex Len: 0x4
      BuildImg 0
      Dragon execute image_nor.cfg SUCCESS !
      --------------------
      ----------image is at----------
      
      /home/book/D1s-Melis/out/d1s-nezha/melis_d1s-nezha_uart0_8Mnor.img
      
      do_finish 100ask +++++++++++++ 3
      INFO: pack finish
      
      
      1. 首先最后打包成一个完整可以烧录的镜像 没有变化 还是使用 dragon 根据分区配置文件统一生成。
      do_finish
       555         do_dragon image_$1.cfg sys_partition_$1.fex
      do_dragon()
        602     dragon $@
      
      1. 继续倒着 往上看
      INFO: packing for melis
      
      INFO: making data image for 8M nor
      INFO: running the function make_data_image for partition data
      [mbr] size = 16 [partition_start] [partition] name = bootA size = 2048 downloadfile = "melis_pkg_nor.fex" user_type = 0x8000 [partition] name = ROOTFS size = 10240 downloadfile = "data_udisk.fex" user_type = 0x8000 [partition] name = UDISK user_type = 0x8000
      ROOTFS:5120:"data_udisk.fex"
      UDISK:1984:"None"
      =bootA:1024:"melis_pkg_nor.fex"=
      ROOTFS:5120:"data_udisk.fex"
      UDISK:1984:"None"
      =ROOTFS:5120:"data_udisk.fex"=
      
      data_udisk.fex
      
      try to create image: ROOTFS to data_udisk.fex with size 5242880
      -------------------------------------------------------------
      make minfs image file [/home/book/D1s-Melis/out/d1s-nezha/image/data_udisk.fex] succeeded
      image config size  : [ 5242880]
      image used   size  : [ 4715036]
      DEntry count       : [      90]
      DEntry length      : [   13148]
      FData  length      : [ 4701212]
      -------------------------------------------------------------
      /home/book/D1s-Melis/projects/d1s-nezha/data/UDISK data_udisk.fex
      make_data_image 100ask +++++++++++++++++++++  bootA:1024:"melis_pkg_nor.fex"
      ROOTFS:5120:"data_udisk.fex"
      UDISK:1984:"None"
      =UDISK:1984:"None"=
      INFO: running the function do_finish "sys_partition_nor.bin"
      
      partitation file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_partition_nor.bin
      mbr_name file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sunxi_mbr_nor.fex
      download_name file Path=/home/book/D1s-Melis/out/d1s-nezha/image/dlinfo.fex
      
      this is not a partition key
      gpt_head->header_crc32 = 0x8c195ae6
      GPT----part num 3---
      gpt_entry: 128
      gpt_header: 92
      GPT:bootA       : 20            81f
      GPT:ROOTFS      : 820           301f
      GPT:UDISK       : 3020          302f
      update gpt file ok
      update mbr file ok
      
      WARN: 2021-01-19 do not create full binary because new uboot
      
      INFO: running the function create_rtos_full_img for pure binary imagefile 3968 8
      ----------------mbr convert to gpt start---------------------
      out: sunxi_gpt_nor.fex
      source: sunxi_mbr_nor.fex
      input_logic_offset: 96
      input_flash_size: 8M
      gpt partition entry crc32 = 0x25cd3a50
      gpt header crc32 = 0xb8d9d416
      GPT----part num 3---
      gpt_entry: 128
      gpt_header: 92
      GPT:bootA       : 20            81f
      GPT:ROOTFS      : 820           301f
      GPT:UDISK       : 3020          3f9f
      update gpt file ok
      ----------------mbr convert to gpt end---------------------
      boot0: boot0_nor.fex
      mbr: sunxi_gpt_nor.fex
      partition: sys_partition_nor.bin
      UDISK_partition_size: 3968 sector
      outfile: melis_8Mnor.fex
      logic_start: 48K
      total_image_size: 8M
      load file: boot0_nor.fex ok
      load file: sunxi_gpt_nor.fex ok
      load file: sys_partition_nor.bin ok
      part name=bootA
      file name:melis_pkg_nor.fex
      part size:2048 sector
      load file: melis_pkg_nor.fex ok
      part name=ROOTFS
      file name:data_udisk.fex
      part size:10240 sector
      load file: data_udisk.fex ok
      part name=UDISK
      this is not a partition key
      merge_package ok
      ----------rtos full image is at----------
      
      /home/book/D1s-Melis/out/d1s-nezha/melis_8Mnor.fex
      
      

      这部分是最终生成的包含Melis系统镜像的命令,实际的程序在

      do_finish
        522         if [ $1 = "nor" ] ; then
        523            update_mbr sys_partition_$1.bin         1       sunxi_mbr_$1.fex
        541            if [ "x$1" = "xnor" ] ; then
        542                if [ ${current_rtos_full_img_size} -eq 8 ]; then
        543                   pack_warn "2021-01-19 do not create full binary because new uboot";create_rtos_full_img ${LOGICAL_UDISK_PARTS_KB_REMAIN_FOR_8M} ${current_rtos_full_img_size}
      
      
      prepare_for_8Mnor
      
        880     pack_info "making data image for 8M nor"
        881     make_data_image sys_partition_nor.fex ${LOGICAL_PARTS_KB_FOR_8M} LOGICAL_UDISK_PARTS_KB_REMAIN_FOR_8M
        882     sed -i 's/\(imagename = .*\)_[^_]*nor/\1_8Mnor/g'               image_nor.cfg
        883     IMG_NAME=$(awk '{if($3~/^'${PACK_PLATFORM}'.*img$/)print$3}'    image_nor.cfg)
        884     current_rtos_full_img_size=8
      
      
      
      create_rtos_full_img
        839         echo ----------------mbr convert to gpt start---------------------
        840         mbr_convert_to_gpt --source ${mbr_source_file} \
        841                 ¦       ¦      --out ${gpt_file} \
        842                 ¦       ¦      --input_logic_offset $((${LOGIC_START} * 1024 / 512 )) \
        843                 ¦       ¦      --input_flash_size ${2}
        844         echo ----------------mbr convert to gpt end---------------------
        846         cp ${gpt_file} sunxi_gpt.fex
        847
        848         cp ${boot0_file_name} boot0.fex
      
        853         merge_full_rtos_img --out ${full_rtos_img_name} \
        854         ¦       ¦       ¦   --boot0 ${boot0_file_name} \
        855         ¦       ¦       ¦   --mbr ${gpt_file} \
        856         ¦       ¦       ¦   --logic_start ${LOGIC_START} \
        857         ¦       ¦       ¦   --partition sys_partition_nor.bin \
        858         ¦       ¦       ¦   --UDISK_partition_size ${1} \
        859         ¦       ¦       ¦   --total_image_size ${2}
      

      从上面可以看出来是根据 我们指定的 分区文件 来最终生成一个 包含完整系统镜像的这么一个系统。
      但是只有这些还是不够,我要知道 Melis.elf到底是包含在了哪里。
      我们看一下这个分区定义,整个打包操作步骤是没有变化,还是更新头部,转换fex为bin格式,然后使用 特定的命令进行完整打包
      D1s-Melis/projects/d1s-nezha/configs$ cat sys_partition_nor.fex
      f526df91-89ae-492e-868e-58a70be8cb06-image.png
      7684e842-6558-48fe-81de-fdc1a187aa21-image.png
      从上图可以看到,他的分区只有3个,首先排除最后一个分区UDISK,是一个没有文件的空分区,然后 就是ROOTFS分区和 bootA分区了,然后根据 downloadfile名称来看,更像是bootA分区里面存放了melis.elf文件。
      但是这个我没法解包,也无从得知是哪里得到,无果,继续往上看

      1. 打包过程分析
      book@virtual-machine:~/D1s-Melis$ pack
      INFO: temporarily Enter pack directory: "/home/book/D1s-Melis/out/d1s-nezha/image", will be back when terminated
      INFO: copying config/boot binary/phoenix plugin files
      /home/book/D1s-Melis/tools/phoenixplugin/aultls32.fex
      /home/book/D1s-Melis/tools/phoenixplugin/aultools.fex
      /home/book/D1s-Melis/tools/phoenixplugin/cardtool.fex
      /home/book/D1s-Melis/tools/phoenixplugin/split_xxxx.fex
      /home/book/D1s-Melis/tools/phoenixplugin/Tools.fex
      /home/book/D1s-Melis/tools/phoenixplugin/usbtool_crash.fex
      /home/book/D1s-Melis/tools/phoenixplugin/usbtool.fex
      /home/book/D1s-Melis/tools/phoenixplugin/usbtool_test.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/arisc.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/cardscript.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/cardscript_product.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/config.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/split_xxxx.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sunxi.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_card.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_card_product.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_nand.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_nor.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_card_dump.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_card.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_card_product.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nand_dump.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nand.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nor_dump.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nor.fex
      /home/book/D1s-Melis/projects/d1s-nezha/configs/env.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/image_card.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/image_card_product.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/image_nand.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/image_nor.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/package_boot0.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_card.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_card_product.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_nand.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_nor.cfg
      /home/book/D1s-Melis/projects/d1s-nezha/configs/rootfs.ini
      /home/book/D1s-Melis/projects/d1s-nezha/version/version_base.mk
      /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_nand.bin:boot0_nand.fex
      /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_nor.bin:boot0_nor.fex
      /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_card.bin:boot0_card.fex
      /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_card.bin:boot0_card_product.fex
      /home/book/D1s-Melis/projects/d1s-nezha/bin/fes1_sun20iw1p1.bin:fes1.fex
      /home/book/D1s-Melis/projects/d1s-nezha/bin/u-boot_sun20iw1p1_nand.bin:u-boot_nand.fex
      /home/book/D1s-Melis/projects/d1s-nezha/bin/u-boot_sun20iw1p1_nor_uart0.bin:u-boot_nor.fex
      /home/book/D1s-Melis/projects/d1s-nezha/epos.img:epos.img
      Compressed 1203760 bytes into 836271 bytes ==> 69.47%
      
      INFO: define image file name is:melis_d1s-nezha_uart0_nor.img
      
      pack boot nor package
      GetPrivateProfileSection read to end
      content_count=2
      
      32+0 records in
      32+0 records out
      32768 bytes (33 kB, 32 KiB) copied, 0.000412117 s, 79.5 MB/s
      
      
      fes1 file Path=/home/book/D1s-Melis/out/d1s-nezha/image/fes1.fex
      script file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_config_nor.bin
      
      script update fes1 ok
      
      
      uboot file Path=/home/book/D1s-Melis/out/d1s-nezha/image/u-boot_nor.fex
      script file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_config_nor.bin
      
      debug_mode =1
      secure_mode =0
      
      GetPrivateProfileSection read to end
      content_count=1
      
      
      toc1 file Path=/home/book/D1s-Melis/out/d1s-nezha/image/boot_package.fex
      script file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_config_nor.bin
      
      cant get board_id_enable
      script update toc1 ok
      
      

      最上面这部分来看,就是检查一下文件是否完整,然后指定头部等配置文件,将其转换成特定的格式并等待后续使用,这部分并没有特别有用信息。
      相关操作都在

      do_common
      

      待解决

      那么问题来了,melis.elf到底包含在了那个 分区里面 是bootA还是ROOTFS,亦或者其它我不知道的,
      d86d1f35-4aa0-470d-8f8f-1a04c17b9cac-image.png
      具体单板工程下的 epos.img是做什么用的?
      /D1s-Melis/projects/d1s-nezha/sbi-bin$ cat osinit 里面为什么指定了 melis30.elf文件,但是这个文件到底是何时被编译打包进去,前面为什么有target这个 gdb调试地址,是否是调试时才需要的。
      b8988b43-f76e-493a-bda5-30a1c2dbfaff-image.png

      7f1a8da5-aaea-475a-9de5-ceac03d5b127-image.png

      另外但从启动信息看
      6082e7af-eb6c-4801-a22d-dbad688d67e0-image.png
      第一部分首先是 boot0 也就是norflash ddr头部信息,然后是一个 所谓的复合bin里面应该包含了opensbi部分 melis kernel本身,可能还有uboot部分和env启动参数部分。
      后面就是加载melis kernel的log日志信息了,请有知道的大佬提点一二!!!

      后面我尝试从 烧录 编译好的Melis系统镜像打印信息来分析 烧录过程,看是否可以反推出对应位置等。

      posted in D1系列-RISC-V
      allwinnertech
      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
      posted in V853系列-AI视觉
      allwinnertech
      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个人做。

      posted in D1系列-RISC-V
      allwinnertech
      100ask