跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

ARM Linux 驱动开发与裸机开发的区别

ARM Linux 驱动开发与裸机开发的核心区别在于操作系统介入带来的抽象层。裸机开发需直接操作寄存器并处理任务调度,代码复用性差且易受硬件变更影响。Linux 驱动则通过内核框架管理硬件资源,提供统一接口(如/dev/xxx),专注于设备初始化与中断处理,而内存、进程调度等由内核负责。驱动分为字符、块及网络设备三大类,遵循特定框架开发,实现了软硬件解耦与高效复用。

漫步发布于 2026/2/8更新于 2026/10/213.6K 浏览
ARM Linux 驱动开发与裸机开发的区别

image

前言

之前我们把 linux 系统移植介绍完了,现在我们正式开始对 Linux 驱动开发进行介绍,首先我们先与裸机开发进行区别介绍一下。

一、为什么要上操作系统呢?

在嵌入式开发早期,很多设备是'裸机运行'的——没有操作系统,程序直接跑在 CPU 上。这时候的驱动开发更像'全栈工程师':既要管硬件寄存器操作,又要处理业务逻辑。

比如做一个智能灯泡,用 51 单片机控制 LED:

  • 首先得配置 GPIO 引脚(通用输入输出口)的寄存器,设置为输出模式;
  • 然后写代码控制引脚的高低电平(高电平亮,低电平灭);
  • 还要处理按键输入,检测用户是否按下开关;
  • 甚至得自己实现'软定时器',让灯泡支持闪烁功能。

这种模式下,驱动和业务逻辑完全绑定,代码复用性极差。如果换一款不同型号的单片机(比如从 STC89C52 换成 STM32),GPIO 寄存器的地址和配置方式可能完全不同,几乎要重写整个驱动。

随着嵌入式设备功能越来越复杂,裸机开发的局限性越来越明显:

  • 硬件资源(CPU、内存)需要高效调度,否则多个任务会'打架';
  • 不同硬件的驱动代码需要隔离,避免某个驱动崩溃导致整个系统死机;
  • 开发者希望'一次编写,多处运行',减少重复劳动。

这时候操作系统(比如 Linux)就登场了。操作系统就像一个'大管家',把驱动从业务逻辑中解放出来,让它们专注做一件事:和硬件'对话'。

比如在 Linux 系统中,驱动只需要负责:

  • 初始化硬件(比如配置摄像头的 I2C 寄存器);
  • 处理硬件中断(比如收到传感器数据时触发中断);
  • 提供统一的接口给上层应用(比如应用调用 read() 函数就能获取传感器数据)。

而任务调度、内存管理、文件系统这些'杂活',都由操作系统内核处理。驱动开发者终于可以'术业有专攻'了。

二、裸机驱动开发回顾

裸机驱动开发更加底层一些,直接跟寄存器打交道,虽然一些 MCU 提供了库,但相比 Linux 驱动开发还是更加底层了一些。

三、Linux 驱动开发思维

  1. Linux 下驱动开发一般不直接操作寄存器,比较复杂,不现实。
  2. 根据 Linux 下的各种驱动框架进行开发。一定要满足框架,也就是 Linux 下各种驱动框架的掌握。
  3. 驱动最终表现就是/dev/xxx 文件。打开、关闭、读写。
  4. Linux 内核支持设备树,这是一个.dts 文件,此文件描述了板子的设备信息。

四、Linux 驱动开发分类

Linux 设备的'三大门派'

Linux 把硬件设备分成了三大类,就像武侠小说里的'少林、武当、峨眉',各有各的套路。

1、总体框图

image

2、字符设备驱动(最常见)

特点是数据传输以字节为单位,没有固定的块结构。常见的键盘、鼠标、串口、传感器(如温湿度传感器)都属于这类。

例子:用串口调试助手发送'Hello',驱动会把数据拆成'H'、'e'、'l'、'l'、'o'逐个发送,接收方也是逐个字节读取。

字符设备的核心是**cdev结构体(字符设备描述符)**,驱动需要实现 结构体中的函数(比如 、、),这些函数就是上层应用和硬件交互的'桥梁'。

