猴子也能看懂的Linux内核知识图谱:从零开始,全面深入

深入了解Linux内核: 全面指南(学习方法+学习路线) 让程序员更好地理解代码质量的重要性,并掌握代码设计模式和最佳实践,更好地理解系统中的复杂问题,并提出更有效的解决方案。学习内核的目的,可以了解一下操作系统的基本知识和内核的作用。内核是操作系统的核心组件,负责管理计算机的资源,包括处理器、内存、输入输出设备等。学习Linux内核技术可以从事计算机领域多个方向的工作,包括操作系统开发、嵌入式系统、驱动程序、网络协议栈、大数据、安全等多个领域。Linux内核是计算机领域的重要组成部分,对于从事相关工作的人员来说,了解和掌握Linux内核技术是非常有益的。 阅读详情
AI摘要

本教程是Linux内核入门指南,介绍了内核概念、历史、架构。阐述了进程管理、内存管理、文件系统、网络接口、设备驱动程序、系统调用接口等关键组件工作原理,还提及内核调试和性能优化方法,最后给出学习路线建议,助读者掌握内核知识。

引言

欢迎来到超级简单的Linux内核入门教程!我是你的向导——猴子老师。无论你是编程新手还是有经验的开发者,本教程都将帮助你轻松掌握Linux内核的基本概念、架构设计以及关键组件的工作原理。我们将通过生动的例子和图文并茂的方式,一步步带你了解Linux内核的奥秘。准备好了吗?让我们一起开始这段有趣的旅程吧!
在这里插入图片描述

什么是Linux内核?

想象一下,你的电脑是一台复杂的机器,它有许多不同的部件,如CPU、内存、硬盘等。这些硬件设备需要一种方式来协同工作,以执行你想要的任务,比如打开网页浏览器或播放音乐。这就是Linux内核的作用——它是操作系统的核心部分,负责管理和协调所有这些硬件资源,并为应用程序提供一个稳定的运行环境。

  • 内核定义:内核是操作系统中最底层的部分,介于用户程序和硬件之间。它充当两者之间的桥梁,确保每个程序都能安全地访问所需的资源。
  • 开源特性:Linux内核是由全球成千上万的开发者共同维护的一个开源项目,这意味着任何人都可以查看其源代码、提出改进建议甚至贡献自己的代码。
Linux内核的历史

Linux内核的故事始于1991年,当时还是芬兰赫尔辛基大学学生的Linus Torvalds决定创建一个免费的操作系统内核。他的初衷是为了能够在个人电脑上运行类似于Unix的操作系统。随着时间的发展,Linux内核逐渐成长为支持多种平台和设备的强大工具,广泛应用于服务器、嵌入式系统、移动设备等领域。

内核架构概述

Linux内核采用了一种称为“单片内核”(monolithic kernel)的设计模式,这意味着几乎所有重要的功能都集成在内核本身中,而不是作为独立的服务运行。这样的设计使得内核能够更直接地访问硬件资源,提高系统的性能和响应速度。然而,为了保持灵活性,Linux内核也支持动态加载模块(loadable kernel modules, LKMs),允许开发者根据需要添加或移除特定的功能。

内核的主要组成部分
  1. 进程管理:负责创建、销毁进程以及调度CPU时间给各个进程使用。它还处理线程模型、信号机制和进程间通信(IPC)等功能。
  2. 内存管理:包括物理内存分配、虚拟内存管理和交换空间管理等任务。通过页表、页面缓存和交换分区等技术,内核确保了高效且安全的内存使用。
  3. 文件系统接口:提供了对各种文件系统的支持,如ext4、XFS、Btrfs等。VFS(虚拟文件系统层)则为上层应用提供了一个统一的访问接口。
  4. 网络接口:实现了完整的TCP/IP协议栈,支持IPv4和IPv6等多种网络协议。套接字API允许用户程序与内核进行网络通信。
  5. 设备驱动程序:直接与硬件打交道,实现对不同设备的支持,如字符设备、块设备和网络设备等。
  6. 系统调用接口:用户程序通过这个接口请求内核提供的服务,如读写文件、创建新进程等。系统调用对于应用程序来说,就像调用普通函数一样简单。
