Linux kernel 源码怎么读(版本、顺序、工具等)?
最近想学习一下 Linux kerenl.
kernel 拼错了.
我本身是没有什么明确的目的的,但是感觉还是带着目的读可能会好一点?
会好一点. 但好处不多. 因为你这属于没事找事, 遇到困难了一般就会想要放弃.
那么Linux源码一般来说有那些可以学习的地方?(抽象四维?C语言技巧?操作系统相关算法?抑或其他什么?)
C 语言技术: 确实可以学到一些工程技巧. 比如手写虚表, 再比如 bit field 等等. 但因为涉及到底层, 常常出现很 dirty 的代码, 不建议去学那些. 操作系统相关算法那真的就只适用操作系统, 除非是从业人员, 不然没啥意思.
但是如果为了学 C 语言, 真心建议换个正常点的项目. 比如可以试试 Lua 虚拟机.
哪个版本的代码最适合新手阅读,够“现代”也不至于太复杂;
没有适合新手的. 基本上到 3.x 就比较现代了. 但到了这些版本, 常常单个文件就超过万行了.
现在源码里面驱动代码应该占了挺大一部分了,那么除了driver以外的部分都有读的价值吗
没有. 除非你要加功能/抄代码/debug/魔改它.
Windows或者Linux上有什么好的阅读工具推荐
它编译选项特别多, 需要开很多宏定义. 这导致了常见的软件都做不了语法提示 (clangd 不知道行不行).
我个人是用全局字符串搜索来找符号的. 也就是最后用的是文本编辑器.
阅读顺序是怎样的?从“主函数”开始总分的看?
别看了. 如果要 debug 的话, 从出错的函数开始看. 如果要魔改, 从想魔改的函数开始看. 如果要加功能, 那从类似功能的实现开始看.
实操的话可以写什么?内核模块?一个操作系统玩具?
内核模块可以考虑, 但是和内核内部关系不大.
无论是否参考 Linux 的设计, 搭一个玩具操作系统仍然具有相当大的工程量. 而现代 Linux 的复杂, 你甚至无法详细参考, 只能大致上了解一下.
经验教训
我当年上操作系统课的时候, 就对老师含糊不清的内容很好奇. 于是我就专门对着 Linux 进程调度模块看. 一万多行的文件用眼睛瞪了几天, 写出了一系列文章.
孙孟越:Linux 进程调度(1)-基本架构但如果是现在的我, 如果只是想学习思路, 那我建议你直接读别人写好的总结性内容, 比自己折腾又快又好. 如果有 100 字可以总结 3000 行代码改动, 那就不要去看那 3000 行了.
如果还想进一步了解细节, 再去看代码.
如果想学习内核知识, 强烈推荐下面这个博客.
如果想了解内核的最新动态, 了解内核的百科, 那我推荐下面这个网站.
LinuxChanges - Linux Kernel Newbies这个网站有 kernel 的文档/Release Notes/帮助论坛/文章, 非常有帮助.