GDB安装与配置(保姆级教程)【Linux、Windows系统】

GDB(GNU Debugger)是 Linux 环境下最强大的调试工具,被誉为程序员的"瑞士军刀"。它能帮你深入程序内部,查看变量、分析崩溃原因、甚至进行多线程调试。

全流程概述

为了让你少走弯路,我为你整理了一份**"保姆级"的 GDB 安装与配置教程**,涵盖了从安装、基础配置到核心工作流的全过程。

本文着重讲在Linux和windows系统中怎么安装配置GDB,

(要是想直接开始安装的话可以直接目录跳转到后面)

文章后面有详细安装步骤和**"从写代码到开始调试"** 的完整流程。


🛠️ 第一步:安装 GDB

GDB 的安装非常简单,取决于你使用的操作系统。

1. Linux 系统(最常用环境)(操作也简单)

大多数 Linux 发行版都可以通过包管理器直接安装。

发行版 安装命令 备注
Ubuntu / Debian sudo apt update sudo apt install gdb 推荐同时安装 build-essential 以获取 GCC 编译器
CentOS / RHEL sudo yum install gdbsudo dnf install gdb 建议安装 glibc-debuginfo 以便调试系统库
Fedora sudo dnf install gdb

💡 提示 :如果你需要调试 C++ 标准库(如 STL 容器),建议安装 libstdc++6-xx-dbggdb-doc 包,这样在调试时能看到更详细的内部结构。

2. macOS 系统

macOS 用户通常使用 Homebrew 进行安装。

  1. 安装 Homebrew (如果尚未安装):

    复制代码
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 安装 GDB

    复制代码
    brew install gdb

    注意:在 macOS 上运行 GDB 需要对其进行代码签名(Code Signing)以赋予调试权限,否则会报错。初次运行请参考 Homebrew 的提示信息或搜索"GDB macOS codesign"进行配置。

3. Windows 系统

Windows 原生不支持 GDB,通常通过以下两种方式:

  • WSL (Windows Subsystem for Linux):推荐安装 Ubuntu 子系统,然后按照上述 Linux 步骤安装,体验最接近原生开发。
  • MinGW / TDM-GCC :下载并安装 MinGW,安装时勾选 GDB 组件,并将 bin 目录(如 C:\MinGW\bin)添加到系统的 PATH 环境变量中。

⚙️ 第二步:基础配置(让 GDB 更好用)

默认的 GDB 界面比较简陋(无语法高亮、显示行数少)。我们可以通过配置 ~/.gdbinit 文件来优化体验。

请在终端执行以下命令,创建或编辑配置文件:

复制代码
vim ~/.gdbinit

如果没有vim

  1. 打开 MSYS2 终端 :从开始菜单打开 MSYS2 UCRT64(或你安装的那个版本)。
  2. 安装 vim:在 MSYS2 终端里输入以下命令安装 vim,再输入上面的代码

输入代码后:

现在的界面就是 vim 编辑器,但它目前处于只读模式(只能看,不能改),所以你需要先做一个简单的操作才能开始输入。

  • 进入编辑模式

    请按下键盘上的 i 键(代表 insert 插入)。

    • 你会看到屏幕左下角的状态栏(或者底部提示)发生变化,可能出现 -- INSERT -- 字样,或者光标变样,这就代表可以输入了。

将以下内容粘贴进去,这将极大提升你的调试体验:

请尝试使用键盘快捷键 Shift + Insert

这是终端里一个非常通用的粘贴快捷键,通常比 Ctrl+V 更有效。

复制代码
# ~/.gdbinit 配置文件内容

# 1. 界面美化
set listsize 20          # 显示代码时默认显示 20 行(默认是 10 行)
set syntax on            # 开启语法高亮(代码会有颜色)
set prompt "(gdb) "      # 设置提示符,简洁明了
set pagination off       # 关闭分页(防止输出长内容时需要按回车)

# 2. 调试信息增强
set print pretty on      # 美化结构体输出(缩进显示)
set print array on       # 美化数组输出
set print object on      # 显示 C++ 对象的实际类型
set print demangle on    # 还原 C++ 被编译混淆的函数名
set print frame-arguments all # 显示函数调用时的参数值

