目录说明
Linux内核源代码坐落/usr/src/linux目录下,其结构分布如图1.3所示,每一个目录或子目录可以看作一个模块,其目录之间的连线表示“子目录或子模块”的关系。下边是对每一个目录的简单描述。
Arch:目录包括了所有和体系结构相关的核心代码。
它下边的每一个子目录都代表一种Linux支持的体系结构,比如X86就是IntelCPU及与之相兼容体系结构的子目录。Arch目录下的子目录包括:/arch/kernel、/arch/mm、/arch/include、/arch/boot、/arch/configs。其中/arch/kernel目录包含了与CPU相关的中断和SMP等信息,/arch/boot包含了系统启动的相关信息和m系统后生成的启动镜像文件bzImage。
Copying:目录下是GPL版权声明。
对具有GPL版权的源代码改动而产生的程序,或使用GPL工具形成的程序,具有使用GPL发表的义务,如公开源代码。
Credits:目录下的是光荣榜。对Linux作出过很大贡献的一些人的信息。
Documentation:目录下是一些文档,linux-3.0.4版本该目录下有217个文件,文件00-INDEX对该目录下的所有文件进行了简略说明,其他文件分别对linux操作系统的各个部份进行了说明。IRQ.txt描述了哪些是中断及中断在系统中的枚举定义和头文件的位置;Changes描述了当前版本的系统对各个软件版本的需求,linux3.0.4要求make的版本为3.8.0,grub的版本为0.93。
Drivers:目录中是系统中所有的设备驱动程序。
它又进一步界定成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound;block下为块设备驱动程序,例如ide(ide.c)。假如你希望查看所有可能包含文件系统的设备是怎样初始化的,你可以看drivers/block/genhd.c中的device_setup()。它除了初始化硬碟linux查看内核,也初始化,由于安装nfs文件系统的时侯须要网路其他:如,Lib放置核心的库代码;Net,核心与网路相关的代码;Ipc,这个目录包含核心的进程间通信的代码;Fs,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,比如fat和ext2。
Fs:目录储存Linux支持的文件系统代码和各种类型的文件操作代码。每一个子目录支持一个文件系统,包括我们常用的文件系统类型:Ext2、Ext3、Ext4、Proc、Fat和Nfs。其中Ext3文件系统对应的就是/fs/ext3目录。
Include:目录包括编译核心所须要的大部份头文件linux标准教程,比如与平台无关的头文件在include/linux子目录下,与intelcpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录。
Init:目录包含核心的初始化代码(不是系统的引导代码)红帽linux系统下载,有main.c和Version.c两个文件。这是研究核心怎样工作的好起点。
Ipc:目录包含了核心进程间的通讯代码。
Kernel:内核管理的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同时与处理器结构相关代码都置于arch/*/kernel目录下。
Lib:目录包含了核心的库代码,不过与处理器结构相关的库代码被置于arch/*/lib/目录下。
Maintainers:目录储存了维护人员列表,对当前版本的内核各部份都有谁负责。
Makefile:目录第一个Makefile文件。拿来组织内核的各模块,记录了各模块间的互相之间的联系和依托关系,编译时使用;仔细阅读各子目录下的Makefile文件对弄清各个文件这间的联系和依托关系很有帮助。
Mm:目录包含了所有独立于cpu体系结构的显存管理代码,如页式储存管理显存的分配和释放等。与具体硬件体系结构相关的显存管理代码坐落arch/*/mm目录下,比如arch/i386/mm/Fault.c。
Net:目录里是核心的网路部份代码,其每位子目录对应于网路的一个方面。
ReadMe:文件提供内核的各类编译方式;生成文件的查看方式,如nmvmlinux|sort|less
Reporting-bugs:目录里是有关报告Bug的一些内容
Rules.make:目录里是各类Makefilemake所使用的一些共同规则
Scripts:目录包含用于配置核心的脚本文件等。
通常在每位目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。
更多Linux内核视频教程文档资料免费发放后台私信【内核】自行获取。
内核学习网站:
Linux内核源码/显存调优/文件系统/进程管理/设备驱动/网路合同栈-学习视频教程-腾讯课堂
隐藏文件
.Config:Makeoldconfig和makedefconfig会把生成的默认的configuration放在文件.config中。执行Make以后会依照Makefile上下层级依赖关系编译整个系统,.config作为编译各个模块的根据。
下边是linux0.11的内核简单目录结构:
体系结构
1.当被问到Linux体系结构(就是Linux系统是如何构成的)时linux查看内核,我们可以参照右图如此回答:从大的方面讲,Linux体系结构可以分为两块:
2.Linux体系结构要分成用户空间和内核空间的缘由:
1)现代CPU一般都实现了不同的工作模式,以ARM为例:ARM实现了7种工作模式,不同模式下CPU可以执行的指令或则访问的寄存器不同:
(2)X86为例:X86实现了4个不同级别的权限,Ring0—Ring3;Ring0下可以执行特权指令,可以访问IO设备;Ring3则有好多的限制
2)所以,Linux从CPU的角度出发,为了保护内核的安全,把系统分成了2部份;
3.用户空间和内核空间是程序执行的两种不同状态,我们可以通过“系统调用”和“硬件中断“来完成用户空间到内核空间的转移
4.Linux的内核结构(注意分辨LInux体系结构和Linux内核结构)