622 字
3 分钟
[海思 3519DV500] NFS 挂载与 GDB 调试
前提条件
本文档假设你已经完成了以下基础准备工作:
- 已安装 SDK 官方推荐 Linux 开发环境(Ubuntu)。
- 已正确配置交叉编译工具链(如
aarch64-v01c01-linux-musl-)。 - 已安装海思 SDK,并能成功编译运行官方示例代码(如
sample_venc)。
1. NFS 挂载 (Network File System)
在嵌入式开发中,板载 Flash 容量不大的情况下,通过 NFS 挂载 PC 端目录是必选项。
其核心优势在于:编译产物无需通过 TFTP 反复烧写或传输。在 PC 端完成编译后,板端即可立即运行最新程序。
1.1 PC 端环境准备 (Server)
-
安装服务:
sudo apt-get install nfs-kernel-server -
配置共享目录:修改
/etc/exports,添加如下内容:Terminal window /your-nfs-path *(rw,sync,no_root_squash,no_subtree_check) -
重启服务:
sudo service nfs-kernel-server restart
1.2 板端挂载操作 (Client)
确保网络互通后,在板端 Linux 命令行执行:
# 创建挂载点mkdir -p /mnt/nfs
# 执行挂载 (官方推荐参数)mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 <PC_IP>:/your-nfs-path /mnt/nfs2. GDB 调试工具准备
进行远程调试需要两个组件:宿主机端的 GDB 和目标板端的 GDBServer。
2.1 获取 GDBServer
- 方案 A:SDK 内置(推荐快速上手):海思 SDK 通常在根文件系统中已集成
gdbserver。 - 方案 B:手动编译(进阶需求):若 SDK 自带版本过低,或因
musl工具链兼容性问题无法运行,需手动编译。
[进阶] 针对 musl 工具链手动编译 GDBServer (12.1)
-
前期准备:下载
gdb-12.1.tar.xz并解压。 -
解决 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 -
配置与编译:
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=nomake all-gdbserver -j$(nproc) -
瘦身 (Strip): 使用
aarch64-v01c01-linux-musl-strip gdbserver/gdbserver减小体积。
3. 远程调试步骤
3.1 生成带符号表的程序 (Not Stripped)
在编译 sample 时保留调试信息,确保产出的二进制文件通过 file 命令查看时显示为 not stripped。建议将此文件存放在 NFS 共享目录中。
3.2 启动调试
-
板端启动 GDBServer:
Terminal window # 监听 1234 端口./gdbserver :1234 ./test_program -
宿主机启动 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/