622 字
3 分钟
[海思 3519DV500] NFS 挂载与 GDB 调试

前提条件

本文档假设你已经完成了以下基础准备工作:

  1. 已安装 SDK 官方推荐 Linux 开发环境(Ubuntu)。
  2. 已正确配置交叉编译工具链(如 aarch64-v01c01-linux-musl-)。
  3. 已安装海思 SDK,并能成功编译运行官方示例代码(如 sample_venc)。

1. NFS 挂载 (Network File System)#

在嵌入式开发中,板载 Flash 容量不大的情况下,通过 NFS 挂载 PC 端目录是必选项

其核心优势在于:编译产物无需通过 TFTP 反复烧写或传输。在 PC 端完成编译后,板端即可立即运行最新程序。

1.1 PC 端环境准备 (Server)#

  1. 安装服务sudo apt-get install nfs-kernel-server

  2. 配置共享目录:修改 /etc/exports,添加如下内容:

    Terminal window
    /your-nfs-path *(rw,sync,no_root_squash,no_subtree_check)
  3. 重启服务sudo service nfs-kernel-server restart

1.2 板端挂载操作 (Client)#

确保网络互通后,在板端 Linux 命令行执行:

Terminal window
# 创建挂载点
mkdir -p /mnt/nfs
# 执行挂载 (官方推荐参数)
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 <PC_IP>:/your-nfs-path /mnt/nfs

2. GDB 调试工具准备#

进行远程调试需要两个组件:宿主机端的 GDB 和目标板端的 GDBServer

2.1 获取 GDBServer#

  • 方案 A:SDK 内置(推荐快速上手):海思 SDK 通常在根文件系统中已集成 gdbserver
  • 方案 B:手动编译(进阶需求):若 SDK 自带版本过低,或因 musl 工具链兼容性问题无法运行,需手动编译。

[进阶] 针对 musl 工具链手动编译 GDBServer (12.1)#

  1. 前期准备:下载 gdb-12.1.tar.xz 并解压。

  2. 解决 musl 兼容性:由于 musl 不提供 thread_db.h,需在 gdbserver/configure.srv 中手动禁用依赖:

    Terminal window
    sed -i 's/srv_linux_thread_db=yes/srv_linux_thread_db=no/g' gdbserver/configure.srv
  3. 配置与编译

    Terminal window
    mkdir -p build-target && cd build-target
    ../configure --host=aarch64-v01c01-linux-musl \
    --target=aarch64-v01c01-linux-musl \
    --prefix=$(pwd)/../install \
    --disable-gdb \
    --disable-werror \
    ac_cv_header_thread_db_h=no
    make all-gdbserver -j$(nproc)
  4. 瘦身 (Strip): 使用 aarch64-v01c01-linux-musl-strip gdbserver/gdbserver 减小体积。


3. 远程调试步骤#

3.1 生成带符号表的程序 (Not Stripped)#

在编译 sample 时保留调试信息,确保产出的二进制文件通过 file 命令查看时显示为 not stripped。建议将此文件存放在 NFS 共享目录中。

3.2 启动调试#

  1. 板端启动 GDBServer

    Terminal window
    # 监听 1234 端口
    ./gdbserver :1234 ./test_program
  2. 宿主机启动 GDB 接入: 直接使用交叉工具链自带的 GDB:

    Terminal window
    aarch64-v01c01-linux-musl-gdb ./test_program
    (gdb) target remote <目标板_IP>:1234

3.3 符号分离小技巧#

如果你必须在 Flash 中运行 Stripped 程序(以节省空间),只需在 PC 端 GDB 启动时加载 Not Stripped 版本。GDB 会自动完成虚拟地址与源码的映射,目标机无需存放巨大的调试文件。

[海思 3519DV500] NFS 挂载与 GDB 调试
https://www.eustia-astraea.top/posts/hisi/hi3519dv500-nfs-gdb-setup/
作者
mcsl
发布于
2024-03-09
许可协议
CC BY-NC-SA 4.0