Linux设备驱动 | 简述内核模块
1. 内核功能模块
2. 设备和模块的分类
- 字符设备:可通过字节流(类似文件)进行访问的设备,字符设备驱动程序通常至少要实现open、close、read和write系统调用。
- 块设备:进行IO操作,可进行传输若干个完整的块的设备。
- 网络接口:任何网络事务都经过一个网络接口形成,网络接口由内核中的网络子系统驱动,负责发送和接收数据包,不需要了解数据包结构和具体的映射。
3. 内核模块和应用程序的区别
- 内核模块是运行在内核空间,应用程序是运行在用户空间。
- 内核模块的编程方式类似应用程序中事件驱动的编程方式,模块需要预先进行注册,用于服务将来的某个请求。
- 应用程序在退出时,可以不管资源的释放或者其他清除工作;而内核模块的退出函数却必须全部撤销初始化函数所做的一切,否则,系统重新引导之前某些东西就会残留在系统中。
- 应用程序可以调用未定义的函数,可以通过解析外部引用链接对应的函数库。内核模块仅仅是被链接到内核,只能使用内核中导出的函数,不存在任何可链接库。
- 应用程序开发过程中的段错误是无害的,能通过调试器定位到问题源头;内核错误即使不影响系统,也至少会杀死进程。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。