现已直接提取了gdb工具。在下面git仓库"gdb_tool/"目录下,可以直接copy到bmc环境中使用。
感兴趣的伙伴可以往后看制作流程
相关的配置已放gitcode上,可以参考使用
gdb_related - AtomGit | GitCode
gdb_related
GDB、gdbserver、GMP、MPFR 的 Conan 配方,用于在 BMC 交叉编译环境构建。
本地源码包(离线构建)
若编译环境无法访问外网,可先将以下文件下载到能上网的机器,再拷贝到对应目录:
| 包 | 文件名 | 放置路径(相对 gdb_related) |
|---|---|---|
| GMP | gmp-6.3.0.tar.xz |
gmp/gmp-6.3.0.tar.xz |
| MPFR | mpfr-4.2.2.tar.xz |
mpfr/mpfr-4.2.2.tar.xz |
| GDB | gdb-16.2.tar.xz |
gdb/gdb-16.2.tar.xz |
下载地址示例:
- GMP: https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz
- MPFR: https://www.mpfr.org/mpfr-4.2.2.tar.xz
- GDB: https://ftp.gnu.org/gnu/gdb/gdb-16.2.tar.xz (GCC 7 用 13.2:gdb-13.2.tar.xz)
本地优先:若存在 <root>/gdb_related/<包>/<文件名>(root 默认 /workdir,可通过 CONAN_GDB_RELATED_ROOT 覆盖),则使用本地文件,否则从网络下载。也可用 GMP_LOCAL_SOURCE / MPFR_LOCAL_SOURCE / GDB_LOCAL_SOURCE 指定绝对路径。
构建顺序
在 gdb_related 同级目录执行(或 -pr profile.ini 指向你的 profile):
# 0. 离线时:将 gmp/mpfr/gdb 的 tar.xz 放到 gdb_related 对应子目录,或设置 *_LOCAL_SOURCE
# 1. GMP(无依赖)
cd gdb_related/gmp/all
conan create . --version=6.3.0 --user=openubmc --channel=stable -pr profile.ini
# 2. MPFR(依赖 GMP)
cd ../../mpfr/all
conan create . --version=4.2.2 --user=openubmc --channel=stable -pr profile.ini
# 3. GDB(依赖 GMP、MPFR)
cd ../../gdb/all
conan create . --version=13.2 --user=openubmc --channel=stable -pr profile.ini
# 4. gdbserver(gdbserver,不依赖GMP/MPFR,可直接构建)
cd ../../gdbserver/all
conan create . --version=16.2 --user=openubmc --channel=stable -pr profile.ini
GCC 7 工具链说明
GDB 16.2 与 GCC 7.x 存在兼容问题(std::optional + 非可拷贝类型,GCC#81190),构建时会报 dwarf2_queue_item 相关错误。
若使用 /opt/hcc_arm64le 等 GCC 7 工具链,请改用 GDB 13.2:
GDB 16.2 需 GCC 8+ 方可顺利编译。
目录结构
gdb_related/
├── README.md
├── gmp/
│ ├── config.yml
│ ├── all/
│ │ ├── conanfile.py
│ │ └── conandata.yml
│ └── gmp-6.3.0.tar.xz
├── mpfr/
│ ├── config.yml
│ ├── all/
│ │ ├── conanfile.py
│ │ └── conandata.yml
│ └── mpfr-4.2.2.tar.xz
├── gdbserver/
│ ├── config.yml
│ └── all/
│ ├── conanfile.py
│ ├── conandata.yml
│ └── permissions.ini
└── gdb/
├── config.yml
├── all/
│ ├── conanfile.py
│ ├── conandata.yml
│ └── permissions.ini
└── gdb-13.2.tar.xz
└── gdb-16.2.tar.xz
构建注意点
仓库中的脚本默认寻找本地"/workdir"下的软件包,使用时将conanfile.py中的目录改成自己对应目录即可
if not local_file:
root = os.environ.get("CONAN_GDB_RELATED_ROOT", "/workdir")
mpfr依赖gmp,gdb又依赖前面两者,所以对应py下面的requires需要指定一下(如果构建时–user参数不同,或者用不同版本的软件包)
requires = "gmp/6.3.0@openubmc/stable"
requires = ("gmp/6.3.0@openubmc/stable", "mpfr/4.2.2@openubmc/stable")
如何使用
manifest带上这三个组件,编译即可
- conan: gdb/13.2@openubmc.common/stable
- conan: mpfr/4.2.2@openubmc.common/stable
- conan: gmp/6.3.0@openubmc.common/stable
gdb默认放在了bmc的/opt/debug/gdb
/opt/debug/gdb /opt/bmc/apps/devmon/devmon /data/var/coredump/core-io-0-11-20260126032706
提取编译出的gdb执行文件
root@307af75910fa:/workdir# ls ~/.conan2/p/b/gdbd80ebf6e217a6/p/opt/debug/ -al
total 172552
drwxr-xr-x 2 root root 4096 Jan 30 03:20 .
drwxr-xr-x 3 root root 4096 Jan 29 07:18 ..
-rwxr-xr-x 1 root root 166781312 Jan 29 07:18 gdb
conan构建的目录下会有一个比较大的gdb,这是带符号的版本,用下面命令剥离就可以拿到我们要的gdb了
/opt/hcc_arm64le/bin/aarch64-target-linux-gnu-strip gdb -o gdb-strip
root@307af75910fa:/workdir# ls ~/.conan2/p/b/gdbd80ebf6e217a6/p/opt/debug/ -al
total 172552
drwxr-xr-x 2 root root 4096 Jan 30 03:20 .
drwxr-xr-x 3 root root 4096 Jan 29 07:18 ..
-rwxr-xr-x 1 root root 166781312 Jan 29 07:18 gdb
-rwxr-xr-x 1 root root 9894344 Jan 30 03:20 gdb-strip
参考文档
openUBMC调试工具安装指导 - CICD SIG - openUBMC 论坛
busybox作为conan组件编入openUBMC实践分享 - 交流互助区 - openUBMC 论坛
伙伴在场外如何分析解决corddump问题 - bmc_core SIG - openUBMC 论坛
在家就可以愉快的解OpenUBMC core dump 方法 - bmc_core SIG - openUBMC 论坛