是否有必要在每次二分步后清理Linux内核源代码树?

Mar*_*ger 5 linux git linux-kernel

当在两个相对较远的提交之间平分Linux内核源代码树时,前几个二分法步骤通常会改变很多内核源代码,因此无论是否make distclean运行,都不会产生很大的影响.但是,随着二分范围越来越窄,每一步都会更改更少的源文件,因此清理源树将删除大量 *.o不需要重建的文件.

由于make通过比较它们的最后修改时间与其关联源文件的修改时间来推断需要重建的目标文件,我认为在每个二分步骤之后没有必要清理树,但我仍然这样做作为预防措施之后的预防措施.我遇到了这样一种情况,即一个漫长的二分过程最终让我陷入了一个与所讨论的bug无关的"坏"提交.

为了使它具体化,这里是我在第一次二分尝试中使用的步骤(这使我进入了错误的提交):

cp /boot/config-`uname -r` .config
make oldconfig
make && sudo make modules_install && sudo make install
# reboot
# Then I repeat the following steps until the bisection ends.
# test the kernel
git bisect {good,bad}
make && sudo make modules_install && sudo make install
# reboot
Run Code Online (Sandbox Code Playgroud)

我使用以下过程再次分成两次,并且能够成功地达到错误提交:

make distclean
cp /boot/config-`uname -r` .config
make oldconfig
make && sudo make modules_install && sudo make install
# reboot
# test the kernel
git bisect {good,bad}
# Then I repeat the steps above until the bisection ends.
Run Code Online (Sandbox Code Playgroud)

由于我不太了解kenrel构建系统的内部结构,如果有人能以某种方式指出我可以避免在每个二分步骤之后清理和重建整个内核,那将是很好的,因为这样可以节省我的时间大量的构建时间,并将大大缩短二分过程.

小智 3

来自 男人

make 程序使用 makefile 数据库和文件的最后修改时间来决定哪些文件需要更新。

和一个快速实验

$ stat -c%y bar.txt
2013-05-11 22:58:46.499826200 -0500

$ git checkout HEAD~1
HEAD 现在位于 e7b9f1c...首先

$ stat -c%y bar.txt
2013-05-11 22:58:52.583836900 -0500

如您所见,执行checkout更改文件的修改时间,进而会强制使用make. 所以答案是否定的,没有必要清理树,因为必要的文件将被重新编译。