1. 程式人生 > >如何獲取內核代碼的變更信息說明

如何獲取內核代碼的變更信息說明

log linu lam ble fff define .com scm code

有時候內核代碼因為各種原因,發生改變,如何查找更新理由?

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

得到如下反饋:

fly@noi:~/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碼

fly@noi:~/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); }

。。。後面還有很多

如何獲取內核代碼的變更信息說明