Linux内核分析与应用9-设备驱动

简介: Linux内核分析与应用9-设备驱动

image.png

9.1 设备驱动概述


因为UNIX/Linux一切皆文件,所以也将设备纳入文件管理体系下

微信截图_20230926020922.png

微信截图_20230926020929.png

Linux将设备分为三大类,一类是像磁盘那样,以块或扇区为单位,成块进行输入输出的设备,称为块设备;

另一类像键盘那样,以字符为单位,进行输入/输出,称为字符设备;

还有一类,是网络设备,与前两者有很大不同 ----块设备和字符设备对应/dev下的一个设备文件,而网络设备不存在这样的设备文件,采用套接字socket来访问.

微信截图_20230926021033.png

文件系统通常都建立在块设备上,也有部分放在内存,如proc文件系统,则不需要驱动程序.


建立设备文件的两种方式:

微信截图_20230926021046.png

Linux内核分为五大部分:

  • 进程管理
  • 内存管理
  • 文件系统管理
  • 设备管理
  • 网络管理

每一部分都有承上启下的作用.

微信截图_20230926021215.png

微信截图_20230926021221.png

微信截图_20230926021228.png

微信截图_20230926021234.png

思考:

应用程序以什么形式访问各种硬件设备?为什么采用这种方式?



9.2 IO空间的管理


设备控制器:

微信截图_20230926021244.png

I/O内存和I/O端口

微信截图_20230926021359.png

微信截图_20230926021408.png

微信截图_20230926021415.png

微信截图_20230926021421.png

微信截图_20230926021427.png

微信截图_20230926021434.png

思考:

内核对I/O资源的管理为什么采用树结构?



9.3 设备驱动模型


Linux支持世界上几乎所有不同功能的硬件设备,导致Linux内核中有一半的代码是设备驱动,且随着硬件的快速升级迭代,设备驱动的代码量也快速增长..为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热插拔处理,电源管理等,Linux提出了设备模型(Driver Model)

(2.x只有200多M,现在5.x版接近3G)

微信截图_20230926021446.png

微信截图_20230926021452.png

Sys文件系统,是一个类似proc文件系统的特殊的文件系统

微信截图_20230926021631.png微信截图_20230926021639.png

微信截图_20230926021646.png

微信截图_20230926021654.png

image.png

地位相当于面向对象中的总基类

微信截图_20230926021710.png

微信截图_20230926021716.png

机制与策略分离:

微信截图_20230926021856.png

微信截图_20230926021903.png

微信截图_20230926021909.png

微信截图_20230926021915.png

微信截图_20230926021921.png

设备与驱动 匹配的过程

设备和驱动是男女方,红娘相当于总线, 进行撮合

微信截图_20230926021931.png

微信截图_20230926021937.png

微信截图_20230926021944.png

思考:

platform平台模型的优势是什么?



9.4 字符设备驱动程序简介


只能一个字节一个字节进行读写操作的设备,不能随机读取设备中的某个设备,必须按照先后次序来进行, 字符设备是面向流的设备.常见的字符设备有鼠标,键盘等

微信截图_20230926022044.png

微信截图_20230926022050.png

微信截图_20230926022056.png

微信截图_20230926022102.png

微信截图_20230926022109.png

微信截图_20230926022121.png

微信截图_20230926022131.png

微信截图_20230926022139.png

微信截图_20230926022145.png

Linux字符设备驱动


思考:

从原理上说明file_operations操作方法集,为什么说它是定义了字符设备提供给VFS的接口函数?



9.5 块设备驱动程序简介


字符设备与块设备的区别:


I/O调度:

希望磁头总能往一个方向移动,到底了再向另一个方向移动. 电梯调度算法

image.png

第三种调度算法常用于数据库.第四种是内核默认的调度算法.

微信截图_20230926022340.png

块和扇区的关系:

微信截图_20230926022412.png

image.png

扇区是磁盘读写的基本单位,是磁盘上最小的操作单位,是文件系统和块设备之间传送数据的单位.

一般一个扇区的大小是512字节,但如果是SSD,则为4096个字节.

当一个扇区的大小超过512字节时,需要将多个内核扇区对应一个设备扇区.

微信截图_20230926022430.png

Linux块设备IO子系统(一) _驱动模型

linux内核之块设备驱动图解

思考:

从虚拟文件系统到硬件,为什么要对块设备进行分层管理?


目录
相关文章
|
6天前
|
缓存 网络协议 Linux
PCIe 以太网芯片 RTL8125B 的 spec 和 Linux driver 分析备忘
本文详细介绍了 Realtek RTL8125B PCIe 以太网芯片的规格以及在 Linux 中的驱动安装和配置方法。通过深入分析驱动源码,可以更好地理解其工作原理和优化方法。在实际应用中,合理配置和优化驱动程序可以显著提升网络性能和稳定性。希望本文能帮助您更好地使用和管理 RTL8125B,以满足各种网络应用需求。
52 33
|
1月前
|
安全 Linux 测试技术
Intel Linux 内核测试套件-LKVS介绍 | 龙蜥大讲堂104期
《Intel Linux内核测试套件-LKVS介绍》(龙蜥大讲堂104期)主要介绍了LKVS的定义、使用方法、测试范围、典型案例及其优势。LKVS是轻量级、低耦合且高代码覆盖率的测试工具,涵盖20多个硬件和内核属性,已开源并集成到多个社区CICD系统中。课程详细讲解了如何使用LKVS进行CPU、电源管理和安全特性(如TDX、CET)的测试,并展示了其在实际应用中的价值。
|
1月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
95 15
|
2月前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
57 7
|
2月前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
2月前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
2月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
2月前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
Linux 网络协议 调度
Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装
原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解。
1811 0
|
7天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用