内核资料收集
1. 模块
a. 内核可以在运行时扩展。也就是在启动并运行时向内核增减功能
b. 可在运行时添加到内核中的代码称为“模块”。linux支持多种模块类型,包括但不限于设备驱动程序
c. 每个模块由目标(没有链接成一个完整的可执行程序)代码组成。使用insmod将模块链接到正在运行的内核,使用rmmod移除模块
2. 设备和模块分类
a. 字符设备
能够像字节流(类似文件)一样访问的设备(如串口),由字符设备驱动来实现这种特性。
b. 块设备
I/O操作时,块设备每次只能传输一个或多个完整的块(512字节或更多2^xxx)。
块设备能容纳文件系统。linux可以让应用程序象字符设备一样地读写块设备,允许一次传递任意多字节的数据
块设备和字符设备的区别仅仅在于内核管理内部数据的方式
c. 网络接口
任何网络事务都经过一个网络接口形成,即一个能够和其它主机交换数据的设备
linux将设备分为三种类型,每一个模块通常实现为其中某一类:字符设备,块设备,和网络设备
3. 设备驱动程序特性
a. 核心代码
设备驱动是核心代码的一部分。出错将导致系统严重损伤
b. 核心接口
设备驱动必须为linux核心或者从属子系统提供一个标准接口。
c. 核心机制与服务
设备驱动程序可以使用标准的核心服务。如内存分配,中断发送等待队列等。
d. 动态可加载
多数linux设备驱动程序可以在核心模块发出加载请求时加载。不需要时卸载
e. 可配置
linux设备驱动可链接到内核中。当内核被编译时,哪些功能被链入内核是可配置时。
f. 动态性
系统启动及设备驱动初始化时,将查找安所控制的硬件设备。
加载空的驱动代码,仅占用少量内存,不会对系统造成危害。
4. 应用程序与驱动模块对比
a. 内核模块具有独立的填空间
b. 内核模块具有更高的执行特权
c. 内核模块不按顺序执行
d. 内核模块可以被中断
e. 内核模块必须是可抢占的???
f. 内核模块能够共享数据
g. 错误处理
应用程序会导致segment fault。内核模块故障可能导致内核崩溃
5. 内核符号表
a. 加载模块时
insmod使用公共内核符号表解析模块中未定义的符号。
b. 模块加载后
模块导出的任何符号都会变成内核符号表的一部分。
c. linux内核提供接口管理符号对外部的可见性。并适当隐藏信息。
6. 应用程序与内核交互
阅读(600) | 评论(0) | 转发(0) |