我正在研究一些Linux内核模块&我当前的内核是3.8
,我想将其升级到内核3.10
。
我想到了两种方法:
3.10
分支,然后将其与我当前的3.8
分支合并。 3.8
补丁修补3.9
,然后使用3.10
补丁修补补丁(kernel.org上提供的修补程序是当前和之前版本的差异,我相信) 我应该遵循哪种方法?有没有更好的方法呢?
我使用git作为版本控制软件。
答案 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时是不同的。他们有自己的提交时间,可能会有不同的补丁文本等。根据您的需要,他们可能或可能不是您需要的。