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>Android HAL Notes
Android HAL
Android Hal 是用来隔离linux内核和Android用户空间的一个中间库,它主要是为了让一些硬件厂商不用根据linux内核的gpl协议放出全部的linux驱动代码。有了hal硬件厂商就可以只在内核驱动中实现基本的操作而把硬件操作的逻辑移到hal层来实现,hal层是apache协议的,所以厂商可以只提供二进制库。
!--?xml>