驱动应该怎么学习?
模块化设计
宏内核:将内核从整体上作为一个大过程实现,并同时运行一个单独的地址空间,相互之间直接调用函数,简单高效。紧耦合。
微内核:功能被划分为独立的过程,过程间通过IPC来通信,模块化程度高, 一个服务失效不会影响另一个服务,譬如windows
Linux内核:本质上是宏内核,但又吸收了微内核的模块化特性,体现在两个层面。
驱动的分类
字符类驱动
块设备驱动
网络设备驱动
驱动安全性要求
(1)驱动是内核最庞大的一部分
(2)内核会直接以函数调用的方式调用驱动代码
(3)驱动的动态安装和卸载都会“更改”内核
驱动对内核的影响
(1)驱动程序崩溃甚至会导致内核崩溃
(2)驱动的效率会影响内核的整体效率
(3)驱动的漏洞会造成内核安全漏洞
驱动安全性问题
(1)未初始化指针
(2)恶意用户程序
(3)缓冲区溢出
(4)竞争状态
驱动的学习方法
(1)先学习好C语言
(2)掌握相关预备知识
硬件操作方面:裸机全集里的一些硬件操控,譬如串口,蜂鸣器,led,LCD等等
应用层API:应用编程和网络编程部分的内容,学习怎么去写应用程序,那些API就是现在驱动对其进行支持的。
(3)驱动学习阶段
注重实践,一步一步写驱动:一步一步的去增加自己的代码,一行一行的去写驱动。
框架思维,多考虑整体和上下层:考虑这个代码是被谁调用,上层是谁,下层是谁,
先通过简单设备学Linux驱动框架:Linux驱动本身是分层的,有些层次是Linux内核的,有些是个人自己写的,有些人是厂商写的,相互之间通过接口来调用
学会总结、记录,这会有助于理解: