写点什么

Linux 内核源码结构(1)

  • 2020-04-04
  • 本文字数:1085 字

    阅读完需:约 4 分钟

Linux内核源码结构(1)

在上一期中,我们介绍了 Linux 内核发展的历史,也介绍了与其相关的 Unix 和 GNU 的相关知识。从这一期开始,我们将介绍 Linux 内核的源码结构。我们将先根据 Linux 源码的目录结构进行分析,到本文章发布前,Linux 4.19 的最新版本为 Linux 4.19.94,我们将依据 openEuler 开源社区源码并参考 Linux 4.19.94 版内核源码进行分析。

一、Linux 内核源码的目录结构分析

下图列出了截至文章发表前 openEuler 开源社区 kernel 目录下的目录结构[5]:





其中各个文件夹中源代码的功能如下表所示[1] [3]:


目录/文件名源码功能简介
/Documentation说明文档,对每个目录的具体作用进行说明。
/arch不同CPU架构下的核心代码。其中的每一个子目录都代表Linux支持的CPU架构。
/block块设备通用函数。
/certs与证书相关。
/crypto常见的加密算法的C语言实现代码,譬如crc32、md5、sha1等。
/drivers内核中所有设备的驱动程序,其中的每一个子目录对应一种设备驱动。
/include内核编译通用的头文件。
/init内核初始化的核心代码。
/ipc内核中进程间的通信代码。
/kernel内核的核心代码,此目录下实现了大多数Linux系统的内核函数。与处理器架构相关的内核代码在/kernel/$ARCH/kernel。
/lib内核共用的函数库,与处理器架构相关的库在/kernel/$ARCH/lib。
/mm内存管理代码,譬如页式存储管理内存的分配和释放等。与具体处理器架构相关的内存管理代码位于/arch/$ARCH/mm目录下。
/net网络通信相关代码。
/samples示例代码。
/scripts用于内核配置的脚本文件,用于实现内核配置的图形界面。
/security安全性相关的代码。
/sound与音频有关的代码,包括与音频有关的驱动程序[2]。
/toolsLinux中的常用工具。
/usr该目录中的代码为内核尚未完全启动时执行用户空间代码提供了支持。
/virt此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。
COPYING许可和授权信息。
CREDITS贡献者列表。
Kbuild内核设定脚本,可以对内核中的变量进行设定。
Kconfig配置哪些文件编译,那些文件不用编译[4]。
Makefile该文件将编译参数、编译所需的文件和必要的信息传给编译器。

二、结语

本期我们根据 openEuler 的目录参考 Linux 目录结构简要介绍了 openEuler kernel 中各个子目录的功能,下一期我们将结合 Linux 内核的 Kernel Map 介绍 Linux 内核的基本功能和抽象层级 。


参考文献


[1]https://www.cnblogs.com/CaesarTao/p/10600462.html


[2]http://blog.chinaunix.net/uid-30374564-id-5571674.html


[3]https://blog.csdn.net/wangyachao0803/article/details/81380882


[4]https://blog.csdn.net/jianwen_hi/article/details/53398141


[5]https://gitee.com/openeuler/kernel


2020-04-04 16:593145

评论

发布
暂无评论
发现更多内容

【JavaWeb】一文搞懂Response

游坦之

javaWeb Response 11月月更

计算机网络(一):计算机网络概念、功能、组成

游坦之

计算机网络 11月月更

【设计模式】适配器模式:攻敌三分,自留七分,以超兽武装的例子来谈谈适配器模式

游坦之

软件工程 设计模式 11月月更

【Servlet】这一文详细的讲述了Servlet的知识,呕心沥血,终于文成。

游坦之

javaWeb Servlet 11月月更

【JavaWeb】 Mybatis-02-Mybatis的快速入门

游坦之

mybatis javaWeb 11月月更

【SpringBoot】@Enable*注解和@Import

游坦之

spring-boot 11月月更

2022-11-27:超过经理收入的员工。编写一个SQL查询来查找收入比经理高的员工。以下数据的结果输出是Joe,因为Joe是唯一挣得比经理多的雇员。 DROP TABLE IF EXISTS `em

福大大架构师每日一题

MySQL 数据库 福大大

整合Mybatis、Servlet、Mysql、Axios、Filter、Session写一个入门级项目:非常适合初接触JavaWeb的小白白来进阶

游坦之

MySQL mybatis javaWeb Servlet 11月月更

【设计模式】装饰者模式:以造梦西游的例子讲解一下装饰者模式,这也是你的童年吗?

游坦之

软件工程 设计模式 11月月更

【JavaWeb】JSP学习笔记

游坦之

javaWeb jsp 11月月更

实验六 设计模式

游坦之

设计模式 11月月更

Vue复刻华为官网(三)

游坦之

Vue 11月月更

Titus网关中的缓存一致性机制

俞凡

架构 netflix 大厂实践

电商系统微服务拆分设计

π

架构师实战营

模块六作业 - 拆分电商系统为微服务

小虎

架构训练营

一文弄懂Vue与Servlet的交互:让你的大学课设变得容易起来

游坦之

Vue axios 11月月更

【JavaWeb】 Mybatis-01-Mybatis的简介:用对话的方式让你明白为什么要使用Mybatis

游坦之

mybatis javaWeb 11月月更

极客时间运维进阶训练营第五周作业

忙着长大#

极客时间

基于 Pipeline 实现完整的代码部署流水线

忙着长大#

基于一段神奇的CSS渐变制作噪点效果

南城FE

CSS 前端 css特效 渐变

Baklib知识分享|知识管理中常用的5种工具

Baklib

【JavaWeb】过滤器和监听器,就这?

游坦之

javaWeb filter 11月月更

【JavaWeb】 一文搞懂Request

游坦之

javaWeb Request 11月月更

软件设计与体系结构 实验二 经典软件体系结构风格(二)

游坦之

设计模式 11月月更

ELK 各组件功能及Elasticsearch 的节点角色类型介绍

忙着长大#

ELK

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了

游坦之

javaWeb session 11月月更

【Tomcat】贰-Tomcat集成到Idea:解放双手,让Tomcat的操作没有那么难用

游坦之

tomcat javaWeb 11月月更

【JavaWeb】 Mybatis-03-Mybatis代理开发

游坦之

mybatis javaWeb 11月月更

【SpringBoot】引入mybatis及连接Mysql数据库

游坦之

spring-boot 11月月更

软件设计体系 实验一 经典软件体系结构风格

游坦之

设计模式 11月月更

模块六-拆分电商系统为微服务

Geek_b35d92

微服务 拆分

Linux内核源码结构(1)_软件工程_华为云开发者联盟_InfoQ精选文章