Linux设备驱动程序学习----1.设备驱动程序简介

简介: Linux设备驱动程序学习----1.设备驱动程序简介设备驱动程序简介更多内容请参考Linux设备驱动程序学习----目录简介  Linux系统的优点是,系统内部实现细节对所有人都是公开的。Linux内核由大量复杂的代码组成,设备驱动程序可以作为进入Linux内核世界大门的切入口。

Linux设备驱动程序学习----1.设备驱动程序简介
设备驱动程序简介
更多内容请参考Linux设备驱动程序学习----目录

  1. 简介
      Linux系统的优点是,系统内部实现细节对所有人都是公开的。Linux内核由大量复杂的代码组成,设备驱动程序可以作为进入Linux内核世界大门的切入口。

  设备驱动程序在Linux内核中,是一个个独立的黑盒子,在调用内部接口时某个特定硬件做出响应,这些接口隐藏了设备的工作细节。用户的操作通过独立于特定驱动程序的一组标准化调用执行,将这些调用映射到作用于实际硬件的设备特有操作上,是设备驱动程序的任务。

  模块化的特点使得Linux驱动程序的编写非常方便简单。

  1. 设备驱动程序的作用
      设备驱动程序的作用在于提供机制,而不是提供策略。

  区分机制和策略是Unix设计背后隐含的最好思想之一。大部分编程问题都可以分成两部分:
机制:需要提供什么功能
策略:如何使用这些功能

我们应当尽可能做到让驱动程序不带策略。

  编写驱动程序时,特别注意:编写访问硬件的内核代码时,不要给用户强加任何特定策略。因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给应用程序。

  驱动程序可以看作是应用程序和实际设备之间的一个软件层。

  驱动程序设计要综合考虑下面三个问题的因素:提供给用户尽量多的选项、编写驱动程序要占用的时间、尽量保持程序简单。

  1. 内核功能划分
    根据内核完成任务的不同,内核功能分为如下几个部分:

进程管理
  负责创建和销毁进程,并处理它们和外部世界之间的连接。如进程之间的通信,控制进程如何共享CPU的调度器等。

内存管理
  内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素。内核在有限的可用资源上为每个进程创建一个虚拟地址空间。

文件系统
  Unix中的每个对象几乎都可以当作文件来看待。内核可以在没有结构的硬件上构造结构化的文件系统。

设备控制
  几乎每一个系统操作最终都会映射到物理设备上。几乎所有设备操作都由驱动程序来完成。内核必须为系统中的每个外设嵌入相应的驱动程序。

网络功能
  大部分网络操作和具体进程无关,网络功能必须由操作系统管理。系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序的执行。所有的路由和地址解析都由内核处理。

可装载模块
  Linux有个很好的特性,内核提供的特性可在运行时扩展,即系统启动并运行时,可以以模块的形式,向内核添加、移出功能。

  1. 设备和模块分类
    Linux系统将设备分为三种基本类型,字符设备模块、块设备模块、网络设备模块。

字符设备
  字符设备是个能像字节流一样被访问的设备,类似文件。比如:字符终端(/dev/console)和串口(/dev/ttys0)

  设备文件和普通文件的唯一差别是,对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个个只能顺序访问的数据通道。除个别例外。

块设备
  块设备是按照块进行读写的设备,一次只能传输一个或多个完整的块,一个块一般是512字节,或2的更高次幂字节的数据。
  块设备上能够容纳文件系统。

网络设备
  网络设备是一个能够和其他主机交换数据的设备,通常,接口是个硬件设备,也可能是个纯软件设备,比如回环接口(loopback)。
  网络设备由内核中的网络子系统驱动,负责发送和接收数据包。

  除了设备驱动程序外,内核中其他一些功能,不管是硬件还是软件功能,都模块化了。如常见的文件系统。。。

  1. 安全问题
      系统中的所有安全检查都是由内核代码进行的,如果内核有安全漏洞,则整个系统就有安全漏洞。

  驱动程序编写者应当尽量避免在代码中实现安全策略。
  驱动程序编写者应当避免由于自身原因引入安全方面的缺陷。
  任何从用户进程得到的输入只有经过内核严格验证后才能使用。必须小心对待未初始化的内存,任何从内核中得到的内存,都必须在提供给用户进程或者设备之前清零或者以其他方式初始化,否则可能发生信息泄露。

  Linux内核也可编译为不支持模块方式,从而可以关闭任何模块相关的安全漏洞。此时,所有需要的驱动程序必须直接编译到内核中。

  1. 版本编号
      对内核来讲,偶数编号的内核版本(如2.6.x)是用于正式发行的稳定版本,而奇数编号的版本(如2.7.x)则是开发过程中的一个快照。

更多内容请参考Linux设备驱动程序学习----目录
原文地址https://www.cnblogs.com/microxiami/p/11254081.html

相关文章
|
27天前
|
Shell Linux C语言
【Shell 命令集合 设备管理 】Linux 创建设备文件 MAKEDEV命令 使用指南
【Shell 命令集合 设备管理 】Linux 创建设备文件 MAKEDEV命令 使用指南
33 0
|
27天前
|
监控 Linux Shell
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
【Shell 命令集合 网络通讯 】Linux管理终端设备的登录过程 getty命令 使用指南
31 0
|
27天前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux losetup命令使用教程 将一个文件或设备与一个回环设备(loop device)进行关联
【Shell 命令集合 磁盘管理 】Linux losetup命令使用教程 将一个文件或设备与一个回环设备(loop device)进行关联
35 0
|
27天前
|
存储 Shell Linux
【Shell 命令集合 磁盘管理 】Linux 从远程磁带设备中删除文件或目录rmt命令使用教程
【Shell 命令集合 磁盘管理 】Linux 从远程磁带设备中删除文件或目录rmt命令使用教程
26 0
|
27天前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 控制光驱或可移动媒体设备的弹出和关闭操作 eject命令使用教程
【Shell 命令集合 磁盘管理 】Linux 控制光驱或可移动媒体设备的弹出和关闭操作 eject命令使用教程
35 1
|
27天前
|
监控 Linux Shell
【Shell 命令集合 磁盘维护 】Linux 交换分区的特殊文件或设备 swapon命令使用指南
【Shell 命令集合 磁盘维护 】Linux 交换分区的特殊文件或设备 swapon命令使用指南
34 1
|
27天前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
33 0
|
27天前
|
安全 Shell Linux
【Shell 命令集合 网络通讯 】Linux 打开终端设备 mingetty命令 使用指南
【Shell 命令集合 网络通讯 】Linux 打开终端设备 mingetty命令 使用指南
38 0
|
11天前
|
存储 缓存 固态存储
Linux设备全览:从字符到块,揭秘每种设备的秘密
在Linux的世界里,设备是构成系统的基础,它们使得计算机能够与外界互动。Linux设备可以大致分为几种类型,每种类型都有其独特的特性和用途。🌌让我们一起探索这些设备类型及其特性。
|
11天前
|
Linux 应用服务中间件 网络安全
小白学习Linux的学习建议和阶段
【4月更文挑战第5天】小白学习Linux的学习建议和阶段
27 0