如何利用内核patch分析内核子系统

如何利用内核patch分析内核子系统

Posted by Albert on September 10, 2020

如何利用内核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的内容:

image-20200910215629518

通过上面的commit我们可以看到,第一个提交的commit id以及作者

2、导出初始提交

导出 commit id: 81819f0 的内容

git format-patch -1 81819f0 -o ./patch/0001-SLUB-core.patch

image-20200910220322711

2.1.3、搜索邮件列表

​ 内核邮件列表地址:https://lore.kernel.org/linux-mm

1、搜索关键字

​ 作者名加标题:Christoph Lameter slub core (选择relevance搜索方式)

image-20200910220949141

2、elevance搜索

​ 点击serch后再选择elevance排序:

image-20200910221124540

3、搜索结果

​ 找到第一笔提交,如下图所示

image-20200910221533675

4、查看patch
点击进去即可看到相关的patch,SUUB第一个patch

​ 一般来说第0个patch主要说明当时为什么要引入这个模块。

image-20200910222118534

​ 然后我们就可以基于此patch开始研究感兴趣的内核模块

5、 另一个内核邮件列表

​ 内核开发邮件列表这里也可以看,他是可以通过时间分类,也可以通过这个邮件列表搜索

​ •https://lkml.org/lkml

三、其他

​ 除了邮件列表看patch之外,一般来说一个新的模块提出的时候,作者都会去lwn上发表文章,所以我们也可以在这个上面找到一些原理性的说明。另外内核的Documentation通常也有各个子模块和功能的用法。按图索骥,我们往往可以通过patch中的邮件、lwn中的邮件或者是Documentation找到这方面最权威的专家,关注他们的博客和Github,相信大家会学到更多知识。