# 3. 历史记录
set history save on      # 保存命令历史,下次启动还能用上下键翻阅
set history filename ~/.gdb_history
set history size 10000   # 历史记录保存 10000 条

# 4. 常用别名(偷懒神器)
alias br = break         # br 代替 break
alias c = continue       # c 代替 continue
alias bt = backtrace     # bt 代替 backtrace
alias ls = list          # ls 代替 list
  • 粘贴完代码后,请按以下顺序操作:

    • 按一下键盘左上角的 Esc 键(退出编辑模式)。
    • 输入 :wq(注意是英文冒号,然后输入 wq)。
    • Enter 回车键。

这样配置就保存成功了,下次你启动 GDB 时,这些优化就会自动生效。


🚀 第三步:调试前的准备(关键!)

很多新手安装好 GDB 后,发现调试时看不到变量名,也定位不到代码行号,原因只有一个:编译时没有加 -g 参数

错误的编译方式:

复制代码
gcc main.c -o main  # 这样生成的程序没有调试信息,GDB 无法深入内部

正确的编译方式:

复制代码
gcc -g main.c -o main
  • -g:告诉编译器在可执行文件中加入调试信息(Debug Symbols)。
  • 如果是 C++ 程序,请使用 g++ -g ...

📖 第四步:核心工作流(5分钟上手)

假设你已经用 gcc -g main.c -o main 编译好了程序,下面是最常用的调试流程:

1. 启动 GDB
复制代码
gdb ./main
2. 常用命令速查表
功能 完整命令 简写 说明
设置断点 break main b main 在 main 函数打断点,也可以用行号 b 10
运行程序 run r 开始运行,如果有参数可写 r arg1 arg2
单步跳过 next n 执行下一行代码,不进入函数内部
单步进入 step s 执行下一行代码,进入函数内部
继续执行 continue c 直接跳到下一个断点
打印变量 print var p var 查看变量当前值
查看堆栈 backtrace bt 程序崩溃或暂停时,查看函数调用链
查看源码 list l 显示当前代码
退出 quit q 退出 GDB
3. 实战演示
复制代码
(gdb) b main          # 在 main 函数处停下
(gdb) r               # 运行程序
(gdb) n               # 一行行执行
(gdb) p my_variable   # 看看变量值对不对
(gdb) c               # 没问题了,继续跑

🛡️ 第五步:进阶技巧(解决崩溃问题)

当程序发生段错误(Segmentation Fault)崩溃时,如果开启了 Core Dump,GDB 可以帮你"起死回生"分析现场。

  1. 开启 Core Dump 生成(Linux)

    复制代码
    ulimit -c unlimited

    这样程序崩溃后会在当前目录生成一个 core 文件。

  2. 分析崩溃现场

    复制代码
    gdb ./main core

    进入 GDB 后,直接输入 bt(backtrace),你就能清晰地看到程序是在哪一行代码、哪个函数调用中崩溃的。

Linux系统中详细安装步骤

我是用的ubuntu虚拟机,如果没装的具体安装配置可看:Ubuntu 24.04 虚拟机完整安装 + PWN / 渗透环境配置 全流程总结_ubuntu24.04安装教程-CSDN博客

安装好虚拟机后打开,在桌面上,有点,在终端打开

安装步骤

输入两行命令

复制代码
sudo apt update
sudo apt install gdb

直接输入密码(不会显示,直接输入了之后回车就行)等待安装结束

安装好了之后

编写代码

在 Ubuntu 的终端里,输入以下命令来创建一个文件夹并进入

复制代码
mkdir mytest
cd mytest

然后用 nano 编辑器创建一个代码文件:

复制代码
nano test.c

输入这段简单的代码(故意留个逻辑方便调试):

复制代码
#include <stdio.h>

int main() {
    int i;
    for(i = 0; i < 5; i++) {
        printf("Current number is: %d\n", i);
    }
    return 0;
}

保存退出 :按 Ctrl+O 回车保存,再按 Ctrl+X 退出。

编译(关键步骤)

在 Linux 下编译,一定要加上 -g 参数,这样 GDB 才能读取到调试信息

复制代码
gcc test.c -o test -g

如果不加 -g,你进去调试时会发现看不到源代码,只能看到汇编代码,那就麻烦了。

启动 GDB

输入以下命令启动调试:

