8.1 KiB
8.1 KiB
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
- 在菜单中选择包含
v821和avaota_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包(libtinfo5和libncurses5)。
❌ 错误:Python 版本冲突
- 现象:SDK 脚本报错
python: command not found。 - 原因:Ubuntu 24.04 只有
python3,而旧 SDK 脚本还在调用python(默认为 Py2)。 - ✅ 解决:安装
python-is-python3包,或手动建立/usr/bin/python指向python3的软链接。
❌ 错误:缺少构建工具
- 现象:配置内核 (
lunch后自动配置) 时报错bison: not found。 - ✅ 解决:安装
bison和flex。
3. 板端运行与传输错误
❌ 错误:网络传输工具缺失
- 现象:板子有网,但没有
ssh(dropbear没启动),wget,nc,adb(网络模式未开)。 - 原因:固件被极度精简(BusyBox),文件系统只读,且未预装常用网络工具。
- ✅ 解决:放弃网络传输,改用 物理 SD 卡 搬运文件。
❌ 错误:SD 卡权限问题
- 现象:直接在
/mnt/extsd(SD卡挂载点) 下运行程序报错Permission denied。 - 原因:SD 卡通常是 FAT32 格式,不支持 Linux 的
chmod +x(可执行权限)。 - ✅ 解决:
- 将程序
cp复制到内存目录/tmp/下。 chmod +x /tmp/my_app赋予权限。- 运行
/tmp/my_app。
- 将程序
4. 经验教训
❌ 风险操作:make -j
- 问题:执行不带数字的
make -j会无限开启编译进程。 - 后果:在内存较小的电脑上极易导致死机或内存耗尽。
- 建议:始终指定并发数,如
make -j8或make -j16。
🏆 最终验证通过的开发路径
现在你已经拥有了一套经过实战验证的、坚不可摧的开发流程:
- 编写代码:在 PC 上编写 C++ 代码 (
main.cpp)。 - 编译:使用 32位编译器 (
nds32le...riscv32-g++) 加上-static参数。 - 传输:PC -> 复制到 SD 卡 -> 插板子 -> 板子终端
cp /mnt/extsd/my_app /tmp/。 - 运行:板子终端
chmod +x /tmp/my_app->./tmp/my_app。