本文档主要是笔者自己学习内核过程中记录的内容, 以供日后的查阅和理解。文中表述会尽量正式, 避免口语化。如果读者发现有不妥之处, 欢迎反馈
本项目的代码 fork 自 linux v6.6, 并没有大刀阔斧的改动原本的内核源码树, 只是在一些地方加入了注释便于笔者学习理解
文中会出现几种特殊的注释风格
NOTE
为笔者标注的笔记内容, 用于阅读时的参考补充
TIP
为笔者遇到并成功解决的一些小坑, 记录在案以备后续查阅
颜色鲜艳的注释很亮眼, 但是我不并喜欢频繁的使用这种夸张的注释, 显得文档一片红一片蓝反倒没有重点。文中内容仍然是以文字辅助图片说明为主, 只有在一些重点的地方才会以这种彩色注释标注
本地浏览文档可以使用
pip install zood
zood -o本项目文档相关衍生代码众多,大体可以分为四个部分
内核模块可以在内核外编写, 并动态装载到内核中, 非侵入式的方式不需要修改内核源码树,同时了解一下 linux 相关 api 的使用
如果想要实现一些特殊的功能需要对内核做比较底层的修改, 没有办法或者很难通过编写内核模块完成, 因此需要直接修改内核源码树。很多初学者在一开始对 Linux 源码带有敬畏的感觉, 不敢改动代码, 相信经过一段时间的学习读者可以逐渐理解, 熟悉, 并主动尝试修改内核代码完成自己想要的功能。
linux 和 libc(如glibc) 提供了相关的系统编程接口,大部分系统编程任务都是通过底层调用相关接口完成的,这部分代码往往聚焦实现一些小功能,简单的代码片段测试,精心构造对应场景配合调试工具学习内核处理流程
所谓站在巨人的肩膀上可以看得更远, 本系列当然不是笔者顿悟而出, 事实上很多文字都是整合诸多前辈文章中内容并重新组织语言凝炼而成, 参考了很多大佬的文章/博客/代码, 本系列文章参考众多, 下面只列出一些系列的参考资料, 每一篇文章的相关的参考都会标注在对应文末, 感兴趣的读者可以自行阅读