part1.Linux内核源代码的目录概览

来源:互联网 发布:led 知乎 编辑:程序博客网 时间:2024/06/06 22:23

前言

Linux是一种单内核的系统。补充讲解一些微内核与单内核(又称“宏内核”):以下参考博文微内核和单内核

微内核(Microkernel kernel)——在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其他进程(或模块)通讯以完成所需任务。
单内核(Monolithic kernel)――单内核是个很大的进程。他的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,他是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。
所以,内核中所有程序都有很强的联系,调用关系非常密切。因此,在开始阅读源代码之前,让我们首先熟悉一下源代码的目录结构。

目录

//表示不懂为什么csdn上传图片这么慢…截图根本上传不来,遂手动编写一个目录咯(根据《Linux内核完全注释》所编)

linux———————boot                系统引导汇编程序       |————fs                  文件系统       |————include             头文件       |      |——asm            与CPU体系结构相关的部分       |      |——linux linux    内核专用部分       |      |——sys            系统数据结构部分       |————init                内核初始化程序       |————kernel          内核进程调度,信号处理,系统调用等程序       |      |——blk_drv        块设备驱动程序       |      |——chr_drv        字符设备驱动程序       |      |——math           数学协处理器仿真处理程序       |————lib                 内核库函数       |————mm                  内存管理程序       |————tools               生成内核Image文件的工具程序

目录概览
现在,让我们逐个文件夹来看一下,到底包含了哪些文件,又有何种作用。

引导启动程序boot

boot文件夹
这里是内核源代码文件中最先被编译的程序
功能:当计算机加电时引导内核启动,将内核代码加载到内存中,并做一些进入32位运行方式前的系统初始化工作
bootsect.s磁盘引导块程序,编译后驻留在磁盘的第一个扇区中
head.s进行硬件设备的探测设置和内存管理页面的初始设置工作
setup.s读取机器的硬件配置参数

文件系统目录fs

fs
buffer.c用来管理高速缓冲区
其他程序主要用于文件系统管理

头文件主目录include

include
asm
linux
sys
主目录下有13个头文件,asm中有4个头文件,linux下有10个头文件,sys下有5个头文件,合计32个。
主目录下的13个.h供内核与用户程序使用
asm文件夹里的.h主要用于存放与计算机硬件体系结构密切相关的.h
linux文件夹里的.h为Linux内核专用
sys文件夹里的.h是与文件状态,进程,系统数据类型等有关的

内核初始化程序目录init

init
仅包含了main.c,用于执行内核所有的初始化工作,然后移到用户模式创建新进程,然后在控制台设备上运行shell程序

内核程序主目录kernel

kernel
//我意识到一个很严重的问题。。。修改时间是什么鬼。。。这些代码并不是Linus一开始写的那个。。。算了,就这样吧。。。orz
这其中最重要的文件就是sched.c,文件中定义了:
调度程序schedule及相关操作;
等待队列的相关操作;
基准时钟的相关操作;
定时器相关操作任务队列的相关操作;
关于调度策略控制的goodness,nice等;
各种用户标识,组标识的set和get。

关于进程控制的文件也位于此目录下。

kernel/blk_drv 块设备驱动程序子目录

kernel/chr_drv 字符设备驱动程序子目录 实现了对串行端口rs-232,串行终端,键盘和控制台终端设备的驱动

内核库函数目录lib

lib
用于初始化程序init/main.c执行在用户态的进程提供调用支持

内存管理程序目录mm

mm
独立于CPU体系结构特征的内存管理文件几乎都集中在mm目录下,如页式存储管理,内存分配与释放等

编译内核工具程序目录tools

build
将linux下各个目录中被分别编译生成的目标代码连接合并成一个可运行的内核映像文件image

总结

快速建立起了内核程序的框架,大概也对内核有了初步的认识。下一节,就开始解读linux源码了~

0 0
原创粉丝点击