609 字
3 分钟
[海思 3519DV500] SDK 调试与编译配置
本文记录了在调试 mpp/sample/venc/sample_venc.c 过程中,如何解决 Git 忽略文件缺失、开启 GDB 调试支持以及绕过海思 SDK 强制安全编译选项(Strip 符号表)的完整过程。
0. Git 环境初始化与修复
背景在 Git 初始化后忘记添加
.gitignore,导致大量编译产物(.o,.ko,.so)进入追踪列表。
解决流程:
- 创建
.gitignore:针对海思 SDK 结构,忽略out/、obj/及各种二进制产物。 - 清理索引:使用
git rm -r --cached .。该命令会从 Git 追踪中移除所有文件,但保留硬盘上的物理文件。 - 重新提交:
git add .后,Git 会根据新规则重新识别文件。
1. 目标:生成带符号表(Non-stripped)的程序
核心痛点在海思 SDK 中,即便开启了调试模式,生成的程序默认依然是
stripped(不含符号表),这是因为 SDK 强制开启了安全编译选项。
1.1 问题根源深度分析
出现这种情况的原因是,海思SDK在安全编译选项中硬编码了 -s (strip) 参数。
- 安全编译选项硬编码:在
scripts/Makefile.secure.param中,SECURE_EXEC_CFLAGS和SECURE_LD_CFLAGS被赋予了-s选项,用于增强发布版程序的安全性(防止逆向)。 - 变量赋值顺序:在
scripts/Makefile.cflags.param中,LIBS_EXEC_CFLAGS使用:=(立即赋值)获取了包含-s的安全选项。即使后面检测到OT_GDB=y并添加了-g,之前的-s依然存在于编译命令中。 - 链接器行为:在链接阶段,只要命令中出现
-s,链接器就会执行 strip 操作,这会覆盖-g生成调试信息。
1.2 验证方法
命令行验证你可以运行以下命令查看具体的变量定义,确认
-s是否被注入:Terminal window make -p | grep -E "SECURE_EXEC_CFLAGS|SECURE_LD_CFLAGS"你通常会看到类似
SECURE_EXEC_CFLAGS += -pie -s的定义。
2. 最终完美方案 (Success)
核心原理直接使用
override指令重写编译命令中最终引用的终端变量。这样可以绕过所有中间脚本的:=快照和+=追加。
完整配置流程
-
修改
cfg.mak(开启基础调试开关):export CONFIG_OT_GDB_YES=yexport CONFIG_OT_GDB=yexport OT_RLS_MODE=OT_DEBUG -
修改
mpp/sample/Makefile.param(在文件末尾添加):# 使用 override 强制拦截最终进入编译器的变量,清除其中的 '-s' 参数ifeq ($(OT_GDB), y)override LIBS_EXEC_CFLAGS :=override LIBS_LD_CFLAGS := -fno-commonendif
验证验证
make clean && makefile sample_venc预期输出:sample_venc: ..., with debug_info, not stripped
[海思 3519DV500] SDK 调试与编译配置
https://www.eustia-astraea.top/posts/hisi/hi3519dv500-sdk-debug/