Linux 核心--15.Linux内核资源

2016-01-29 19:42 3 1 收藏

Linux 核心--15.Linux内核资源,Linux 核心--15.Linux内核资源

【 tulaoshi.com - Linux 】

  第十四章 Linux核心资源

本章主要描叙寻找某个特殊核心函数时用到的Linux核心资源。 

本书并不要求读者具有C编程语言的能力或者拥有Linux核心源代码来理解Linux核心工作原理。但是如果 对核心源代码进行阅读将加深对Linux操作系统的理解。本章提供了一个核心源代码的综述。 


从哪里得到Linux核心源码
所有主要Linux分发版本(如Craftworks,Debian,Slackware,Redhat)都包含了源码在内。通常安装在 你的Linux系统核心就是从这些源码中构造出来的。由于一些显然的因素,这些源码都或多或少有点过期。 你可以在www-appendix一章中的那些WEB站点中得到最新的版本。这些站点包括ftp://ftp.cs.helsinki.fi 以及所有其他镜象站点中。helsinki的这个WEB站点上的Linux源码显然是最新的但是MIT和Sunsite中的也 不会差太远。 
如果你无法访问这些WEB站点,有许多CD ROM厂商以非常合理的价格提供了这些WEB站点的镜象光盘。有些 厂商还提供每季度甚至每个月更新的订购服务。另外你所在的本地Linux用户组也是一个很好的资源。 

Linux核心代码的版本编号很简单。任何偶数编号的核心(如2.0.30)都是稳定的发行版而记数编号的核心 (如2.1.42)都是正在开发的核心。本书基于稳定的2.0.30版本。开发版的核心具有所有最新的特征并支持 最新的设备。尽管它们不是你所希望的那样稳定,但是对于Linux用户团体来说试用新核心是非常重要的。 因为他们将完成这些评测工作。当试用非发行版本核心时备份系统总是有好处的。 

核心的修改以patch文件来分发。而patch实用程序被用来对一些核心源码进行编辑。例如如果现在你已经 有了2.0.39的核心代码但是你想升级到2.0.30,那么你在取得2.0.30补丁文件后可以实用以下命令来修改 现存核心: 


$ cd /usr/src/linux
$ patch -p1 < patch-2.0.30

一个收集核心补丁的站点是http://www.linuxhq.com。 


核心源码的组织
核心源码的顶层是/usr/src/linux目录,在此目录下你可以看到大量子目录: 

arch 
这个子目录包含了所有体系结构相关的核心代码。它还包含每种支持的体系结构的子目录,如i386。 
include 
这个目录包括了用来重构核心的大多数include文件。对于每种支持的体系结构分别有一个子目录。 此目录中的asm子目录中是对应某种处理器的符号连接,如include/asm-i386。要修改处理器结构 则只需编辑核心的makefile并重新运行Linux核心配置程序。 
init 
此目录包含核心启动代码。 
mm 
此目录包含了所有的内存管理代码。与具体体系结构相关的内存管理代码位于arch/*/mm目录下, 如arch/i386/mm/fault.c 。 
drivers 
系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,如block。 
ipc 
此目录包含了核心的进程间通讯代码。 
modules 
此目录仅仅包含已建好的模块。 
fs 
所有的文件系统代码。它也被划分成对应不同文件系统的子目录,如vfat和ext2。 
kernel 
主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。 
net 
核心的网络部分代码。 
lib 
此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下。 
scripts 
此目录包含用于配置核心的脚本文件(如awk和tk脚本)。 

从哪里入手
阅读象Linux核心代码这样的复杂程序令人望而生畏。它象一个越滚越大的雪球。阅读核心某个部分经常要 用到好几个其他的相关文件,不久你将会忘记你原来在干什么。本小节将给出一些提示。 

系统启动与初始化
在基于intel的系统上,Linux可以通过loadlin.exe或者LILO将核心载入内存并将控制传递给它。这部分程序 位于arch/i386/kerneld/head.S。此文件完成一些处理器相关操作并跳转到init/main.c中的main()例程。 

内存管理
这部分代码主要位于mm目录中但其处理器结构相关部分被放在arch/*/mm中。页面出错处理代码位于mm下的 memory.c文件中而内存映射与页面cache代码位于filemap.c中。buffer cache则在mm/buffer.c中实现, swap cache位于mm/swap_state.c和mm/swapfile.c中。 

核心
大多数通用代码位于kernel目录下而处理器相关代码被放在arch/*/kernel中。调度器位于kernel/sched.c 而fork代码位于kernel/fork.c中。底层部分处理代码位于include/linux/interrupt.h中。task_struct的 描叙则在/linux/sched.h中可以找到。 

PCI
PCI伪设备驱动位于drivers/pci/pci.c且其系统通用定义放在include/linux/pci.h中。每个处理器结构 具有特殊的PCI BIOS代码,Alpha AXP的位于arch/alpha/kernel/bios32.c中。 

进程间通讯
所有这些代码都在ipc目录中。系统V IPC对象都包含一个ip

来源:https://www.tulaoshi.com/n/20160129/1509925.html

延伸阅读
    所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行块(文件)。也就是说,它们必须以完整、单独的可执行块的形式在一个单独的地址空间中运行。Unix内核几乎都需要硬件系统提供页机制以管理内存。这种页机制可以加强内存空间的保...
  第十章 网络 网络和Linux是密切相关的。从某种意义来说Linux是一个针对Internet和WWW的产品。它的开发者和用户用Web来交换信息思想、程序代码,而Linux自身常常被用来支持各种组织机构的网络需求。这一章讲的是Linux如何支持如TCP/IP等网络协议的。 TCP/IP协议最初是为支持ARPANET(一个美国政府资助的研究性...
  原著: David A Rusling 翻译: Banyan & fifa -------------------------------------------------------------------------------- 本书是为那些想了解Linux内核工作原理的Linux狂热爱好者而写。 它并非一本内部手册。主要描叙了Linux设计的原理与机制;以及Linux内核怎样工作及其原因。 Linux...
随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要进行改写。为了方便各位Linux爱好者我把自己整理的这分文档share出来。该文当列举了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个函数的用法。 特别声明:该文档中的内容来自http://lwn.net,该网也上也有各个函数的较为详细...
  第三章 存储管理 存储管理子系统时操作系统中最重要的组成部分之一。在早期计算时代,由于人们所需要的内存数目远远大于物理内存,人们设计出了各种各样的策略来解决此问题,其中最成功的是虚拟内存技术。它使得系统中为有限物理内存竞争的进程所需内存空间得到满足。 虚拟内存技术不仅仅可让我们可以使用更多的内存,它还提供了...

经验教程

128

收藏

10
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部