Linux 嵌入式开发完整入门:工具、配置和学习路线
适合对象:想在 Linux 上从零开始搭建嵌入式开发环境的新手。你可能正在学习 STM32、ESP32、RISC-V、Linux 驱动、RTOS 或单片机裸机开发。
本教程不绑定某一个 IDE,而是讲清楚 Linux 嵌入式开发到底需要哪些工具、每个工具做什么、怎么配置。
1. Linux 嵌入式开发分几类
新手先分清自己属于哪一类。
| 类型 | 例子 | 主要工具 |
|---|---|---|
| 单片机裸机 | STM32、GD32、NXP、RISC-V MCU | arm-none-eabi-gcc、OpenOCD、GDB、CMake |
| RTOS | FreeRTOS、RT-Thread、Zephyr | CMake/West/SCons、GDB、串口工具 |
| 嵌入式 Linux 应用 | 树莓派、ARM Linux 板 | gcc/g++、交叉编译器、SSH、gdbserver |
| Linux 驱动 | 字符设备、I2C、SPI、内核模块 | kernel headers、make、dtc、交叉编译 |
| ESP32 | ESP-IDF | idf.py、CMake、Ninja |
如果你是 STM32 新手,看“单片机裸机”路线。
2. 推荐 Linux 发行版
新手推荐:
- Ubuntu 24.04 LTS。
- Ubuntu 22.04 LTS。
- Debian 12。
不建议一开始使用:
- Arch,滚动更新对新手不友好。
- Kali,它不是开发系统。
- 过老 Ubuntu,依赖版本容易不匹配。
3. 建议目录规划
~/embedded/ tools/ # 手动下载的工具链 projects/ # 自己的工程 sdk/ # ESP-IDF、Zephyr、厂商 SDK docs/ # 数据手册、参考手册 scripts/ # 常用脚本创建:
mkdir-p~/embedded/{tools,projects,sdk,docs,scripts}4. 安装基础开发工具
Ubuntu / Debian:
sudoaptupdatesudoaptinstall-y\gitcurlwgetunzipxz-utils\build-essential cmake ninja-buildmakepkg-config\gdb gdb-multiarch\python3 python3-pip python3-venv\minicomscreenpicocom\openocd\udev验证:
git--versiongcc--versioncmake--versionninja--versionpython3--versionopenocd--version5. 安装 ARM 裸机工具链
5.1 直接用 apt
sudoaptinstall-ygcc-arm-none-eabi binutils-arm-none-eabi验证:
arm-none-eabi-gcc--versionarm-none-eabi-size--versionarm-none-eabi-objcopy--version5.2 手动安装官方工具链
如果 apt 版本太旧:
- 去 Arm GNU Toolchain 官网下载 Linux x86_64 包。
- 解压到:
~/embedded/tools/- 加入 PATH:
nano~/.bashrc加入:
exportPATH="$HOME/embedded/tools/arm-gnu-toolchain/bin:$PATH"刷新:
source~/.bashrc6. 安装 OpenOCD
OpenOCD 用来连接调试器和芯片。
sudoaptinstall-yopenocd测试 ST-LINK + STM32F1:
openocd-finterface/stlink.cfg-ftarget/stm32f1x.cfg成功标志:
Info : STLINK V2J... Info : target halted Info : Listening on port 3333 for gdb connections常见 target:
STM32F1: target/stm32f1x.cfg STM32F4: target/stm32f4x.cfg STM32H7: target/stm32h7x.cfg GD32: 有些可兼容 stm32 配置,有些需要单独配置7. 配置 USB 权限
没有权限时会出现:
LIBUSB_ERROR_ACCESS unable to open probe解决:
sudousermod-aGplugdev$USERsudoudevadm control --reload-rulessudoudevadm trigger有些工具链会提供 udev 文件,例如:
stlink.rules openocd.rules jlink.rules复制到:
/etc/udev/rules.d/然后重新插拔调试器,并重新登录。
8. 串口工具
嵌入式开发经常要看串口日志。
安装:
sudoaptinstall-yminicom picocomscreen查看串口设备:
ls/dev/ttyUSB*ls/dev/ttyACM*加入串口权限组:
sudousermod-aGdialout$USER重新登录后使用:
picocom-b115200/dev/ttyUSB0退出 picocom:
Ctrl+A,然后 Ctrl+X9. CMake 裸机工程基本结构
推荐结构:
blink/ CMakeLists.txt cmake/ arm-none-eabi.cmake src/ main.c inc/ main.h startup/ startup_stm32f103xb.s linker/ STM32F103C8Tx_FLASH.ld构建:
cmake-S.-Bbuild-GNinja-DCMAKE_BUILD_TYPE=Debug cmake--buildbuild查看大小:
arm-none-eabi-size build/firmware.elf生成 bin:
arm-none-eabi-objcopy-Obinary build/firmware.elf build/firmware.bin10. Makefile 裸机工程基本命令
有些老工程使用 Makefile:
makemakecleanmakeflash常见变量:
CC=arm-none-eabi-gcc OBJCOPY=arm-none-eabi-objcopy SIZE=arm-none-eabi-size CFLAGS=-mcpu=cortex-m3 -mthumb -O0 -g LDFLAGS=-T linker.ld -Wl,--gc-sections新手如果看不懂 Makefile,可以让 AI 解释:
请用中文解释这个 Makefile。 重点解释 CC、CFLAGS、LDFLAGS、SRCS、OBJS、flash 目标分别做什么。11. GDB 基本调试流程
终端 1 启动 OpenOCD:
openocd-finterface/stlink.cfg-ftarget/stm32f1x.cfg终端 2 启动 GDB:
arm-none-eabi-gdb build/firmware.elfGDB 内输入:
target remote localhost:3333 monitor reset halt load break main continue常用命令:
next step continue print variable_name info registers monitor reset halt12. VS Code 可选配置
如果用 VS Code:
推荐扩展:
- C/C++。
- CMake Tools。
- Cortex-Debug。
构建任务:
{"version":"2.0.0","tasks":[{"label":"build","type":"shell","command":"cmake --build build","group":"build","problemMatcher":"$gcc"}]}调试配置参考:
{"name":"OpenOCD Debug","type":"cortex-debug","request":"launch","servertype":"openocd","executable":"${workspaceFolder}/build/firmware.elf","configFiles":["interface/stlink.cfg","target/stm32f1x.cfg"],"runToEntryPoint":"main"}13. CLion 可选配置
如果用 CLion:
- 配 Toolchain。
- 配 CMake Profile。
- 配 Embedded Development。
- 使用 OpenOCD Download & Run。
CLion 对 CMake 工程体验很好,适合:
- 想要强代码跳转。
- 想要图形化调试。
- 想看寄存器/外设视图。
- 不想手写太多 VS Code json。
14. STM32CubeMX 在 Linux 上怎么用
步骤:
- 安装 STM32CubeMX。
- 创建项目。
- 选择芯片。
- 配置
SYS -> Debug -> Serial Wire。 - 配置 GPIO/UART/SPI/I2C。
Project Manager -> Toolchain / IDE选择CMake。- 生成代码。
- 用 CLion 或 VS Code 打开。
新手一定要记住:
自己写的代码放在 USER CODE BEGIN/END 中。15. ESP32 Linux 开发工具
ESP32 推荐官方 ESP-IDF。
大致流程:
mkdir-p~/embedded/sdkcd~/embedded/sdkgitclone--recursivehttps://github.com/espressif/esp-idf.gitcdesp-idf ./install.sh../export.sh创建工程:
idf.py create-project hello_worldcdhello_world idf.py set-target esp32 idf.py build idf.py flash monitor串口权限同样需要dialout组。
16. Zephyr Linux 开发工具
Zephyr 使用west。
基本流程:
python3-mvenv ~/embedded/venv-zephyrsource~/embedded/venv-zephyr/bin/activate pipinstallwest west init ~/embedded/sdk/zephyrprojectcd~/embedded/sdk/zephyrproject west update west zephyr-export pipinstall-rzephyr/scripts/requirements.txt构建示例:
west build-bnucleo_f103rb samples/basic/blinky west flash17. 嵌入式 Linux 应用开发
如果目标板跑 Linux,例如树莓派、全志、瑞芯微、NXP i.MX:
常见方式:
PC Linux 写代码 | 交叉编译 | scp 复制到开发板 | ssh 登录运行常用工具:
sudoaptinstall-ysshsshpassrsync复制:
scpapp root@192.168.1.100:/root/登录:
sshroot@192.168.1.10018. Linux 驱动开发基础工具
安装:
sudoaptinstall-ylinux-headers-$(uname-r)device-tree-compiler内核模块常用命令:
makesudoinsmod hello.ko lsmoddmesg-wsudormmod hello注意:驱动开发比单片机裸机更复杂,新手建议先学 C、Makefile、Linux 命令、指针、结构体。
19. 必备 Linux 命令
文件:
lscdpwdcpmvrmmkdirtree搜索:
grep-R"HAL_GPIO".find.-name"*.c"rg"HAL_GPIO"进程:
psauxkilltophtop权限:
chmod+x script.shsudousermod-aGdialout$USERGit:
gitstatusgitdiffgitadd.gitcommit-m"message"20. 新手常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| command not found | 没安装或 PATH 不对 | 安装工具,检查 PATH |
| Permission denied | 没执行权限或 USB 权限 | chmod 或 udev/group |
| cannot open /dev/ttyUSB0 | 串口权限不够 | 加入 dialout |
| OpenOCD 连接失败 | cfg 错、接线错、权限错 | 分别排查 |
| undefined reference | 源文件没参与链接 | 检查 CMake/Makefile |
| multiple definition | 重复定义全局变量 | 头文件只声明 extern |
| hardfault | 指针、栈、时钟、中断问题 | 用 GDB 查 fault 寄存器 |
21. 推荐学习路线
第 1 阶段:Linux 基础。
- 会使用终端。
- 会安装软件。
- 会编辑文件。
- 会用 Git。
第 2 阶段:C 语言基础。
- 指针。
- 结构体。
- 位运算。
- volatile。
- static。
- 链接和作用域。
第 3 阶段:裸机开发。
- GPIO。
- UART。
- Timer。
- PWM。
- EXTI。
- ADC。
第 4 阶段:工程化。
- CMake。
- 模块拆分。
- 日志。
- 单元测试。
- Git 分支。
第 5 阶段:高级主题。
- FreeRTOS。
- DMA。
- 低功耗。
- Bootloader。
- OTA。
- 嵌入式 Linux。
22. 给 AI 的 Linux 嵌入式提示词
解释环境:
我是嵌入式新手,系统是 Ubuntu 24.04。 请检查这个工程需要哪些工具链。 请告诉我如何从零安装依赖、构建、烧录和打开串口。 回答要一步一步来,不要跳步。查编译错误:
这是我的 Linux 嵌入式工程构建错误: 粘贴完整输出。 请先找第一条真正错误。 请区分是 C 语法错误、链接错误、工具链错误、权限错误还是路径错误。学习代码:
请用小白能听懂的语言解释这个 STM32 main.c。 重点解释初始化顺序、while(1)、中断回调、USER CODE 区域。23. 最后建议
Linux 嵌入式开发不要一开始追求“大而全”。最稳的顺序是:
LED 跑通 | 串口能打印 | 按键能输入 | 定时器能中断 | 工程能用 Git 保存 | 再上 RTOS / DMA / Bootloader每一步都能编译、能下载、能看到现象,比复制一个复杂工程更重要。