jjzjj

腾讯前辈熬夜肝了一个月整理的《Linux内核学习笔记》,啃完受益匪浅不走弯路

简说Linux内核 2023-08-25 原文

小编热衷于收集整理资源,记录踩坑到爬坑的过程。希望能把自己所学,实际工作中使用的技术、学习方法、心得及踩过的一些坑,记录下来。也希望想做Linux内核高级工程师的你一样,通过我的分享可以少走一些弯路,可以形成一套自己的方法,并应用到实际中。

一、Linux内核组成成分

1.了解操作系统的基本概念。如果没有,可以学习《操作系统:设计与实现》,Andrew S.Tanenbaum写的那本,以MINIX为例解释操作系统的概念。非常推荐。

2.有了操作系统的基本概念,你就可以理解Linux的机制了。推荐罗伯特·拉芙写的Linux内核设计与实现。这本书从概念上解释了Linux有什么以及它是如何工作的。这本书应该反复仔细阅读。

3.有了Linux内核的知识,我们还需要具体学习Linux内核源代码。经典的是丹尼尔·p·博韦特写的《深入理解Linux内核》。学习这本书的时候,要看看内核代码。这本书学起来挺费劲的,所以有很多代码要研究。但是,如果这本书很好理解,那么恭喜你,你已经对Linux内核很熟悉了。

4.如果你想开发设备驱动,可以向O’Reilly Press学习linux设备驱动。这本书是驾驶入门的好材料。还有一本很好的教材,精通Linux驱动开发,可以参考一下。开车,难免要学习一些硬件协议和资料。如果你研究的是哪一种,可以找相应的硬件文档,了解硬件的工作原理。这些我就不细说了。

5.网络部分,学习一些Linux网络部分学习《深入了解LINUX网络技术内幕》。这本书把Linux的网络部分讲得非常清楚透彻。不过我们一般不做这方面的研究,也不需要做那么多研究。毕竟现在相关岗位很少。

6.现在Linux相关的工作大多集中在一些嵌入式开发领域,如arm、mips等。你要学习以下关于架构的信息,了解CPU的设计和工作模式。看看ARM对应的芯片手册就知道了,很详细的。mips随便看看MIPS运行,有一两个版本。两个版本有些区别,建议全看。

7.补充一点经验。不要以为Linux庞大复杂,就很难学。认真学习,什么都可以学。就看你的毅力和恒心了。另外,不要走弯路,不要看市面上那些讲Linux0.11的书,学你想学的就好。就像学C语言看谭浩强一样,走弯路,费力气,严重影响学习效果。

关于Linux内核学习路线,多说两句关于应用编程的话,有时候经常需要:

1.学习Linux应用编程。建议看unix环境下的高级编程。如果你把里面的例子都做了,你就会对整个Linux编程有一个系统的了解。

2.对于Linux,有一个Linux系统编程。学完上一个,这个一看就明白了。主要是针对Linux了解一些具体的内容,还是比较完整和实用的。

3.Linux网络编程,系统地学习“unix网络编程。第1卷,套接字网络api”。基本上所有和网络应用相关的程序都没问题。

二、如何学习Linux内核?

内核的知识就像下面的绳结,一个一个的打结。要解决它们,首先要找到线头,也就是内核中的函数接口。刚开始阶段一般不会深入研究内核代码,用内核的接口函数就好了。

下面提供了如何学习这些内核函数的方法,就像解绳子一样:

在我们学习Linux内核之前,我们首先需要掌握以下几点:

(1)如何学习内核,先了解Linux内核由哪些组成?

(2)须知Linux内核源码(下载的链接 )组织结构?

(3)重点需要学习地知识点有哪些?

(4)最后依据我为大家提供的的学习资料,开启我们的Linux内核学习之旅。

(5)全网最牛Linux内核Makefile系统文件详解(纯文字代码)

(6)全网最详细的Intel CPU体系结构分析(内核源码)

(7)深入理解Linux Kernel内核整体架构(图文详解)

(8)QEMU调试Linux内核环境搭建

(9)网友说Linux驱动讲不彻底,原来这才是Linux驱动

(10)一文让你深度了解Linux内核架构和工作原理

(11)从Linux内核看socket底层的本质(IO)

(12)Linux用户空间与内核空间通信(Netlink通信机制)

(13)Linux内核内存相关问题,这一篇让你彻底了解

(14)一文看懂CPU的层次结构,这一篇就够了

二,专题模块学习

2.1操作系统原理

【 强烈推荐阅读】一文带你彻底了解,零拷贝Zero-Copy技术(图解)

Linux操作系统学习——启动

Linux操作系统学习——内核运行

