# 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` 可执行文件。这是一个重要的里程碑!🎉