第一章 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驱动开发的精髓,以便更好地去笔试与面试。

全部评论

相关推荐

06-04 14:06
已编辑
上海科技大学 C++
研究生为校企联培,研二开始在中厂(制造业)做工业软件研发,主要也是调接口,当然所有代码都是是可以看到的,目前实习已有快一年时间。虽然留任得概率挺大的,但是还是担心鸡蛋放在一个篮子里,所以4月23号开始投大厂简历(投的比较玩晚了),主要是在之前在做一个高并发服务器的项目和 准备 计算机四大件八股,怕面试表现不好,脏面评。暑期实习结果:pdd、哔哩哔哩、美团、网易雷火笔试挂(还是太菜了);腾讯一面(处女面)挂;网易互娱 一面挂(没hc了);携程笔试A 3.5/4,没后续;阿里灵犀互娱笔试A 4/5,没后续;蚂蚁发了测评没赶上笔试;现在的想法是想转嵌入式,或者和硬件结合的工作,没别的,想提高技术门槛,不想有35危机,钱的话总包差不多能有30目前,我自己准备的八股有:数据结构和排序查找算法,计算机网络,操作系统,c++(语法基础、面对对象、内存管理)我自己准备的项目有:高并发服务器(自己使用C++造轮子)和公司的项目我具备的技能:焊板子,画原理图和PCB,本科学过单片机,且有信号与系统(基础比较好)、数电(看看书还是能快速回忆起来)、模电(基本不太会了)的基础。接下来我想继续投一投日常实习,欢迎并感谢大家给我建议,我会认真看的,谢谢了
投递蚂蚁集团等公司8个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务