Linux 设备驱动分类(快速理解驱动架构)

Linux 设备驱动分类(快速理解驱动架构)

在 Linux 设备驱动开发中,最基础的概念就是 设备驱动的分类
Linux 设备驱动主要分为 字符设备、块设备和网络设备,它们分别对应不同类型的硬件资源。
理解这些分类,不仅能帮助你更快掌握 Linux 设备驱动开发,还能帮助你更好地调试和优化驱动程序。

📌 本文主要内容:

  • Linux 设备驱动的 3 大分类(字符设备、块设备、网络设备)
  • /dev 目录下的设备文件解析
  • 设备驱动与文件系统的关系
  • 实战:使用 ls /dev 和 lsmod 查看设备驱动信息

1. Linux 设备驱动的 3 大分类

在 Linux 内核中,所有硬件设备都由相应的 驱动程序 进行管理。按照设备的 数据传输方式,可以分为以下三类:

设备类型描述常见设备系统调用
字符设备(Character Device按字节流方式访问串口(UART)、I2C、SPI、GPIOopen/read/write/ioctl
块设备(Block Device)按块(Block)方式访问,具有缓冲硬盘(HDD、SSD)、SD 卡、U 盘open/read/write/mmap/fs
网络设备(Network Device)通过协议栈收发数据包以太网、WiFi、蓝牙socket/send/recv/ioctl

接下来,我们来详细看看这三类设备的特点。


## 1.1 字符设备驱动

字符设备(Character Device)是 按字节流方式 进行数据传输的设备。它们不经过缓存,数据的读取和写入是 实时的

📌 常见的字符设备:

  • 串口(UART)
  • I2C / SPI 设备
  • GPIO
  • 蜂鸣器、LED

📌 字符设备的特点: ✅ 读写数据时 不经过缓存,直接交给硬件
✅ 适用于 实时性要求高 的外设(如串口通信)
✅ 设备文件通常位于 /dev 目录,例如:

ls /dev/ttyS*
ls /dev/i2c*
ls /dev/spidev*

字符设备通常需要实现以下内核 API:

static struct file_operations fops = {.open = my_driver_open,.read = my_driver_read,.write = my_driver_write,.release = my_driver_release,
};

当应用程序 open(“/dev/my_device”) 时,Linux 内核就会调用 my_driver_open()。


1.2 块设备驱动

块设备(Block Device)是 按块(Block)方式 进行数据传输的设备。它们会经过 缓存机制,数据读写通常是 成批量 进行的。

📌 常见的块设备:

  • SD 卡
  • U 盘
  • eMMC / NVMe / SSD
  • 机械硬盘(HDD)

📌 块设备的特点: ✅ 读写数据时 经过缓冲区,可以提升读写性能
✅ 适用于 大容量存储设备(如 SD 卡、SSD)
✅ 设备文件通常位于 /dev 目录,例如:

ls /dev/sd*
ls /dev/mmcblk*
ls /dev/nvme*

块设备通常需要实现 块 I/O 操作(bio)

static struct block_device_operations bdev_fops = {.open = my_bdev_open,.release = my_bdev_release,.ioctl = my_bdev_ioctl,
};

1.3 网络设备驱动

网络设备(Network Device)主要用于 数据包(Packet)通信,通常通过 协议栈 进行传输,例如 TCP/IP、UDP

📌 常见的网络设备:

  • 以太网(Ethernet)
  • WiFi
  • 蓝牙(Bluetooth)
  • 4G / 5G 模块

📌 网络设备的特点: ✅ 不使用 /dev/ 设备文件,而是使用 socket 编程 访问
✅ 主要接口是 send() / recv()
✅ 设备名称通常是 eth0、wlan0、lo:

ifconfig -a
ip link show

在驱动代码中,通常会注册 net_device 结构:

static struct net_device_ops my_netdev_ops = {.ndo_open = my_net_open,.ndo_stop = my_net_stop,.ndo_start_xmit = my_net_xmit,
};

网络设备的 read() / write() 不同于字符设备,而是基于 协议栈 处理数据包。


2. /dev 目录下的设备文件解析

Linux 设备驱动的 最终表现形式 是 /dev 目录下的 设备文件

ls -l /dev/

你会看到:

crw-rw---- 1 root tty  4, 64 Aug 31 12:00 /dev/ttyS0  # 字符设备
brw-rw---- 1 root disk 8, 0 Aug 31 12:00 /dev/sda     # 块设备
  • c(Character) 代表字符设备
  • b(Block) 代表块设备

可以用 lsmod 查看当前已加载的驱动:

lsmod

3. 设备驱动与文件系统的关系

设备驱动程序的主要作用是 让应用层能访问底层硬件。它通常会和 文件系统 结合:

  • 字符设备 → /dev/ttyS0
  • 块设备 → /dev/sda1(挂载 /mnt)
  • 网络设备** → eth0(挂载到协议栈)

在 Linux 内核中,设备驱动和文件系统的关系如下:

应用程序 --> 文件系统(VFS)--> 设备驱动 --> 硬件

你可以使用 mount 挂载块设备:

mount /dev/sda1 /mnt

4. 实战:使用 ls /dev 和 lsmod 查看设备驱动信息

4.1 查看字符设备

ls -l /dev/ttyS*
ls -l /dev/i2c*
ls -l /dev/spidev*

4.2 查看块设备

ls -l /dev/sd*
ls -l /dev/mmcblk*

4.3 查看网络设备

ifconfig -a
ip link show

4.4 查看已加载的驱动模块

lsmod

如果想手动加载驱动:

modprobe my_driver

卸载驱动:

rmmod my_driver

总结

🔹 Linux 设备驱动分为 字符设备、块设备和网络设备
🔹 /dev 目录下存放字符设备和块设备,网络设备不在 /dev 目录
🔹 可以使用 ls /dev、lsmod、ifconfig 查看设备信息

📢 下一篇文章:《Linux 设备树(Device Tree)基础》

💡 如果觉得有帮助,记得 点赞、收藏、关注,让我们一起深入学习 Linux 设备驱动开发!🚀🚀🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13145.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dl学习笔记(8):fashion-mnist

过完年懒羊羊也要复工了,这一节的内容不多,我们接着上次的fashion-mnist数据集。 首先第一步就是导入数据集,由于这个数据集很有名,是深度学习的常见入门数据集,所以可以在库里面导入。由于是图像数据集所以&#xff…

【Rust自学】20.2. 最后的项目:多线程Web服务器

说句题外话,这篇文章非常要求Rust的各方面知识,最好看一下我的【Rust自学】专栏的所有内容。这篇文章也是整个专栏最长(4762字)的文章,需要多次阅读消化,最好点个收藏,免得刷不到了。 喜欢的话…

Android学习21 -- launcher

1 前言 之前在工作中,第一次听到launcher有点蒙圈,不知道是啥,当时还赶鸭子上架去和客户PK launcher的事。后来才知道其实就是安卓的桌面。本来还以为很复杂,毕竟之前接触过windows的桌面,那叫一个复杂。。。 后面查了…

[创业之路-276]:从燃油汽车到智能汽车:工业革命下的价值变迁

目录 前言: 从燃油汽车到智能汽车:工业革命下的价值变迁 前言: 燃油汽车,第一次、第二次工业革命,机械化、电气化时代的产物,以机械和电气自动化为核心价值。 智能汽车,第三次、第四次工业革…

Spring Boot - 数据库集成07 - 数据库连接池

数据库连接池 文章目录 数据库连接池一:知识准备1:什么是数据库连接池?2:数据库连接池基本原理 二:HikariCP连接池1:简单使用2:进一步理解2.1:是SpringBoot2.x默认连接池2.2&#xf…

Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具

前言:在抖音,快手等社交平台上,我们常常见到各种各样的GIF动画。在各大评论区里面,GIF图片以其短小精悍、生动有趣的特点,被广泛用于分享各种有趣的场景、搞笑的瞬间、精彩的动作等,能够快速吸引我们的注意…

使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

前一篇文章,计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 使用线性回归模型逼近目标模型 什么是回归什么是线性回归使用 PyTorch 实现线性回归模型代码执行结…

【蓝桥杯嵌入式】2_LED

1、电路图 74HC573是八位锁存器,当控制端LE脚为高电平时,芯片“导通”,LE为低电平时芯片“截止”即将输出状态“锁存”,led此时不会改变状态,所以可通过led对应的八个引脚的电平来控制led的状态,原理图分析…

尝试在Office里调用免费大语言模型的阶段性进展

我个人觉得通过api而不是直接浏览器客户端聊天调用大语言模型是使用人工智能大模型的一个相对进阶的阶段。 于是就尝试了一下。我用的是老师木 袁进辉博士新创的硅基流动云上的免费的大模型。——虽然自己获赠了不少免费token,但测试阶段用不上。 具体步骤如下&am…

LabVIEW自定义测量参数怎么设置?

以下通过一个温度采集案例,说明在 LabVIEW 中设置自定义测量参数的具体方法: 案例背景 ​ 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度,需自定义以下参数: 采样率:1 kHz 输入量程:0~10 V&a…

理解 C 与 C++ 中的 const 常量与数组大小的关系

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯数组大小的常量要求💯C 语言中的数组大小要求💯C 中的数组大小要求💯为什么 C 中 const 变量可以作为数组大小💯进一步的…

【Elasticsearch】文本分类聚合Categorize Text Aggregation

响应参数讲解: key (字符串)由 categorization_analyzer 提取的标记组成,这些标记是类别中所有输入字段值的共同部分。 doc_count (整数)与类别匹配的文档数量。 max_matching_length (整数)从…

基于SpringBoot的信息技术知识赛系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Windows Docker笔记-安装docker

安装环境 操作系统:Windows 11 家庭中文版 docker版本:Docker Desktop version: 4.36.0 (175267) 注意: Docker Desktop 支持以下Windows操作系统: 支持的版本:Windows 10(家庭版、专业版、企业版、教育…

《Kettle保姆级教学-界面介绍》

目录 一、Kettle介绍二、界面介绍1.界面构成2、菜单栏详细介绍2.1 【文件F】2.2 【编辑】2.3 【视图】2.4 【执行】2.5 【工具】2.6 【帮助】 3、转换界面介绍4、作业界面介绍5、执行结果 一、Kettle介绍 Kettle 是一个开源的 ETL(Extract, Transform, Load&#x…

新型智慧城市建设方案-1

智慧城市建设的背景与需求 随着信息技术的飞速发展,新型智慧城市建设成为推动城市现代化、提升城市管理效率的重要途径。智慧城市通过整合信息资源,优化城市规划、建设和管理,旨在打造更高效、便捷、宜居的城市环境。 智慧城市建设的主要内容…

【Java计算机毕业设计】基于Springboot的物业信息管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

ollama部署deepseek实操记录

1. 安装 ollama 1.1 下载并安装 官网 https://ollama.com/ Linux安装命令 https://ollama.com/download/linux curl -fsSL https://ollama.com/install.sh | sh安装成功截图 3. 开放外网访问 1、首先停止ollama服务:systemctl stop ollama 2、修改ollama的servic…

Agentic Automation:基于Agent的企业认知架构重构与数字化转型跃迁---我的AI经典战例

文章目录 Agent代理Agent组成 我在企业实战AI Agent企业痛点我构建的AI Agent App 项目开源 & 安装包下载 大家好,我是工程师令狐,今天想给大家讲解一下AI智能体,以及企业与AI智能体的结合,文章中我会列举自己在企业中Agent实…

图论常见算法

图论常见算法 算法prim算法Dijkstra算法 用途最小生成树(MST):最短路径:拓扑排序:关键路径: 算法用途适用条件时间复杂度Kruskal最小生成树无向图(稀疏图)O(E log E)Prim最小生成树无…