您所在位置: 网站首页 / linux内核解读入门1.doc / 文档详情
linux内核解读入门1.doc 立即下载
2024-07-05
约5.6千字
约4页
0
19KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

linux内核解读入门1.doc

linux内核解读入门1.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

很多Linux爱好者对内核很感兴趣却无从下手,本文旨在介绍一种解读Linux内核源码的入门方法,而不是讲解Linux复杂的内核机制。1.核心源程序的文件组织(1)Linux核心源程序通常都安装在/usr/src/Linux下,而且它有一个非常简单的编号约定:任何偶数的核心(中间数字)如:2.0.30都是一个稳定的发行的核心,而任何奇数的核心如:2.1.42都是一个开发中的核心。本文基于稳定的2.2.5源代码,第二部分的实现平台为RedhatLinux6.0。(2)核心源程序的文件按树形结构进行组织,在源程序树的最上层你会看到这样一些目录:arch:arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于IntelCPU及与之相兼容体系结构的子目录。PC机一般都基于此目录;include:include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在include/linux子目录下,与IntelCPU相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关SCSI设备的头文件目录;init:这个目录包含核心的初始化代码(注:不是系统的引导代码),包含两个文件main.c和Version.c,这是研究核心如何工作的一个非常好的起点;Mm:这个目录包括所有独立于CPU体系结构的内存管理代码,如页式存储管理内存的分配和释放等,而和体系结构相关的内存管理代码则位于arch/*/mm/,例如arch/i386/mm/Fault.c;Kernel:主要的核心代码,此目录下的文件实现了大多数Linux系统的内核函数,其中最重要的文件当属sched.c,同样,和体系结构相关的代码在arch/*/kernel中;Drivers:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录,如/block下为块设备驱动程序,比如ide(ide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看drivers/block/genhd.c中的device_setup()函数。它不仅初始化硬盘,也初始化网络,因为安装nfs文件系统的时候需要使用网络。其他目录如Lib:放置核心的库代码;Net:核心与网络相关的代码;Ipc:包含核心的进程间通信的代码;Fs:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fat和ext2、Scripts,此目录包含用于配置核心的脚本文件等。一般在每个目录下都有一个.depend文件和一个Makefile文件,这两个文件都是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件之间的联系和依托关系很有帮助,而且在有的目录下还有Readme文件,它是对该目录下的文件的一些说明,同样有利于我们对内核源码的理解。2.解读实战:为你的内核增加一个系统调用虽然Linux的内核源码用树形结构组织得非常合理、科学,把与功能相关联的文件都放在同一个子目录下,这样使得程序更具可读性。然而,Linux的内核源码实在是太大而且非常复杂,即便采用了很合理的文件组织方法,在不同目录下的文件之间还是有很多的关联,分析核心的一部分代码通常要查看其他的几个相关的文件,而且可能这些文件还不在同一个子目录下。下面举一个具体的内核分析实例,希望能通过这个实例,使读者对Linux的内核组织有些具体的认识,读者从中也可以学到一些对内核的分析方法。以下即为分析实例:(1)操作平台硬件:CPUIntelPentiumII;软件:RedhatLinux6.0,内核版本2.2.5(2)相关内核源代码分析①系统的引导和初始化:Linux系统的引导有好几种方式,常见的有Lilo、Loadin引导和Linux的自举引导(bootsect-loader),而后者所对应源程序为arch/i386/boot/bootsect.S,它为实模式的汇编程序,限于篇幅在此不做分析。无论是哪种引导方式,最后都要跳转到arch/i386/Kernel/setup.S。setup.S主要是进行实模式下的初始化,为系统进入保护模式做准备。此后,系统执行arch/i386/kernel/head.S(对经压缩后存放的内核要先执行arch/i386/boot/compressed/head.S);head.S中定义的一段汇编程序setup_idt,它负责建立一张256项的idt表(InterruptDescriptorTable),此表保存着所有自陷和中断的入口地址,其中包括系统调用总控程序system_call的入口地址。当然,除此之外,head.S还要做一些其他的初始化工作。②系统初始化后运行的第一个内核程序asmlinkagevoid__in
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

linux内核解读入门1

文档大小:19KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用