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>arm linux 系统调用实现
arm linux 系统调用实现
In this article we will dive into system call interface implementation in arm linux(with gnu eabi).我们将从bionic中的open函数开始追溯arm linux的系统调用实现(使用gnu eabi)。
!--?xml>GCC 帮助系统文档
使用GCC 帮助系统
前面在使用gcc 帮助的时候老是找不到自己想要的信息,而且手册巨长(有超过10^4页)。于是就RTFM找到一些使用gcc 帮助系统找到自己需要信息的方法,其实就是gcc 手册的帮助部分的内容。大家还有什么技巧都来讲讲,交流中学习。
!--?xml>Learn Arm Assembly
notes on arm assembly
学习一种计算机体系结构的最好方法就是学习它的汇编 -- anonymous
!--?xml>Slab Allocator简介
Slab Allocator(对象缓存分配)
!--?xml>Linux Memory Management Notes
Linux 内存基础
地址类型
linux内核中有许多种不同的地址类型
- 用户虚拟地址 用户空间看到的常规地址,通过页表可以将虚拟地址和物理地址映射起来
- 物理地址 用在cpu和内存之间的地址叫做物理地址
- 总线地址 外围总线和内存之间的地址叫做总线地址。通常他们和物理地址相同
- 内核逻辑地址 内核的常规地址空间,必定有对应的物理内存与之映射。kmalloc返回的就是内核逻辑地址
- 内核虚拟地址 内核虚拟地址和内核逻辑地址的相同之处在于,他们都将内核空间的地址映射到物理内存上。但是内核虚拟地址不一定是线性的和一对一的。vmalloc返回的是虚拟地址。
linux内核延时操作
linux内核延时操作
系统为了实现中断的快速处理,将中断处理程序分为处理中断请求的上半部和延时处理逻辑和I/O的下半部(buttom halves)。下半部的主要实现机制有两种:tasklet和workqueue。
!--?xml>linux 设备驱动模型笔记
Linux device driver model
overview
linux 设备模型的目的是为内核构建统一的模型,从而使系统有一般性的描述。
设备模型的几个主要任务:
- 电源管理和系统关机:设备模型使得操作系统能够以正确的顺序遍历关闭系统硬件
- 和用户空间进行通讯:sysfs虚拟文件系统的实现和设备模型密切相关,并向用户空间展现了系统的结构
- 设备模型:维护设备驱动的体系化数据机构
- 对象的生命周期:设备模型的创建需要一系列的机制来处理对象的生命周期、对象之间的关系以及这些对象在用户空间的表示