进程管理
  • 进程概念:在Linux中,每个运行中的程序都称为一个进程。进程不仅仅是代码的执行,还包括了代码运行时所需要的所有资源,如内存地址空间、打开的文件描述符等。
  • 进程状态:
    • 就绪态(Ready):进程已准备好运行,等待CPU时间。
    • 运行态(Running):进程正在CPU上执行。
    • 阻塞态(Blocked):进程因等待某种事件(如I/O操作完成)而暂停执行。
    • 终止态(Terminated):进程已经结束或被杀死。
  • 进程调度:Linux内核使用完全公平调度器(CFS)来决定哪个进程应该获得CPU时间片。CFS基于“所有进程都应该被平等对待”的原则,确保每个进程都能得到合理的CPU时间。
  • 线程模型:线程是进程内的一个执行单元,多个线程共享同一个地址空间和其他资源。这使得多线程程序能够高效地并行执行。线程同步机制如互斥锁(mutex)、条件变量、信号量等用于协调线程之间的访问。
内存管理
  • 虚拟内存:Linux内核实现了虚拟内存机制,允许每个进程拥有自己的虚拟地址空间。这种机制不仅提高了内存使用的灵活性,也增强了系统的安全性。页表用于将虚拟地址映射到物理地址,由硬件MMU(内存管理单元)管理。
  • 页面缓存:内核会将频繁访问的文件数据缓存在内存中,以减少磁盘I/O操作。常用的缓存替换算法有LRU(最近最少使用)和LFU(最不经常使用)等。
  • 交换空间:当物理内存不足时,内核可以将一些不常用的内存页移到硬盘上的交换空间中,从而释放出更多的物理内存供其他进程使用。
文件系统
  • VFS(虚拟文件系统层):VFS提供了统一的文件系统接口,使得上层应用可以透明地访问不同的文件系统。超级块记录了文件系统的元数据信息,而inode则记录了文件的属性和数据块位置。
  • 支持的文件系统:Linux支持多种文件系统,包括ext4、XFS、Btrfs等。每种文件系统都有其特点和适用场景,如ext4适合大文件和大容量存储,具有日志功能;XFS适合大规模存储和高并发访问;Btrfs支持快照、校验和、在线修复等功能。
网络接口
  • 网络协议栈:Linux内核实现了完整的TCP/IP协议栈,包括应用层、传输层、网络层和链路层。常见的应用层协议有HTTP、FTP、SMTP等;传输层协议有TCP、UDP等;网络层协议有IP、ICMP等;链路层协议有以太网、WiFi等。
  • 套接字API:用户程序可以通过套接字API与内核进行网络通信。常见的套接字类型有流套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)。常用函数包括socket()、bind()、listen()、accept()、connect()、send()、recv()和close()等。
设备驱动程序
  • 字符设备:如键盘、鼠标等,通常一次只处理少量的数据。设备节点位于 /dev 目录下,驱动程序实现读写操作。
  • 块设备:如硬盘、SSD等存储设备,通常以固定大小的数据块进行读写操作。设备节点同样位于 /dev 目录下,但使用不同的文件类型表示。
  • 网络设备:用于数据在网络间的传输。设备节点通常没有对应的文件节点,而是通过网络接口名称(如 eth0)来标识。驱动程序实现网络数据包的收发操作。
系统调用接口
  • 系统调用的概念:系统调用是用户空间程序与内核之间进行交互的一种方式。通过系统调用,用户程序可以请求内核执行特定的任务,如读写文件、创建新进程等。每个系统调用都有一个唯一的编号,用于内核识别具体的调用。
  • 常见的系统调用:
    • 文件操作:open()、read()、write()、close()。
    • 进程控制:fork()、exec()、exit()、wait()。
    • 内存管理:mmap()、munmap()、brk()。
    • 信号处理:signal()、kill()。
    • 进程间通信:pipe()、socketpair()。
内核模块
  • 模块概念:内核模块是动态加载到内核中的可执行代码片段,用于扩展内核功能。它们可以在不需要重启系统的情况下被加载或卸载,提供了极大的灵活性。
  • 模块加载:使用 insmod 或 modprobe 命令将模块加载到内核中。
  • 模块卸载:使用 rmmod 命令将模块从内核中卸载。
  • 模块编程:定义 module_init() 函数,在模块加载时执行;定义 module_exit() 函数,在模块卸载时执行;使用 module_param() 宏声明模块参数。
内核调试和性能优化
  • 调试工具:
    • dmesg:查看内核环缓冲区的消息。
    • strace:跟踪系统调用和信号。
    • gdb:GNU调试器,用于调试用户空间和内核空间程序。
    • perf:性能分析工具,用于收集和分析性能数据。
  • 性能优化:
    • 性能监控:使用 top、htop、vmstat 等工具监控系统性能。
    • 内核配置:通过修改内核配置选项(如 .config 文件)来优化内核性能。
    • 编译优化:使用编译器优化选项(如 -O2)来提高内核编译效率。
