第2页
-
Linux驱动模型(四)-核心对象之演绎
话说kboject是驱动模型的核心对象,但在sysfs文件系统中似乎并没有对应的项,而这种看似“无”,实际上蕴藏着“有”。 这“有”从何说起。回想文件系统中的核心对象“索引节点(indoe)”和目录项“dentry”: Inode—与文件系统中的一个文件相对应(而实际上,只有文件被访问时,才在内存创建索引节点)。 Dentry-每个路径中的一个分量,例如路径/bin/ls,其中/、 bin 和ls三个都是目录项,只是前两个是目录,而最后一个是普通文件。也就是说,目录项目录项或者是一子目录,或者是一个文件。...
-
Linux设备驱动模型(三)—追根之溯源
软件设计的根本是把现实世界的事物用计算机世界的模型表示出来,Linux设备模型的设计采用了面向对象的思想。 在前一讲中,提到sysfs文件系统,Sysfs文件系统的目标就是要展现设备驱动模型组件之间的层次关系。在Linux中,sysfs文件系统被安装于/sys目录下: mount -t sysfs sysfs /sys /sys |---block/ | |--fd0 | |--hda | |--dev | |--devi...
-
Linux设备驱动模型(二)-文件系统之视图
虽然设备模型的初衷是为了方便电源管理而提供出的一种设备拓扑结构,但是,为了方便调试,设备模型的开发者决定将设备结构树导出为一个文件系统,这就是sysfs文件系统,它可以帮助用户能以一个简单文件系统的方式来观察系统中各种设备的拓扑结构。这个举措很快被证明是非常明智的,首先sysfs代替了先前处于/proc下的设备相关文件;另外它为系统对象提供了一个很有效的视图。实际上,sysfs起初被称为driverfs。最终sysfs使得我们认识到一个全新的对象模型非常有利于系统。今天所有2.6内核的系统都拥有sysfs文件系统,...
-
Linux设备驱动模型(一)-节能之初衷
2.6内核增加了一个引人注目的新特性——统一设备模型(device model)。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构,从而使得系统具有以下优点: l 代码重复最小化。 l 提供诸如引用计数这样的统一机制。 l 可以列举系统中所有的设备,观察它们的状态,并且查看它们连接的总线。 l 可以将系统中的全部设备结构以树的形式完整、有效的展 现出来——包括所有的总线和内部连接。 l 可以将设备和其对应的驱动联系...
-
OS课程与Linux内核相结合之同步实例(一)
学生们最近在学进程的同步,去他们的博客看了看,欣喜!他们把OS的原理与Linux内核相结合,写出了具体的实例: niutao写的信号量使用的实例: #include #include #include #include MODULE_LICENSE("GPL"); int num[2][5]={ {0,2,4,6,8}, {1,3,5,7,9} }; struct semaphore sem_first; struct semaphore sem_second; int th...
-
Linux 内核代码赏析与应用(三)-链表API之应用
如前文所述,Linux内核中的代码,经过稍加改造后,可以在用户态下使用。 linclude/linux/list.h 中的函数和宏,是一组精心设计的API,有比较完整的注释和清晰的思路。在用户态下使用list.h,查看改造后的list.h 1. 举例 下面是用户态下的例子,用以创建、增加、删除和遍历一个双向链表。 #include <stdio.h> #include <stdlib.h> #include "list.h" struct kool_list{ in...
-
Linux内核代码赏析与应用(一)-链表之衍生
在Linux内核代码中,常常会看到一些经典的实现机制和策略,犹如在万花丛中看到一枝枝特立的花红,惊艳而又令人玩味。 作为实现Linux内核代码的主体语言C,它是朴素的、直接的,直接到你可以对硬件寄存器的某一位进行操作,C语言又是原始的,基本的,基本的就像构建大厦的一块块砖,运用它,你可以随意地建造自己梦想中的大厦。 但是,与其他语言不同,C语言标准库中并没有对数据结构的支持函数,比如,没有对链表、队、栈、树等数据结构操作的函数集合,但在Linux内核代码中,随处都可以觅见这些数据结构的踪影。 现实世界中数据的...
-
Linux内核代码赏析与应用(二)-链表之实现
抽象是软件设计中一项基本技术,如上所述,在众多数据结构中,选取双向链表作为基本数据结构,这就是一种提取和抽象。 1. 简约而又不简单的链表定义 于双向链表而言,内核中定义了如下简单结构: struct list_head { struct list_head *next, *prev; }; 这个不含任何数据项的结构,注定了它的通用性和未来使用的灵活性,例如前面的例子就可以按如下方式定义: struct my_list{ void *mydata; struct list_head...
-
虚地址转换为物理地址
一、 与页相关的数据结构及宏的定义 分页机制是硬件对分页的支持,这是虚拟内存管理的硬件基础。要想使这种硬件机制充分发挥其功能,必须有相应软件的支持,我们来看一下Linux所定义的一些主要数据结构,其分布在include/asm-i386/目录下的page.h,pgtable.h及pgtable-2level.h三个文件中。 1. 表项的定义 如上所述,PGD、PMD及PT表的表项都占4个字节,因此,把它们定义为无符号长整数,分别叫做pgd_t、pmd_t及pte_t(pte 即Page tab...
最新留言