如何获取内核代码的变更信息说明

Posted 立体风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取内核代码的变更信息说明相关的知识,希望对你有一定的参考价值。

有时候内核代码因为各种原因,发生改变,如何查找更新理由?

1、首先git内核全部代码,不能用下载的压缩包,git可以包含全部信息。

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

2、查看下载的内核版本?

make kernelversion

3、比如:我想查看 include/linux/kernel.h内的min3()函数是何时更改的?

4、首先:用grep命令,查看min3的行号

grep -n  min3  include/linux/kernel.h

得到如下反馈:

[email protected]:~/linux-stable$ grep -n min3 include/linux/kernel.h
820: * min3 - return minimum of three values
825:#define min3(x, y, z) min((typeof(x))min(x, y), z)

5、根据行号:得到定义该宏的行号:825,然后使用git查hash码

[email protected]:~/linux-stable$ git blame -L824,825 include/linux/kernel.h
e8c97af0 (Randy Dunlap      2017-10-13 15:58:11 -0700 824)  */
2e1d06e1 (Michal Nazarewicz 2014-10-09 15:30:13 -0700 825) #define min3(x, y, z) min((typeof(x))min(x, y), z)

可以得知:hash码为:2e1d06e1

6、使用git log命令查找相关的日志:

git log 2e1d06e1

哈哈,找到了更新min3函数的说明:

commit 2e1d06e1c05af9dbe8a3bfddeefbf041ca637fff
Author: Michal Nazarewicz <[email protected]>
Date:   Thu Oct 9 15:30:13 2014 -0700

    include/linux/kernel.h: rewrite min3, max3 and clamp using min and max
    
    It appears that gcc is better at optimising a double call to min and max
    rather than open coded min3 and max3.  This can be observed here:
    
        $ cat min-max.c
        #define min(x, y) ({                                            typeof(x) _min1 = (x);                                  typeof(y) _min2 = (y);                                  (void) (&_min1 == &_min2);                              _min1 < _min2 ? _min1 : _min2; })
        #define min3(x, y, z) ({                                        typeof(x) _min1 = (x);                                  typeof(y) _min2 = (y);                                  typeof(z) _min3 = (z);                                  (void) (&_min1 == &_min2);                              (void) (&_min1 == &_min3);                              _min1 < _min2 ? (_min1 < _min3 ? _min1 : _min3) :                         (_min2 < _min3 ? _min2 : _min3); })
    
        int fmin3(int x, int y, int z) { return min3(x, y, z); }
        int fmin2(int x, int y, int z) { return min(min(x, y), z); }

。。。后面还有很多

以上是关于如何获取内核代码的变更信息说明的主要内容,如果未能解决你的问题,请参考以下文章

RK3399平台开发系列讲解(内核调试篇)9.30如何在Linux kernel代码中获取当前进程的信息

44-Jenkins-获取构建变更信息

如何获取嵌入式设备的内核版本信息

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

git以及gitHub的使用说明书

如何获取 CUDA 内核的汇编代码?