很多人,在文章中有相关内容的详解,因此我也想把自己学习的心得总结下来,主要目的,通过自己的总结分析,能够对这一部分有一个更加清晰的认识!如果有错误,还望指正!由于本文属于个人的分析心得,因此很多地方并未详细说明!
====================================================================================================================================
另:本文部分内容,有对参考书的摘抄。
一、驱动的概念和分类
1、驱动的概念
用于将应用程序与底层硬件进行隔离的程序——机制和策略的分化(驱动中只有机制不能有策略)。
2、驱动的分类
驱动分为有操作系统情况下的驱动和无操作系统下的驱动。(本文主要是有操作系统下的驱动)
二、linux设备驱动
1、linux设备驱动与整个软硬件系统的关系
图1(转载)
2、linux设备及设备分类
(1)linux驱动针对的对象是存储器和外设,而linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。通过对设备文件的open、read、write会最终定位到驱动程序中对应的实现函数中。
(2)linux将设备分为3个基础类别:字符设备、块设备、网络设备
三、linux内核模块
1、linux内核模块的概念
具有独立功能的程序,可以单独编译,但是不能独立运行,运行时被链接到内核作为内核的一部分在内核空间运行,可以动态插入(insmod)和删除(rmmod)。
2、linux内核模块的优缺点
优点:把内核保持在最小,具有最大灵活性;便于修改,不需要重新编译内核重新引导。
缺点:影响系统的性能和内存利用;由于内核模块有和内核有一样的权限,较差的内核模块不够安全;内核模块之间可能相互依赖,内核需要维护其依赖性;内核版本与内核模块版本兼容性问题可能导致系统崩溃;
3、linux模块的程序结构
模块加载函数(必须)
模块卸载函数(必须)
模块许可证声明(必须)