# 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` 正常显示依赖
- [ ] 程序成功运行

---

**祝编译顺利！** 🚀
