169 lines
3.8 KiB
Markdown
169 lines
3.8 KiB
Markdown
# 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` 正常显示依赖
|
||
- [ ] 程序成功运行
|
||
|
||
---
|
||
|
||
**祝编译顺利!** 🚀
|