泰晓科技 -- 聚焦 Linux - 追本溯源,见微知著!
网站地址:https://tinylab.org

基于泰晓RISC-V实验箱的Linux公开课
请稍侯

RISC-V AI 开发:D1 开机入门

Jinwen Zhou 创作于 2022/11/03

Corrector: TinyCorrect v0.1-rc3 - [pangu epw] Author: Jinwen Zhou zhoujwtony@163.com Date: 2022/08/09 Revisor: Falcon falcon@tinylab.org Project: RISC-V Linux 内核剖析 Sponsor: PLCT Lab, ISCAS

本文介绍 D1 开发板应用开发的软硬件准备工作。

编译环境

根据官方 SDK 环境建议,Tina Linux SDK 是在 Ubuntu14.04 开发测试的,因此推荐使用 Ubuntu 14.04 主机环境进行源码编译,Ubuntu 16、18、20 等版本也可以支持,但是可能需要开发者另外配置一些包。本文采用 VirtualBox 安装 Ubuntu14.04,相关配置建议参考官方文档:

  • 内存大小设置:建议大于 2GB
  • 虚拟硬盘大小设置:建议至少设置 50GB(SDK 所需较大空间)
  • 安装好 Ubuntu14.04 虚拟机环境后,建议不要在线升级 Ubuntu 版本

安装增强功能,包含共享剪贴板,共享文件夹,自动调节屏幕大小等功能,比较方便:

点击虚拟机界面上面菜单栏的【设备】–【安装增强功能】。然后可以看到在虚拟机的光驱中自动加载了增强 iso 的文件(VBoxGuestAdditions.iso),点击『Run』运行按钮。接着按虚拟机所指引步骤进行即可。

Ubuntu 环境配置

用以下命令安装一些必要的包:

sudo apt-get update

sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y

为了提高下载速度,官方建议将 Ubuntu 下 /etc/apt/sources.list 的内容全部替换成如下内容(修改需 sudo 获取权限):

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse

SDK 下载与配置

直接参考官方文档:源码下载

官方提供的 SDK 除了可配置编译系统外,还包含了已适配的各种工具链及软件包,方便开发人员使用。

在 Tina Linux SDK 中有完整的编译工具链,路径如下: tina/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702

将编译工具路径设置为全局变量:

vim ~/.bashrc 命令打开 bashrc 文件,输入:

export PATH=/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/:$PATH

然后输入 source ~/.bashrc 使之生效。

D1 系统的烧写

本文推荐的的是全志原厂提供的 固件,无需编译,可直接烧录。经测试,也可以正常运行后续要用到的 ncnn 框架和摄像头测试程序。

在本次实验过程中,也尝试了另外两种方式,但是都以失败告终,请勿浪费时间尝试。具体问题如下:

  • 通过 Tina Linux SDK 编译

    烧写和编译方法参照:烧写编译方法

    该系统需要自己编译,但该镜像执行后续需要的 ncnn 程序时会发生非法指令错误,根据 ncnn 作者所说,在执行 vgg16 这类大型模型在内存不足时会发生 segmentation fault,是 D1 开发板硬件条件不够,不管即可。

  • Debian by Sipeed

    此方案需要将系统镜像烧录到 SD 卡中。有 SD 卡插入时,D1 会优先启动 SD 卡中的系统。

    该系统优点是可直接下载固件进行烧录,可以用 apt 命令下载软件,可在板子上直接编译运行程序,同时也支持 ncnn 框架;但是在运行摄像头采图 demo 时会出错,换成 Tina 系统没问题,在 Ubuntu 的 PC 上执行也没有问题。目前看来是该系统对摄像头驱动支持的问题。

烧录需要下载全志制卡工具 PhoenixCard.zip,解压并打开使用。下载地址:PhoenixCard 下载,使用该系统的 SD 卡内存推荐用 32G 以上的,使用 16G 的 SD 卡会出现烧录后系统无法启动的问题。

Helloworld 程序测试

hello_world.c 文件:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    printf("Hello NeZha\n");
    return 0;
}
  • 编译文件

    编译命令:

    riscv64-unknown-linux-gnu-gcc -o hello_word hello_world.c
    

    编译完成后会在当前文件夹生成名为 hello_word 文件,这个就是可以在开发板上运行的可执行文件。

  • 开发板上电

    分别用一根 USB 线和一根串口线连接电脑的 USB 端口,如图所示:

    硬件连接示意图.png

    然后,可以选择一款自己熟悉的串口客户端,这里选择 xshell,它拥有图形化界面,操作简单。

    xshell 仅需通过 “文件->新建->设置协议 SERIAL” 选择对应的端口即可通过串口登录查看系统。

    Linux 用户可以选择 minicom。

  • 文件上传到开发板

    首先下载 ADB 工具,在 研发生产工具 找到下载链接,安装即可。

    打开电脑 CMD,检查设备与电脑的连接情况,可以使用(ADB 工具是 Windows 下的工具,使用虚拟机编译的,编译文件还在虚拟机里,可以通过共享文件夹或者 ssh 把文件传给 Windows):

    adb devices
    

    把电脑文件传给开发板:

    adb push <电脑上的文件路径> <开发板上的目标路径>
    adb push hello_word ./.    #.表示根目录
    
  • 执行

    上传成功后,就可以在 Tina 系统中的 /root 目录下就有 hello_word 文件。然后赋予它可执行权限,执行即可:

    chmod +x hello_word
    ./hello_word
    

输出 Hello NeZha 就成功了!

小结

开发板准备工作完成,可以进行后续的开发流程。

参考资料

  1. 源码下载
  2. 系统固件
  3. 烧写编译方法
  4. PhoenixCard 下载
  5. 研发生产工具


Read Album:

Read Related:

Read Latest: