驱动应该怎么学

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


(1).(2).
驱动,
驱动伴随内核而生,
由于汉语意义的丰富,所以很容易误解我们要表达的意思,
软件层面的驱动,广义上就是指这段代码操作硬件去动,控制硬件部分的逻辑,不同于电力驱动!


系统API调用驱动,对上
驱动程序驱动的是硬件,对下,


驱动程序里面分为好几个层次,
你得了解和你相关的层次,而这个内容可能会很多,


(3).
微内核和宏内核,
宏内核,单内核,是一个整体,相互之间依赖度高,
微内核,功能被划分为独立的过程,模块化程度高,一个服务失效不会影响另外一个服务,


linux本质上是宏内核,同时吸收了微内核的特点,


静态模块化,编译时实现可裁剪,需要重新编译,
动态模块化,不重新烧录编译,


(4).
驱动分类,
为什么这样分类,
根据读写操作的差异,
1.字符设备,也可以叫字节设备,比如串口,lcd,
2.块设备,操作时候以块为单位,块大小硬件设定,不同设备不同,
3.网络设备,专为网卡设计的驱动模型,linux中网络设备驱动是为了支持API中的socket相关的那些函数工作,


有了unix才有了网络!


字符设备驱动是非常重要的!块设备和网络设备驱动因为大多都是标准的,所以没有那么多机会去做!
USB是总线,usb摄像头是字符设备,usb的u盘是块设备,不过具体还要看实现!


(5).
驱动程序安全性要求,
驱动是内核的一部分,
内核会以函数调用方式调用驱动程序,
驱动的动态安装和卸载都会更改内核,


驱动对内核的影响,
驱动的崩溃可能会使内核崩溃,
驱动的漏洞可能会造成内核安全漏洞,


常见驱动程序安全性问题,
未初始化指针,因为指针的使用实在是太多了,
恶意用户程序,用户程序利用驱动的漏洞,比如传一些恶意的参数,
缓冲区溢出,比如传太多数据导致数据覆盖,
竞争状态,一些防止的措施有信号量,自旋锁,属于一种安全措施,


(6).
驱动怎么学?
高级C是针对linux内核的,
硬件的操作,还得按照linux的框架方式来操作,类似花样自行车,不仅得会自行车,
应用层API,映射到内部实际操作硬件的函数,


框架思维,相互之间的调用,因为驱动的框架是很复杂的,没有框架思维,你会陷进去的,












你可能感兴趣的:(驱动应该怎么学)