Skip to content

工具链先行:为什么先学工具,再碰芯片

我们到底在解决什么问题

我们这一篇不敲任何命令,只想把一个问题在脑子里摁死:在你真正点亮一颗 LED 之前,为什么非得先把终端、Git、CMake、GDB、交叉编译这些看起来跟芯片八竿子打不着的东西学会?

很多人入门嵌入式的方式是这样的——找一份 STM32 点灯代码,复制,烧进去,灯亮了,拍照,发朋友圈,觉得自己会嵌入式了。可一旦项目稍微变大,代码要拆成好几个文件、要改编译选项、要换颗芯片、要追一个偶现的死机,整个人就懵了。我们回头看这些"懵"的瞬间,会发现一个有意思的规律:卡住你的几乎从来不是芯片本身,而是工具链。

代码组织不清楚,是 CMake 和 Make 没吃透;烧进去跑飞了不知道为什么,是 GDB 和串口不会用;换颗芯片编不过,是交叉编译和工具链文件没搞懂;改了半天发现改的是错的版本,是 Git 用乱了。EmbedBox 想做的事情,就是赶在你被这些东西卡死之前,把这张工作台先给你支好。

嵌入式开发那条隐形的工具链

不管你最后走哪条嵌入式航线——MCU 裸机也好、嵌入式 Linux 也好、在设备上跑 Qt 也好——下面这条流水线,你每一环都躲不掉:

text
[ 写代码 ]   终端 · Git · Markdown


[ 构建 ]    GCC 编译链接 · Make / CMake · objcopy 抽出裸 .bin


[ 调试 ]    GDB · core dump · 远程 GDB server (openocd)


[ 上板 ]    交叉编译 (arm-none-eabi-) · 串口 · 烧录

我们顺着这条线捋一遍。写代码这一段,终端是你那只手,Git 让你不怕改坏,Markdown 让你把笔记、README、驱动说明写明白;构建这一段,GCC 把 .c 变成 ARM 机器码,最后用 objcopy 抽出能烧进芯片的裸 .bin,而 CMake 和 Make 负责管多文件和编译选项;调试这一段,GDB 配合 openocd 让你断点、单步、看变量,core dump 让你复盘它到底崩在哪;上板这一段,串口是嵌入式世界里几乎唯一的 printf,交叉编译则是"在我电脑上编、在板子上跑"这件事的定义动作。

再往后还有两块可选项,Docker 把整套工具链的版本钉死,让你换台电脑也能复现一模一样的构建环境,QEMU 则让你手里没板子也能把程序跑起来——它们是让开发更稳、更省钱的使能器。这张图里每一个方框,EmbedBox 都对应一卷,你觉得自己哪一框最虚,就去补哪一卷就行。

我们教什么,不教什么

把边界划清楚,比把内容堆满更重要。EmbedBox 只管"通用工具链",不管"具体芯片 / 具体领域",所以我们教终端、Shell、WSL,但不教具体 MCU 的外设驱动和寄存器;我们教 Git,连内核 patch 那套邮件协作视角都教,但不教某颗芯片的 bring-up;我们教 Markdown,而且教的是 Kconfig、设备树注释这种嵌入式实战写法,但不教操作系统内核原理。GCC 编译链接全流程一直讲到 objcopy 出裸 .bin,CMake 讲到 CMAKE_TOOLCHAIN_FILE,GDB 讲到远程调试和 openocd,交叉编译讲透两前缀和硬浮点 ABI,串口讲成"嵌入式 stdout"——这些都在范围内。而电路设计、PCB、Qt/GUI、具体协议栈实现,统统留给同组织的其它仓库。

教 ✅不教 ❌(留给兄弟仓库)
终端 / Shell / WSL具体 MCU 外设驱动(寄存器、HAL)
Git(含内核 patch 协作视角)某颗芯片的 bring-up
Markdown(Kconfig / 设备树注释实战)操作系统内核原理
GCC 编译链接全流程 → objcopy 裸 .bin电路设计 / PCB
Make / CMake(含 CMAKE_TOOLCHAIN_FILEQt / GUI 开发
GDB(远程、openocd)具体协议栈实现
交叉编译(arm-none-eabi- / arm-linux-gnueabihf-
串口 = 嵌入式 stdout
Docker / QEMU(可选)

和同组织其它仓库怎么分工

EmbedBox 是 Awesome-Embedded-Learning-Studio 里的「公共语言」坡道,兄弟仓库都假定你已经把上面这套工具学会了,然后它们再在各自的领域往下深入。所以你的学习路径通常是:先从 Awesome-Embedded 门户进去选一条航线,选到"通用工具"这一段就落在 EmbedBox,把工具学透,每一卷学完之后结尾会指你去对应的兄弟仓库继续往下走。

仓库假定你会它接着教你
Awesome-Embedded组织门户 / 航线总图(从这里选路)
Tutorial_AwesomeQtCMake、交叉编译Qt 在嵌入式设备上的开发
PenguinLABLinux 命令、交叉编译嵌入式 Linux
Tutorial_AwesomeModernCPPC/C++ 编译、CMake现代 C++ / 嵌入式 C++
*-forge(imx-forge / ST-Forge / micro-forge)终端、Git、GDB、烧录具体平台 / 芯片的实战工程

怎么用这本教程,以及你需要准备什么

我们这套教程有一个贯穿始终的规矩:每一卷都带一个"最小验证任务",学完你得能独立做出一个东西——用 CMake 搭一个三文件项目、用 GDB 定位一个段错误——做不出来就回去重读,别往下糊。书里的命令都是能复制就跑的,出错了也给你排查方向;每一卷结尾都有"下一站",告诉你接着读哪一卷、或者去哪个兄弟仓库。需要硬件的章节(串口、硬件工具)我们会明确标出来,手里没硬件可以先跳过,用 QEMU 顶上。

至于准备,一台 Windows 11、macOS 或者 Linux 的电脑就够了,不需要任何硬件就能学完大部分内容;Windows 用户先从 WSL 那一卷 开始,把 Linux 环境装好,这是后面所有命令的地基。

下一站

工具链的全景有了,接下来从地基开始——把终端从"会敲 cd/ls"升级成"能控制环境的工具"。

下一卷:开发环境 · 终端与 Shell 进阶

Built with VitePress