Linux 输入子系统笔记
Linux Input System
内核的输入子系统将内核中各种零散的输入驱动整合起来,并给它们提供统一的用户层接口和驱动接口。输入子系统主要由Input Device Driver 和Input Event Driver 以及Input Core三个部分组成。
Input system summary
- Input Device Driver 负责和具体的输入硬件驱动交互,根据硬件信号生成硬件事件
- Input Event Driver 负责将硬件事件转换为用户空间可以识别的事件信号,和用户空间交互
- Input Core 和其他子系统一样,核心模块负责提供公共算法
Notes on Linux I2C
Linux i2c 笔记
i2c 总线简介
i2c(IIC, 读作/ˈaɪ skwɛərd ˈsiː/或者/ˈaɪ tuː ˈsiː/) 的意思是inter IC,也就是芯片间通信。i2c 总线是由Philips 在80年代早期设计的,用来实现同一个电路板上的各个芯片之间简易通信的总线。
!--?xml>网络设备驱动基础笔记
网络设备驱动基础
网络设备驱动和块设备驱动的功能比较类似,都是发送和接收数据包(数据请求)。当然它们实际是有很多不同的,首先块设备在/dev
目录下有设备节点,而网络设备没有这样的设备入口。read,write等常规的文件接口在网络设备下也没有意义。
最大的区别在于:块设备只响应内核的数据请求;而网络设备驱动要异步地接收来自外部的数据包。简单地说,块设备驱动是被要求传输数据而网络设备是主动请求传输数据。
网络设备驱动还需要支持设置地址,修改传输参数等等这样的操作,所以网络设备驱动的api需要提供这些接口。
!--?xml>Linux Memory Management Notes
Linux 内存基础
地址类型
linux内核中有许多种不同的地址类型
- 用户虚拟地址 用户空间看到的常规地址,通过页表可以将虚拟地址和物理地址映射起来
- 物理地址 用在cpu和内存之间的地址叫做物理地址
- 总线地址 外围总线和内存之间的地址叫做总线地址。通常他们和物理地址相同
- 内核逻辑地址 内核的常规地址空间,必定有对应的物理内存与之映射。kmalloc返回的就是内核逻辑地址
- 内核虚拟地址 内核虚拟地址和内核逻辑地址的相同之处在于,他们都将内核空间的地址映射到物理内存上。但是内核虚拟地址不一定是线性的和一对一的。vmalloc返回的是虚拟地址。
linux 设备驱动模型笔记
Linux device driver model
overview
linux 设备模型的目的是为内核构建统一的模型,从而使系统有一般性的描述。
设备模型的几个主要任务:
- 电源管理和系统关机:设备模型使得操作系统能够以正确的顺序遍历关闭系统硬件
- 和用户空间进行通讯:sysfs虚拟文件系统的实现和设备模型密切相关,并向用户空间展现了系统的结构
- 设备模型:维护设备驱动的体系化数据机构
- 对象的生命周期:设备模型的创建需要一系列的机制来处理对象的生命周期、对象之间的关系以及这些对象在用户空间的表示
块设备驱动要点
块设备驱动
块设备驱动比字符设备驱动要复杂许多,它在I/O操作上表现出极大的不同,缓冲,I/O调度和<
请求队列等是块设备驱动的主要概念。
块设备I/O的主要操作特点:
-
块设备只能以块为单位进行I/O,字符设备则以字节为单位。大多数设备是字符设备,因为它
们不需要缓冲而且不以固定块大小进行操作。 -
块设备对于I/O请求有对应的缓冲,因此它们可以选择以什么顺序进行响应,字符设备无需缓
冲且被直接读写。对于存储设备而言调整读写顺序的作用巨大,因为读写连续的山区比
分离的扇区更快。 -
字符设备只能顺序读写,而块设备可以随机访问。虽然块设备可以随机访问,但是对于磁盘
这类机械设备而言,顺序的组织设备的访问可以提高性能。注意,对SD卡和RAMDISK等块
设备而言,不春在机械上的原因,所以没有必要这样调整。