复制代码
gdb test

你会看到 (gdb) 提示符,说明进去了。

我测试时遇到的问题,(一开始没仔细看还以为红色是报错)

但是其实是加载了一个叫 pwngdb 的插件。这个插件通常用于二进制安全或 CTF 竞赛的调试辅助。

关键变化

提示符变成了 pwngdb>,而不是标准的 (gdb)

这意味着什么

你依然在使用 GDB,所有的标准命令(如 l, b, r, n)依然有效。只不过多了一些高级功能,比如查看堆栈、寄存器等。

现在该做什么

你可以直接开始调试了。假设你已经编译好了一个叫 test 的程序(如果没有,请先用 gcc test.c -o test -g 编译)。

pwngdb> 后面输入:

复制代码
file test

或者如果你已经在启动时加载了文件,直接输入:

(这是 list 的简写,用来查看代码)

总结

一切正常,你可以继续按之前的步骤操作了。

开始调试(实战演练)

现在你已经在 (gdb) 里面了,试着输入以下命令(注意:GDB 支持简写,我会在括号里标出来):

查看代码输入:

复制代码
list

或者简写:

复制代码
l

你会看到刚才写的 C 代码出现在屏幕上。

设置断点

我们想在 for 循环那一行(通常是第 6 行)停下来看看。输入:

复制代码
break 6

或者简写:

复制代码
b 6

它会提示 Breakpoint 1 at ...

运行程序输入:

复制代码
run

或者简写:

复制代码
r

程序会跑起来,然后停在第 6 行。你会看到提示 Breakpoint 1, main () at test.c:6

查看变量

现在程序停在第 6 行,i 的值是多少呢?输入:

复制代码
print i

或者简写:

复制代码
p i

它会告诉你 i 现在是 0。

单步执行

让程序往下走一步。输入:

复制代码
next

或者简写:

复制代码
n

程序会执行完这一行,再次打印 Current number is: 0,然后停在下一轮循环。

再输入一次 n,再输入 p i,你会发现 i 变成了 1。

继续运行

如果你想让程序直接跑完剩下的循环,不再一步步停了。输入:

复制代码
continue

或者简写:

复制代码
c

退出 GDB

调试完了,想退出来回到终端。输入:

复制代码
quit

或者简写:

复制代码
q

🎉 恭喜

你刚才完成了一次标准的 Linux 程序调试!

如果你也做了windows系统的,你会发现,在 Ubuntu 里用 GDB,和在 Windows 的 MSYS2 里用 GDB,命令几乎是一模一样的

windows系统中详细安装步骤

在 Windows 上安装 GDB 其实就是在安装一个包含 GDB 的 C/C++ 编译器套件。为了让你能最快上手,我为你准备了两种最主流、最稳妥的方案。

请根据你的需求选择其中一种(强烈建议选择方案一,更现代、更稳定):


🚀 方案一:使用 MSYS2 安装(推荐,现代化且包管理方便)

这是目前 Windows 上最推荐的开源工具链安装方式,类似于 Linux 的包管理器,安装和更新都非常方便。

1. 下载并安装 MSYS2

(1)访问 MSYS2 官网 下载安装包。一般选左边的

  • 左边 (x86_64) :这是给主流的 Intel 或 AMD 处理器的电脑准备的。99% 的 Windows 电脑都属于这一类,所以如果你不确定,选这个就对了。
  • 右边 (arm64):这是给 ARM 架构处理器的电脑准备的,比如微软的 Surface Pro X 或者一些高通骁龙处理器的笔记本电脑。

(2)双击运行,按照提示安装(建议安装在默认路径 C:\msys64)。要换安装路径可以换

2. 安装 GCC 和 GDB

安装完成后,MSYS2 会自动打开一个终端窗口。你需要依次执行以下步骤(请严格按照顺序):

  1. 更新核心包

    在终端输入以下命令并回车(如果提示确认,输入 y 并回车):

    复制代码
    pacman -Syu

    这个终端窗口不能ctrl+v粘贴,要右键点粘贴,和kali一样(没截到图,运行完自动关了)

  2. 如果更新完成后提示你关闭所有 MSYS2 窗口,请务必关闭当前窗口,然后重新从开始菜单打开"MSYS2 MinGW 64-bit"。

  3. 安装编译器与调试器

    重新打开 "MSYS2 MinGW 64-bit" 终端(图标通常是绿色的,第一个MSYS2 UCRT64),输入以下命令安装 64 位的 GCC 和 GDB

