Linux 嵌入式开发完整入门:工具、配置和学习路线

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. 建议目录规划

text 复制代码
~/embedded/
  tools/          # 手动下载的工具链
  projects/       # 自己的工程
  sdk/            # ESP-IDF、Zephyr、厂商 SDK
  docs/           # 数据手册、参考手册
  scripts/        # 常用脚本

创建:

bash 复制代码
mkdir -p ~/embedded/{tools,projects,sdk,docs,scripts}

4. 安装基础开发工具

Ubuntu / Debian:

bash 复制代码
sudo apt update
sudo apt install -y \
  git curl wget unzip xz-utils \
  build-essential cmake ninja-build make pkg-config \
  gdb gdb-multiarch \
  python3 python3-pip python3-venv \
  minicom screen picocom \
  openocd \
  udev

验证:

bash 复制代码
git --version
gcc --version
cmake --version
ninja --version
python3 --version
openocd --version

5. 安装 ARM 裸机工具链

5.1 直接用 apt

bash 复制代码
sudo apt install -y gcc-arm-none-eabi binutils-arm-none-eabi

验证:

bash 复制代码
arm-none-eabi-gcc --version
arm-none-eabi-size --version
arm-none-eabi-objcopy --version

5.2 手动安装官方工具链

如果 apt 版本太旧:

  1. 去 Arm GNU Toolchain 官网下载 Linux x86_64 包。
  2. 解压到:
text 复制代码
~/embedded/tools/
  1. 加入 PATH:
bash 复制代码
nano ~/.bashrc

加入:

bash 复制代码
export PATH="$HOME/embedded/tools/arm-gnu-toolchain/bin:$PATH"

刷新:

bash 复制代码
source ~/.bashrc

6. 安装 OpenOCD

OpenOCD 用来连接调试器和芯片。

bash 复制代码
sudo apt install -y openocd

测试 ST-LINK + STM32F1:

bash 复制代码
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg

成功标志:

text 复制代码
Info : STLINK V2J...
Info : target halted
Info : Listening on port 3333 for gdb connections

常见 target:

text 复制代码
STM32F1: target/stm32f1x.cfg
STM32F4: target/stm32f4x.cfg
STM32H7: target/stm32h7x.cfg
GD32:   有些可兼容 stm32 配置,有些需要单独配置

7. 配置 USB 权限

没有权限时会出现:

text 复制代码
LIBUSB_ERROR_ACCESS
unable to open probe

解决:

bash 复制代码
sudo usermod -aG plugdev $USER
sudo udevadm control --reload-rules
sudo udevadm trigger

有些工具链会提供 udev 文件,例如:

text 复制代码
stlink.rules
openocd.rules
jlink.rules

复制到:

text 复制代码
/etc/udev/rules.d/

然后重新插拔调试器,并重新登录。

8. 串口工具

嵌入式开发经常要看串口日志。

安装:

bash 复制代码
sudo apt install -y minicom picocom screen

查看串口设备:

bash 复制代码
ls /dev/ttyUSB*
ls /dev/ttyACM*

加入串口权限组:

bash 复制代码
sudo usermod -aG dialout $USER

重新登录后使用:

bash 复制代码
picocom -b 115200 /dev/ttyUSB0

退出 picocom:

text 复制代码
Ctrl+A,然后 Ctrl+X

9. CMake 裸机工程基本结构

推荐结构:

text 复制代码
blink/
  CMakeLists.txt
  cmake/
    arm-none-eabi.cmake
  src/
    main.c
  inc/
    main.h
  startup/
    startup_stm32f103xb.s
  linker/
    STM32F103C8Tx_FLASH.ld

构建:

bash 复制代码
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build

查看大小:

bash 复制代码
arm-none-eabi-size build/firmware.elf

生成 bin:

bash 复制代码
arm-none-eabi-objcopy -O binary build/firmware.elf build/firmware.bin

10. Makefile 裸机工程基本命令

有些老工程使用 Makefile:

bash 复制代码
make
make clean
make flash

常见变量:

text 复制代码
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 解释:

text 复制代码
请用中文解释这个 Makefile。
重点解释 CC、CFLAGS、LDFLAGS、SRCS、OBJS、flash 目标分别做什么。

11. GDB 基本调试流程

终端 1 启动 OpenOCD:

bash 复制代码
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg

终端 2 启动 GDB:

bash 复制代码
arm-none-eabi-gdb build/firmware.elf

GDB 内输入:

gdb 复制代码
target remote localhost:3333
monitor reset halt
load
break main
continue

常用命令:

gdb 复制代码
next
step
continue
print variable_name
info registers
monitor reset halt

12. VS Code 可选配置

如果用 VS Code:

推荐扩展:

  • C/C++。
  • CMake Tools。
  • Cortex-Debug。

构建任务:

json 复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "cmake --build build",
      "group": "build",
      "problemMatcher": "$gcc"
    }
  ]
}

调试配置参考:

