Linux 内核源码如何学习?

Posted CPP开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核源码如何学习?相关的知识,希望对你有一定的参考价值。



1. 学习主线

linux内核源码大而全,一个人,即使再聪明、再有精力,也不可能完全看完、看懂所有的linux内核源码。

一口君建议按照以下主线进行深入研究:

  • linux驱动架构

  • linux网络子系统

  • linux内核启动过程

  • linux内存管理机制

  • linux调度器

  • linux进程管理

  • linux虚拟机制(kvm)

  • linux内核实时化技术
  • 沿着某一个主线,深入进去,在研究清楚这个主线的同时,向其他的主线扩展、渗透和学习。

    此处之所以将驱动列为学习内核的入口,是因为内核为很多外设驱动实现了架构,比如I2C、SPI、UART、PCIE、字符设备、网络设备、块设备,我们可以从最基本的字符设备学起,学习如何编写一个简单的模块学习如何如何为一些简单的设备比如LED、KEY、ADC等编写驱动可以说驱动是我们学习内核最简单的入口,

    由点到线、由线到面、由面到体,层层深入、不断精进,是学习linux内核源码的一个有效的方法。

    2. 代码阅读工具

    对于代码阅读方法从两个角度来介绍,一个方面是需要选择一个比较有效阅读代码的工具。

    一口君强烈推荐:source insight这款阅读代码神器!

    也可以使用vscode或者vim+ctags的组合。

    不过一口君十几年的从业经验,

    99%以上的开发人员都选择SI阅读内核代码。

    代码并不是写给人看的,而是交给机器运行的。

    所以我们去理解别人的代码时,并不能像看小说一样去通篇的阅读代码,而应该是像研究化石一样去调查它,解密它。

    有时我们往往也需要把对方的一段代码亲手的实现一遍,然后自己举一反三看自己会怎么去实现它,才能真正的理解。

    3. 学习的内核版本

    有些人推荐先阅读一些低版本的内核,比如0.01版的,总代码量才1万行左右。

    阅读这个代码大概一个月应该能比较清晰了。

    但是,改代码与现在的代码差异巨大,阅读后可以理解基本思想,但对理解现有代码的帮助不是特别明显。

    3.10版本之后的内核都支持设备树!

    所以一口君建议是尽量选择3.10版本之后的代码阅读学习。

    4. 学习Linux最重要的是培养自己写代码的能力和对Linux框架结构的了解

    Linux内核中绝大部分代码都是由这个地球上顶尖的技术大牛所编写,

    这些代码的高内聚低耦合,

    其精准度,简洁度、质量都相当的高,

    每每看到一段高质量的代码,

    一口君都会被那一行行枯燥的代码背后隐藏的设计思想所震撼,所折服!

    阅读内核的代码简直就是在欣赏艺术品!

    很多粉丝问我如何提高自己的C语言编程水平,一口君不厌其烦的 重复着同样一句话:看Linux内核!

    代码中自由颜如玉!代码中自有黄金屋!

    时刻保持激情,任性和耐性!

    从量变到质变!

    水滴石穿!

    愿各位都能够熟练掌握Linux

    - EOF -

    推荐阅读  点击标题可跳转

    1、这篇 Linux 总结的很棒啊!

    2、深入理解 Linux 内核之内存寻址

    3、一个内核网络漏洞详解:容器逃逸


    关注『CPP开发者』

    看精选C/C++技术文章 

    点赞和在看就是最大的支持❤️

    Linux内核该如何学习?linux内核源码该怎么读?

    Linux内核该如何学习?linux内核源码该怎么读?

    专注后台服务器开发,包括C/C++,Linux,内核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等

    学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

    以上是关于Linux 内核源码如何学习?的主要内容,如果未能解决你的问题,请参考以下文章

    如何提交Linux内核补丁到Linux内核社区

    RK3399系统移植 | 移植 linux 主线5.4.32内核

    截至 2021 年 5.4+ 主线 Linux 内核中的 bpfilter 状态

    如何在CentOS/RHEL上安装或升级新的内核版本

    为AM335x移植Linux内核主线代码

    Linux内核该如何学习?linux内核源码该怎么读?