复制代码
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb

输入 y 确认安装,等待进度条跑完。

3. 配置环境变量(关键步骤!)

为了让 GDB 能在任意命令行窗口中使用,你需要把它的路径加入系统变量:

  1. Win 键,搜索"编辑系统环境变量"并打开。
  2. 点击右下角的"环境变量"按钮。
  3. 在"系统变量 "(下方的框)中找到 Path,选中后点击"编辑"。
  4. 点击"新建 ",添加 MSYS2 的 bin 目录路径(假设安装在默认位置):
    • C:\msys64\mingw64\bin
  5. 一路点击"确定"保存。

📦 方案二:使用 MinGW-w64 压缩包(免安装,解压即用)

如果你不想安装软件,或者只需要一个独立的工具包,可以使用这种"绿色版"方式。

1. 下载工具包
2. 解压文件
  • 解压下载的文件到一个简单的路径,例如 C:\mingw64
  • 确保解压后的 bin 文件夹里能看到 gdb.exegcc.exe
3. 配置环境变量
  1. Win 键,搜索"编辑系统环境变量"。
  2. 点击"环境变量 " -> 在"系统变量 "中找到 Path -> 点击"编辑"。
  3. 点击"新建 ",添加你刚才解压的路径下的 bin 目录:C:\mingw64\bin
  4. 一路点击"确定"保存。

✅ 验证安装是否成功

无论你选择了哪种方案,都需要验证一下:

  1. 打开一个新的 命令提示符(CMD)或 PowerShell 窗口(注意:必须新开窗口,旧窗口无法识别新环境变量)。

  2. 输入以下命令:

    复制代码
    gdb -v
  3. 如果看到类似 GNU gdb (GDB) 13.x ... 的输出信息,恭喜你,GDB 安装成功了!

💡 避坑指南

  • 不要混用:如果你之前安装过旧版的 MinGW (mingw.org),建议卸载或确保环境变量指向正确的版本,否则可能会出现兼容性问题。
  • 必须加 -g :在 Windows 上使用 GDB 调试时,编译代码一定要加上 -g 参数(例如 gcc -g main.c -o main.exe),否则 GDB 只能看到汇编代码,看不到源码。

问题1:能不能修改安装路径

可以的,都支持自定义安装路径。

不过,为了避免以后出现各种奇怪的路径报错,我有几个重要的建议给到你

1. 如果你选择方案一(MSYS2 安装版)

在安装 MSYS2 的初始向导界面中:

  • 可以修改 :安装程序会询问安装目录,默认是 C:\msys64。你可以点击"浏览"修改到任意盘符,例如 D:\msys64
  • ⚠️ 强烈建议
    • 路径越短越好 :尽量保持在根目录下,如 D:\msys64
    • 严禁包含中文或空格 :千万不要安装在 D:\我的软件\MSYS2 或者 Program Files 这种带空格的目录下。因为 GCC/GDB 等编译工具对中文和空格路径的支持非常差,极易导致编译失败或找不到文件。

2. 如果你选择方案二(MinGW-w64 压缩包)

这种方式本质上就是解压文件,路径完全由你决定:

  • 操作方法 :下载 .7z.zip 压缩包后,直接解压到你想要的位置,例如 E:\Tools\mingw64
  • ⚠️ 注意事项
    • 解压后,请务必记住你存放的路径。
    • 在配置环境变量(Path)时,要准确填入你解压后的 bin 目录路径(例如 E:\Tools\mingw64\bin)。

3. 修改路径后的关键步骤:环境变量

无论你修改到哪里,最关键的一步 是必须把新路径下的 bin 目录加入到系统的 Path 环境变量中,否则你在命令行输入 gdb 时,系统会提示"找不到命令"。

检查方法:

  1. 打开新的 CMD 窗口。
  2. 输入 gdb -v
  3. 如果显示版本信息,说明路径配置成功;如果提示"不是内部或外部命令",说明环境变量没配好,请重新检查路径是否包含 bin 文件夹。

确定安装好了之后,怎么使用