file_operations
open
read
write
// 典型的字符设备 file_operations 实现
static struct file_operations led_fops = {
    .owner = THIS_MODULE,
    .open = led_open,
    .release = led_release,
    .write = led_write,
};

3、块设备驱动

特点是数据传输以块为单位(通常是 512 字节、4KB 等),支持随机访问。最典型的就是硬盘、U 盘、SSD(固态硬盘)。

4、网络设备驱动(玩'数据包'的'通信专家')

网络设备和前两类不同,它不直接提供 read/write 接口,而是专注于数据包的收发。常见的网卡、Wi-Fi 模块、蓝牙模块都属于这类。

网络设备驱动的核心是 net_device 结构体,驱动需要实现 ndo_start_xmit(发送数据包)和中断处理函数(接收数据包),Linux 内核还提供了 netdev 子系统,负责数据包的分片、路由、协议栈处理。

注意:一个设备不一定只属于某一个类型。比如 USB WIFI、SDIO WIFI,属于网络设备驱动,因为他又有 USB 和 SDIO,因此也属于字符设备驱动。

五、Linux 驱动与软硬件系统的'朋友圈'

要理解 Linux 驱动的位置,可以想象一个'三层金字塔':

  • 顶层:应用程序(各种软件、比如音乐播放器);
  • 中层:操作系统内核(包括进程调度、内存管理、文件系统);
  • 底层:硬件(CPU、内存、外设)。

驱动就'卡'在中层和底层之间:

  • 对上,通过系统调用(如 open()、ioctl())向内核提供接口,内核再把这些接口暴露给应用程序;
  • 对下,直接操作硬件寄存器(比如通过 ioremap() 映射物理地址),处理硬件中断(比如设置中断服务函数 ISR)。

六、区别总结

image

总结

本文对比了两种开发模式在架构、资源管理及代码复用上的差异,明确了 Linux 驱动通过内核框架简化硬件交互的优势。

目录

  1. 前言
  2. 一、为什么要上操作系统呢?
  3. 二、裸机驱动开发回顾
  4. 三、Linux 驱动开发思维
  5. 四、Linux 驱动开发分类
  6. 1、总体框图
  7. 2、字符设备驱动(最常见)
  8. 3、块设备驱动
  9. 4、网络设备驱动(玩“数据包”的“通信专家”)
  10. 五、Linux 驱动与软硬件系统的“朋友圈”
  11. 六、区别总结
  12. 总结

更多推荐文章

查看全部
  • Krita 插件配置与 AI 绘画模型部署指南:故障诊断与维护
  • GitHub Copilot 接入 MCP 协议实战指南
  • C++ 模板进阶:特化、萃取与可变参数详解
  • 程序员网上接单平台推荐:程序员客栈、快码众包与开源众包深度解析
  • 国产 AI 大模型对比:智谱 GLM-5 与 MiniMax M2.5
  • 通义 DeepResearch 开源:轻量级 AI 代理性能对标 OpenAI
  • Web 安全:robots.txt 协议原理、利用与防御实战
  • 机器人领域顶级会议梳理与具身智能学习路线指南
  • WebGoat-JWT最新版过关教程/帮你学习gwt逻辑越权漏洞原理(第六关和第十一关)
  • C++ string 类常用成员函数与全局函数详解
  • 前端文件下载实战:从原理到最佳实践
  • 基于 Webhook 的飞书机器人搭建与消息推送实战
  • AIGC 个性化与定制化内容生成:技术与应用
  • 大语言模型 LLM 解决 AI 幻觉方法深度分析
  • Stable Diffusion v1.5 中文提示词避坑指南:翻译策略与参数调优
  • 程序员生存实录:史记·码农列传
  • MiniMax 海螺 AI 视频:图文生视频功能与 API 接入
  • C++ 继承进阶:友元、静态成员与菱形继承底层逻辑
  • Stable Diffusion WebUI Windows 部署与常见报错解决方案
  • AIGC 在现代教育技术中的应用与实践

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online