如何利用内核patch分析内核子系统
[TOC]
一、前言
本文是之前在某个公众号里面看到的,之前我也想过利用内核patch去分析内核子系统,但是无奈迟迟没有去总结,无意中看到这篇文章,于是就看了看,然后自己也去研究了一下。
原文地址,顺便说一下,作者对此还录了视频,可谓用心良苦。可以添加微信找作者索要视频资料,另外原文作者还会教你如何搭建环境,各位可以移步查看原文。我主要是怕知识遗忘了,所以将这些知识统一整理到博客上。
二、正文
2.1 如何找PATCH
2.1.1 下载linux源码
首先从git官方仓库查看关于slub相关的补丁 克隆 Linux kernel仓库: git clone https://github.com/torvalds/linux.git
2.1.2 按时间顺序列出提交
1、列出commit
在我们想要分析的子系统下按时间列出所有的commit
gitlogtime ./mm/slub.c > ./patch/tmp_slub_log
#其中gitlogtime是绑定的命令
gitlogtime: (~/.bashrc)
alias gitlogtime='git log --pretty=format:"%h%x09%ad%x09%an%x09%s" --date=short‘
查看./patch/tmp_slub_log的内容:
通过上面的commit我们可以看到,第一个提交的commit id以及作者
2、导出初始提交
导出 commit id: 81819f0 的内容
git format-patch -1 81819f0 -o ./patch/0001-SLUB-core.patch
2.1.3、搜索邮件列表
内核邮件列表地址:https://lore.kernel.org/linux-mm
1、搜索关键字
作者名加标题:Christoph Lameter slub core (选择relevance搜索方式)
2、elevance搜索
点击serch后再选择elevance排序:
3、搜索结果
找到第一笔提交,如下图所示
4、查看patch
点击进去即可看到相关的patch,SUUB第一个patch 一般来说第0个patch主要说明当时为什么要引入这个模块。
然后我们就可以基于此patch开始研究感兴趣的内核模块
5、 另一个内核邮件列表
内核开发邮件列表这里也可以看,他是可以通过时间分类,也可以通过这个邮件列表搜索
三、其他
除了邮件列表看patch之外,一般来说一个新的模块提出的时候,作者都会去lwn上发表文章,所以我们也可以在这个上面找到一些原理性的说明。另外内核的Documentation通常也有各个子模块和功能的用法。按图索骥,我们往往可以通过patch中的邮件、lwn中的邮件或者是Documentation找到这方面最权威的专家,关注他们的博客和Github,相信大家会学到更多知识。