既然环境已经配置好了,接下来就是实际的调试环节。虽然 MSYS2 提供了类似 Linux 的终端,但为了让你在任何地方都能顺手使用,我建议你直接在 Windows 自带的 CMD 或 VS Code 里操作。

后面有完整演示过程,可跟练强化记忆

下面我为你整理了三种最常用的使用方式,按推荐程度排序:


🚀 方法一:在 VS Code 中使用(最推荐,有图形界面)

如果你平时用 VS Code 写代码,这是最舒服的方式,可以直接点按钮打断点,不用背命令。

  1. 安装插件 :在 VS Code 扩展商店搜索并安装 C/C++ Extension Pack
  2. 准备代码 :新建一个文件夹,在里面创建一个 main.c 文件,写几行简单的代码。
  3. 配置调试
    • 点击左侧菜单栏的"运行和调试"图标(像个播放键带个虫子)。
    • 点击 "创建 launch.json 文件"
    • 选择环境:C++ (GDB/LLDB)
    • 选择配置:选择 gcc.exe - 生成和调试活动文件
  4. 修改配置(关键一步)
    VS Code 自动生成的配置通常能自动找到 GDB,但如果报错,你需要手动检查 launch.json 里的 miDebuggerPath
    • 如果你装的是 UCRT64 ,确保路径是:"C:\\msys64\\ucrt64\\bin\\gdb.exe"
    • 如果你装的是 MINGW64 ,确保路径是:"C:\\msys64\\mingw64\\bin\\gdb.exe"
  5. 开始调试
    • 在代码行号左边点击,出现红点(打断点)。
    • F5,程序就会运行并在红点处停下来,你可以查看变量的值。

💻 方法二:在 Windows CMD 中使用(纯命令行)

如果你想像黑客一样在黑窗口里调试,或者不想装编辑器,可以直接用命令行。

前提 :你的 C 代码文件(比如 test.c)必须先编译,并加上 -g 参数(这是加入调试信息的关键)。

  1. 编译代码:打开 CMD,进入代码所在目录,输入

    复制代码
    gcc test.c -g -o test.exe

    (注意:-g 不能少,否则 GDB 没法调试)

  2. 启动 GDB:输入

    复制代码
    gdb test.exe

    你会看到 (gdb) 的提示符,说明进入调试器了。

  3. 常用调试命令(背下来这几个就够用了):

    • list (或 l):显示源代码。
    • break main (或 b main):在 main 函数处打个断点。
    • run (或 r):开始运行程序(遇到断点会停下)。
    • next (或 n):单步执行(不进入函数内部)。
    • step (或 s):单步执行(会进入函数内部)。
    • print 变量名 (或 p 变量名):查看某个变量的当前值。
    • continue (或 c):继续运行直到下一个断点。
    • quit (或 q):退出 GDB。

🐚 方法三:在 MSYS2 终端中使用

这是最"原生"的方式,适合习惯 Linux 操作风格的用户。

  1. 打开开始菜单,运行 MSYS2 UCRT64(或你安装的那个版本)。
  2. 使用 cd 命令进入你的代码目录。
  3. 编译:gcc test.c -g -o test.exe
  4. 调试:gdb test.exe
    (操作命令和方法二完全一样)

💡 总结建议

  • 新手/写作业/项目开发 :请务必使用 VS Code。图形化界面能让你更专注于逻辑,而不是命令。
  • 考试/面试/装酷 :练习使用 CMD 命令行 ,掌握 break, run, next, print 这几个核心命令。

**"从写代码到开始调试"**的完整流程

🛠️ 核心流程:三步走

GDB 不能直接调试源代码(.c 文件),它只能调试编译好的可执行文件。所以,核心流程是:写代码 -> 加参数编译 -> 启动调试

🎮 实战演示

假设你的 test.c 内容如下:

复制代码
#include <stdio.h>

int main() {
    int i = 0;
    for(i = 0; i < 5; i++) {
        printf("Hello %d\n", i);
    }
    return 0;
}
1. 编译代码(关键一步)

在终端中输入以下命令:(需要在这个代码文件存放的文件夹里打开终端)

