Linux设备驱动程序(一)——设备驱动简介

这篇具有很好参考价值的文章主要介绍了Linux设备驱动程序(一)——设备驱动简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。


一、Linux 设备驱动程序的作用

设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。

简洁的来说设备驱动程序的作用在于提供机制(需要提供什么功能),而不在于提供策略(这些功能怎么使用)。
  
拓展:

编写驱动程序应该注意这个基本概念:编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同>的用户有不同的需求. 驱动程序应当做到使硬件可用, 将所有关于如何使用硬件的事情留给应用程序。

驱动程序设计要考虑的三个方面:

  • 提供给用户尽可能多的选项
  • 编写驱动程序要占用的时间
  • 尽量保持程序简单避免产生过多的错误

二、内核功能的划分

内核功能可以主要划分为以下五个部分:

  • 进程管理
    内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出)。不同进程间通讯(通过信号, 管道, 或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。另外,调度器,控制进程如何共享 CPU,是进程管理的一部分。更通常地,内核的进程管理活动实现了多个进程在一个单个或者几个 CPU 之上的抽象。
  • 内存管理
    计算机的内存是主要的资源,处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。内核的不同部分与内存管理子系统通过一套函数调用交互,从简单 malloc/free 对到更多更复杂的功能。
  • 文件系统
    Unix 在很大程度上基于文件系统的概念;几乎 Unix 中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用。另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准 Linux 的 ext3 文件系统,普遍使用的 FAT 文件系统,或者其他几个文件系统。
  • 设备控制
    几乎每个系统操作最终都映射到一个物理设备上。除了处理器,内存和非常少的别的实体之外,全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行。这些代码称为设备驱动,内核中必须嵌入系统中出现的每个外设的驱动,从硬盘驱动到键盘和磁带驱动器。
  • 网络
    网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程:进入系统的报文是异步事件。报文在某一个进程接手之前必须被收集,识别,分发。系统负责在程序和网络接口之间递送数据报文,它必须根据程序的网络活动来控制程序的执行。另外,所有的路由和地址解析问题都在内核中实现。

三、设备和模块的分类

以 Linux 的方式看待设备可区分为 3 种基本设备类型,每个模块常常实现 3 种类型中的 1 种,因此可分类成字符模块,块模块,或者一个网络模块。

3 类驱动如下:

  • 字符设备
    一个字符(char)设备是一种可以当作一个字节流来存取的设备(如同一个文件); 一个字符驱动负责实现这种行为,这样的驱动常常至少实现 open,close,read,和 write 系统调用。文本控制台(/dev/console)和串口(/dev/ttyS0 )是字符设备的例子,因为它们很好地展现了流的抽象。字符设备通过文件系统结点来存取,例如 /dev/tty1 和 /dev/lp0。在一个字符设备和一个普通文件之间唯一有关的不同就是,你经常可以在普通文件中移来移去,但是大部分字符设备仅仅是数据通道,你只能顺序存取。然而,存在看起来象数据区的字符设备,你可以在里面移来移去。例如,frame grabber 经常这样,应用程序可以使用 mmap 或者 lseek 存取整个要求的图像。
  • 块设备
    如同字符设备,块设备通过位于 /dev 目录的文件系统结点来存取。一个块设备(例如一个磁盘)应该是可以驻有一个文件系统的。在大部分的 Unix 系统,一个块设备只能处理这样的 I/O 操作,传送一个或多个长度经常是 512 字节(或一个更大的 2 的幂的数)的整块。Linux,相反,允许应用程序读写一个块设备象一个字符设备一样 – 它允许一次传送任意数目的字节。结果就是,块和字符设备的区别仅仅在内核在内部管理数据的方式上,并且因此在内核/驱动的软件接口上不同。如同一个字符设备,每个块设备都通过一个文件系统结点被存取的,它们之间的区别对用户是透明的。块驱动和字符驱动相比,与内核的接口完全不同。
  • 网络接口
    任何网络事务都通过一个接口来进行,就是说,一个能够与其他主机交换数据的设备。通常,一个接口是一个硬件设备,但是它也可能是一个纯粹的软件设备,比如环回接口。一个网络接口负责发送和接收数据报文,在内核网络子系统的驱动下,不必知道单个事务是如何映射到实际的被发送的报文上的。很多网络连接(特别那些使用 TCP 的)是面向流的,但是网络设备却常常设计成处理报文的发送和接收。一个网络驱动对单个连接一无所知;它只处理报文。
    既然不是一个面向流的设备,一个网络接口就不象 /dev/tty1 那么容易映射到文件系统的一个结点上。Unix 提供的对接口的存取的方式仍然是通过分配一个名子给它们(例如 eth0), 但是这个名子在文件系统中没有对应的入口。 内核与网络设备驱动间的通讯与字符和块设备驱动所用的完全不同。不用 read 和 write,内核调用和报文传递相关的函数。

有其他的划分驱动模块的方式,与上面的设备类型是正交的。通常,某些类型的驱动与给定类型设备的其他层的内核支持函数一起工作。例如,你可以说 USB 模块,串口模块,SCSI 模块,等等。每个 USB 设备由一个 USB 模块驱动,与 USB 子系统一起工作,但是设备自身在系统中表现为一个字符设备(比如一个 USB 串口),一个块设备(一个 USB内存读卡器), 或者一个网络设备(一个 USB 以太网接口)。

四、版本编号

至于说内核,偶数的内核版本(就是说,2.6.x)是稳定的,用来做通用的发布。奇数版本(例如 2.7.x), 相反,是开发快照并且是非常短暂的;它们的最新版本代表了开发的当前状态,但是会在几天内就过时了。


我的qq:2442391036,欢迎交流!文章来源地址https://www.toymoban.com/news/detail-452063.html


到了这里,关于Linux设备驱动程序(一)——设备驱动简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【IMX6ULL驱动开发学习】02.hello驱动程序之cdev注册字符设备驱动程序和设置次设备号

    目录 一、register_chrdev 二、解决方法 2.1 alloc_chrdev_region函数:注册一系列字符设备编号 2.2 cdev_init函数:初始化cdev结构体  2.3  cdev_add函数:将字符设备添加到系统中  三、驱动程序 【IMX6ULL驱动开发学习】01.编写第一个hello驱动+自动创建设备节点(不涉及硬件操作)_阿龙还

    2024年02月14日
    浏览(40)
  • 怎么编写PCIe设备驱动程序

    DocumentationPCIMSI-HOWTO.txt driversnvmehostpci.c PCI总线设备驱动模型: 右边是pci_dev,由PCIe控制器的驱动程序扫描PCIe总线,识别出设备,并构造、注册pci_dev pci_dev结构体含有丰富的信息,比如vid、pid、class、已经分配得到的mem/io资源、INTx中断资源 左边是PCIe设备驱动程序pci_driver,

    2023年04月17日
    浏览(45)
  • 【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树

    目录 一、驱动程序分离的思想 二、设备树 2.1 使用设备树 三、平台总线设备驱动模板 【IMX6ULL驱动开发学习】05.字符设备驱动开发模板(包括读写函数、poll机制、异步通知、定时器、中断、自动创建设备节点和环形缓冲区)_阿龙还在写代码的博客-CSDN博客 之前编写驱动程序

    2024年02月07日
    浏览(41)
  • 操作系统实验·字符设备驱动程序

    编写一个简单的字符设备驱动程序,该字符设备并不驱动特定的硬件, 而是用内核空间模拟字符设备,要求该字符设备包括以下几个基本操作,打开、读、写和释放,并编写测试程序用于测试所编写的字符设备驱动程序。在此基础上,编写程序实现对该字符设备的同步操作。

    2024年02月10日
    浏览(54)
  • 这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。(代码32)

    今天拿到一台笔记本,插上U盘没有反应,进【设备管理器】发现【USB大容量存储设备】有个黄色的叹号。   鼠标右键【USB大容量存储设备】打开属性查看信息,显示设状态“这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。(代码32)”   研究了

    2024年02月11日
    浏览(55)
  • 识别并安装Windows中未知设备的驱动程序

    我们偶尔需要重装系统,或者帮助老婆、女朋友重装系统时,装完驱动后常常发现还剩下几个未知设备的驱动没有安装,由于不知道是什么设备,所以不知道安装什么驱动程序。去官网把与电脑型号相关的驱动全部下载再一个个的安装?如果安装了不必要的驱动既浪费了空间

    2024年02月21日
    浏览(53)
  • 由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)”

      从设备管理器中手动删除这个硬件信息,再扫描硬件改动就应该可以发现这个硬件信息,不需要系统自动搜索驱动,而是手动指向驱动所在的文件夹,(如果没有驱动的话,可以事先下载并解压好。)这样就可以重新安装它的驱动程序了。 特别注意在卸载设备时,一定要勾

    2024年02月11日
    浏览(52)
  • 已签名驱动程序安装后提示“Windows无法验证此设备所需驱动程序数字签名”的原因和解决方法

    在Windows 64位系统上,正常开启数字签名认证时,驱动程序软件需要经过微软数字签名的才允许被使用。否则在设备管理器下,安装完硬件驱动后设备上会有“黄色感叹号”标识,右键该设备属性提示:“Windows 无法验证此设备所需驱动程序数字签名。(代码52)” 当遇到在部

    2024年02月08日
    浏览(50)
  • 第五章 I/O管理 五、输入/输出应用程序接口&设备驱动程序接口

    目录 一、应用程序接口 二、阻塞和非阻塞I/O 阻塞I/O: 非阻塞I/O: 三、设备驱动程序 以前的统一接口不适用了,现在改为了几种不同的接口 阻塞I/O: 应用程序发出I/O系统调用,进程需转为阻塞态等待。 eg:字符设备接口―一从键盘读一个字符get 非阻塞I/O: 应用程序发出I/O系统调

    2024年02月07日
    浏览(46)
  • 记录 无法识别USB串口设备以及由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)

    今天使用串口的时候突然电脑设备器显示无法识别USB设备,在这之前都是一切没有问题,我百思不得其解,于是我百度并且试了很多方法比如说换根线连接,重启电脑,卸载设备(没有卸载芯片)等之类的但是都不起作用。 后来我想起来有虚拟串口这个东西。我这边用的是

    2024年02月12日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包