设备驱动程序简介

什么是设备驱动程序

设备驱动程序,同为程序,与其他程序有何不同呢?简单点的说设备器驱动程序即满足某个标准化的、定义良好的内部编程接口 ,以此将用户的操作,通过这个内部编程接口 映射到实际硬件设备上的特有操作


设备驱动程序的作用

一种角度的解释

从一种角度上讲,设备驱动程序的作用在于提供机制,而非提供策略。
所谓机制,可以理解为“需要提供什么功能”。而所谓策略,可以理解为“如何使用这些功能”。
在驱动程序中的体现有如下几点:

  • 同时支持同步与异步操作。
  • 驱动程序能够被多次打开、充分利用硬件特性。
  • 不具备用来“简化任务”的或提供与策略相关的软件层等。

这种机制与策略分离的思想,在Unix中十分常见。详情参见《Unix编程艺术》中的Unix哲学基础(分离原则)。

另一种角度的解释

驱动程序可以看做是应用程序与实际设备之前的一个软件层。驱动程序的存在使得驱动程序的编写者可以选择如何展示设备特性。也就是说即使对于相同的硬件,不同的驱动程序也可能提供不同的功能。
而能否提供各种不同功能,可能是针对现实中的各种不同因素所做的妥协(平衡)。
总的来说,驱动程序的设计主要综合考虑以下三个方面:
1. 能提供给用户尽可能多的选择。
2. 编写驱动程序索要花费的时间。
3. 尽量保持程序的简单性。


内核功能划分

内核主要可以分为以下几个部分:

  • 进程管理
  • 内存管理
  • 文件系统
  • 设备控制
  • 网络功能

这里写图片描述


可装载模块

可在运行时添加到内核中的代码成为“模块”。每个模块是由目标代码组成的(也就是并没有进行链接,在装载的时候才进行动态链接)。上图中涵盖了几个最重要的模块(黑色方框所示),但这并不是所有的模块类,因为有越来越多的功能被模块化。


设备和模块的分类

LInux将设备分成三种基本类型,每个模块通常对应与一种类型。上图中最下面一排黑色方框从左到右分别为:块设备、字符设备、网络设备。
简单来说

  • 字符设备是面向流的,最小访问单位是字节,只能顺序按字节访问,通过设备节点访问;
  • 块设备是面向块的,最小访问单位是512字节或2的更高次幂,块设备可随机访问,并且可容纳文件系统,而块设备虽然也可通过设备节点访问,但一般是通过文件系统来访问数据的。
  • 网络设备没有设备节点是因为,网络设备是面向报文的,很难实现相关read、write等文件读写函数。所以驱动的实现也与字符设备和块设备不同。

上面提到了文件系统,并且在上图中我们看到了在块设备上面的文件系统也是模块。
文件系统决定了如何在块设备上组织数据,来表示目录和文件形成的树结构。与前面所述的设备驱动程序相反,文件系统是典型的软件驱动程序,它将底层的数据结构映射到高层的数据结构

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows GPIO驱动是用于控制通用输入输出(GPIO)引脚的驱动程序。根据引用\[1\],要安装Windows GPIO驱动,首先需要将驱动文件下载到本地,并确保设备已连接到Windows电脑并处于正常工作状态。然后,运行"USBMSER.exe"驱动软件并点击安装。安装完成后,可以在设备管理器中查看安装结果和设备状态。根据引用\[2\]和\[3\],微软的架构设计使得开发GPIO外设驱动变得更加方便,驱动人员只需要与GpioClx进行交互,而不需要关心具体的硬件平台细节。这样即使将来更换了SoC(系统芯片),外设驱动也不需要进行任何修改就可以正常工作。 #### 引用[.reference_title] - *1* [CH9344 Windows驱动安装与GPIO使用教程](https://blog.csdn.net/WCH_TechGroup/article/details/115488238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [GPIO驱动初步](https://blog.csdn.net/norains/article/details/5930585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Windows Phone 8.1 驱动开发——GPIO 简介](https://blog.csdn.net/hexiaolong2009/article/details/42804253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值