精华内容
下载资源
问答
  • 2021-05-10 06:54:19

    前面总结了关于Linux内核结构的学习,接下来我们一起学习Linux内核源代码。

    第一:多版本的内核源代码

    对不同的内核版本,系统调用一般是相同的。新版本也许可以增加一个新的系统调用,但旧的系统调用将依然不变,这对于保持向后兼容是非常必要的—一个新的内核版本不能打破常规的过程。在大多数情况下,设备文件将仍然相同,而另一方面,版本之间的内部接口有所变化。

    Linux内核源代码有一个简单的数字系统,任何偶数内核(如2.0.30)是一个稳定的版本,而奇数内核(如2.1.42)是正在发展中的内核。这本书是基于稳定的2.4.16

    源代码树。发展中的内核总是有最新的特点,支持最新的设备,尽管它们还不稳定,也不是你所想要的,但它们是发展最新而又稳定的内核的基础。

    目前,较新而又稳定的内核版本是2.2.x和2.4.x,因为版本之间稍有差别,因此,如果你想让一个新驱动程序模块既支持2.2.x,也支持2.4.x,就需要根据内核版本对模块进行条件编译。

    对内核源代码的修改是以补丁文件的形式发布的。patch实用程序用来对内核源文件进行一系列的修订,例如,如果你有2.4.9内核源代码,而你想移到2.4.16,你可以获得2.4.16的补丁文件,应用patch来修订2.4.9源文件。例如:

    $ cd /usr/src/linux

    $ patch -p1 < patch-2.4.16

    第二:Linux内核源代码的结构

    Linux内核源代码位于/usr/src/linux目录下,其结构分布如图1.3所示,每一个目录或子目录可以看作一个模块,其目录之间的连线表示“子目录或子模块”的关系。下面是对每一个目录的简单描述。

    include/子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其它模块重建内核。

    init/ 子目录包含了内核的初始化代码,这是内核开始工作的起点。

    arch/子目录包含了所有硬件结构特定的内核代码,如图1.3,arch/ 子目录下有i386和alpha模块等等。

    drivers/ 目录包含了内核中所有的设备驱动程序,如块设备,scsi 设备驱动程序等等。

    fs/ 目录包含了所有文件系统的代码,如:ext2, vfat模块的代码等等。

    net/ 目录包含了内核的连网代码。

    mm/ 目录包含了所有的内存管理代码。

    ipc/ 目录包含了进程间通信的代码。

    kernel/

    目录包含了主内核代码

    图1.3 显示了八个目录,即 init, kernel, mm, ipc,

    drivers, fs, arch 及 net 的包含文件都在"include/" 目录下。在Linux内核中包含了  drivers, fs, arch及 net 模块,这就使得Linux内核既不是一个层次式结构,也不是一个微内核结构,而是一个“整体式”结构。因为系统调用可以直接调用内核层,因此,该结构使得整个系统具有较高的性能,其缺点是内核修改起来比较困难,除非遵循严格的规则和编码标准。

    在图1.3中所显示的模块结构,代表了一种工作分配单元,利用这种结构,我们期望Linus

    Torvalds能维护和增强内核的核心服务,即,init/, kernel/, mm/及 ipc/,其它的模块drivers, fs, arch及net 也可以作为工作单元,例如,可以分配一组人对块文件系统进行维护和进一步的开发,而另一组人对scsi文件系统进行完善。图1.3类似于Linux的自愿者开发队伍一起工作来增强和扩展整个系统的框架。

    Linux源代码的分布结构

    第三: 从何处开始阅读源代码

    像Linux内核这样庞大而复杂的程序看起来确实让人望而生畏,它象一个很大的球,没有起点和终点。在读源代码的过程中,你会遇到这样的情况,当读到内核的某一部分时又会涉及到其它更多的文件,当返回到原来的地方想继续往下读时,又忘了原来读的内容。在internet上,很多人为此付出了很大的努力,制作出了源代码导航器,这为源代码阅读提供了良好的条件,站点为:,下面给出阅读源代码的一些线索。

    1. 系统的启动和初始化

    在基于Intel的系统上,当 loadlin.exe 或 LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。关于这一部分,看arch/i386/kernel/head.S

    ,head.S进行特定结构的设置,然后跳转到init/main.c的main()例程。

    2. 内存管理

    内存管理的代码主要在/mm,但特定结构的代码在arch/*/mm。缺页中断处理的代码在mm/memory.c

    ,而内存映射和页高速缓存器的代码在mm/filemap.c。缓冲器高速缓存是在mm/buffer.c 中实现,而交换高速缓存是在mm/swap_state.c

    和 mm/swapfile.c中实现。

    3. 内核

    内核中,特定结构的代码在arch/*/kernel,调度程序在kernel/sched.c,fork的代码在kernel/fork.c,task_struct

    数据结构在 include/linux/sched.h中。

    4.

    PCI

    PCI 伪驱动程序在 drivers/pci/pci.c ,其定义在include/linux/pci.h。每一种结构都有一些特定的

    PCI BIOS 代码, Intel的在arch/alpha/kernel/bios32.c。

    5.  进程间通信

    所有System V IPC 对象权限都包含在 ipc_perm 数据结构中,这可以在  include/linux/ipc.h中找到。 System V 消息是在

    ipc/msg.c中实现, 共享内存在 ipc/shm.c中,信号量在

    ipc/sem.c中,管道在 ipc/pipe.c中实现。

    6. 中断处理

    内核的中断处理代码是几乎所有的微处理器所特有的。中断处理代码在  arch/i386/kernel/irq.c中,其定义子在

    include/asm-i386/irq.h中。

    7. 设备驱动程序

    Linux内核源代码的很多行是设备驱动程序。Linux设备驱动程序的所有源代码都保存在/driver,根据类型可进一步划分为:

    /block

    块设备驱动程序如ide(在ide.c)。如果你想看包含文件系统的所有设备是如何被初始化的,你应当看drivers/block/genhd.c中的device_setup(),device_setup()不仅初始化了硬盘,当一个网络安装nfs文件系统时,它也初始化网络。块设备包含了基于IDE和SCSI的设备。

    /char

    这是看字符设备(如tty,串口及鼠标等)驱动程序的地方。

    /cdrom

    Linux的所有CDROM代码都在这儿,如在这儿可以找到Soundblaster

    CDROM的驱动程序。注意ide CD的驱动程序是 ide-cd.c,放在drivers/block,SCSI CD的驱动程序是scsi.c,放在drivers/scsi。

    /pci

    这是PCI伪驱动程序的源代码,在这里可以看到PCI子系统是如何被映射和初始化的。

    /scsi

    在这里可以找到所有的SCSI代码及Linux所支持的scsi设备的所有设备驱动程序。

    /net

    在这里可以找到网络设备驱动程序,如DECChip 21040 PCI 以太网驱动程序在tulip.c中。

    /sound

    这是所有声卡驱动程序的所在地。

    8. 文件系统

    EXT2 文件系统的源代码全部在  fs/ext2/ 目录下,而其数据结构的定义在  include/linux/ext2_fs.h, ext2_fs_i.h 及

    ext2_fs_sb.h中。 虚拟文件系统的数据结构在 include/linux/fs.h中描述,而代码是在fs/*中。 缓冲区高速缓存与更新内核的守护进程的实现是在

    fs/buffer.c中 。

    8. 网络

    网络代码保存在/net中,大部分的include文件在include/net下,BSD套节口代码在net/socket.c中,IP

    第4版本的套节口代码在net/ipv4/af_inet.c。一般的协议支持代码(包括sk_buff 处理例程)在net/core下,TCP/IP联网代码在net/ipv4下,网络设备驱动程序在/drivers/net下。

    9. 模块

    内核模块的代码部分在内核中,部分在模块包中,前者全部在kernel/modules.c中,而数据结构和内核守护进程kerneld的信息分别在include/linux/module.h和include/linux/kerneld.h

    中。如果你想看ELF目标文件的结构,它位于include/linux/elf.h中。

    网,更多精彩阅读:

    更多相关内容
  • linux源码情景分析(高清带标签版),linux源码情景分析(高清带标签版),linux源码情景分析(高清带标签版),重要的事情说三遍!
  • Linux 内核源代码情景分析_全册_带书签 非扫描版 高清 文字版 可选择复制
  • linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码深度解析linux内核源代码...
  • Linux内核源代码情景分析(完整版-带书签目录超清文字版).pdf 这个是带完整目录书签的文字版本,文本内容可以复制的哦
  • Linux内核源代码情景分析(上册高清带书签)pdf
  • Linux内核源代码情景分析(高清版) 让你对linux内核的细节熟悉,让你更快的对linux内核开发得心应手
  • 里面包含了Linux操作系统内核分析以及深入分析linux内核源代码
  • 这里所给出的大多数信息都是取之于 Linux 发行版 1.0 的源代码。虽然如此,有 时也会提供对后期版本的参考。这篇漫游中开头有 图标的任何小节都是强调 1.0 版本 后对内核的新的改动。如果没有这样的小节存在,则表示...
  • 深入分析Linux内核源代码--文字版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
  • 这本书非常适合初学者,从入门到精通,推荐给大家,希望大家喜欢!
  • Linux内核源代码漫游[参照].pdf
  • Linux内核源代码分析

    2014-11-30 15:33:32
    本书写法独特,论述精辟,不回避代码分析中的难点,可以作为操作系统高级课程的教材,也可以作为计算机软件专业和相关专业大学本科高年级学生和研究生深入学习操作系统以至软件核心技术的重要参考书。同时,还可作为...
  • Linux内核源代码情景分析 (上下册 高清非扫描 )

    千次下载 热门讨论 2011-03-27 21:27:03
    丛书名: Linux内核源代码情景分析 出版社:浙江大学出版社 目录 第1章 预备知识 1.1 Linux内核简介. 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux...
  • Linux内核源代码情景分析
  • android_kernel_xiaomi_mt6765:小米Redmi 6(cereus)和6A(cactus)Linux内核源代码
  • linux内核源代码情景分析,kind直接适用版 已经转换过了,所以可以直接用kind打开
  • 随着Linux的逐步普及,现在有不少人对于Linux的安装及设置已经比较熟悉了。与Linux 的蓬勃发展相适应,想深入了解Linux的也越来越多。而要想深入了解Linux,就...本文将为大家介绍Linux内核源代码的阅读及相关工具。
  • 1. Linux内核源代码情景分析 2. Linux内核完全注释 两本电子书均是高清带索引电子书(非扫描版)
  • 关于Linux系统的一部分代码解释,应搭配Linux内核完全注释一起看,有助于了解部分代码目的。同为赵炯译。也可以搭配Linux内核完全剖析-基于0.12内核看
  • Linux内核源代码导读 中国科学技术大学计算机系 陈香兰所著 主要内容: 一些基本概念 操作系统的基本概念 I386系统的基本概念 Linux简介 源码阅读和project环境 Linux 2.6.26 源码简介
  • 《深入分析Linux内核源代码》 第一章 走进Linux 第二章 Linux运行的硬件基础 第三章 中断机制 第四章 进程描述 第五章 进程调度与切换 第六章 Linux 内存管理 第七章 进程间通信 第八章 虚拟文件系统 第九章 Ext2 ...
  • 本书采取类似于英语教学中行之有效的情景会话的教学方法,全面深入地剖析了Linux*版本核心源代码,并对Linux核心的独特优点和需要进一步改进的问题作了精辟的评述。
  • 对于LINUX内核源代码分析
  • Linux内核源代码情景分析(绿色标注版),绿色标注版,很适合初学者学习!!!
  • 深入分析Linux内核源代码
  • Linux内核源代码情景分析 完整版 Linux内核源代码情景分析 完整版
  • 适用于Linux内核源代码的Visual Studio Code项目 确保已构建内核(至少应生成所有*.cmd文件): $ make defconfig $ make 将此存储库克隆为“ .vscode”: $ git clone git@github....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 192,182
精华内容 76,872
关键字:

linux内核源代码

友情链接: RoyChentest.zip