148 lines
4.3 KiB
Markdown
148 lines
4.3 KiB
Markdown
# Day 8 工作记录(2025-12-03)
|
||
|
||
## 今日进展
|
||
|
||
### 1. 工具链配置验证与修正 ✅
|
||
- **问题发现**:README.md 提到的 `riscv32-linux-musl` 工具链路径在服务器上不存在
|
||
- **调查过程**:
|
||
- 通过 `tina_files_clean.csv` 文件索引查找工具链位置
|
||
- 在服务器上验证实际目录结构
|
||
- 发现 musl 工具链仍为压缩包形式(未解压)
|
||
- 确认实际可用的是 glibc 工具链
|
||
- **最终配置**:
|
||
```makefile
|
||
TOOLCHAIN_DIR := $(SDK_ROOT)/out/toolchain/nds32le-linux-glibc-v5d/bin
|
||
CROSS_COMPILE := riscv32-unknown-linux-
|
||
```
|
||
- **编译器验证**:`riscv32-unknown-linux-g++` (符号链接指向 `riscv32-linux-g++`)
|
||
|
||
### 2. 构建脚本修复 ✅
|
||
|
||
#### `build_main.sh` 路径问题
|
||
- **问题**:脚本在 `source build/envsetup.sh` 后,当前目录变成 SDK 目录,导致找不到项目 src 目录
|
||
- **解决**:在进入 SDK 目录前先保存项目路径
|
||
```bash
|
||
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
cd "$SDK_ROOT"
|
||
source build/envsetup.sh
|
||
# ... 后续使用 $PROJECT_DIR
|
||
```
|
||
|
||
### 3. Makefile 链接库补充 ✅
|
||
|
||
#### 链接错误
|
||
```
|
||
undefined reference to `CDC_LOG_LEVEL_NAME'
|
||
undefined reference to `CDC_GLOBAL_LOG_LEVEL'
|
||
```
|
||
|
||
#### 解决方案
|
||
在主程序 Makefile 中添加完整的 Cedar 多媒体库链接:
|
||
- 音频处理库(decoder, resample, AGC, AEC, ANS)
|
||
- Muxer/Demuxer(MP4, AAC, MP3, WAV, TS)
|
||
- 视频解码器(MJPEG)
|
||
- 配置解析库(PluginMpp, IniParserMpp)
|
||
- **Cedar 核心库**(`libcdc_base.a`, `libcdx_base.a`)- 包含缺失的符号
|
||
- 显示库(hwdisplay, cedarxrender)
|
||
- 系统动态库(glog, log, rt, dl, z)
|
||
|
||
### 4. 编译成功 🎉
|
||
|
||
#### 编译产物
|
||
```
|
||
build/bin/avaota_client: ELF 32-bit LSB executable, UCB RISC-V
|
||
文件大小: 3.9MB
|
||
状态: stripped(已优化)
|
||
```
|
||
|
||
#### 集成模块
|
||
- ✅ 音频采集(麦克风 - ALSA)
|
||
- ✅ 音频播放(扬声器 - MAX98357A)
|
||
- ✅ IMU 传感器(ICM-42688-P - SPI)
|
||
- ✅ 摄像头(GC2083 - MPP/JPEG)
|
||
- ✅ WebSocket 客户端
|
||
- ✅ UDP 发送器
|
||
- ✅ HTTP 客户端
|
||
- ✅ 日志系统
|
||
|
||
### 5. 文档更新 ✅
|
||
- 更新 Day7.md(工具链配置说明)
|
||
- 更新 README.md(工具链实际情况)
|
||
- 更新 task_complete.md(添加 Day7 任务,进度 95%)
|
||
- 更新 implementation_plan_complete.md(v1.5,进度 95%)
|
||
- 创建 project_backup_list.md(备份清单)
|
||
|
||
## 技术要点
|
||
|
||
### 工具链配置
|
||
```bash
|
||
# 实际路径
|
||
out/toolchain/nds32le-linux-glibc-v5d/bin/
|
||
|
||
# 编译器
|
||
riscv32-unknown-linux-gcc
|
||
riscv32-unknown-linux-g++ -> riscv32-linux-g++ (符号链接)
|
||
|
||
# C库
|
||
glibc (不是 musl)
|
||
|
||
# GCC版本
|
||
10.4.0
|
||
```
|
||
|
||
### 关键库依赖
|
||
主程序链接了 60+ 个静态库,包括:
|
||
- MPP 框架(aw_mpp, media_utils)
|
||
- ISP 图像处理(12个库)
|
||
- 视频编解码(vencoder, vdecoder)
|
||
- 音频处理(adecoder, aencoder, AGC, AEC)
|
||
- Cedar 核心(**cdc_base**, cdx_base)
|
||
- 文件格式(muxers, demuxer, parser)
|
||
|
||
## 遇到的问题与解决
|
||
|
||
| 问题 | 原因 | 解决方案 |
|
||
|------|------|----------|
|
||
| 工具链路径不存在 | README 描述的是未来目标 | 通过 CSV 索引找到实际路径 |
|
||
| build_main.sh 找不到 src | source SDK 后目录改变 | 预先保存项目路径 |
|
||
| CDC_LOG_LEVEL_NAME 未定义 | 缺少 libcdc_base.a | 添加完整 Cedar 库列表 |
|
||
|
||
## 编译命令记录
|
||
|
||
```bash
|
||
# 清理
|
||
cd ~/ProgramFiles/AvaotaF1/avaota_app_demo/src
|
||
make clean
|
||
|
||
# 编译
|
||
cd ..
|
||
./build_main.sh
|
||
|
||
# 结果
|
||
build/bin/avaota_client (3.9MB)
|
||
```
|
||
|
||
## 下一步计划
|
||
|
||
1. ⏳ 部署到 Avaota F1 板子
|
||
- 通过网络或 SD 卡传输
|
||
- 运行 avaota_client
|
||
2. ⏳ 板端功能测试
|
||
- 音频采集与播放
|
||
- IMU 数据读取
|
||
- 摄像头 JPEG 捕获
|
||
- 网络通信(WebSocket, UDP)
|
||
3. ⏳ 性能与稳定性测试
|
||
4. ⏳ 多线程协同验证
|
||
|
||
## 成果总结
|
||
|
||
**Day 1-7** 完成了所有硬件模块的独立开发和测试
|
||
**Day 8** 完成了整体交叉编译,将所有模块集成到一个可执行文件中
|
||
|
||
**项目进度**:95% → 98%(只差板端运行测试)
|
||
|
||
---
|
||
|
||
**备注**:历时 8 天(实际工作 Day1-Day8),从 SDK 环境搭建到完整程序编译,所有代码汇聚成 3.9MB 的 `avaota_client` 可执行文件。这是一个重要的里程碑!🎉
|