当前位置:首页 > 技术 > LINUX > 正文内容

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

Watrt2个月前 (11-19)LINUX2540

R329 芯片简介


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

内置: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 板)

https://github.com/sipeed/r329-package
https://github.com/sipeed/r329-linux-4.9
https://github.com/sipeed/r329-target

开源的只是裁剪了一些不必要的版型和暂不公开 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 内存。

连接开发板 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5studyadbuart/

编译环境配置 https://r329.docs.allwinnertech.com/devboardstudy/r329evb5ubuntu/

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

基础环境的安装。记得换 apt 源。

ubuntu18.04 & ubuntu20.04
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 cmake

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 的修改记录都公开了,如果有兴趣的同学也可以自行学习,或者直接用就行,没什么特别的


打赏 支付宝打赏 微信打赏
分享给朋友:

相关文章

mpalqyer 播放命令

mpalqyer 播放命令

mplayer -vo fbdev2 -vf scale=1366:768 film.avi /usr/bin/mplayer -x 800 -y 480 -zoom -framedrop aa.avi...

基于 debootstrap 和 busybox 构建 mini ubuntu

基于 debootstrap 和 busybox 构建 mini ubuntu

最近的工作涉及到服务器自动安装和网络部署操作系统,然后使用 ansible 和 saltsatck 进行配置并安装 openstack 。难点在于服务器的自动安装,由于不单只是通过 PXE 安装服务器,还需要能够安装时进行分区、配置网卡等工作,因此需要在开始安装前,必须先收集服务器的硬件信息。调研了一下目前的开源项目中,提供此类功能的有 tinycorelinux 、 puppet razor-el-mk 可做类似的工作。tinycorelinux 是个很好的工具,整个系统在 PXE 之后在内存...

使用buildroot构建根文件系统

使用buildroot构建根文件系统

使用buildroot构建根文件系统buildroot可用于构建小型的linux根文件系统。大小最小可低至2M,与内核一起可以放入最小8M的spi flash中。buildroot中可以方便地加入第三方软件包(其实已经内置了很多),省去了手工交叉编译的烦恼。下载安装首先安装一些依赖,比如linux头文件:apt-get install linux-headers-$(uname -r)然后下载安装:wget https://buildroot.org/do...

Linux系统信息查看命令大全

Linux系统信息查看命令大全

最近看了一些Linux命令行的文章,在系统信息查看方面学到不少命令。想起以前写过的一篇其实Linux这样用更简单,发现这些系统信息查看命令也可以总结出一篇小小的东西来了。另外这里还有非常多的命令,可以作为参考。系统# uname -a               # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue   # 查看操作系统版本# cat /proc/cpuinfo  ...

buildroot编译中的问题

buildroot编译中的问题

在编译中遇到flex 报错。一直过不了。后来发现安装flex bison两个包后解决sudo apt-get install flex bison...

LINUX 使用sendmail邮件备份

LINUX 使用sendmail邮件备份

首先安装:sudo apt-get install sendmail然后在终端可以使用mail来发邮件echo "ESP32固件"|mail -s "esp32" -A "./fw.bin" -r "bak@xxx.com" xb100@qq.com注意很有可能收到的邮件在垃圾箱里面。把发件地址加到白 名单中...

Linux没有最小只有更小----迷你Linux版本大集合

Linux没有最小只有更小----迷你Linux版本大集合

    自从去年到现在已经收集了上百种版本的Linux和Unix,至于Unix就不想说了,没有Linux的功底是很难驾驭Unix的,我在这里只把小于360M的Linux以及一些非Linux但是很像Linux的版本也发布一下,我本人喜欢安静,如果你想要这些迷你版本的Linux光盘的话,建议去官网下载就OK了。英语不行的话随时带个字典。有些没有桌面,想知道哪些没有桌面的话请自己网上查资料!下面就是绝大部分小于361M的Linux及其非Linux名单,参考时间为...

利用BusyBox ~私人定制 My LINUX~

利用BusyBox ~私人定制 My LINUX~

前言  我在今天在这里跟大家详细地探讨一下Linux系统的定制过程和实现例如、用户能够远程登录;和Nginx能够稳定地运行在我们私人定制的LINUX系统上、一步一步从头开始定制属于我们自己的系统。正文   首先我们先来简单的介绍一下我们这里定制属于自己的Linux系统的基本元素.   一个定制的linux内核+一个定制的busybox就可以定制一个小型的Linux操作系统了,安装Dropbear和Nginx,Linux的组成 部分包括内核空间和用户空间、而...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。