文章目录

  • 一、不同的工作模式
  • 二、linux内核结构图
  • 三、linux内核源码目录结构



Linux 分为用户空间和内核空间


用户空间和内核空间是程序执行的两种不同状态,可以通过“系统调用”和“硬件终端”来完成用户空间到内核空间的转移。

一、不同的工作模式

以 ARM 为例:ARM 实现了 7 种工作模式,不同模式下 CPU 可以执行的指令或者访问的寄存器不同 (1)用户模式 usr (2)系统模式 sys(3)管理模式 svc(4)快速中断 fiq(5)外部中断irq(6)数据访问终止 abt(7)未定义指令异常。

二、linux内核结构图

linux内核架构巨变 linux内核架构图_linux

SCI 层(System Call Interface),这一层是给应用用户空间提供一套标准的系统调用函数来访问 Linux。前面分析 Linux 体系结构的时候,介绍过任何一类现代操作系统都不会允许上层应用直接访问底层,在 Linux 中,内核提供了一套标准接口,上层应用就可以通过这一套标准接口来访问底层。

PM(Procees Management),这一部分包括具体创建创建进程(fork、exec),停止进程(kill、exit),并控制他们之间的通信(signal 等)。还包括进程调度,控制活动进程如何共享 CPU。这一部分是 Linux 已经做好的,在写驱动的时候,只需要调用对应的函数即可实现这些功能,例如创建进程、进程通信等等。

MM(Memory Management),内存管理的主要作用是控制多个进程安全的共享内存区域。

VFS(Virtual File Systems),虚拟文件系统,隐藏各种文件系统的具体细节,为文件操作提供统一的接口。在 Linux 中“一切皆文件”,这些文件就是通过 VFS 来实现的。Linux 提供了一个大的通用模型,使这个模型包含了所有文件系统功能的集合。

Device Drivers 设备驱动,这一部分就是需要学习和掌握的。Linux 内核中有大量的代码在设备驱动程序部分,用于控制特定的硬件设备。

Linux 驱动一般分为网络设备、块设备、字符设备、杂项设备,需要编写的只有字符设备,杂项设备是不容易归类的一种驱动,杂项设备和字符设备有很多重合的地方。

网络协议栈,Linux 内核中提供了丰富的网络协议实现。

三、linux内核源码目录结构

Linux内核源码采用树形结构。功能相关的文件放到不同的子目录下面,使程序更具有可读性。

linux内核架构巨变 linux内核架构图_linux_02

Arch目录
–arch目录是平台目录。内核支持的所有CPU架构,在该目录下都有对应的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等子目录,分别控制系统引导,内存管理,系统调用。还有动态调频,主频率设置部分等。

binary目录 无源码的驱动以二进制放到该文件夹
block目录 部分块设备驱动程序
crypto目录 加密压缩CRC校验
documentation目录 内核的使用说明文档
drivers目录 设备驱动
firmware目录 固件接口
fs目录 存放各种文件系统的实现代码
include目录 通用的头文件在include/linux
init目录 内核初始化代码

ipc目录 进程通信的源码
kenel目录 Linux核心功能源码,程序调度,控制进程,模块化等
lib目录 库文件代码
mm目录 实现内存管理(与平台体系无关的部分)
net目录 网络协议实现代码
virt目录 内核虚拟机

Samples目录 内核编程的范例
Scripts目录 配置裁剪内核的工具脚本
Security目录 包括不同的linux安全模型代码
Sound目录 音频设备的驱动程序
Tools目录 将.c编译成目标文件,连接合并成可运行的内核镜像文件等
usr目录 实现用于打包和压缩的CPUI等。