json 复制代码
{
  "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:

  1. 配 Toolchain。
  2. 配 CMake Profile。
  3. 配 Embedded Development。
  4. 使用 OpenOCD Download & Run。

CLion 对 CMake 工程体验很好,适合:

  • 想要强代码跳转。
  • 想要图形化调试。
  • 想看寄存器/外设视图。
  • 不想手写太多 VS Code json。

14. STM32CubeMX 在 Linux 上怎么用

步骤:

  1. 安装 STM32CubeMX。
  2. 创建项目。
  3. 选择芯片。
  4. 配置 SYS -> Debug -> Serial Wire
  5. 配置 GPIO/UART/SPI/I2C。
  6. Project Manager -> Toolchain / IDE 选择 CMake
  7. 生成代码。
  8. 用 CLion 或 VS Code 打开。

新手一定要记住:

text 复制代码
自己写的代码放在 USER CODE BEGIN/END 中。

15. ESP32 Linux 开发工具

ESP32 推荐官方 ESP-IDF。

大致流程:

bash 复制代码
mkdir -p ~/embedded/sdk
cd ~/embedded/sdk
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh
. ./export.sh

创建工程:

bash 复制代码
idf.py create-project hello_world
cd hello_world
idf.py set-target esp32
idf.py build
idf.py flash monitor

串口权限同样需要 dialout 组。

16. Zephyr Linux 开发工具

Zephyr 使用 west

基本流程:

bash 复制代码
python3 -m venv ~/embedded/venv-zephyr
source ~/embedded/venv-zephyr/bin/activate
pip install west
west init ~/embedded/sdk/zephyrproject
cd ~/embedded/sdk/zephyrproject
west update
west zephyr-export
pip install -r zephyr/scripts/requirements.txt

构建示例:

bash 复制代码
west build -b nucleo_f103rb samples/basic/blinky
west flash

17. 嵌入式 Linux 应用开发

如果目标板跑 Linux,例如树莓派、全志、瑞芯微、NXP i.MX

常见方式:

text 复制代码
PC Linux 写代码
        |
交叉编译
        |
scp 复制到开发板
        |
ssh 登录运行

常用工具:

bash 复制代码
sudo apt install -y ssh sshpass rsync

复制:

bash 复制代码
scp app root@192.168.1.100:/root/

登录:

bash 复制代码
ssh root@192.168.1.100

18. Linux 驱动开发基础工具

安装:

bash 复制代码
sudo apt install -y linux-headers-$(uname -r) device-tree-compiler

内核模块常用命令:

bash 复制代码
make
sudo insmod hello.ko
lsmod
dmesg -w
sudo rmmod hello

注意:驱动开发比单片机裸机更复杂,新手建议先学 C、Makefile、Linux 命令、指针、结构体。

19. 必备 Linux 命令

文件:

bash 复制代码
ls
cd
pwd
cp
mv
rm
mkdir
tree

搜索:

bash 复制代码
grep -R "HAL_GPIO" .
find . -name "*.c"
rg "HAL_GPIO"

进程:

bash 复制代码
ps aux
kill
top
htop

权限:

bash 复制代码
chmod +x script.sh
sudo usermod -aG dialout $USER

Git:

bash 复制代码
git status
git diff
git add .
git commit -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 嵌入式提示词

解释环境:

text 复制代码
我是嵌入式新手,系统是 Ubuntu 24.04。
请检查这个工程需要哪些工具链。
请告诉我如何从零安装依赖、构建、烧录和打开串口。
回答要一步一步来,不要跳步。

查编译错误:

text 复制代码
这是我的 Linux 嵌入式工程构建错误:
粘贴完整输出。
请先找第一条真正错误。
请区分是 C 语法错误、链接错误、工具链错误、权限错误还是路径错误。

学习代码:

text 复制代码
请用小白能听懂的语言解释这个 STM32 main.c。
重点解释初始化顺序、while(1)、中断回调、USER CODE 区域。

23. 最后建议

Linux 嵌入式开发不要一开始追求"大而全"。最稳的顺序是:

text 复制代码
LED 跑通
  |
串口能打印
  |
按键能输入
  |
定时器能中断
  |
工程能用 Git 保存
  |
再上 RTOS / DMA / Bootloader

每一步都能编译、能下载、能看到现象,比复制一个复杂工程更重要。

相关推荐
摘星台1 小时前
linux环境对stm32单片机进行程序烧录
linux·stm32·单片机
郝学胜-神的一滴2 小时前
Linux 高并发基石:epoll 核心原理 + LT/ET 触发模式深度剖析
linux·运维·服务器·开发语言·c++·网络协议
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
Linux 启动
linux·运维·服务器
HumbleSwage2 小时前
CUDA学习路径
学习
shy^-^cky2 小时前
服务器高可用(HA)架构对比
运维·服务器·架构·双机热备·双机互备·双机双工
Joseph Cooper2 小时前
STM32MP157 Linux驱动学习笔记(三):系统级驱动框架(UART/PCIe)
linux·stm32·学习
chudonghao2 小时前
[UE学习笔记][基于源码] 运行时网格 PMC / DMC / RMC
笔记·学习·ue5
kongba0072 小时前
rules经验落盘
学习
一條狗2 小时前
学习日报 20260423|[特殊字符] 深度解析:Vue 3 SPA 部署到 Spring Boot 的 404/500 错误排查与完美解决方案-2
vue.js·spring boot·学习