Linux操作系统学习——内核初始化

操作系统原理(一):操作系统原理与概述(流程图)

操作系统原理(二):Linux操作系统基础的常用命令

操作系统原理(三):Linux操作系统I/O机制原理(流程图详解)

操作系统原理(四):内存管理RAID磁盘阵列与配置

操作系统原理(五):内存管理之磁盘高速缓存机制原理

操作系统原理(六):存储管理之页式、段式、段页式存储

系统操作原理(七):进程的状态和转换(五态模型)

操作系统原理(八):进程同步的几种方式及基本原理

操作系统原理(九):处理器调度基本准则和实现原理

系统操作原理(十):多进程,多线程,并发执行中的死锁问题

系统操作原理(十一):操作系统原理:进程同步的几种方式及基本原理

系统操作原理(十二):趣谈操作系统原理,存储管理之页式、段式、段页式存储

系统操作原理(十三):操作系统:通过实战理解CPU上下文切换

系统操作原理(十四):操作系统的分段机制——分页实现原理

汇编语言基础(一):汇编语言基础知识(图文代码)

汇编语言入门(二):汇编指令入门级整理,这些你必须要知道

汇编语言指令(三):汇编语言的所有指令总结,一篇就够了

汇编语言进阶(四):ARM体系结构处理器机制原理与实现

汇编语言进阶(五): ARM指令集与汇编语言程序设计

2.2内存管理专题

【 强烈推荐阅读】尽情阅读,技术进阶,详解mmap原理

内存是什么?一文让你了解内存是怎么实现的

嵌入式开发必备技能,Linux内核源码组织结构

一文了解Linux内存管理,malloc、free 实现原理

内存管理系列(一):Linux操作系统内存管理(思维导图详解)

内存管理系列(二):Linux内存管理原理知识大总结

内存管理系列(三):学完操作系统内存管理,能回答这8个问题吗?

内存管理系列(四):理解 Memory barrier(内存屏障)

内存管理系列(五):内存回收之LRU链表机制原理

内存管理系列(六):虚拟内存和物理内存机制原理

内存管理系列(七):Malloc缺页中断不同情况处理总结及反向映射RMAP

内存管理系列(八):C/C++开发中的Malloc函数的实现原理

内存管理系列(九):深入理解glibc malloc:内存分配器实现原理

内存管理系列(十):操作系统是如何对内存进行管理的,内存与CPU之间的关系

内存管理系列(十一):为什么Linux需要虚拟内存,虚拟内存对操作系统有哪些作用

内存管理系列(十二):用户态内存内存映射函数Mmap的好处

内存管理系列(十三):内存管理:详解虚拟地址空间-MMU

内存管理系列(十四):C语言中的Malloc/free是如何分配内存的

内存管理系列(十五):从虚拟寻址到开源项目,Linux下的内存管理详解

内存管理系列(十六):一文带你了解,虚拟内存、内存分页、分段、段页式内存管理

内存管理系列(十七):Linux应用程序究竟消耗了多少内存

内存管理系列(十八):虚拟地址到物理地址,是什么时候开始映射

内存管理系列(十九):浅析Linux内存管理中SLAB分配器(源码分析)

内存管理系列(二十):基于Linux内存管理的内存分配(伙伴算法和slab算法)

内存管理系列(二十一):探索内存原理的内存映射文件(图文详解)

内存管理系列(二十二):吊打字节面试官,CPU缓存一致性协议MESI

内存管理系列(二十三):深入理解Linux内核页表映射分页机制原理

内存管理系列(二十四):谈谈物理内存与虚拟内存之间的映射(超详细~)

内存管理系列(二十五):内存管理:C/C++开发中的malloc函数的实现原理

内存管理系列(二十六):熬夜肝翻Linux内存管理所有知识点(图解)

内存管理系列(二十七):一文让你了解基于Linux处理器缓存

内存管理系列(二十八):Spinlock:Linux内核中的死等锁机制

内存管理系列(二十九):内存管理:深入理解ARMv8异常处理

内存管理系列(三十):冯.诺依曼:关于内存的一些思考

内存管理系列(三十一):你真的知道什么是系统调用吗?这篇让你把它玩转起来

内存管理系列(三十二):尽情阅读,技术进阶,详解mmap原理

内存管理系列(三十三):Linux锁实现,futex_wait/wake内核实现大致逻辑

内存管理系列(三十四):一文读懂select、poll、epoll的用法

内存管理系列(三十五):深入Linux内存原理中页、页表和页框(块)

2.3进程管理专题

进程管理系列(一):Linux进程管理原理详解(代码演示)

进程管理系列(二):十分钟让你像大佬一样快速了解进程状态(二种模型)

