【Linux驱动开发 ---- 2.1_深入理解 Linux 内核架构】
Linux驱动开发 ---- 2.1_深入理解 Linux 内核架构
目录
- Linux驱动开发 ---- 2.1_深入理解 Linux 内核架构
- **1. Linux 内核架构概述**
- **(1)进程管理**
- **(2)内存管理**
- **(3)文件系统**
- **2. Linux 内核中的设备管理**
- **(1)设备分类**
- **(2)设备文件**
- **(3)驱动模型与内核模块**
- **3. `procfs` 和 `sysfs` 深入分析**
- **(1)`/proc` 文件系统**
- **(2)`/sys` 文件系统**
- **4. 总结与作业**
目标:掌握 Linux 内核的基本组成,理解内核的工作原理和结构。
重点:
- 进程调度和内存管理。
- 文件系统的基本原理。
- 设备管理。
- 内核模块与驱动程序的协作。
1. Linux 内核架构概述
Linux 内核架构主要包括以下几个核心部分:
- 进程管理:内核负责进程的创建、调度、终止等工作。
- 内存管理:内核负责物理内存和虚拟内存的管理。
- 文件系统:负责文件的读写和管理,内核提供了对磁盘的操作接口。
- 网络管理:管理网络接口,处理网络数据。
- 设备管理:控制硬件设备,驱动程序与硬件设备交互。
(1)进程管理
进程管理是内核的一个重要组成部分,它确保操作系统能够有效地分配 CPU 时间来运行各个进程。
-
进程调度:
- Linux 使用 时间片轮转算法,每个进程按顺序分配一定时间来运行。
- 进程调度类:在 Linux 内核中,进程调度的核心是调度类(如
CFS
、RT
)。
-
内核调度的常用函数:
schedule()
:调度器的核心函数,选择一个进程运行。fork()
:创建新进程。exec()
:执行新程序。
实践任务:
ps aux # 查看所有进程
top # 实时查看进程状态
(2)内存管理
Linux 内核负责管理系统的内存资源,包括 虚拟内存 和 物理内存。
- 虚拟内存:通过分页技术,虚拟内存使得每个进程看起来有一个独立的内存空间。
- 物理内存:实际的 RAM 被分配给进程。
- 内存分配器:
kmalloc()
:内核分配内存。free()
:释放内存。mmap()
:映射文件或设备到内存空间。
案例:使用 free
命令查看系统内存使用情况:
free -h # 查看内存使用情况(单位:GB、MB)
cat /proc/meminfo # 查看内存详细信息
(3)文件系统
文件系统是内核中的一个重要组件,负责管理存储设备上的文件和目录。
- 超级块(Superblock):包含文件系统的元数据。
- 文件描述符:内核使用文件描述符来标识和管理文件。
- 常见文件系统:ext4、Btrfs、F2FS 等。
实践任务:
- 查看文件系统的详细信息:
df -T # 查看挂载文件系统的类型
mount # 查看挂载的文件系统
2. Linux 内核中的设备管理
设备管理是内核的一个核心功能,Linux 内核通过设备驱动来控制硬件设备。
(1)设备分类
- 字符设备:像键盘、鼠标、串口等设备,数据按字符流方式读写。
- 块设备:硬盘、SSD、U 盘等设备,数据按块读写。
- 网络设备:网络接口卡(NIC)等设备,负责数据包的收发。
(2)设备文件
设备文件位于 /dev
目录下,它们是用户空间与内核之间的桥梁,用户通过设备文件与硬件设备交互。
案例:
ls /dev # 查看设备文件
(3)驱动模型与内核模块
Linux 使用 设备驱动模型 来与硬件设备进行交互,常见的有:
- 平台设备:没有总线的设备,如 GPIO、I2C。
- PCI 设备:基于 PCI 总线的设备,如显卡、网卡。
实践任务:
lsmod # 查看已加载的内核模块
insmod my_driver.ko # 加载自定义驱动模块
rmmod my_driver # 卸载驱动模块
3. procfs
和 sysfs
深入分析
(1)/proc
文件系统
/proc
是一个虚拟文件系统,包含了内核和进程的动态信息。/proc/cpuinfo
:查看 CPU 信息。/proc/interrupts
:查看硬件中断信息。/proc/meminfo
:查看内存使用信息。
案例:通过 /proc
获取系统信息:
cat /proc/cpuinfo
cat /proc/interrupts
(2)/sys
文件系统
/sys
是另一个虚拟文件系统,主要用于访问设备信息和控制设备的行为。/sys/class/
:显示设备分类信息。/sys/devices/
:显示设备的物理层次信息。
实践任务:
ls /sys/class
cat /sys/class/net/eth0/address # 查看网络接口的 MAC 地址
4. 总结与作业
✅ 今日学习回顾:
- 深入了解了 Linux 内核架构,包括进程管理、内存管理、文件系统和设备管理。
- 通过
procfs
和sysfs
获取系统硬件和内核状态。 - 学习了内核中设备文件的概念和如何使用模块与设备交互。
📌 作业:
- 用
ps aux
查看当前系统的进程,分析系统中占用 CPU 和内存最多的进程。 - 用
top
命令,记录下 CPU 使用率变化,并分析系统负载。 - 创建一个小脚本,定时显示
/proc/cpuinfo
和/proc/meminfo
的内容,并记录到日志文件中。
学习内容,包括了内核架构、进程管理、内存管理、文件系统、设备管理等内容。