第一章 Linux设备驱动概述及开发环境构建

1.1 设备驱动的作用

设备驱动充当硬件和应用软件之间的纽带,应用软件只需要调用系统软件的应用编程接口(API)就可让硬件去完成要求的工作。

驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。

1.2 无操作系统时的设备驱动

在没有操作系统的情况下,设备驱动的接口被直接提交给应用软件工程师,应用软件没有跨越任何层次就直接访问设备驱动接口。驱动包含的接口函数与硬件的功能直接吻合,没有任何附加功能。

1.3 有操作系统时的设备驱动

操作系统的存在势必要求设备驱动附加更多的代码和功能,把单一的“驱使硬件设备行动”变成了操作系统内与硬件交互的模块,它对外呈现为操作系统的API,不再给应用软件工程师直接提供接口。

有了操作系统后,驱动反而变得复杂,那要操作系统干什么?

1、便于完成多任务并发;2、内存管理机制。

当驱动都按照操作系统给出的独立于设备的接口而设计时,那么,应用程序将可使用统一的系统调用接口来访问各种设备。

1.4 Linux设备驱动

1.4.1 设备的分类及特点

驱动针对的对象是存储器和外设,而不是针对CPU内核。Linux将存储器和外设分为3个基础大类:

  • 字符设备
  • 块设备
  • 网络设备

字符设备指那些必须以串行顺序访问的设备,如触摸屏、鼠标、键盘等。块设备可以按任意顺序进行访问,以块为单位进行操作,如硬盘、EMMC等。字符设备和块设备的驱动设计有很大的差异。但是对于用户而言,它们都要使用文件系统的操作接口open()、close()、read()、write()等进行访问。

在Linux系统中,网络设备面向数据包的接收和发送而设计,它并不倾向于对应于文件系统的节点。内核与网络设备的通信与 内核和字符设备、块设备的通信方式完全不同,前者主要还是使用套接字接口。

1.4.2 Linux设备驱动与整个软硬件系统的关系

1.5 Linux设备驱动的开发环境构建

主要是PC上Linux环境的搭建与QEMU实验平台的搭建,具体的操作步骤可以去小破站看最新的安装操作步骤。

Linux设备驱动开发学习 文章被收录于专栏

这个专栏旨在帮助开发者循序渐进地学习Linux设备驱动开发。从基础概念开始,逐步深入到高级特性,每个模块都是下一个模块的基础。建议按照章节顺序进行,结合理论学习和实际编程练习,相信大家能够掌握Linux驱动开发的精髓,以便更好地去笔试与面试。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务