摘要:
SLAB用来响应较小的内存分配请求,事实上,现在的Linux内核使用的是SLUB——unqueued SLAB分配器。 Linux内核支持三种分配器,分别为SLAB,SLOB,SLUB。x86架构下,默认采用SLUB分配器。 因此,本文解析内核代码时,默认采用SLUB下的代码定义;同时,虽然三种分配 阅读全文
摘要:
本文主要分析Linux内核如何处理grub参数中的console=ttyS0,115200n8部分,中间还会穿插一些 include/linux/init.h 的内容。 grub参数中的console=有多种形式,根据 Documentation/kernel parameters.txt 文件, 阅读全文
摘要:
Intermediate Perl第十一章Building Larger Programs提供了代码复用的方法。 对于频繁使用的函数,可以将其定义放在一个单独的文件( .pm)中,然后在需要调用函数的地方加载: 加载函数现将要加载的代码从pm文件中读入到$more_code中,然后用eval将$mo 阅读全文
摘要:
Linux设备分为三大类:字符设备,块设备,网络接口。 网络接口和挂载的块设备类似,需要注册到内核中,然后和外界进行数据传输。但是也有不同:磁盘设备在/dev目录下有文件项,但是网络接口没有,常规的文件操作如读、写对于网络接口而言没有意义,无法应用Unix的“一切都是文件”。因此,网络接口存在于自己 阅读全文
摘要:
块驱动能够以固定大小的块随机访问设备,例如磁盘。Linux内核将块设备和字符设备视为完全不同的两种设备。 现代操作系统的虚拟内存系统通常会将不需要的设备从内存中换出到次级存储,设备通常是硬盘。从这个角度来讲,块驱动是主存和次级存储之间的通道,可以视为虚拟内存系统的一部分。 块设备的主要设计目标是性能 阅读全文
摘要:
Memory Management in Linux 本章内容可以分为以下三部分: 1. mmap 系统调用的实现, mmap 可以将设备的内存直接映射到用户进程的地址空间内,并不是所有的设备都支持 mmap 系统调用,但是有些情况下映射设备的内存能够带来显著的性能提升 2. 通过 get_user 阅读全文
摘要:
序 公司调试程序可能需要不同版本的Linux系统,最近的测试需要在Ubuntu 14.04和Ubuntu 12.04下测试,目前我只有一块固态硬盘,因此想着在一块硬盘上安装两个Linux发行版。 准备工作 方法参考 "https://www.cnblogs.com/lxmwb/articles/62 阅读全文
摘要:
Linux Device Model是一个复杂的数据结构,将系统中的电源管理、设备、和用户空间的交互联结在一起。 Kobjects, Ksets, and Subsystems struct kobject 是设备模型的基础数据结构,包含以下功能: 1. 对象的引用计数 2. sysfs中的每一个文 阅读全文
摘要:
内核中的数据类型主要是为了增强可移植性。 Standard C Types 从下表可以看到标准C语言各个数据类型在不同的平台上占用的存储空间(以字节计)可能不同: 为此,内核定义了长度和平台无关的数据类型:u8,u16,u32,u64。 Interface-Specific Types 内核中常用的 阅读全文
摘要:
写在前面:中断处理程序和其他代码同时运行,在处理中断时要注意相关数据结构和硬件的并发访问控制。 Installing an Interrupt Handler 中断连接线(interrupt lines)数量有限,是珍贵的资源,驱动程序要在使用之前请求系统分配中断连接线,使用完后还要释放。相关的函数 阅读全文