Avaota F1 应用程序编译
更新时间: 2025-12-04
重要: 必须使用 musl 工具链编译,开发板使用 musl libc 1.2.4
🚨 重要提示
开发板运行的是 musl libc 1.2.4,不是 glibc!
- ✅ 正确: 使用
nds32le-linux-musl-v5d工具链 - ❌ 错误: 使用
nds32le-linux-glibc-v5d工具链(编译的程序无法运行)
📋 快速编译步骤
1. 准备 Tina SDK
将 Tina SDK 放置到以下路径:
/home/rongye/ProgramFiles/AvaotaF1/avaota_sdk/tina-v821-release
如需修改路径,请同时更新
src/Makefile和build_main.sh中的SDK_ROOT变量
2. 上传代码到服务器
将 avaota_app_demo 文件夹上传到:
/home/rongye/ProgramFiles/AvaotaF1/avaota_app_demo
3. SSH 连接到服务器
ssh rongye@<服务器IP>
4. 验证 Makefile 配置
cd ~/ProgramFiles/AvaotaF1/avaota_app_demo/src
grep "USE_MUSL" Makefile
应该看到:
USE_MUSL := 1
5. 清理并编译
cd ~/ProgramFiles/AvaotaF1/avaota_app_demo
# 清理
cd src
make clean
# 编译
cd ..
./build_main.sh
5. 验证编译结果
# 检查动态链接器(关键!)
strings build/bin/avaota_client | grep "/lib/ld-"
正确结果:
/lib/ld-musl-riscv32.so.1
错误结果(如果看到这个说明还在用 glibc):
/lib/ld-linux-riscv32-ilp32d.so.1
6. 上传到开发板
scp build/bin/avaota_client root@<开发板IP>:/tmp/avaota_client_musl
7. 在开发板上运行
ssh root@<开发板IP>
chmod +x /tmp/avaota_client_musl
ldd /tmp/avaota_client_musl # 应该正常显示依赖
/tmp/avaota_client_musl # 运行程序
📁 文件说明
avaota_app_demo/
├── src/ # 源代码目录
│ ├── main.cpp # 主程序
│ ├── audio/ # 音频模块
│ ├── camera/ # 摄像头模块
│ ├── imu/ # IMU 传感器
│ ├── network/ # 网络通信
│ ├── utils/ # 工具函数
│ └── Makefile # 编译配置(已设置 USE_MUSL=1)
├── build_main.sh # 构建脚本
├── MUSL_COMPILE.md # 详细编译指南
└── README.md # 本文件
🔧 如果遇到问题
问题 1: 找不到 musl 工具链
错误:
make: /home/rongye/.../nds32le-linux-musl-v5d/bin/riscv32-linux-musl-gcc: No such file or directory
解决:
# 查找工具链
cd ~/ProgramFiles/AvaotaF1/avaota_sdk/tina-v821-release
find . -name "*musl*.tar*" 2>/dev/null
# 如果找到压缩包,解压
cd out/toolchain
tar -xJf nds32le-linux-musl-v5d.tar.xz
详细故障排查请参考 MUSL_COMPILE.md
📚 相关文档
- MUSL_COMPILE.md - 完整的 musl 工具链编译指南
- ../../docs/Day9.md - Day 9 开发日志(问题发现过程)
- ../../docs/board_test_checklist.md - 板上测试清单
- ../../docs/musl_toolchain_fix.md - 工具链问题修复指南
✅ 编译验证清单
- 修改后的代码已上传到服务器
- Makefile 中
USE_MUSL := 1 - musl 工具链路径存在
make clean清理完成- 编译成功,生成
build/bin/avaota_client strings检查链接器为ld-musl-riscv32.so.1- 程序已上传到开发板
ldd正常显示依赖- 程序成功运行
祝编译顺利! 🚀