# 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 连接到服务器 ```bash ssh rongye@<服务器IP> ``` ### 4. 验证 Makefile 配置 ```bash cd ~/ProgramFiles/AvaotaF1/avaota_app_demo/src grep "USE_MUSL" Makefile ``` 应该看到: ```makefile USE_MUSL := 1 ``` ### 5. 清理并编译 ```bash cd ~/ProgramFiles/AvaotaF1/avaota_app_demo # 清理 cd src make clean # 编译 cd .. ./build_main.sh ``` ### 5. 验证编译结果 ```bash # 检查动态链接器(关键!) strings build/bin/avaota_client | grep "/lib/ld-" ``` **正确结果**: ``` /lib/ld-musl-riscv32.so.1 ``` **错误结果**(如果看到这个说明还在用 glibc): ``` /lib/ld-linux-riscv32-ilp32d.so.1 ``` ### 6. 上传到开发板 ```bash scp build/bin/avaota_client root@<开发板IP>:/tmp/avaota_client_musl ``` ### 7. 在开发板上运行 ```bash 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 ``` **解决**: ```bash # 查找工具链 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_COMPILE.md](MUSL_COMPILE.md)** - 完整的 musl 工具链编译指南 - **[../../docs/Day9.md](../../docs/Day9.md)** - Day 9 开发日志(问题发现过程) - **[../../docs/board_test_checklist.md](../../docs/board_test_checklist.md)** - 板上测试清单 - **[../../docs/musl_toolchain_fix.md](../../docs/musl_toolchain_fix.md)** - 工具链问题修复指南 --- ## ✅ 编译验证清单 - [ ] 修改后的代码已上传到服务器 - [ ] Makefile 中 `USE_MUSL := 1` - [ ] musl 工具链路径存在 - [ ] `make clean` 清理完成 - [ ] 编译成功,生成 `build/bin/avaota_client` - [ ] `strings` 检查链接器为 `ld-musl-riscv32.so.1` - [ ] 程序已上传到开发板 - [ ] `ldd` 正常显示依赖 - [ ] 程序成功运行 --- **祝编译顺利!** 🚀