Files
Docs/DevLogs/Day01.md
2026-01-05 18:06:08 +08:00

8.1 KiB
Raw Blame History

Avaota F1 (Tina Linux) 编译与开发完整指南

版本v1.0
日期2025-11-21
主机环境Ubuntu 24.04 LTS
目标平台Avaota F1 (全志 V821 / 32-bit RISC-V)


第一部分:编译环境准备 (针对 Ubuntu 24.04)

由于 Tina Linux SDK 依赖较旧的 32 位库和 Python 2而 Ubuntu 24.04 已移除这些支持,必须手动修复。

1. 开启 32 位架构支持

sudo dpkg --add-architecture i386
sudo apt-get update

2. 安装基础依赖

sudo apt-get install -y 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 bison
sudo apt-get install -y libc6:i386 libstdc++6:i386

3. 手动安装 libncurses5 (关键)

Ubuntu 24.04 源中无此包,需手动下载安装:

wget [http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_i386.deb](http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_i386.deb)
wget [http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libncurses5_6.3-2ubuntu0.1_i386.deb](http://mirrors.kernel.org/ubuntu/pool/universe/n/ncurses/libncurses5_6.3-2ubuntu0.1_i386.deb)
sudo apt-get install ./libtinfo5_6.3-2ubuntu0.1_i386.deb ./libncurses5_6.3-2ubuntu0.1_i386.deb

4. 修复 Python 版本问题

SDK 脚本需要 python 命令(指向 Py2 或兼容 Py3

sudo apt-get install python-is-python3
# 或者安装 python2 并建立软链接

第二部分SDK 全量编译

1. 解压 SDK

# 假设压缩包在 Downloads
mkdir -p ~/ProgramFiles/avaota_sdk
tar -xvf ~/Downloads/tina-v821-v1.2.tar.xz -C ~/ProgramFiles/avaota_sdk

2. 初始化环境

cd ~/ProgramFiles/avaota_sdk/tina-v821-release
source build/envsetup.sh

3. 选择板型

lunch
  • 在菜单中选择包含 v821avaota_f1 的选项(通常是数字 2
  • 等待配置生成完成 (configuration written to .config)。

4. 执行编译

make -j8 或 make -j
  • 耗时:约 30-60 分钟。
  • 成功标志:无报错停止,最终出现命令行提示符。

5. 打包固件 (可选)

pack
  • 生成可用于 PhoenixSuit 烧录的 .img 文件。

第三部分C++ 应用程序开发 (核心)

1. 编写代码 (main.cpp)

在 SDK 外部建立目录:

mkdir -p ~/ProgramFiles/avaota_app_demo
cd ~/ProgramFiles/avaota_app_demo
nano main.cpp

写入测试代码:

#include <iostream>
#include <unistd.h>

int main() {
    std::cout << "Hello Avaota F1! Running on RISC-V 32-bit!" << std::endl;
    return 0;
}

2. 找到正确的编译器

注意:必须使用 32位 工具链SDK 默认提供的 prebuilt/.../riscv64 是错误的。

正确路径通常在 out 目录下:

Bash

find ~/ProgramFiles/avaota_sdk/tina-v821-release/out -name "riscv32-unknown-linux-g++"
  • 典型路径.../out/toolchain/nds32le-linux-glibc-v5d/bin/riscv32-unknown-linux-g++

3. 静态编译 (Static Linking)

为了避免板子上缺少动态库 (ld-linux...so)必须加上 -static 参数。

# 请替换为实际查到的编译器路径
/path/to/riscv32-unknown-linux-g++ -static -o my_app main.cpp

4. 验证产物

file my_app
  • 必须包含ELF 32-bit LSB executable, UCB RISC-V, statically linked

第四部分:部署与运行 (SD卡方式)

由于板子默认未开启 SSH/ADB 网络传输,推荐使用 SD 卡搬运。

1. PC 端操作

将编译好的 my_app 复制到 SD 卡。

2. 板子端操作 (串口终端)

插入 SD 卡,在串口终端执行:

# 1. 挂载 SD 卡 (如未自动挂载)
mount /dev/mmcblk0p1 /mnt/extsd

# 2. 复制到内存 (SD卡不支持执行权限必须拷出来)
cp /mnt/extsd/my_app /tmp/

# 3. 赋予权限
chmod +x /tmp/my_app

# 4. 运行
/tmp/my_app

预期输出:

Hello Avaota F1! Running on RISC-V 32-bit!

Avaota F1 开发环境搭建踩坑与解决方案总结

日期2025-11-21
平台Avaota F1 (全志 V821 / 32-bit RISC-V)
主机环境Ubuntu 24.04 LTS


1. 核心架构与编译错误(最致命)

错误CPU 架构位数不匹配64-bit vs 32-bit

  • 现象:在电脑上编译出的程序,传到板子上运行报错 /tmp/my_app: line 1: syntax error: unterminated quoted string
  • 原因:我们一开始使用了 SDK 自带的 64位 编译器 (riscv64-unknown-linux-gnu-g++),但 Avaota F1 (V821) 的这个固件运行的是 32位 的 RISC-V 系统。内核无法识别 64 位程序Shell 尝试把它当脚本读,导致乱码报错。
  • 解决:找到了构建系统生成的 32位 编译器。
    • 正确编译器路径out/toolchain/nds32le-linux-glibc-v5d/bin/riscv32-unknown-linux-g++

错误动态链接库缺失Dynamic Linking

  • 现象:程序在板子上找不到 ld-linux...so 或其他库,或者运行报错。
  • 原因电脑上的编译环境glibc 版本)与板子上的精简运行环境(可能为 musl 或旧版 glibc不一致。
  • 解决:编译时加上 -static 参数,把所有依赖打包进一个文件,不再依赖板子系统库。
    • 命令示例.../riscv32-unknown-linux-g++ -static -o my_app main.cpp

2. Ubuntu 编译环境配置错误

错误:缺少 32 位兼容库

  • 现象:安装 libc6:i386 等库时提示找不到包。
  • 原因Ubuntu 64位系统默认未开启 32 位架构支持。
  • 解决:执行 sudo dpkg --add-architecture i386 并更新源。

错误依赖库版本过旧libncurses5

  • 现象Ubuntu 24.04 已移除 libncurses5,但 SDK 工具链强制需要它。
  • 解决:手动下载并安装了旧版 Ubuntu (22.04) 的 .deb 包(libtinfo5libncurses5)。

错误Python 版本冲突

  • 现象SDK 脚本报错 python: command not found
  • 原因Ubuntu 24.04 只有 python3,而旧 SDK 脚本还在调用 python(默认为 Py2
  • 解决:安装 python-is-python3 包,或手动建立 /usr/bin/python 指向 python3 的软链接。

错误:缺少构建工具

  • 现象:配置内核 (lunch 后自动配置) 时报错 bison: not found
  • 解决:安装 bisonflex

3. 板端运行与传输错误

错误:网络传输工具缺失

  • 现象:板子有网,但没有 ssh (dropbear没启动), wget, nc, adb (网络模式未开)。
  • 原因固件被极度精简BusyBox文件系统只读且未预装常用网络工具。
  • 解决:放弃网络传输,改用 物理 SD 卡 搬运文件。

错误SD 卡权限问题

  • 现象:直接在 /mnt/extsd (SD卡挂载点) 下运行程序报错 Permission denied
  • 原因SD 卡通常是 FAT32 格式,不支持 Linux 的 chmod +x(可执行权限)。
  • 解决
    1. 将程序 cp 复制到内存目录 /tmp/ 下。
    2. chmod +x /tmp/my_app 赋予权限。
    3. 运行 /tmp/my_app

4. 经验教训

风险操作:make -j

  • 问题:执行不带数字的 make -j 会无限开启编译进程。
  • 后果:在内存较小的电脑上极易导致死机或内存耗尽。
  • 建议:始终指定并发数,如 make -j8make -j16

🏆 最终验证通过的开发路径

现在你已经拥有了一套经过实战验证的、坚不可摧的开发流程

  1. 编写代码:在 PC 上编写 C++ 代码 (main.cpp)。
  2. 编译:使用 32位编译器 (nds32le...riscv32-g++) 加上 -static 参数。
  3. 传输PC -> 复制到 SD 卡 -> 插板子 -> 板子终端 cp /mnt/extsd/my_app /tmp/
  4. 运行:板子终端 chmod +x /tmp/my_app -> ./tmp/my_app