如何将Linux内核迁移到更高的内核版本

时间:2014-01-27 21:37:08

标签: linux git linux-kernel upgrade patch

我正在研究一些Linux内核模块&我当前的内核是3.8,我想将其升级到内核3.10

我想到了两种方法:

  1. 检查单独的3.10分支,然后将其与我当前的3.8分支合并。
  2. 使用3.8补丁修补3.9,然后使用3.10补丁修补补丁(kernel.org上提供的修补程序是当前和之前版本的差异,我相信)
  3. 我应该遵循哪种方法?有没有更好的方法呢?

    我使用git作为版本控制软件。

1 个答案:

答案 0 :(得分:2)

就git而言,您可以选择其中一种方式。

您可以使用v3.8源代码,创建一个单独的分支(称为my_modules),在该分支中应用您的更改,然后提交它们。然后你必须将该分支与实际的内核源合并(我建议使用上游master,但你可以在内核开发历史中选择任何其他点(commit):git merge <chosen-branch-o-tag-o-commit>。此时,您可能必须解决合并冲突(如果有),将模块更新到新的内核内部API等,然后提交合并状态。请参阅git merge --help和其他相关的git文档。现在,您可以根据所选的内核版本进行更改,并且可以看到上游内核与已修补内核之间的差异:git diff <chosen-branch-o-tag-o-commit> HEAD。生成的提交图片如下所示:


A -    ...   - B
 \             \
   D1 - D2... - M

其中A是初始分支点(3.8内核),B是您合并的提交(较新的内核),D1..DN是您的驱动程序提交,M是合并。

或者您也可以使用另一种称为变基的方法。在这种情况下,您将初始提交序列“移植”到新选择的根:git rebase -i B。然后git将尝试迭代地将整个序列D1 ... DN重新应用于新的根B.请注意,在每个步骤1 ... N上,您可能会遇到需要解决的冲突,然后使用git rebase --continue继续进行基础设置。在[成功]结束时,您将获得提交序列D'1 - D'N从B成长:


A - ... - B
             \
              D'1 - .... D'N

请注意,技术上D'1 ... D'N在寻找/类似于您的原始D1 ... DN时是不同的。他们有自己的提交时间,可能会有不同的补丁文本等。根据您的需要,他们可能或可能不是您需要的。