kernel 目录 解析

摘要:
内核的大多数常见代码位于内核目录中,而处理器相关代码则位于arch/*/kernel中。调度器位于kernel/sched中。c和fork代码位于kernel/ffork中。c、 系统VIPC对象都包含一个ipc_ perm结构在include/linux/ipc中描述。h、 英特尔系统的中断处理代码位于arch/i386/kernel/irq中。c、 其定义位于include/asm-i386/irq中。h、 此外,arch/alpha/kernel/bios32.c中的AlphaAXPPCI补丁代码也值得一读。网络设备驱动程序位于drivers/net中。核心代码位于内核/模块中。c、 其数据结构和内核后台进程消息位于include/linux/module目录中。h和include/linux/kernel。h、 只需介绍如何学习内核。特定代码学习。让我们一起努力!

核心源码的顶层是/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文件格式。

只是介绍如何去学习kernel .具体的代码学习,我们一起共同吧!

免责声明:文章转载自《kernel 目录 解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python实现Windows CMD命令行彩色输出win7中vscode会黑屏或者终端空白,无法输入下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【华为云技术分享】opensuse使用zypper安装软件

安装软件(opensuse) opensuse 通过zypper可以方便的进行软件管理,类似centos的yum 软件。 命令参考 软件包操作 1 搜索软件 2 zypper search package 3 4 安装软件 5 zypper install package 6 7 安装某个版本的软件包 8 zypper install...

Linux下定时任务的查看及取消

  crontab -l 表示列出所有的定时任务 crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除,执行crontab -l后会提示用户:“no crontab for admin”   该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。 每个域之间使用空格或者制表符分...

Linux 常用命令的全拼

pwd: print work directory 打印当前目录 显示出当前工作目录的绝对路径 ps: process status(进程状态,类似于windows的任务管理器) 常用参数:-auxf ps -auxf 显示进程状态 df: disk free 其功能是显示磁盘可用空间数目信息及空间结点信息。换句话说,就是报告在任何安装的设备或目录中...

Linux中的16个Echo命令示例

在Linux中Echo命令是日常操作任务中广泛使用的命令之一。echo命令是一个内置的命令行工具,它可以将文本或字符串打印到标准输出或重定向输出到文件。该命令通常在bash shell或其他shell中使用,用于打印命令的输出。在bash shell脚本中也经常使用Echo命令。echo命令的语法$ echo [option] [string] 在本文中...

linux下如何模拟按键输入和模拟鼠标

http://blog.chinaunix.net/u3/94700/showart_2211516.html 查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键...

Linux 软件安装之apt+dpkg工具

Linux软件安装方式 Linux 上的软件安装主要有四种方式: 在线安装 从磁盘安装 deb 软件包 从二进制软件包安装 从源代码编译安装 apt APT 是 Advance Packaging Tool(高级包装工具)的缩写,是 Debian 及其派生发行版的软件包管理器,APT 可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了 U...