分享
 
 
 

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

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

原著: David A Rusling

翻译: Banyan & fifa

第十四章

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对象都包含一个ipc_perm结构,它在include/linux/ipc.h中描叙。

系统V消息在ipc/msg.c中实现,共享内存在ipc/shm.c而信号灯位于ipc/sem.c中。管道在ipc/pipe.c中实现。

中断处理

核心的中断处理代码总是与微处理器结构相关。Intel系统的中断处理代码位于arch/i386/kernel/irq.c中,

其定义位于include/asm-i386/irq.h中。

设备驱动

Linux核心源码的大多数都是设备驱动。所有Linux的设备驱动源码都放在drivers目录中并分成以下几类:

/block

块设备驱动包括IDE(在ide.c中)驱动。如果你想寻找这些可包含文件系统的设备的初始化过程

则应该在drivers/block/genhd.c中的device_setup()。当安装一个nfs文件系统时不但要初始化

硬盘还需初始化网络。块设备包括IDE与SCSI设备。

/char

此目录包含字符设备的驱动,如ttys,串行口以及鼠标。

/cdrom

包含所有Linux

CDROM代码。在这里可以找到某些特殊的CDROM设备(如Soundblaster

CDROM)。

IDE接口的CD驱动位于drivers/block/ide-cd.c中而SCSI

CD驱动位于drivers/scsi/scsi.c中。

/pci

它包含了PCI伪设备驱动源码。这里可以找到关于PCI子系统映射与初始化的代码。另外位于

arch/alpha/kernel/bios32.c中的Alpha

AXP

PCI补丁代码也值得一读。

/scsi

这里可以找到所有的SCSI代码以及Linux支持的SCSI

设备的设备驱动。

/net

包含网络驱动源码,如tulip.c中的DECChip

21040

PCI以太网驱动。

/sound

所有的声卡驱动源码。

文件系统

EXT2文件系统的源码位于fs/ext2中,其数据结构定义位于include/linux/ext2_fs.h,

ext2_fs_i.h

以及

ext2_fs_sb.h中。虚拟文件系统数据结构在include/linux/fs.h中描叙且其代码在fs/*中。buffer

cache

和update核心后台进程在fs/buffer.c中实现。

网络

网络代码位于net目录而大多数包含文件位于include/net中。BSD套接口代码位于net/socket.c中。IPV4的

INET套接口代码位于net/ipv4/af_inet.c中。通用协议支撑代码(包括sk_buff处理过程)位于net/core中,

同时TCP/IP网络代码位于net/ipv4中。网络设备驱动位于drivers/net中。

模块

核心模块代码部分位于核心中部分位于modules包中。核心代码位于kernel/modules.c且其数据结构与核心

后台进程kerneld消息位于include/linux/module.h和include/linux/kerneld.h目录中。同时必要时需查阅

include/linux/elf.h中的ELF文件格式。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有