学习路线建议
  • 预备知识:学习Linux内核之前,建议先掌握C语言、操作系统基础知识、计算机体系结构等相关概念。这些预备知识将帮助你更好地理解内核的工作原理。
  • 阅读经典书籍:《Understanding the Linux Kernel》、《Linux Device Drivers》等书籍是深入了解Linux内核的绝佳资源。通过阅读这些书籍,你可以逐步建立起对内核内部机制的理解。
  • 实践动手:理论学习固然重要,但实际操作更能加深印象。尝试编写简单的内核模块,或者参与开源社区的开发活动,都是非常好的练习方式。
  • 观看视频教程:如果你更喜欢通过视频学习,B站上有许多优秀的Linux内核源码公开课教程,涵盖了从基础到高级的各个方面。跟随视频中的讲解,你可以更加直观地掌握内核的知识点。
结语

Linux内核是一个高度复杂且不断发展的系统。本文详细介绍了内核的基本概念、架构设计以及关键组件的工作原理。希望这些内容能够帮助读者更深入地理解和掌握Linux内核的相关知识。祝你在Linux内核的世界里玩得开心,学有所成! 🐒✨

Linux 内核学习1. 编译并启动一个最小化系统 Linux内核是操作系统的核心组件,负责管理硬件资源、提供系统调用接口以及协调用户空间和硬件之间的交互。内核位于操作系统的最底层,直接与硬件交互,为上层提供服务。Linux内核是开放源代码的,符合 GPL (General Public Licese)开源协议。内核网址:https://kernel.org/截止本文写作时,当前内核主线最新版本是6.8-rc1。 阅读详情

相关推荐

幂律实战手册:识别α指数、避开log-log陷阱、重构系统韧性

幂律分布是一种描述极端事件高频出现的重尾统计规律,其核心特征是尺度不变性与无标度性,导致均值、方差等传统统计量失效。理解α缩放指数的业务含义——它直接决定尾部风险强度与系统不平等程度——是构建鲁棒架构、精准风控和科学建模的前提。在互联网高并发场景中,1%用户的请求可能触发90%的通知负载;在金融领域,α<2意味着方差无穷大,VaR模型必然失真。本文聚焦真实工程落地,详解如何用KS检验科学确定x_min、为何MLE远优于log-log图拟合、以及如何在架构设计、风险定价、临床试验中将幂律从数学概念转化为可执行

cuemes08808的博客 411

Linux内核编程:入门篇

Linux内核一直是学习的难点:将近3000万行代码,5万多个源文件,代码庞大繁杂、代码很难看懂。《Linux内核编程》将突破以往传统的学习方式,采取更有效和科学的学习方法,多角度地对内核进行多层次分析,不局限于形式,不拘泥细节,目的只有一个:更轻松、更高效地去理解内核、学习内核。为了更好地让学员掌握内核编程技能,更好地理解内核,本课程将采用并不局限于以下学习方法进行课程的录制:降维分析,化简为繁,将复杂的系统简单化用软件工程的方法分析内核:软件分层、模块化分解、框架迭代多角度立体分析Linux内核,目的只有一个:更好地理解内核利用Linux内核中的面向对象编程思想去分析复杂的子系统、子系统交互利用多任务编程的思想去分析Linux内核本套课程预计分为20个左右的小模块,每个模块一个专题,每个专题会陆续发布。拟录制的模块包括但不限于:模块机制、内核裁剪与配置、内核编译与启动、系统调用、中断、文件系统、调度、内存管理、内核同步、设备模型、字符驱动、块驱动、定时器、input、platform设备驱动、device tree、proc、sysfs、I/O...  本课程是《Linux内核编程》的入门篇,主要给大家介绍一下Linux内核开发、Linux驱动开发的就业行情、行业生态、需要掌握哪些技能、Linux内核的学习方法、如何搭建Linux内核的学习开发环境。 

Linux_Kernel核心中文手册(内核图解).pdf

Linux_Kernel核心中Linux_Kernel核心中文手册(内核图解).pdf 文手册(内核图解).pdf

《图解Linux内核 基于6.x》学习导读

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 3万+

Linux内核详细图解

图解Linux内核结构,分析内核基本组成,内核图解

linux内核图解.rar.zip

IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。

图解Linux内核(基于6.x):解读Linux内存反向映射之匿名映射

