arch linux 文档下载_linux内核源码目录结构分析详解

0baf0dab0bc618265d2aabb36f437a98.png

Linux内核源码有几千万行,包含源文件和工程文件有48374个

b2270a8485e490add33a788b8089f7a6.png

浩瀚的源码该如何入手?我们学习和研究linux内核必须掌握一定的方法,才能够提高效率,做到事半功倍,首先我们必须先了解linux内核的主要目录。

下面内核目录以linux-3.14内核作为讲解

7bb287bd5c65adf75fe70fc6b1cdaa26.png

1、documentation:

提供文档帮助。关于内核的一些说明信息,在这个目录下会有帮助手册。

比如linux-3.14-fs4412/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt

该文件讲解了关于设备数节点 中断设备interrupts属性的cell的详细说明。

只要根据文件夹名字,便可查找到我们所需的说明文档。

2、arch:

arch是architecture的缩写。所有与体系结构相关的代码都在这个目录以

include/asm-*/目录中。Linux支持的每种体系结构在arch目录下都有对应的目录,又进一

步分解为boot,mm,kernel等子目录:

|--arm arm及与之相兼容体系结构的子目录

|--boot 引导程序,以及在这种硬件平台上启动内核所使用的内存管理程序的实现。

|--compressed 内核解压缩

|--tools 生成压缩内核映像的程序

| --kernel: 存放支持体系结构特有的诸如信号量处理和SMP之类特征的实现。

| --lib: 存放体系结构特有的对诸如strlen和memcpy之类的通用函数的实现。

| --mm: 存放体系结构特有的内存管理程序的实现。

除了这3个子目录以外,大多数体系结构在必要的情况下还有一个boot子目录,包括了在这种硬件平台上启动内核所使用的内存管理程序的实现。

3、drivers:

驱动代码,驱动是一个控制硬件的软件。这个目录是内核中最庞大的一个目录,显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序都可以在这儿找到。

4、fs:

虚拟文件系统(VFS)的代码,和各个不同文件系统的代码都在这个目录中。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。比如ext2文件系统对应的是fs/ext2目录。

一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。存储设备可能是本地的物理上可以访问的,比如硬盘或者CD-ROM驱动器,他们分别使用而系统ext2/ext3和isofs文件系统。

还有一些虚拟文件系统(proc),它是一个标准文件系统出现。然而,他其中的文件只存在于内存中,并不占磁盘空间。

5、include:

这个目录包含了内核中大部分的头文件,它按照下面的子目录进行分组。要修改处理器结构则只需编辑核心的makefile并重新运行Linux核心配置程序。

| include/asm-*/ 每一个对应着一个arch的子目录,比如include/asm-alpha、

Include/asm-arm等。每个子目录中的文件都定义了支持给定体系结构所必要的预处理函数和内联函数,这些内联函数多数都是全部或者部分的汇编语言实现。

| include/linux 与平台无关的头文件都在这个目录下,它通常会被链接到目录

/usr/include/linux(或者它里面的所有文件都会被复制到/usrinclude/linux目录下边)

6、init:

内核的初始化代码。包括main.c、创建早起用户空间的代码及其他初始化代码。

7、ipc:

IPC(进程间通信)。它包含了共享内存、信号量及其他形式的IPC代码。

8、kernel:

内核中最核心的部分,包括进程的调度(sched.c),以及进程的创建和撤销(fork.c和exit.c)和平台相关的另外一部分核心代码在arch/*/kernel目录下。

9、mm

此目录包含了与体系无关的部分内存管理代码。与体系结构相关的内存管理代码位于arch/*/mm下。

10、net

核心的网络部分代码,实现了各种常见的网络协议,入TCP/IP、IPX等。

11、lib

此目录包含了核心的库代码。实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy等)以及有关sprintf和atoi系列函数。与arch/lib下的代码不同,这里的库代码都是C编写的,在内核新的移植版本中可以直接使用。与处理器结构相关库代码被放在arch/mm中。

12、block:

块设备驱动包括IDE(在ide.c中)驱动。块设备是以数据块方式接收和发送的数据的设备。最初block层代码一部分位于drivers目录,一部分位于fs目录。从2.6.15开始,block层的核心代码就被提取出来放在顶层的block目录中。如果你想寻找这些可包含文件系统的设备的初始化过程则应该在drivers/block/genhd.c中的device_setup()。当安装一个nfs文件系统时不但要初始化硬盘还需初始化网络。块设备包括IDE与SCSI设备。

13、firmware

fireware中包含了让计算机读取和理解从设备发来的信号的代码。举例来说,一个摄像头管理它自己的硬件,但计算机必须了解摄像头给计算机发送的信号。Linux系统会使用vicam固件(firmware)来理解摄像头的通讯。否则,没有了固件,Linux系统将不知道如何处理摄像头发来的信息。另外,固件同样有助于将Linux系统发送消息给该设备。这样Linux系统可以告诉摄像头重新调整或关闭摄像头。

13、usr:

实现用于打包和压缩的cpio等。这个文件夹中的代码在内核编译完成后创建这些文件。

14、securtity:

这个目录下包含了不同的Linux安全模型的代码。它对计算机免于受到病毒和黑客的侵害很重要。否则,Linux系统可能会遭到损坏。

15、crypto:

内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。例:“sha1_generic.c”这个文件包含了SHA1加密算法的代码。

16、scripts:

该目录下没有内核代码,只是包含了用来配置内核的脚本文件。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。

17、sound:

声卡驱动以及其他声音相关的源码。

18、samples

一些内核编程的范例

19、virt

此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。通过虚拟化,客户机操作系统就像任何其他运行在Linux主机的应用程序一样运行。

20、tools

这个文件夹中包含了和内核交互的工具。

COPYING:许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人可以出售源代码。

CREDITS : 贡献者列表

Kbuild : 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。

Kconfig: 这个脚本会在开发人员配置内核的时候用到

MAINTAINERS : 这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并希望能够报告给能够处理这个问题的维护者时,这是是很有用的。

Makefile :这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。

README : 这个文档提供给开发者想要知道的如何编译内核的信息。

REPORTING-BUGS : 这个文档提供如何报告问题的信息。

内核的代码是以“.c”或“.h”为扩展名的文件。 “.c”的扩展名表明内核是用众多的编程语言之一的C语言写的, “h”的文件是头文件,而他们也是用C写成。头文件包含了许多“.c”文件需要使用的代码,因为他们可以引入已有的代码而不是重新编写代码,这节省了程序员的时间。否则,一组执行相同的动作的代码,将存在许多或全部都是“c”文件。这也会消耗和浪费硬盘空间。(译注:头文件不仅仅可节省重复编码,而且代码复用也会降低代码错误的几率)

更多精彩,请使用微信扫描下方二维码,免费领取!!!

816553a18880077f547b02db5d7dd176.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值