简单介绍 tty设备的名称是从过去的电传打字机缩写而来,最初是指连接到Unix系统上的物理或虚拟终端 Linux tty驱动程序的核心紧挨在标准字符设备驱动层之下,并提供了一系列的功能,作为接口被终端类型设备使用 有三种类型的tty驱动程序:控制台.串口和pty /proc/tty/drivers 当前注冊并存在于内核的tty设备在/sys/class/tty下都有自己的子文件夹 小型TTY驱动程序 <linux/tty_driver.h> struct tty_driver tiny_tty…
本章主要介绍Linux内核的内存管理. kmalloc函数的内幕 不正确所获取的内存空间清零 分配的区域在物理内存中也是连续的 flags參数 <linux/slab.h> <linux/gfp.h> GFP_KERNEL 在空暇内存较少时把当前进程转入休眠以等待一个页面 分配内存的函数必须是可重入的 GFP_ATOMIC 用于在中断处理例程或其它执行于进程上下文之外的代码中分配内存,不会休眠 GFP_USER 用于为用户空间页分配内存.可能会休眠 GFP_HIGHUSER 类似于…
基本介绍 2.6内核设备模型来提供的抽象叙述性描述的一般系统的结构,为了支持各种不同的任务 电源管理和系统关机 用户空间与通信 热插拔设备 设备类型 kobject.kset和子系统 kobject是组成设备模型的基本结构 对象的引用计数 sysfs表述 数据结构关联 热插拔事件处理 kobject基础知识 <linux/kobject.h> 嵌入的kobject 内核代码非常少去创建一个单独的kobject对象.kobject用于控制对大型域相关对象的訪问 kobject的初始化 首先将ko…
第十八章 调试 调试工作艰难是内核级开发区别于用户级开发的一个显著特点. 18.1 准备开始 我们需要什么? 一个bug 一个藏匿bug的内核版本 思路:假定能够让bug重现 在用户级程序中,bug直截了当.在内核中,bug不是那么清晰. 18.2 内核中的bug 往往要经历一系列的连锁反应才可能触发 需要考虑的问题:定时限制.竞争条件,它们都是运行多个线程在内核中同时运行产生的结果 18.3 通过打印来调试 Printk():内核的格式化打印函数 18.3.1 健壮性 任何时候,任何地方都可以…
第十八章    调试 18.1 准备开始 1.在用户级的程序里,bug表现比较直接:在内核中却不清晰. 2.内核级开发的调试工作远比用户级开发艰难的多. 3.准备工作需要的是: (1)一个bug (2)一个藏匿bug的内核版本 (3)相关内核代码的知识和运气 18.2 内核中的bug 1.内核中的bug多种多样. 2.引用空指针会产生一个oops:垃圾数据会导致系统崩溃. 3.定时限制和竞争条件都允许多个线程在内核中同时运行产生的结果. 18.3 通过打印来调试 一.健壮性 1.健壮性——在任何…
基本介绍 块设备驱动程序通过主传动固定大小数据的随机访问设备 Linux核心Visual块设备作为基本设备和不同的字符设备类型 Linux块设备驱动程序接口,使块设备最大限度地发挥其效用.一个问题 一个数据块指的是固定大小的数据,而大小的值由内核确定 数据块的大小一般是4096个字节.可是能够依据体系结构和所使用的文件系统进行改变 与数据块相应的是扇区,它是由底层硬件决定大小的一个块,内核所处理的设备扇区大小是512字节 假设要使用不同的硬件扇区大小.用户必须对内核的扇区数做相应的改动 注冊 注…
一个简短的引论 它给这一章总线架构的高级概述 集中访问讨论Peripheral Component Interconnect(PCI,外围组件互连)外设内核函数 PCI公交车是最好的支持的内核总线 本章主要介绍PCI驱动程序假设寻找其硬件和获得对它的訪问 本章也会介绍ISA总线 PCI接口 PCI是一组完整的规范,定义了计算机的各个不同部分之间应该怎样交互 PCI规范涵盖了与计算机接口相关的大部分问题 PCI架构被设计为ISA标准的替代品,有三个主要目标 获得在计算机和外设之间数据传输时更好的性…
基本介绍 第三类是标准的网络接口Linux设备,本章介绍的内核,其余的交互网络接口描述 网络接口,必须使用特定的内核数据结构本身注册,与外部分组交换数据线打电话时准备 经常使用的文件上的网络接口操作是没有意义的,因此在它们身上无法体现Unix的"一切都是文件"的思想 网络驱动程序异步自外部世界的数据包 网络设备向内核请求把外部获得的数据包发送给内核 Linux内核中的网络子系统被设计成全然与协议无关 在网络世界中使用术语"octet"指一组8个的数据位.它是能为网络…
简单介绍 很多类型的驱动程序编程都须要了解一些虚拟内存子系统怎样工作的知识 当遇到更为复杂.性能要求更为苛刻的子系统时,本章所讨论的内容迟早都要用到 本章的内容分成三个部分 讲述mmap系统调用的实现过程 讲述怎样跨越边界直接訪问用户空间的内存页 讲述了直接内存訪问(DMA)I/O操作,它使得外设具有直接訪问系统内存的能力 Linux的内存管理 地址类型 Linux是一个虚拟内存系统,这意味着用户程序所使用的地址与硬件使用的物理地址是不等同的 有了虚拟内存,在系统中执行的程序能够分配比物理内存很…
ch03.字符设备驱动程序 编写驱动程序的第一步就是定义驱动程序为用户程序提供的能力(机制).接下来以scull(“Simple Character Utility for Loading Localities”区域装载的简单字符工具,scull是一个操作内存区域的字符设备驱动程序,这片内存区域就相当于一个设备)为例说明. 主设备号和次设备号 对字符设备的访问时通过文件系统内的设备名称进行的.这些名称被称为特殊文件.设备文件或者简单称之为文件系统树的节点.它们通常位于/dev目录,字符设备驱动程…