• Allwinner & Arm 中国 & Sipeed 开源硬件 R329 SDK 上手编译与烧录!


    首先全志这次有准备开放文档,感谢他们,但具体的内容凑合看看就好,还有一些杂乱,就跟我临时写的草稿一样,点此查看 (基于此我整理了必要的讯息)。

    R329 芯片简介

    R329 是全志科技针对智能语音旗舰市场推出的一款高集成度 SoC ,搭载双核 A53 1.5G CPU,内置双核 400MHz HiFi4 和 800MHz AIPU(zhouyi) 0.25TOPS,可以满足各种智能语音产品的需求

    R329application

    内置:DDR3 128MB/256M(如果您手中的R329芯片丝印型号为R329-N3,即为内置128M DDR;如果是R329-N4,即为内置256M DDR)    
    双核:HIFI4 400MHz,2MB SRAM
    音频:5 路 ADC,2 路 DAC
    接口:I2S3/DMIC/OWA,USB2.0*2,GMAC
    显示:SPI LCD, PWM*15
    工艺:HPC28+
    封装:12mm×12mm
    

    芯片详情点此

    Tina Linux 系统介绍

    Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux 基于 openwrt-14.07 版本的软件开发包,包含了 Linux 系统开发用到的内核源码、驱动、工具、系统中间件与应用程序包。

    *openwrt 是知名的开源嵌入式 Linux 系统自动构建框架,是由 Makefile 脚本和 Kconfig 配置文件构成的。使得用户可以通过 menuconfig 配置,编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件。

    系统框图

    实际上 Tina Linux 是经过 openwrt 演化过来的产物,在 R329 后魔改了不少编译规则,以至于对 luci 的软件支持恐怕有一些不够合适,主要原因还是芯片侧重点不是路由器了,所以官方可能也不太在意这些软件了。

    废话就不多说了。

    先拉仓库吧。

    https://github.com/sipeed/R329-Tina-jishu

    git clone https://github.com/sipeed/R329-Tina-jishu
    cd R329-Tina-jishu
    git submodule update --init --recursive
    

    整个仓库不重要的部分经过 coding 仓库加速,所以只需要关注以下这几个仓库即可。(该版本为开源 SDK 版本,加上了一些驱动配置以支持 Sipeed 的 R329 板)

    开源的只是裁剪了一些不必要的版型和暂不公开 DSP 和 NPU 的代码,其他的没有区别,正常使用就好。

    • package 实际上就对应系统里的软件功能包,如一些 shell 命令或程序。
    • linux-4.9 对应的 linux 内核,主要影响底层的驱动,如果需要移植到其他硬件时会来这里改改设备树和相关的裸机驱动。
    • target 对应的是版型的一些配置文件和预置脚本等。

    其他的很少改动,可以不用太关心,如 boot 、prebuild 等,在等项目的主仓库拉取的过程中,来认识一下 SDK 的构成吧,等看完了就差不多可以开始进行编译了。

    SDK 结构

    Tina Linux SDK 主要由构建系统、配置工具、工具链、host 工具包、目标设备应用程序、文档、脚本、linux 内核、bootloader 部分组成,下面是Tina主目录包含的文件和目录。

    Tina-SDK/
    ├── build
    ├── config
    ├── Config.in
    ├── device
    ├── dl
    ├── lichee
    ├── Makefile
    ├── out
    ├── package
    ├── prebuilt
    ├── rules.mk
    ├── scripts
    ├── target
    ├── tmp
    ├── toolchain
    └── tools
    

    以下将对主要目录中包含的内容进行简单介绍。

    • build

    build 目录存放 Tina Linux 的构建系统文件,此目录结构下主要是一系列基于 Makefile 规格编写的 .mk 文件,主要的功能有:

    (1)检测当前的编译环境是否满足 Tina Linux 的构建需求;

    (2)生成 host 包编译规则;

    (3)生成工具链的编译规则;

    (4)生成 target 包的编译规则;

    (5)生成 linux kernel 的编译规则;

    (6)生成系统固件的生成规则。

    • config

    config 目录主要存放 Tina Linux 中配置菜单的界面以及一些固定的配置项,该配置菜单基于内核的 mconf 规格编写。

    • device

    devices 目录用于存放方案的配置文件,包括内核配置、env 配置、分区表配置、sys_config.fex(全志定制板级配置文件)、board.dts(linux标准设备树文件) 等。

    *这些配置在旧版本Tina(Tina3.0以前)上是保存于 target 目录下,现新版本均移到了 device 目录下,但 defconfig 仍保存在 target 目录下

    • lichee

    lichee 目录主要存放 bootloader、linux内核、DSP等代码,其中DSP代码及编译环境因涉及DSP供应商科声讯版权,需单独申请。lichee目录下结构如下:

    Tina-SDK
        ├── brandy-2.0
        │   ├── build.sh
        │   ├── tools
        │   └── u-boot-2018
        └── linux-4.9
    
    • package

    package 目录存放Tina系统支持的软件包源码和编译规则,目录按照目标软件包的功能进行分类,该目录包含了Tina系统全平台(包括全志R/H/F/V/T系列)的软件包,但是并不是所有软件包都适配了R329方案,部分软件包需要开发者自行适配。

    • prebuild

    prebuild 目录存放预编译用的交叉编译器,主要包括aarch64的glibc和musl以及arm的glibc和musl。prebuild目录下结构如下:

    Tina-SDK
    └── linux-x86
        ├── aarch64
        │   ├── aarch64-toolchain.txt
        │   ├── toolchain-sunxi-glibc
        │   └── toolchain-sunxi-musl
        ├── arm
        │   ├── arm-toolchain.txt
        │   ├── toolchain-sunxi-glibc
        │   └── toolchain-sunxi-musl
        └── host
            └── host-toolchain.txt
    
    • scripts

    scripts 目录用于存放设备开发中用到的一些脚本。

    • target

    target目录用于存放开发板相关的配置以及 sdk 和 toolchain 生产的规格。

    • toolchain

    toolchain 目录用于存放交叉工具链构建配置、规则。

    • tools

    tools 目录用于存放 host 端工具的编译规则。

    • out

    out 目录用于保存编译相关的临时文件和最终镜像文件,编译后自动生成此目录,并生成对应的方案out目录,如开发板对应的R329-evb5方案目录结构如下:

    Tina-SDK/out
    ├── host
    └── r329-evb5
        ├── boot.img
        ├── compile_dir
        ├── image
        ├── md5sums
        ├── packages
        ├── r329-evb5-boot.img
        ├── r329-evb5-Image.gz
        ├── r329-evb5-uImage
        ├── rootfs.img
        ├── sha256sums
        ├── staging_dir
        └── tina_r329-evb5_uart0.img
    

    其中 :

    (1)tina_r329-evb5_uart0.img 就是编译打包后生成的最终烧写到开发板上的固件;

    (2)boot.img 为最终烧写到系统 boot 分区的数据;

    (3)rootfs.img 为最终烧写到系统 rootfs 分区的数据;

    (4)r329-evb5-uImage为内核的 uImage 格式镜像,若配置为 uImage 格式,则会拷贝成 boot.img;

    (5)r329-evb5-boot.img为内核的 boot.img 格式镜像,若配置为 boot.img 格式,则会拷贝成 boot.img

    (6)compile_dir 为 sdk 编译 host、target 和 toolchain 的临时文件目录,存有各个软件包的源码;

    (8)packages 目录保存的是最终生成的 ipk 软件包。

    另外 out 目录下的 host 目录用于存放 host 端的工具以及一些开发相关的文件。

    相信看到这里你已经有一些概念了,那就开始编译吧

    我在这里就不打算重复教学了,可以先看这两篇完成基本的安装,我直接列一下必要的库,编译与测试环境在 ubuntu20 (wsl2)建议大于 8G 内存。

    在看的时候,注意一下,上面两篇参考资料废话很多,如果你已经有经验了,就直接看脚本开始吧。

    基础环境的安装。

    sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync intltool busybox
    

    Ubuntu20 要增强一下,补一下下面两个包 libffi6 (python3 需要)。

    wget http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
    sudo apt install ./libffi6_3.2.1-8_amd64.deb
    
    sudo apt-get install uuid-dev
    

    其他的,自己丟了就找找哈。

    在 R329-Tina-jishu 下执行编译命令

    编译前建议设置一下 export FORCE_UNSAFE_CONFIGURE=1 第一次编译 host 的软件,会出现 set FORCE_UNSAFE_CONFIGURE=1 这个变量的提示。

    cd R329-Tina-jishu
    source build/envsetup.sh
    lunch r329_evb5-tina
    make -j32
    pack
    

    对应的意思是:

    source 加载编译环境,你可以得到 croot / cout 等跳转目录的功能,lunch 选择版型,确定要编译的版型。

    dls@DESKTOP-XPS13:~/R329-Tina-jishu$ source build/envsetup.sh
    Setup env done! Please run lunch next.
    dls@DESKTOP-XPS13:~/R329-Tina-jishu$ lunch
    
    You're building on Linux
    
    Lunch menu... pick a combo:
         1. r329_evb5-tina
         2. r329_evb5_min-tina
    
    Which would you like? [Default r329_evb5]: 1
    ============================================
    TINA_BUILD_TOP=/home/dls/R329-Tina-jishu
    TINA_TARGET_ARCH=aarch64
    TARGET_PRODUCT=r329_evb5
    TARGET_PLATFORM=r329
    TARGET_BOARD=r329-evb5
    TARGET_PLAN=evb5
    TARGET_BUILD_VARIANT=tina
    TARGET_BUILD_TYPE=release
    TARGET_KERNEL_VERSION=4.9
    TARGET_UBOOT=u-boot-2018
    TARGET_CHIP=sun50iw11p1
    ============================================
    dls@DESKTOP-XPS13:~/R329-Tina-jishu$
    

    make 有以下常用命令。

    • make menuconfig 配置软件包
    • make kernel_menuconfig 配置内核包
    • make clean 清理项目
    • make defconfig 保存当前软件配置,主要影响 defconfig。
    • mkernel 是编译内核的简写命令。

    boot 要到目录下进行配置,具体怎么使用,就自己参考荔枝派 linux 的配置加入 arch= 即可。

    make 单独编译模块的时候 make package/xxx/xxxx/compile 或 clean 即可。

    make -j32 V=s 的意思是 使用 32 核并行编译,建议第一次用 -j1 V=s 意思是单核并开启日志输出。

    如果想要有颜色的输出可以按照 colormake 方便看异常和过滤输出。

    pack 会进行打包变成 img ,供 PhoenixSuit 等全志提供的软件进行烧录,可能需要注意的是分区大小之类的调整,当然你可以烧录一次后通过 dd 命令导出镜像,方便其他人烧写。

    如何烧写?

    具体手把手教程下次补上,可以参考 V831 Sipeed 的板子教程。

    按上图的核心板上的小按钮后通电,就会进入 fel 模式,或不插 SD 卡上电就会自动进入烧写模式(这要基于硬件设计),软件就会检测到了。

    这种官方的烧录方法,在开发系统结束后就不会需要了,所以看过一次官方教程就行了 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5compile

    一些基础用法

    基于 Sipeed V831 的 MaixPy3 文档,再拓展以下功能,看自己喜好学习使用就行,并不稀奇。

    点灯 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5studyled/

    WiFi连网 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5studywifi/

    修改WiFi/BT模组 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5xr829/

    录音和播放 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5studyarecord/

    里面的 tina_test 提供了许多测试案例,方便开箱使用,还另外内置了 maix_test 是用 python3.7 写的(该 SDK 从3.5升到3.7了),主要用于测试 sipeed 的板子。

    进阶的内容啊

    等我忙完了 V833 再来整理吧,这次就出一篇开发者用的文档挂着,之后肯定会有用的,其他的一些资料也可以参考我先前整理的一些有关于 v831、v833 的内容呢。

    该 SDK 的修改记录都公开了,如果有兴趣的同学也可以自行学习,或者直接用就行,没什么特别的。

    最近推荐有开发经验的同学学习使用 golang ,比 python 启动快,兼容性更强,就是脚本化语言在教学与测试等需要快速重新运行的场合不可替代。

  • 相关阅读:
    Golang gRPC 入门
    ProtoBuf编解码
    Proto3语法入门
    Golang RPC入门
    Windows用mstsc(远程桌面)远程Ubuntu 12.04时无法显示Ubuntu桌面解决办法
    ABAPSM30配置TCODE
    eclipselog4j.properties配置
    Hadoop—配置3个副本,但是实际只有1个副本。
    Hadoop—org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
    Jmeter BeanShell使用场景
  • 原文地址:https://www.cnblogs.com/juwan/p/14650733.html
Copyright © 2020-2023  润新知