内存映射中,我们经常讨论的是由虚拟内存定位物理内存(也就是folio或者page),实际上在很多场景中(比如内存回收),会涉及反向的操作,也就是反向映射。所谓反向映射,就是给定一个folio(page),将映射它的PTE(页表项)找出来。接下来我们来详细分析一下它的原理吧(本文仅分析匿名映射部分)。全书共五篇,以从易到难的顺序详细剖析了Linux内核开发的核心技术。“知识储备篇”介绍了Linux的数据结构、中断处理、内核同步和时间计算等内容,这些是理解后续章节的前提;

屿小夏.的知识博客 4万+

Jetbrains IDE 配置上Gemini Code 插件,让你的的编程高效起飞~

Gemini Code Assist是 Google 家产品,基座模型为最新的Gemini 2.5 Pro。本篇实践了在 WebStrom 中Gemini Code Assist插件的高效编程。

2301_76993408的博客 4594

Linux内核,应该怎么学!

Linux内核作为现代操作系统的基石之一,不仅复杂庞大,而且包含了丰富的功能模块。对于开发者而言,系统地学习Linux内核知识,掌握其中的各个模块,能为更深层次的开发和系统优化打下坚实的基础。本文将详细介绍Linux内核的主要模块、每个模块的学习难度与重点,并提供系统的学习方案和实践建议,以帮助您在探索Linux内核的道路上少走弯路,更快掌握核心内容。Linux内核主要由以下模块组成,每个模块承担特定的系统任务:进程管理(Process Management) 负责进程的创建、销毁和调度,确保系统中各进程能

Interview_TC的博客 2520

ArcGIS中如何计算多个点到特定线的最短距离

现有一个点图层和一个面图层,怎么来计算这些点到这个面图层,两个面的公共边的最短直线距离呢? 1.首先得将两个图层都转为 投影坐标系 打开工具箱-数据管理工具-要素-面转线 ​ ​ 2.将面图层设为输入要素 注意要将“识别和存储面邻域信息”勾选 ​ 3.面转线成功后 打开线属性表,线图层拥有了 LEFT_FID和RIGHT_FID两个字段 ​ 4.按属性选择,表达式中输入 “LEFT_FID”<>-1 即可选出两个面的公共边 ​再将选...

GIS蒲公英的博客 6715

基于FPGA的IIR数字滤波器设计

一种是在直接法的基础上,采用预见的算法,目的是提高系统的吞吐量(指对于网络、端口设备或者其他的设施,单位时间内成功传输数据的数量,比特、字节和分组是吞吐量常用的单位),带有预见算法编程实现的IIR数字滤波器有更多的优点,例如:数据传送速度快,效率高等等;设计模拟滤波器时,它的电路一般都很复杂,而且分析起来也很麻烦,电路的复杂性就决定了使用的器件必定很多,很复杂,就这一方面看来,数字滤波器的设计要更加简单灵活,并且模拟电路不容易改变系统的参数,它的性能还很容易受到温度环境的影响,使得噪声很大。

毕业设计区博客 2106

linux内核课,Linux内核技术实战课

此命令新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。download:Linux内核技术实战课这里可能新建组:#groupadd group及groupadd adm增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/g...

weixin_35691715的博客 2298

arcgis select by attributes一次选多个_视频:如何基于ArcGIS与GeoDa求莫兰指数和绘制莫兰散点图?...

莫兰指数是全域莫兰指数(Global Moran's I)的简称,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰(Patrick Alfred Pierce Moran),在1950年提出的。详细介绍,如下:莫兰指数取值范围在-1.0至1.0之间。当Moran's I >0时,表示空间正相关性,其值越大,空间相关性越明显;当Moran's I <0时,表示空间负相关性...

weixin_39948247的博客 1759

Linux知识点总结(思维导图,建议收藏)

一、基础篇二、帮助命令三、文件与目录管理(一)四、文件与目录管理(二)五、Vim文本编辑器六、文本与文件查找七、系统管理八、磁盘分区、逻辑卷和启动修复九、Shell篇认识BASH十、Shell篇基础命令十、文本操作篇。

nana1253431195的博客 1501

【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知

Docker的监控,可以使用Docker自带的stats命令来获取当前主机上运行中的容器的资源使用情况。 例如:容器的CPU使用率、内存占用、网络IO以及磁盘IO等指标。

景天科技苑 6万+

AI上推荐 之 逻辑回归模型与GBDT+LR(特征工程模型化的开端)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 8250

Linux 内核编程(二)

话不多说,这里是一些简单的C 代码,实现了遵循 Linux 内核的 LKM 框架:出于可读性和空间限制的原因,这里只显示了源代码的关键部分。要查看完整的源代码,构建并运行它,本书的整个源树都可以在 GitHub 仓库中找到:github.com/PacktPublishing/Linux-Kernel-Programming。return 0;您可以立即尝试这个简单的内核模块!只需像这里显示的那样cd到正确的源目录,并获取我们的辅助lkm[...]如何和为什么。

龙哥盟 1976

Bash Shell 系统巡检脚本

部分安全相关检查需要root权限,建议通过sudo运行完整检查。

老韩的Linux云计算架构师进阶之路 94

linux体系结构与内核结构图解

1.当被问到Linux体系结构(就是Linux系统是怎么构成的)时,我们可以参照下图这么回答:从大的方面讲,Linux体系结构可以分为两块: (1)用户空间:用户空间中又包含了,用户的应用程序,C库 (2)内核空间:内核空间包括,系统调用,内核,以及与平台架构相关的代码  2.Linux体系结构要分成用户空间和内核空间的原因:     1)现代CPU通常都实