进程管理系列(三):作为互联网程序员,应该了解Linux进程六种状态吗?

进程管理系列(四):五分钟让你快速了解Linux进程管理实时调度与SMP

进程管理系列(六):浅析Linux的进程优先级(代码演示)

进程管理系列(七):进程管理|浅析C语言中并发同步与原子操作,锁三者是什么关系

进程管理系列(八):进程管理|深入理解Linux进程述符和进程状态

进程管理系列(九):一文读懂Linux内核中的任务间调度策略

进程管理系列(十):Linux内核之进程和线程的创建和派生

进程管理系列(十一):基于Linux有几种进程状态

进程管理系列(十二):操作系统的几种CPU调度策略

进程管理系列(十二):Linux 进程管理之调度和进程切换

进程管理系列(十三):一文搞懂六大进程通信机制原理(全网最详细)

进程管理系列(十四):超详细的Socket通信原理和实例讲解(白嫖走起~)

进程管理系列(十五):这是一份很全很全的IO基础知识与概念

进程管理系列(十六):深入理解Linux内核进程的管理与调度(全知乎最详细)

进程管理系列(十七):深入理解Linux中进程控制(超详细~)

进程管理系列(十八):从进程到线程一Linux中的task_struct结构分析

进程管理系列(十九):你真的理解Linux中断机制嘛

进程管理系列(二十):一文让你彻底理解Linux内核多线程(互斥锁、条件变量、读写锁、自旋锁、信号量)

进程管理系列(二十一):深入理解Linux内核信号处理机制原理(含源码讲解)

进程管理系列(二十二):一文读懂Linux内核中的任务间调度策略

进程管理系列(二十三):玩转Linux内核进程调度,这一篇就够(所有的知识点)

进程官理系列(二十四):一文搞懂Linux内核进程CPU调度基本原理

进程管理系列(二十五):一文带你怼明白进程和线程通信原理

进程管理系列(二十六):一文搞懂Linux的Socket编程原理(含实例解析)

2.4网络协议栈专题

【 强烈推荐阅读】嵌入式必备:如何学习Linux内核网络协议栈

趣谈网络协议栈(一):套接字缓冲区原理

趣谈网络协议栈(二):数据包是如何处理的过程

趣谈网络协议栈(三):七层模型下三层数据通信

趣谈网络协议栈(四):传输的Arp报文结构

趣谈网络协议栈(五):Socket编程常用函数的原理及代码实现

趣谈网络协议栈(六):学习select和poll函数的内核实现

趣谈网络协议栈(七):Epoll从用户态到内核态过程分析

趣谈网络协议栈(八):套接字发送网络数据的过程

趣谈网络协议栈(九):深入理解网络协议,带你一步步解析HTTP

趣谈网络协议栈(十):浅谈Linux内部网络实现,关键数据结构sk_buff

2.5设备驱动专题

浅谈设备驱动(一):操作系统 I/O 流程详解

浅谈设备驱动(二):Linux操作系统学习之字符设备

浅谈设备驱动(三):结合设备信息集合,探究设备和驱动是如何绑定的

浅谈设备驱动(四):一文搞懂Linux内核网络设备驱动(白嫖小知识~)

浅谈设备驱动(五):设备管理:操作系统 I/O 流程详解

浅谈设备驱动(六):详解Linux内核设备驱动,块设备概念和框架原理

2.6文件系统

认识文件系统(一):一文让你彻底了解Linux内核文件系统(大总结)

认识文件系统(二)Linux网络子系统中DMA机制的实现(超详细!!)

认识文件系统(三):Linux 内核启动及文件系统加载过程

认识文件系统(四):图解并茂|Linux中常用的虚拟网卡

2.7性能优化

性能工具使用(一):Linux性能工具ftrace使用

性能工具使用(二):Linux性能工具ftrace基础篇

性能工具使用(三):GDB调试程序的核心技术-ptrace系统调用与使用示例

性能工具使用(四):Linux性能工具ftrace框架

性能优化(一):Linux性能优化全景指南

性能优化(二):浅谈Linux内核的实时性优化

2.8面试题/经验

【 强烈推荐阅读】从事十年嵌入式转内核开发(23K到45K),给兄弟们的一些建议

谈谈Linux内核的学习路线,具体要怎么学?

2022年嵌入式开发想进互联网大厂,你技术过硬吗?

嵌入式Linux内核学习经验总结,一篇让你掌握方法

盘点Linux内核(驱动开发,嵌入式,内核人群)必问的面试题

2022春招大厂-嵌入式开发经典笔试面试题目大整理

嵌入式软件面试的那点事,重点难点一网打尽

