banner
NEWS LETTER

嵌入式开发入门:从单片机到嵌入式 Linux

Scroll down

一、什么是嵌入式开发

嵌入式开发是围绕特定硬件设备进行的软件开发。和普通 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
#define REG32(addr) (*(volatile unsigned int *)(addr))

这里的 volatile 表示这个地址的值可能被硬件改变,编译器不能随便优化。

4.2 计算机基础

重点:

  • 二进制和十六进制。
  • 内存地址。
  • 中断。
  • DMA。
  • Cache。
  • 堆和栈。
  • 链接脚本。

4.3 Linux 基础

如果走嵌入式 Linux 路线,需要掌握:

  • Shell。
  • 文件权限。
  • 进程线程。
  • systemd 或 init 脚本。
  • 网络配置。
  • 交叉编译。

五、硬件接口

常见外设:

  • GPIO:控制高低电平。
  • UART:串口通信。
  • I2C:低速外设总线。
  • SPI:高速同步总线。
  • PWM:控制电机、LED 亮度。
  • ADC:模拟信号采样。
  • CAN:车载和工业通信。
  • Ethernet:网络通信。

入门建议顺序:

  1. 点亮 LED。
  2. 串口打印。
  3. 按键输入。
  4. I2C 读取传感器。
  5. SPI 驱动屏幕或 Flash。
  6. 网络通信。

六、开发环境

常见工具:

  • 交叉编译器。
  • 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

七、学习路线

推荐路线:

  1. C 语言和 Linux 命令。
  2. 单片机 GPIO、UART、I2C、SPI。
  3. Makefile 和 CMake。
  4. 交叉编译。
  5. 嵌入式 Linux 应用开发。
  6. U-Boot、Kernel、RootFS。
  7. 设备树。
  8. 字符设备驱动。
  9. Buildroot 或 Yocto。
  10. 性能、功耗和稳定性优化。

八、入门项目

适合练习的小项目:

  • 串口命令行工具。
  • 传感器数据采集。
  • LED 状态灯控制。
  • 按键事件上报。
  • I2C 温湿度读取。
  • SPI 屏幕显示。
  • 网络心跳上报。
  • systemd 后台服务。

每个项目都尽量包含:

  • 编译脚本。
  • README。
  • 日志。
  • 错误处理。
  • 部署说明。

九、总结

嵌入式开发的难点在于软硬件交界处。应用开发要理解系统,驱动开发要理解硬件,工程部署还要理解启动链路和文件系统。

入门不要急着啃复杂内核源码,先把 C、Linux、交叉编译、串口、GPIO、I2C、SPI 这些基本功练扎实。

其他文章
目录导航 置顶
  1. 1. 一、什么是嵌入式开发
  2. 2. 二、嵌入式开发的两条路线
    1. 2.1. 2.1 单片机路线
    2. 2.2. 2.2 嵌入式 Linux 路线
  3. 3. 三、嵌入式系统组成
  4. 4. 四、需要掌握的基础
    1. 4.1. 4.1 C 语言
    2. 4.2. 4.2 计算机基础
    3. 4.3. 4.3 Linux 基础
  5. 5. 五、硬件接口
  6. 6. 六、开发环境
  7. 7. 七、学习路线
  8. 8. 八、入门项目
  9. 9. 九、总结
请输入关键词进行搜索