当前位置: 首页 > news >正文

【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. 进程管理:内核负责进程的创建、调度、终止等工作。
  2. 内存管理:内核负责物理内存和虚拟内存的管理。
  3. 文件系统:负责文件的读写和管理,内核提供了对磁盘的操作接口。
  4. 网络管理:管理网络接口,处理网络数据。
  5. 设备管理:控制硬件设备,驱动程序与硬件设备交互。

(1)进程管理

进程管理是内核的一个重要组成部分,它确保操作系统能够有效地分配 CPU 时间来运行各个进程。

  • 进程调度

    • Linux 使用 时间片轮转算法,每个进程按顺序分配一定时间来运行。
    • 进程调度类:在 Linux 内核中,进程调度的核心是调度类(如 CFSRT)。
  • 内核调度的常用函数

    • 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. procfssysfs 深入分析

(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 内核架构,包括进程管理、内存管理、文件系统和设备管理。
  • 通过 procfssysfs 获取系统硬件和内核状态。
  • 学习了内核中设备文件的概念和如何使用模块与设备交互。

📌 作业

  1. ps aux 查看当前系统的进程,分析系统中占用 CPU 和内存最多的进程。
  2. top 命令,记录下 CPU 使用率变化,并分析系统负载。
  3. 创建一个小脚本,定时显示 /proc/cpuinfo/proc/meminfo 的内容,并记录到日志文件中。

学习内容,包括了内核架构、进程管理、内存管理、文件系统、设备管理等内容。

相关文章:

  • 生成模型_条件编码器
  • 【BTC】密码学原理
  • FPGA基础 -- Verilog表达式之操作数:常数
  • _mm_aeskeygenassist_si128 硬件指令执行的操作
  • SpringCloud + Zookeeper + Feign整合及Feign原理
  • 43-旋转图像
  • 网络安全之任意文件读取利用
  • nt!CcGetDirtyPages函数分析之Scan to the end of the Bcb list--重要
  • 设计模式笔记_创建型_工厂模式
  • C++ vector(2)
  • 【学习笔记】NLP 基础概念
  • 微软因安全漏洞禁用黑暗环境下的Windows Hello面部识别功能
  • langChain4j-流式输出
  • 前端压缩图片的免费软件
  • C# winform教程(二)----ComboBox
  • Pycharm(二十)神经网络入门
  • 【技术】记一次 Docker 中的 ES 数据迁移,使用 Reindex API
  • 运行ollama V0.9.1 异常 GLIBC_2.27 not found
  • 香橙派3B学习笔记12:C语言操作GPIO_<wiringPi.h>_点灯通用输入输出
  • 数字孪生:为UI前端设计带来前所未有的创新体验
  • 东莞市住房建设局网站/外链生成器
  • 腾讯云服务器安装wordpress/优化设计答案六年级
  • 网站建设访问人群/文章推广平台
  • 用旧电脑做网站/建立网站用什么软件
  • 腾讯云怎样做网站/西地那非片的功效与作用
  • 北京微信网站建设公司/优化网站首页