首先全志這次有准備開放文檔,感謝他們,但具體的內容湊合看看就好,還有一些雜亂,就跟我臨時寫的草稿一樣,點此查看 (基於此我整理了必要的訊息)。

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/
在看的時候,注意一下,上面兩篇參考資料廢話很多,如果你已經有經驗了,就直接看腳本開始吧。
基礎環境的安裝。
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 啟動快,兼容性更強,就是腳本化語言在教學與測試等需要快速重新運行的場合不可替代。
