赞
踩
驱动就是让一个东西动起来;给一个东西动力,让它动起来
比如:
一个球放在那儿没动,你踢了一下它,给了它一个力,给了力之后它就能动,就说明你驱动了它,这就是物理学上的驱动
到了电学时代,一台笔记本电脑,你给它上电了,它才能动;
所以电能就相当于时驱动
这一段代码操作了硬件去动,所以这码就叫硬件的驱动程序。
(本质上是电力提供了动力,而驱动程序提供了操作逻辑方法)
专指操作系统中用来操控硬件的逻辑方法部分代码。
if没有内核(操作系统),就不叫驱动,只能叫裸机
1、简化各个层次的设计;
2、层次之间可以解耦合, 耦合;
3、适配;
下层负责实现上层,上层调用下层工作
就是被API调用工作,驱动就是为API服务,如果API不调用驱动,那它就没有存在的意义
驱动就是直接工作在硬件上面
将内核从整体上作为一个大过程实现(直接将内核看成一个裸机程序),并同时运行在一个单独的地址空间(内核里面的代码全部在一起运行)。所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效.
写起来简单,运行效率高,
解耦合,一个地方改动,其他的就要都跟着改
功能被划分成独立的过程(内核里面有几个功能,就有几个程序构成),过程间通过IPC进行通信。
模块化程度高,一个服务失效不会影响另外一个服务。典型如windows
运行效率低,因为ipc进程间通讯效率比较低
本质上是宏内核,但是又吸收了微内核的模块化特性,体现在2个层面
在编译时实现可裁剪,特征是想要功能的裁剪和改变必须重新编译
也就是在make menuconfig里面添加减去模块
zImage可以不重新编译烧录,甚至可以不关机重启就实现模块的安装和卸载
比如:
U盘,直接插上电脑后,电脑不用关机,就可以自动安装驱动程序
字符设备驱动、
块设备驱动、
网络设备驱动
设备本身读写操作的特征差异
准确的说应该叫“字节设备”,软件操作设备时是以字节为单位进行的。典型的如
LCD、串口、LED、峰鸣器、触摸屏·····
比如:
LCD:是以字节为单位把像素里面的内容一个字节一个字节给传到显存上,所以LCD是一个典型的字符设备。
块设备是相对于字符设备定义的,块设备被软件操作时是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更改的,不同设备的块大小可以不一样。常见的块设备都是存储类设备
如: 硬盘、NandFlash、inand、SD···
块设备是一个本身具有特殊性的一类设备,不能按照字节方式去访问,因为块设备的本身物理特性决定了它不能以字节方式去访问读写
比如:
nand flash 是不能以字节去读取的,新的方式可以,但典型的块设备:硬盘是不行的,不能以字节的方式去寻址,必须得以块的方式去读写寻址
网络设备是专为网卡设计的驱动模型,linux中网络设备驱动主要目的是为了支持API中socket相关的那些函数工作。
因为网络设备是有单独的接口(专用接口),专用的API
linux中的网络设备是从Unix中继承过来的。
基本用到的设备都是字符设备,所以重要
非标准类:自己做的,自己定制的,为某些功能特殊做 出来的东西
意义:
如果驱动有问题,同时是函数直接调用的,函数有问题,就直接死掉了
所以驱动的位置非常关键
当你动态的安装了一个驱动之后,相当于一个内核整体上被修改了一部分
就像你往内核里面加载一个驱动,如果这个驱动写的有问题,就会造成内核的不平衡,会导致内核崩溃;
比如:
驱动该用块设备去写的,而你却用了字符设备去写,明明一秒钟要读一个块出来,你却是一个字节一个字节读,驱动效率大大降低,同时也会导致内核运行效率降低
使用指针之前一定要初始化
驱动层设计了用户是给以和int型数据,用户却给的是浮点型数据,而驱动程序没有想到,结果就死了。
所以写驱动的时候要考虑多方面因素
驱动程序里面定义了一个char buf[50],用于接收应用程序传过来的数据,让 网卡互发,而用户传进来的是大于这个空间的数据。
比如:
用户传了60个字节,还有10字节就超出了限制,可能踩到你了,但还没踩死,但是它给你传6万个过来,而你只有50个字节的空间,后面就有很多很多超限了,可能就把你内核中用的数据冲掉了,此时if你在你的驱动里面没有做任何的检验,那么就完蛋了。
所以像这样的都要写限制条件:if(len>50){ 就截断或是怎么样? } ``` 如果没有做这样的判断,就会被别人坑死,这就是**缓冲区溢出**。
- 1
- 2
- 3
- 4
- 5
(1) 硬件操作方法
(2) 应用层API
(1) 注重实践,一步一步写驱动
(2) 框架思维,多考虑整体和上下层
(3) 先通过简单设备学linux驱动框架
(4) 学会总结、记录,这会有助于理解
笔记总结于:朱有鹏老师的驱动:【朱有鹏】嵌入式5.1驱动应该怎么学
https://www.bilibili.com/video/BV1L4411t7Rjp=3&vd_source=4d939adf341b2253b2872cc9b63ce633
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。