复制代码
gcc test.c -o test -g
  • gcc test.c:调用编译器。
  • -o test:生成名为 test.exe 的可执行文件。
  • -g这是最重要的参数! 它告诉编译器在程序里加入调试信息(比如行号、变量名)。如果没有这个参数,GDB 里看不到源代码,只能看到汇编。
2. 启动 GDB

编译成功后,输入以下命令启动调试器:

复制代码
gdb test

(注意:这里填的是生成的可执行文件名 test,不是 test.c)

此时,你会看到 (gdb) 的提示符,说明你已经进入调试器内部了。

3. 开始调试(常用命令)

进入 (gdb) 提示符后,你就可以输入指令了。默认情况下,GDB 其实已经内置了很多简写(比如 r 代表 runl 代表 listc 代表 continue)多多尝试熟悉一下:

功能 完整命令 简写命令 (你的配置) 说明
查看代码 list l 显示源代码,按回车可继续显示下一段
设置断点 break 行号 br 行号 例如 br 10,在第10行停下
运行程序 run r 开始运行,直到遇到断点
单步执行 next n 执行下一行(不进入函数内部)
进入函数 step s 执行下一行(如果有函数,会进去)
查看变量 print 变量名 p 变量名 打印变量的当前值
继续运行 continue c 从当前断点跑到下一个断点
退出 quit q 退出 GDB

我在测试的时候出现了个小问题,(倒数第二第三行显示error)

这说明文件第 4 行写错了。

  • 原因 :在 .gdbinit 里写了类似 Linux Shell 的注释(用 # 开头),但 GDB 的配置文件不支持用 # 做注释(或者写法位置不对)。
  • 解决 :打开这个文件,把第 4 行的 # 删掉,或者改成 GDB 支持的注释方式(通常是用 # 但在某些旧版本或特定上下文可能不支持,建议直接删除注释行测试)。

操作流程总结:

  1. 编译gcc test.c -o test -g
  2. 启动gdb test
  3. 在 GDB 里操作
    • 输入 l:查看代码。
    • 输入 br 5:在第 5 行(printf 那一行)打个断点。
    • 输入 r:程序启动,会停在第 5 行。
    • 输入 p i:查看变量 i 的值(此时应该是 0)。
    • 输入 n:执行这一行,屏幕打印 "Hello 0",光标移到下一行。
    • 输入 c:程序继续跑,打印剩下的内容直到结束。
    • 输入 q:退出。

💡 小贴士

如果你觉得命令行太麻烦,其实 VS Code 就是把这些命令图形化了。你在 VS Code 里点"运行"按钮,它底层其实就是帮你执行了上面这些步骤。

现在,你可以试着编译一个小程序,用 gdb 跑一下,体验一下刚才配置的 lsbr 等快捷命令!

📌 总结

  1. 安装sudo apt install gdb
  2. 配置 :编辑 ~/.gdbinit 开启高亮和历史记录。
  3. 编译 :一定要加 -g 参数!
  4. 调试 :记住 b (断点), r (运行), n (单步), p (打印), bt (堆栈) 这五个核心命令。

掌握这些,你就已经跨过了 GDB 的门槛,能够应对绝大多数的调试需求了!

相关推荐
Elastic 中国社区官方博客7 小时前
为 Elastic Cloud Serverless 和 Elasticsearch 引入统一的 API 密钥
大数据·运维·elasticsearch·搜索引擎·云原生·serverless
Agent手记8 小时前
制造业数字化升级:生产全流程企业级智能体落地解决方案 —— 基于LLM+超自动化全栈架构的智改数转深度实战
运维·ai·架构·自动化
云安全助手8 小时前
弹性云服务器+高防IP:让DDoS攻击不再是业务“生死劫”
运维·网络·安全
AC赳赳老秦8 小时前
OpenClaw二次开发实战:编写专属办公自动化技能,适配个性化需求
linux·javascript·人工智能·python·django·测试用例·openclaw
深色風信子8 小时前
Docker newapi
运维·docker·容器·newapi
mounter6258 小时前
【内核新动向】告别物理槽位束缚:深度解析 Linux Virtual Swap Space 机制
linux·内存管理·kernel·swap·virtual swap
handler019 小时前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
武藤一雄10 小时前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
2023自学中10 小时前
i.MX6ULL 板子的完整启动流程图(从上电 → 用户空间)
linux·嵌入式