写点什么

Linux 内核这么复杂,我该如何学习?

发布于: 1 小时前

1、首先我们要明白 Linux 重要性

其实大家每时每刻都在使用着 Linux 系统,不过,你们对此并不知情而已。可以说 Linux 已经成为了我们生活中的一个基础,比如飞机的控制系统、银行的系统、手机的系统等等,你可以想象下没有以上的东西我们的生活将会怎么样,我们的生活、资金和生命都掌握在 linux 手中,它能够让我们生存,同样,它也可以让我们灭亡,所以 Linux 的重要性几乎令人难是置信,没有 Linux 的世界可能将会截然不同,或许,这样的世界会暗然失色,一片漆黑,而 Linux 将是那种世界不会继续存在的理由。

2、我们如何学习呢?

2.1 环境(准备工作)

  • 一开始很多人问用什么 linux 发行版好呢?其实都差不多,知识点大部分都是一样,我一开始用的是 redhat 感觉很好的,当然也可以用 Ubuntu 或者其他的发行版都是可以的。

  • 需要掌握 Linux 基础知识。例如,Linux 命令、磁盘管理、用户管理、文件权限等,强烈推荐大家阅读网友总结的《Linux 入门学习笔记》,下载地址:

Linux 入门学习笔记(Linux 学习界的盗墓笔记)​github.com

2.2 Linux 内核组成以及源码组织结构

Linux 内核主要由进程管理内存管理设备驱动文件系统网络协议栈外加一个系统调用

源码组织结构

2.3 清楚 Linux 内核每个模块里包含了哪些

内存管理

  • 内存原理

  • SMP/NUMA 模型组织

  • 页表/页表缓存

  • CPU 缓存

  • 内存映射

  • 虚拟内存

  • 伙伴分配器

  • 块分配器

  • 巨型页

  • 页回收

  • 页错误异常处理与反碎片技术

  • 连续内存分配器技术原理

  • 不连续页分配器原理与实现

  • 内存系统调用

  • kmalloc/vmalloc

  • 内存池原理与实现

  • 内存优化与实现

文件系统

  • 虚拟文件系统 VFS

  • 通用文件模型

  • 数据结构

  • 文件系统调用

  • 挂载文件系统

  • 无存储文件系统

  • 磁盘文件系统

  • Ext2/Ext3/Ext4 文件系统

  • 日志 JBD2

  • 用户空间系统

  • FUSE 原理机制/接口与实现

进程管理

  • 进程基础

  • 进程原理及状态

  • 生命周期及系统调用

  • task_struct 数据结构

  • 进程调度

  • 调度策略

  • 进程优先级

  • 调度类分析

  • SMP 调度

网络协议栈

网络基础架构

  • SKB/net_device

  • 网络层分析

  • Linux 邻近子系统

  • netlink 套接字

  • iptables 套接字

  • netfilter 框架

  • 内核 NIC 接口分析

  • mac80211 无线子系统

  • 网络协议栈

  • internet 控制消息协议(ICMP)

  • 用户数据报协议(UDP)

  • 传输控制协议(TCP)

  • 流控制传输协议(SCTP)

  • 数据报拥塞控制协议(DCCP)

  • IPv4 路由选择子系统*

  • 组播/策略/多路径路由选择

  • 接收/发送(IPv4/IPv6)数据报

  • infiniBand 栈的架构

  • 系统 API 调用

  • POSIX 网络 API 调用

  • epoll 内核原理与实现

  • 网络系统参数配置

设备驱动

  • 设备子系统

  • I/O 机制原理

  • 设备模型

  • 字符设备子系统

  • 网络接口卡驱动

  • Linux 设备模型

  • LDM

  • 设备模型和 sysfs

  • 字符设备驱动

  • 主设备与次设备

  • 设备文件操作

  • 分配与注册字符设备

  • 写文件操作实现

  • 网卡设备驱动

  • 数据结构

  • 设备方法

  • 驱动程序

  • 块设备驱动

  • 资源管理

  • I/O 调度

  • BIO 结构原理

  • PCI 总线原理

  • 蓝牙子系统

  • HCI 层/连接

  • L2CAP

  • BNEP

  • 蓝牙数据包接收架构

2.4 清楚哪些内容后,开始针对每个模块的知识点,系统的学习。

书籍推荐


《Linux内核完全注释V3.0书签版》

《Linux命令行大全 - 绍茨 (william E.shotts)》

《Linux命令速查手册》

《Linux就该这么学》

《Linux性能优化大师》

《Linux环境编程:从应用到内核》

《Linux集群和自动化运维 余洪春》

《Linux驱动程序开发实例(第2版)》

《Linux高级程序设计(第3版)》

《构建高可用Linux服务器(第4版)》

《深入了解Linux内核》


我要根据自己的实际情况,挑选合适的书籍。例如自己是运维方面的,可以阅读《Linux集群和自动化运维 余洪春》、或者自己是想往Linux C/C++服务器开发的可以阅读《深入了解Linux内核》等等。


阅读文章

在学习的时候肯定会遇到一些书本内容难以理解等,这个时候我们需要借鉴一些大神的优秀文章,来帮助自己的掌握知识。

视频学习

在学习的时候,视频往往比文字资料来得更有效果。

1、Linux Kernel Network Drivers - Classification(Linux 内核网络驱动程序)百度网盘:qdt5

2、Linux Kernel Development(Linux 内核开发)百度网盘:vg1u

3、The mind behind Linux(Linux 背后的思想)百度网盘:zgnu

4、Linux Systems Performance(Linux 系统性能)百度网盘:9qom

5、Network Driver Interfaces(网络驱动程序接口)百度网盘:xpke

6、Selective module compilation in mainline kernel(在主线内核中编译可选模块):百度网盘:l56j

7、Linux System Programming 6 Hours Course(Linux 系统编程 6 小时课程)百度网盘:hc2d

8、Threads and Thread Handing(线程和线程处理)百度网盘:erxm

9、Learning the Linux Kernel with tracing(通过跟踪学习 Linux 内核)百度网盘:066g

10、How to Apply a Patch to the Linux Kernel Stable Tree(如何将补丁应用到 Linux 内核稳定树)百度网盘:955e

11、Linux Kernel Programming(Linux 内核编程- atomic_t 数据类型-原子变量和 api)百度网盘:njt0

12、Kernel Recipes 2017 - 性能优化大牛 Brendan Gregg 百度网盘:lrex

内核项目

这些工具,也许能更好帮助我们学习、生产。

大佬论文

只要时间充足,英文不错,可以拜读下,大佬们的学术论文。


2.5 熟读面试题

面试题往往能体现出这个体系里的重点知识,所以我们有必要阅读下面试题。如果自己正想找 Linux 相关你面试岗位,更加应该看看。

总结

无论我们学习哪个知识,我们应该有章法、有计划、更加应该要有方法,这样的才能学好, 学透。当然,还要勤奋,我们做程序员的,本来就应该多敲代码,多思考。

文章资源来源于 Github 项目,感兴趣的小伙伴可以去 star、fork 一下:

Linux内核学习资料

用户头像

直奔腾讯去,一起学习:Q群654378476 2021.05.20 加入

我要学完第十代《Linux C/C++服务架构开发》知识体系里的内容,直奔腾讯去,一起学习:Q群654378476 系统学习免费课程:https://ke.qq.com/course/417774?flowToken=1033508

评论

发布
暂无评论
Linux内核这么复杂,我该如何学习?