admin 管理员组文章数量: 1184232
2024年4月23日发(作者:matlab等值线图怎么画)
维普资讯
轻松与 L i n u x 内核交流
Linux通过对系统调用的封装,为用户提供了多种内核接口,通过这些接
口,Linux将内核信息输出到用户空间,并可以读取用户空间对内核的配置,
从而方便的进行系统地动态管理。
口Intel开源技术中心张锐
作为使用虚拟内存技术的操作系统, 使得用户不用再去关心文件所属的文件系
象(多为设备)转化为sysfs下的目录,将
Linux的用户应用程序通过系统调用来嵌
统的问题,实现了各个文件系统的良好兼 内核对象的属性转化为文件,从而将内核
入内核,存取内核数据并请求内核服务。
容。当一个最新推出的文件系统普遍被采
对象的拓扑结构转化为一个简单的文件系
系统调用是内核和用户之间数据交换的唯 用时,Linux借助虚拟文件系统的强大功
统直观地展现在用户面前。用户通过操作
一
途径。
能,可以毫不费力的实现新文件系统在本
文件,可以对内核变量进行读操作和有选
然而用户空间应用不一定必须通过直
地的组织运行,同时能不干扰其他已经装
择的写操作。
接调用系统调用的方法来获取内核数据,
配在本地的其他文件系统。 Sysfs的根目录下主要有:block,bus,
因为Linux通过对系统调用的封装,为用
统一的接口使得用户可以使用同样的
class,firmware,module,platform、
户提供了多种内核接口,如基于虚拟文件
方式访问各种不同格式的文件系统,支持 power和devices等。Block目录下为系统
系统的sysfs、procfs、debugfs,以及基
不同的文件系统使得内核编程非常灵活,
中每个注册的块设备建立了一个目录,这
于socket编程的netlink和genetlink等
些目录下又包含了对应于块设备的各个
等。通过这些接口,Linux将内核信息
分区的目录。Bus目录下显示的为系统
输出到用户空间,并可以从用户空间读 中的各种总线类型,每一个总线类型又
取用户对内核的配置,从而方便的实现 包括两个子目录,device和driver,分
内核与用户的数据交换。选择合适的内
别代表该总线类型下存在的设备和与该
核接口可以使用户空间应用的开发工作
总线类型的设备所绑定的驱动。Class
图1 Linux中父子关系的内核对象的描述
事半功倍。本文将对Linux提供的这些
目录显示的是系统中的设备按照功能归
接口机制进行简要的介绍,使读者了解
类后的设备结构图,其中每一类设备都
并可以选择合适的接口来轻松地与Linux
这样的特点促使Linux产生了多种基于虚
有其相同的设备属性和编程接口。Firm-
内核交流。
拟文件系统的内核接口机制,如sYsfs、 ware目录下主要为一些底层子系统(比如
procfs、debugfs等等。
ACPI,EDD,EFI,等等)。Power主要用于
基于虚拟文件系统的内核接口
本章将对这几种基于虚拟文件系统的
能耗管理。Platform下存放的是直接与处
Linux的文件系统实现了一种抽象文
内核接口做详细的介绍。 理器总线相连的平台设备及其驱动的信
件模型——虚拟文件系统(Virtual File
1.sysfs
息。最主要的是Device目录,它反映的是
System)。简单来说,它是一个文件系统 Sysfs是Linux2.6内核的新的特性,
系统真实的设备拓扑结构。device下的文
的软件抽象层,向下支持内核中多个不同 它是一种把内核对象(Kernel Object)、内
件组织结构是内核中的各设备及其层次架
文件系统的同时存在,向上为用户程序提
核对象的属性(Attribute)以及它们之间
构的映射。
供统一接口。
的关系开放给用户的虚拟文件系统。它主 图l列出了Linux对父子关系的内核
虚拟文件系统本身抽象了不同文件系
要应用于系统和设备控制。
对象(设备)拓扑结构的描述。在硬件结
统共同部分,对用户屏蔽了具体的操作,
通过sysfs,Linux将系统中的内核对
构中这种父子关系的设备十分常见,如pci
Software World 2007.6.20圄…
维普资讯
o pen S。urce硼
总线和pci设备,i8042控制器和PS/2鼠标、键 变Linux内核行为。通过修改/proc/sys可以优化
盘等等。驱动模型(driver mode1)通过sysfs虚 系统,但在使用时必须十分小心,错误的操作会导
—source/Documentation/
拟文件系统将设备的拓扑关系完整地展现在用户
致系统崩溃。Kernel
空间。
图2给出了父子关系的
filesystem/procfs.txt详细列出
了procfs接口及其所代表的意义
内核对象(设备)在sysfs中
的文件组织结构。由图2可
和用法,如果想使用这些内核接
口,不妨去读一下源码,以确保
自己能够进行正确操作。
Procfs做为Linux的内核接
口被广泛使用,但需要注意的
是,正是由于procfs中充斥着各
式各样的系统信息,其混乱的结
以看出作为Linux的内核接
口,sysfs虚拟文件系统能够
清晰地将内核对象(Kernel
Object),内核对象的属性
(Attribute)以及它们之间
的关系开放给用户空间,同
I-.state
图2父子关系的内核对象(设备)在sysfs中
构也为人所诟病。现在很多
时它为Linux在用户空间实
现动态的设备管理(udev)
的文件组织结构
提供了良好的基础。
2。procfs
procfs下的系统信息经重新设计
后被逐步移植到Sy Sf S中,而
procfs也将逐渐被sysfs所取代
3.debugfs
procfs虚拟文件系统在开发之初主要用于提 Debugfs是由Greg Kroah-Hartman开发的一
供有关系统中进程的信息,但是由于其方便易
个小型的虚拟文件系统。
用,内核中的其他模块也开始使用它作为对用户
OSD(Operating
System Distributor)
OSD是指操作系统发行商.
例如R Hat SuSE等.这些公司
负责集成.测试.销售Lir ̄x.并
与sysfs和procfs主要用于向用户输出系统信
空间的接口。在sysfs虚拟文件系统出现之前,
procfs已经得到了广泛的应用。
procfs主要用于获取系统信息以及在运行时
息,并在用户空间动态修改内核运行参数的功能不
同。Debugfs目的在于将有用的调试信息输出到用
户空间从而判断系统行为为何出现异常。
改变特定内核参数(sysct1)。系统信息主要包括
两部分:进程相关的信息和内核数据。
该文件系统小且易用,可以在配置内核时选择
是否构建到内核中。在不编译它的情况下,使用它
且提供技术支持来获取利润。当
前的趋势是他们会采用双产品线
的策略:分为”co ̄umer release”
和“Enterprise releaae 。Consumer
Procfs为每一个系统中运行的进程在proc下 的内核部分不需要做任何改动。
创建了一个以进程号命名的子目录。在该目录下 Debugfs的使用非常简单,根据debugfs提供
release蕾遍采用了比较新的技术
和代码.而企业版则采用的是比
的文件输出当前进程的相关信息。例如,当前系
的内核编程接口在debugfs中创建路径和文件,并
统中运行着进程号为l0的进程,读取/proc/10/
选择输出或读入相应格式的调试信息即可,如布尔
status文件即可获得该进程的状态信息。
较保守的策略。这样做的好处是
在新的企业版发布之前.那些新
的代码和技术已经被大量的蕾通
型数据,8位、l6位、32位、64位无符号整数型数
用户测试过了.该出现的问题都
得到了充分曝光.并的到了合理
解决.从而这些新的技术和代码
与进程相关信息类似,/proc根目录下的文
据,或者二进制数据流。
件输出的是内核的运行数据。如“cat/proc/ 相比与我们常用的printk来输出需要的调试信
可以非常顺利地进入对产品质量
要求更高的商业用户市场。因为
企业版的技术支持是收费的.而
且是OSD们主要的收入来源。所
interrupts”输出系统当前的中断号的分配情况
息,debugfs有着以下好处:首先,操作灵活,通常
以及它们各自的响应次数,“cat/proc/cpuinfo”
内核开发人员只在某些特定情形下需要调试信息。
输出详细的处理器硬件信息,“/proc/cmdline” 通过debugfs我们可以在适当的时间去读取,而
则给出了内核命令行参数。 prink只能无条件的持续输出。其次可以在用户空
以OSD会采用这种比较稳妥的策
略来保证企业版的质量.刚匠风
险。由于OSDIT]直接从baseline获
取代码.因此这些OSD被称为是
baseline kernel的downstream。同
与前面这些只读的系统信息文件相比,/
间通过修改一些信息来控制内核行为,这也是
proc/sys不仅可以提供系统信息,它同时允许用 printk无法帮助我们实现的。
户来修改内核的参数。/proc/sys下的文件可以
时O S D会根据自己的需要对
baseline kernel进行改进.而且他
们的修改经常是非常大的。
虽然通过sysfs和procfs也可以达到这样的效
用来监控Linux内核的行为。我们可以通过 果,但综合衡量而言,debugfs无疑是最好的。这是
procfs不需要从新编译内核或重启而在运行时改
因为:一、procfs的混乱的组织结 (v下转55页)
皿软件世界2007.6.20~一,
维普资讯
版权声明:本文标题:内核:开源基石:轻松与Linux内核交流 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713811538a652585.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论