一、什么是嵌入式开发
嵌入式开发是围绕特定硬件设备进行的软件开发。和普通 PC 或服务器开发相比,嵌入式更关注硬件资源、实时性、功耗、启动速度、稳定性和长期运行。
常见设备:
- 路由器。
- 工业控制器。
- 智能家居设备。
- 车载设备。
- 摄像头。
- 网关。
- 可穿戴设备。
二、嵌入式开发的两条路线
2.1 单片机路线
典型平台:
- STM32。
- ESP32。
- NXP MCU。
- GD32。
特点:
- 资源少。
- 通常没有完整操作系统。
- 直接操作寄存器或使用 HAL 库。
- 更关注实时性和外设控制。
常见开发内容:
- GPIO。
- UART。
- I2C。
- SPI。
- ADC。
- PWM。
- RTOS。
2.2 嵌入式 Linux 路线
典型平台:
- ARM Cortex-A。
- Raspberry Pi。
- i.MX6 / i.MX8。
- Rockchip。
- Allwinner。
特点:
- 运行 Linux 内核。
- 有文件系统、进程、线程、网络协议栈。
- 应用开发接近 Linux 应用开发。
- 底层涉及 U-Boot、Kernel、Device Tree、驱动。
常见开发内容:
- 交叉编译应用。
- 裁剪文件系统。
- 配置内核。
- 写设备树。
- 调试驱动。
- 适配外设。
三、嵌入式系统组成
典型嵌入式 Linux 系统:
1 | BootROM -> U-Boot -> Linux Kernel -> RootFS -> App |
说明:
- BootROM:芯片内部固化代码。
- U-Boot:引导程序,负责加载内核。
- Linux Kernel:内核,管理硬件和系统资源。
- RootFS:根文件系统,包含库、命令、配置。
- App:业务应用。
单片机系统通常更简单:
1 | 启动代码 -> 初始化时钟/内存 -> main -> 业务循环/RTOS |
四、需要掌握的基础
嵌入式开发不是只学某一个芯片,底层基础更重要。
4.1 C 语言
重点:
- 指针。
- 结构体。
- 位运算。
- 内存布局。
- 函数指针。
- volatile。
- const。
嵌入式中经常操作寄存器,例如:
1 |
这里的 volatile 表示这个地址的值可能被硬件改变,编译器不能随便优化。
4.2 计算机基础
重点:
- 二进制和十六进制。
- 内存地址。
- 中断。
- DMA。
- Cache。
- 堆和栈。
- 链接脚本。
4.3 Linux 基础
如果走嵌入式 Linux 路线,需要掌握:
- Shell。
- 文件权限。
- 进程线程。
- systemd 或 init 脚本。
- 网络配置。
- 交叉编译。
五、硬件接口
常见外设:
- GPIO:控制高低电平。
- UART:串口通信。
- I2C:低速外设总线。
- SPI:高速同步总线。
- PWM:控制电机、LED 亮度。
- ADC:模拟信号采样。
- CAN:车载和工业通信。
- Ethernet:网络通信。
入门建议顺序:
- 点亮 LED。
- 串口打印。
- 按键输入。
- I2C 读取传感器。
- SPI 驱动屏幕或 Flash。
- 网络通信。
六、开发环境
常见工具:
- 交叉编译器。
- GDB / gdbserver。
- OpenOCD。
- J-Link。
- 串口工具。
- CMake / Make。
- Buildroot / Yocto。
串口工具:
1 | sudo apt install -y minicom picocom |
使用 picocom:
1 | picocom -b 115200 /dev/ttyUSB0 |
退出通常是:
1 | Ctrl+A Ctrl+X |
七、学习路线
推荐路线:
- C 语言和 Linux 命令。
- 单片机 GPIO、UART、I2C、SPI。
- Makefile 和 CMake。
- 交叉编译。
- 嵌入式 Linux 应用开发。
- U-Boot、Kernel、RootFS。
- 设备树。
- 字符设备驱动。
- Buildroot 或 Yocto。
- 性能、功耗和稳定性优化。
八、入门项目
适合练习的小项目:
- 串口命令行工具。
- 传感器数据采集。
- LED 状态灯控制。
- 按键事件上报。
- I2C 温湿度读取。
- SPI 屏幕显示。
- 网络心跳上报。
- systemd 后台服务。
每个项目都尽量包含:
- 编译脚本。
- README。
- 日志。
- 错误处理。
- 部署说明。
九、总结
嵌入式开发的难点在于软硬件交界处。应用开发要理解系统,驱动开发要理解硬件,工程部署还要理解启动链路和文件系统。
入门不要急着啃复杂内核源码,先把 C、Linux、交叉编译、串口、GPIO、I2C、SPI 这些基本功练扎实。
- 本文链接: https://blog.hansong.icu/2026/06/21/Embedded_Dev_Intro/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。