zhaoshuzhaoshu的专栏 1276

一文吃透 ABAP CDS SELECT:语法全景、关联与去重、可运行示例与实战心法

摘要: 本文深入解析ABAP中CDS视图的SELECT语法,重点介绍两种等价写法、关联与路径表达式优化、DISTINCT去重逻辑及WHERE/GROUP BY/HAVING/UNION等子句的应用。通过可运行的业务伙伴角色去重、关联路径查询及多角色筛选示例,演示如何将CDS特性转化为项目实践。强调关联复用性优于传统JOIN,并指出DISTINCT的权限边界与误用场景,帮助开发者从行式思维转向图式数据建模。(150字) 关键词: ABAP CDS、SELECT语法、路径表达式、DISTINCT去重、关联复用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux内核入门(一)认识内核

本文主要是从宏观的角度来探讨一下linux内核的组成部分以及一些基础的概念,为进一步学习linux内核打下基础

Mr_Jaychong的博客 2260

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux内核学习(Linux内核整体架构,编译Linux内核源码)

从今天开始我将带大家来学习Linux内核的整体架构,深入学习Linux内核源码,学习Linux内核中的重要模块,学习Linux内核源码对于提高自己的编程水平有非常大的帮助,并且能够深入的去了解Linux源码的内容。宏内核提供了更高的性能,但其复杂性和潜在的不稳定性也是显而易见的。微内核在安全性、稳定性和模块化方面有明显优势,但可能会牺牲一些性能。选择宏内核还是微内核架构,通常取决于应用场景和对系统的具体需求。对于需要高性能和较少上下文切换的应用,宏内核可能是更好的选择。

m0_49476241的博客 2078

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Linux内核学习

1.2代码结构 asm.s(控制中断的处理过程以及恢复过程) trap.c(中断的执行过程) system_call.s(硬件中断处理过程) fork.c signal.c exit.c sys.c(软件中断处理过程)高版本的内核与低版本的内核的区别:内核驱动的管理模式没有巨大的改变,(一段时间3个阶段的跳跃,零散 分层 设备树(为了安卓系统))3.1linux内核的整体模块:进程调度模块、内存管理模块、文件系统模块、进程间通信模块、驱动管理模块。

qq_43422995的博客 678

同事跳槽阿里,临走甩给一份上千页的Linux源码笔记,真香

UNIX操作系统以简单、一致、优雅的设计著称,这种真正非凡的特性使得UNIX系统在超过1/4世纪的时间里影响了整个世界。而且,正是由于Linux的蓬勃发展,发源于UNIX的思想才依然活力依旧,并在可预见的未来其发展势头会一直持续下去。 UNIX和Linux操作系统带有某种强烈的吸引力,前述的两段引文很好地描述了这种吸引力的精神本质。UNIX操作系统诞生于贝尔实验室,Dennis Ritchie是其发明人之一。他在引文中提到,只有天才才能欣赏UNIX操作系统的简单性|这是否是完全正确的呢?显然不是,因为Ri

文章中资料均可获取,有需要请添加yunduoa2019即可 480

看大佬用一篇漫画和linux核心文档带你了解 Linux 内核长啥样

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

2401_84139587的博客 427
上一篇: 全面解析:C语言与C++的互相调用
下一篇: 【代码管理之道】Git基本操作实战
极客代码
博客等级 码龄16年 5万+粉丝 872原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值