Files
Docs/DevLogs/Day8.md
2025-12-31 16:18:28 +08:00

4.3 KiB
Raw Blame History

Day 8 工作记录2025-12-03

今日进展

1. 工具链配置验证与修正

  • 问题发现README.md 提到的 riscv32-linux-musl 工具链路径在服务器上不存在
  • 调查过程
    • 通过 tina_files_clean.csv 文件索引查找工具链位置
    • 在服务器上验证实际目录结构
    • 发现 musl 工具链仍为压缩包形式(未解压)
    • 确认实际可用的是 glibc 工具链
  • 最终配置
    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 目录前先保存项目路径
    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/DemuxerMP4, 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.mdv1.5,进度 95%
  • 创建 project_backup_list.md备份清单

技术要点

工具链配置

# 实际路径
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 库列表

编译命令记录

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