2、开发环境搭建:交叉编译工具链、SDK下载与编译、系统烧录、串口调试

好,咱们正式开始动手了。这一章我带你搭好开发环境,说白了就是让电脑能跟R329芯片“说上话”。很多新手卡在这一步,其实没那么玄乎,就是几个关键环节别搞错就行。

2.1 交叉编译工具链:为什么需要它?

你想想看,咱们的电脑是x86架构,而R329是ARM Cortex-A53架构。直接在电脑上编译出来的程序,芯片不认识。所以需要一套“翻译官”——交叉编译工具链。

我个人习惯用全志官方提供的工具链,版本是gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf。为什么选这个?因为我在项目中踩过坑,用太新的版本有时会跟内核驱动打架,这个版本最稳。

下载与安装步骤:

# 下载工具链(约200MB)
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

# 解压到/opt目录
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt/

# 配置环境变量(建议写入~/.bashrc)
export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm

小技巧:配置完环境变量后,记得执行 source ~/.bashrc 或者重新打开终端。验证是否成功:运行 arm-linux-gnueabihf-gcc --version,能看到版本信息就对了。

2.2 SDK下载与编译:拿到全志的“配方”

全志R329的SDK叫Tina Linux,是基于OpenWrt定制的。我刚开始接触时觉得这玩意儿挺复杂,后来发现它就是个“乐高积木”——你想加什么功能,选上对应的包就行。

SDK可以从全志官方GitHub仓库下载,或者找代理商要。我个人建议用git clone,方便后续更新。

# 克隆SDK(注意:仓库较大,约2GB,建议用国内镜像)
git clone https://github.com/allwinner-zh/tina-r329.git
cd tina-r329

# 初始化编译环境
source build/envsetup.sh

# 选择目标板配置(我用的R329-EVB5开发板)
lunch r329_evb5-uart0

# 开始编译(第一次编译较慢,约30分钟)
make -j4

注意:编译过程中如果报错缺少依赖包,别慌。Ubuntu系统下执行 sudo apt-get install build-essential libncurses5-dev libssl-dev 基本能解决。我曾经在CentOS上折腾了一整天,最后发现是Python版本不对——Tina要求Python 3.6以上。

2.3 系统烧录:把固件写进芯片

编译完成后,在 out/r329_evb5-uart0/ 目录下会生成烧录镜像。全志的烧录工具叫PhoenixCard,Windows和Linux都有版本。

我习惯用Linux下的命令行烧录,因为更可控。不过第一次用PhoenixCard的图形界面也挺直观的。

烧录方式 适用场景 操作要点
PhoenixCard(Windows) 新手推荐 选择“启动卡”模式,勾选“强制烧录”
dd命令(Linux) 批量生产 注意设备节点别搞错,否则会清空硬盘
全志烧录器(专业) 调试阶段 需要专用硬件,适合频繁刷机

烧录步骤(以PhoenixCard为例):

  1. 插入TF卡(建议16GB以上,Class 10速度)
  2. 打开PhoenixCard,选择镜像文件(.img格式)
  3. 选择“启动卡”模式,点击“烧录”
  4. 等待进度条走完(约3-5分钟)
  5. 弹出TF卡,插入R329开发板,上电启动

避坑指南:我曾经烧录完发现系统起不来,折腾半天发现是TF卡质量问题。建议用闪迪或三星的卡,别图便宜买杂牌。另外,烧录前最好格式化一下TF卡,用 sudo fdisk -l 确认设备节点。

2.4 串口调试:跟芯片“对话”

系统烧录完,怎么知道它跑起来了?串口就是你的“眼睛”。R329开发板通常带一个UART0接口,用USB转串口线连接电脑。

我常用的串口工具是minicom和screen。minicom功能全,screen更轻量。看个人习惯吧。

# 安装minicom
sudo apt-get install minicom

# 配置串口参数(波特率115200,8N1)
minicom -D /dev/ttyUSB0 -b 115200

# 或者用screen(更简洁)
screen /dev/ttyUSB0 115200

连接成功后,上电开发板,你会看到内核启动日志。看到 Welcome to Tina Linux 的提示,说明系统跑起来了。

常用调试命令:

  • cat /proc/cpuinfo — 查看CPU信息,确认是双核A53
  • free -m — 查看内存使用情况
  • lsmod — 查看已加载的内核模块
  • arecord -l — 列出音频输入设备(后面做语音识别会用到)
  • aplay -l — 列出音频输出设备

注意:如果串口没输出,先检查接线——TX接RX,RX接TX,GND接GND。我见过有人把TX接TX,结果啥都没有。另外,确认/dev/ttyUSB0的权限,用 sudo chmod 666 /dev/ttyUSB0 或者把自己加入dialout组。

2.5 验证环境:跑个Hello World

环境搭好了,咱们写个简单的程序验证一下。在电脑上写代码,交叉编译,然后传到开发板上运行。

// hello_r329.c
#include <stdio.h>

int main() {
    printf("Hello from R329!\n");
    printf("Audio processing is coming...\n");
    return 0;
}
# 交叉编译
arm-linux-gnueabihf-gcc -o hello_r329 hello_r329.c

# 通过scp传到开发板(开发板IP假设为192.168.1.100)
scp hello_r329 root@192.168.1.100:/tmp/

# 在开发板上运行
ssh root@192.168.1.100
cd /tmp
./hello_r329

看到输出就说明整个环境通了。嗯,到这里,你的开发环境就搭建完成了。下一章咱们开始玩音频采集,那才是R329的强项。