万事开头易,先来了解一下我们心心相印的 Linux 内核

万事开头易,先来了解一下我们心心相印的 Linux 内核

作者简介

微信公众号『嵌入式Linux开发』作者,专注于嵌入式Linux下的内核、驱动和系统软件开发,专注于基础知识和项目实战分享。

Linux内核简介

Linux是一种开源的操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰大学生Linus Torvalds于1991年开发的一款全新的操作系统。那时,作为芬兰赫尔辛基大学的一名学生的linus,正为不能随心所欲使用强大而自由的Unix系统而苦恼。Linus热衷于使用Minix,一种教学用的廉价Unix,但是,他不能轻易修改和发布该系统的源代码,也不能对Minix开发者所作的设计进行修改,基于此linus开始了开发自己的操作系统,并于1991年年底在internet上发布了早期版本,由此Linux内核诞生。Linux内核的主要功能有以下几个方面:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化、系统调用等。

获取Linux内核源码

通过Linux内核官网www.kernel.org下载自己需要的Linux内核源码,笔者下载的是4.14版本的源码。

Linux内核源码树展示

Linux内核源码目录和文件介绍

了解Linux内核源码各个目录和文件的作用,对于我们以后进行Linux内核源码阅读和Linux内核编程大有益处。

arch目录

arch是architecture的缩写,所有与体系结构相关的代码都在这个目录,Linux支持的每种体系结构在arch目录下都有对应的子目录,例如arm子目录是arm32位体系相关代码,arm64子目录是arm64位体系相关代码,x86子目录是intel x86体系相关代码。每个体系结构子目录下又包含和启动相关的代码目录boot,和内核配置相关的代码目录configs,和体系结构相关的头文件目录include,和具体体系结构相关的内存管理代码目录mm等。

block目录

块设备驱动所在目录。块设备是以数据块方式发送和接收数据的设备。

certs目录

认证相关的一些代码实现。

crypto目录

内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。例如SHA1加密算法的代码。

Documentation目录

内核帮助文档目录,是学习内核了解内核实现机制的重要途径,关于内核的一些说明信息,在这个目录下会有帮助手册。

drivers目录

各种设备驱动代码、驱动架构代码所在目录,这个目录是内核中最庞大的一个目录,内核源码数量的一半以上都是这个目录贡献的。显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序都可以在这儿找到。

firmware目录

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

fs目录

虚拟文件系统(VFS)的代码和各种不同类型的文件系统的代码都在这个目录中。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。比如ext4文件系统对应的是fs/ext4目录,fat文件系统对应的是fs/fat目录。一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。存储设备可能是本地的物理上可以访问的设备,比如硬盘、U盘、Flash,他们分别使用系统ext4/UBIFS文件系统。还有一些虚拟文件系统,比如proc、sysfs等,他们以一个标准文件系统出现。然而,他们的文件只存在于内存中,并不占磁盘空间。

include目录

这个目录包含了内核中大部分的头文件,按照不同的功能分散在不同的子目录下。例如与平台相关的头文件在/include/linux子目录下。

init目录

内核的初始化代码。包括main.c、创建早期用户空间的代码及其他初始化代码。do_mounts.c内核启动后挂载根文件系统。

ipc目录

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

kernel目录

内核中核心的部分,包括进程的调度(sched.c),以及进程的创建和撤销(fork.c和exit.c)等。

lib目录

此目录包含了核心的库代码。实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy)以及有关sprintf和atoi系列函数。

mm目录

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

net目录

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

samples目录

一些内核编程的范例。

scripts目录

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

security目录

这个目录下包含了不同的Linux安全模型的代码。它对计算机免于受到病毒和黑客的侵害很重要。包括SELinux安全模块。

sound目录

ALSA,OSS音频设备的驱动核心代码和常用设备驱动。

tools目录

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

usr目录

实现了用于打包和压缩的cpio等。

virt目录

内核虚拟化相关的代码。包括kvm等。

COPYING文件

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

CREDITS文件

贡献者列表

Kbuild文件

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

Kconfig文件

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

MAINTAINERS文件

这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。这是内核问题反馈的途径。

Makefile文件

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

README文件

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

总结

本文简要介绍了Linux内核源码树下各个目录的作用,以及它们主要实现了哪些功能,是我们以后进行Linux内核开发的基础。关注“嵌入式Linux开发”,持续更新更多嵌入式Linux开发方面的知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

→嵌入式Linux开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值