2.9内核书籍

  • 《深入了解Linux内核》
  • 《Linux就该这么学》
  • 《Linux内核完全注释V3.0书签版》
  • 《Linux命令行大全 - 绍茨 (william E.shotts)》
  • 《Linux命令速查手册》
  • 《Linux性能优化大师》
  • 《Linux环境编程:从应用到内核》
  • 《Linux集群和自动化运维 余洪春》
  • 《Linux驱动程序开发实例(第2版)》
  • 《Linux高级程序设计(第3版)》
  • 《构建高可用Linux服务器(第4版)》

2.10嵌入式知识

初学者基础知识(一):嵌入式Linux开发的一般流程,让你快速了解Linux

初学者基础知识(二):用了这么久 Linux,才知道这些概念

初学者基础知识(三):一文搞懂 | Linux 驱动的来龙去脉

初学者基础知识(四):盘点Linux内核(驱动开发,嵌入式,内核人群)必问的面试题

初学者基础知识(五):嵌入式Linux学习路线七大步骤推荐

视频推荐:嵌入式转行成功上岸!将自己花1万多买的Linux内核教程,整整138集,免费分享给大家~拿走不谢!学不会退出IT界!

三,内核学习路线

这里给大家推荐零声教育全网独家的【Linux内核源码】课程体系,通过20项目案例,2W+行手写代码,全面解析6个内核技术方向。

全方面系统全面的讲解底层原理开发技术:

学习路线主要从

  • 进程管理专题
  • 内存管理专题
  • 网络协议栈专题
  • 设备驱动专题
  • 内核组件专题
  • 文件系统专题
  • 内核项目实战专题
    等等。。。

这些内容,如果你打算用几年的时间一步一步的学习,就会成为Linux高手。建议个人参加零声教育的培训,学习效率会高很多。有目的的参与培训,缩短周期,快速成型是时代的需要。

免费资料直通车最新Linux内核源码资料文档+视频资料

内核学习地址Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

以上就是Linux内核学习路线,关于学习Linux内核的建议,希望对小伙伴们有帮助。

有关腾讯前辈熬夜肝了一个月整理的《Linux内核学习笔记》,啃完受益匪浅不走弯路的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. ruby - 在 Ruby 中,如果我们定义了一个方法调用 "c=",为什么 c = 3 不能调用它? - 2

    例如,如果我们defc=(foo)p"hello"endc=3c=(3)并且不会打印“hello”。我知道它可以被self.c=3调用,但为什么呢?可以通过哪些其他方式调用它? 最佳答案 c=3(和c=(3),完全等同于它)总是被解释为局部变量赋值。你可能会说只有当方法c=没有在self上定义时,它才应该被解释为局部变量赋值,但是这有很多问题:至少MRI需要在解析时知道在给定范围内定义了哪些局部变量。但是,在解析时并不知道给定的方法是否已定义。所以ruby​​直到运行时才知道c=3是否定义了变量c或者调用了方法c=,这意味着它不会知

  3. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  4. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  5. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  6. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  7. ruby - 如何在 Ruby 中获取 linux 系统信息 - 2

    如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack

  8. ruby - rbenv:在 Linux Mint 上找不到 gem 命令 - 2

    我在LinuxMint17.2上。我最近使用apt-getpurgeruby​​删除了ruby​​。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,

  9. ruby - 在 Linux 上编译 Ruby 1.9.2 所需的先决条件? - 2

    我是Ruby和RoR的新手。我有一个带有Ubuntu镜像的干净Linode实例,我想从源代码编译Ruby而不是使用apt-get。我已经在谷歌上搜索了执行此操作的说明,但经过一些尝试后,当我尝试运行一些教程示例时,我不断收到有关缺少zlib和其他一些包的错误。任何人都可以给我详细的说明(或链接),教我如何在从源代码编译Ruby之前安装必要的必备包吗?我的目的是编译Ruby的最新稳定版本,然后安装Rubygems和Rails。提前感谢您的帮助!!! 最佳答案 Thisblogpost涵盖从源代码编译ruby​​所需的包和安装过程;它引

  10. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误 - 2

    废话不多先看bug解决方案在下面!!!!启动服务查看服务是否开启首先我的电脑-右键-管理-服务和应用程序-服务-找到IPsecPolicyAgent-右键属性-启动方式改为自动,并重启服务,如下图打开设置-更改适配器选项如下图点击连接失败的连接-右键-属性-安全-允许使用这些协议编辑注册表按Ctrl+R打开命令行窗口输入regedit打开注册表输入下面命令进入以下页面HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters如下图在右侧编辑菜单上,鼠标右键新建,然后单击DWORD(32)位值。键入Prohibit

随机推荐