Linux驱动具体是指什么?
原文:https://mp.weixin.qq.com/s/Wt9D8Sj4Dc4Jf7aksAWj6g
经常有同学给我留言,想知道什么是linux驱动开发,具体的工作内容是什么?
这是一个好问题,想做什么确实需要先知道事情本身的内容是什么,才能有的放矢
分析这个问题首先要切分这个问题
什么是驱动?
1: 驱动一词的字面意思
2: 物理上的驱动
3: 硬件中的驱动
4: linux内核驱动。
软件层面上的驱动广义上是指:这一段代码操作了硬件驱动,所以这一段代码就叫硬件的驱动程序。
狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法的部分代码。而我们这里讲的驱动就指的是这个狭义上的驱动。
驱动的设计思想?
1: 分离、分层思想
2: 驱动的上面是系统调用API
3: 驱动的下面是硬件
4: 驱动本身的实现也是基于分离、分层的思想
驱动的具体分类?
1、驱动分类
(1)分3类:字符设备驱动、块设备驱动、网络设备驱动
(2)分类原则:设备本身读写操作的特征差异
时刻要注意一点,我们的驱动本质上是不分类的,因为我们的硬件是不同的,有不同的读写特性,所以的硬件是分类的,所以我们的驱动也就要跟着分类了。
2、三类驱动程序详细对比分析
(1)字符设备,准确的说应该叫“字节设备”,软件操作设备时是以字节为单位进行的。典型的如LCD、串口、LED、蜂鸣器、触摸屏······
(2)块设备,块设备是相对于字符设备定义的,块设备被软件操作时是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更
改的,不同设备的块大小可以不一样。常见的块设备都是存储类设备,如:硬盘、NandFlash、iNand、SD····操作块设备时,我们必须以块单位进行操作,将一块的
数据读取到内存中去,然后在内存中找到相应的那个字节数据修改之后再以一块的数据写入到我们的块设备中去。
(3)网络设备,网络设备是专为网卡设计的驱动模型,linux中网络设备驱动主要目的是为了支持API中socket相关的那些函数工作。
3、为什么字符设备驱动最重要
(1)常见大量设备都属于字符设备
(2)举例说明非标准类型字符设备驱动
驱动和内核的关系?
驱动已经成为内核中最庞大的组成部分
内核会直接以函数调用的方式调用驱动代码
驱动的动态安装和卸载都会“更改”内核
驱动程序崩溃甚至会导致内核崩溃
驱动的效率会影响内核的整体效率
驱动的漏洞会造成内核安全漏洞
驱动学习资源
驱动学习其实也没什么特殊的,推荐的方法还是书籍加实践,还可以参考些不错的视频教程
下边两本是我看过的很不错的书籍,基本就够用了,后台回复"Linux驱动"获取电子书
《Linux设备驱动程序》
《linux设备驱动开发详解》
视频的话推荐写百问科技韦东山的教程,从头开始讲的很细
当然还有其他一些视频也是可以的,不过我个人是不推荐看视频学习的,比较费时间,大家可以可以根据自己的学习阶段选择合适的方法
获取更多内容,欢迎一键三连
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/118395276
- 点赞
- 收藏
- 关注作者
评论(0)