写点什么

Linux 学习笔记 0 - 三个感想

作者:袁世超
  • 2024-01-01
    北京
  • 本文字数:820 字

    阅读完需:约 3 分钟

之前断断续续看过 Linux 内核,主要是网络部分,而且是片段性的,自从学完《操作系统实战 45 讲》,这几个月从头开始了内核的学习之旅。


目前仅是在 CPU Scheduler 部分看了个大概,而且大部分时间都是在走弯路了,总结一下,以人为鉴。

1. 别人写的材料,不要看的太细

关于 Linux 内核的材料有很多,搜索一下就能找到不少文章和视频,客观来说绝大部分质量很高,写的也很细致。

开始笔者也投入了很多精力研读一些源码分析类的材料,但是下来感觉效果不好,反而是一些讲解思想和发展历程的“务虚”文章帮助比较大

其中的原因有两个:一个是内核的代码变化太快,不同版本差别很大,而绝大部分材料都比较陈旧;另一个就是处理流程都看懂了,但是不理解,会感觉实现上很奇怪,甚至“不合理”,实际上还是不懂。

思想上的问题解决了,最后还得落到代码上,就是得看第一手的源码,但是直接看的难度很大,此时需要工具的帮助。

2. 工具很重要

看代码

现在已经对 Linux 内核的代码结构有个全景的理解,所以感觉用 vim + fzf + regrep 看源码挺好,但是一开始会感觉挺难,笔者开始用的是 VSCode,结合vscode-linux-kernel生成 compile_commands.json,基本上是 IDE 的体验了,但是 CPU 消耗很高,风扇狂飙,后来就不用了。


Debug

对于这样一个复杂的项目,只是用眼看肯定是不行,需要一个“把玩”的环境,通常来说有 QEMU 和 UML 两个方式,可以参考《通过 QEMU 打开学习 Linux kernel 的新世界》《另一种学习 Linux kernel 的方式 —— UML》

另外就是学好 GDB 也很重要。


3. 不要一开始就挖太深

Linux 内核的模块划分还挺清晰的,但是错综复杂又互相关联,牵一发而动全身,所以笔者在看代码时经常会很发散,回过头来想想实际上相关模块先看看接口即可,不必深挖

另外就是内核涉及的基础知识很多,例如内核中的双向链表结构,整体上理解并不难,但是要搞明白为什么赋值操作得加上 WRITE_ONCE,那就得进入编译器的领域了,先看看注释即可,不必深挖虽说欠的债迟早都得还,但也不必马上还

发布于: 刚刚阅读数: 3
用户头像

袁世超

关注

还未添加个人签名 2017-11-30 加入

还未添加个人简介

评论

发布
暂无评论
Linux学习笔记0 - 三个感想_Linux_袁世超_InfoQ写作社区