openSUSE:Kernel git

跳转到:导航搜索
有两个 openSUSE 内核仓库。开发发生在 kernel-source 仓库中。这是一个类似 quilt 的补丁系列,加上脚本和.spec文件,用于生成内核 RPM 包。 还有一个名为 kernel 的仓库(也称为 *扩展树*)。 这个仓库的布局与上游内核仓库相同,因此您可以直接编译它或对其进行修改。

入门

首先,安装 git,越新越好。 已知 git-core-1.5.6 或更新版本有效,如果您使用的是较旧的 GIT 并遇到问题,请报告它们(最好附带补丁)至 opensuse-kernel@opensuse.org。 如果您没有遇到问题,请更新有关已知有效最低版本的句子。

设置克隆

 git clone https://github.com/openSUSE/kernel

这将仅创建 master 分支,要设置其他分支,请执行

 git checkout -b $branch origin/$branch

稍后只需

 git checkout $branch

使用git branch -r查看哪些分支存在。 另请参见 #分支名称 下方。

有些人更喜欢为他们所做的每个分支创建一个单独的克隆。 在这种情况下,您可以复制克隆,或者再次克隆,但使用--reference选项(假设 kernel 是一个预先存在的克隆)

 git clone --reference kernel https://github.com/openSUSE/kernel kernel-15.2

请注意,如果您仅使用一个或几个分支在一个克隆中,删除其他分支并更改配置以仅获取您感兴趣的分支(默认情况下,如果您执行 git pull,则会获取所有内容)是一个好主意。

 git checkout -b openSUSE-15.2 origin/openSUSE-15.2
 git branch -D master
 git config remote.origin.fetch +refs/heads/openSUSE-15.2:refs/remotes/origin/openSUSE-15.2

如果您将提交任何内容,现在是时候介绍一下自己了

 git config [--global] user.name "Your Name Comes Here"
 git config [--global] user.email your@email

分支名称

openSUSE 内核分支命名为 openSUSE-$version,例如 openSUSE-42.3 或 openSUSE-15.1。 SLE 分支使用 SLE${version} 作为 GA 分支,SLE${version}-SP${number} 作为服务包。 在 kernel-source 仓库中,每个分支还有一个 README.BRANCH 文件,指示分支的目的。

可以在 kernel.suse.com 上找到活动分支的概述。

请注意:已达到 EOL 的产品的分支将从 git 仓库中删除。

获取您当前的内核配置

获取您当前内核配置的最简单方法是 

  cp /boot/config-`uname -r` .config

使用 kernel-source 仓库

如前所述,开发发生在 kernel-source 仓库中。 该仓库还托管.config文件和 rpm spec 文件,用于构建 rpm 包。 要克隆它,请运行

 git clone https://github.com/SUSE/kernel-source
 cd kernel-source
 scripts/install-git-hooks

install-git-hooks 脚本设置了一个提交钩子和其他辅助工具,以便自动捕获常见错误。 仓库的布局如下

  • config/$arch/$flavor: 配置文件
  • patches.*/: 应用到香草树的补丁。patches.kernel.orgpatches.rpmify的特殊之处在于这些也应用于 kernel-vanilla flavor。
  • rpm/: spec 文件和最终出现在 rpm 包中的脚本。
  • kabi/: Kabi 参考文件。
  • scripts/: 仓库内使用的脚本。

要生成一个 quilt 树,以便您可以添加补丁或更新现有补丁,请运行

 scripts/sequence-patch.sh

这将在tmp/子目录中解包香草 linux tarball,应用补丁系列并生成 quilt 所需的元数据。 应该使用 refresh_patch.sh 脚本来刷新补丁,以便它们具有通用格式。 每个内核补丁都需要一个标题,请参阅 README 文件了解详细信息。 如果您正在移植上游补丁,请将其放入该文件的 *排序部分*,使用 git_sort(SUSE 内核仓库中的一组脚本)。 完成后,使用series.conf文件在顶级目录中。 如果您正在移植上游补丁,请将其放入该文件的 *排序部分*,使用 git_sort(SUSE 内核仓库中的一组脚本)。 完成后,使用

 scripts/log

提交您的更改,这将启动一个编辑器,其中包含预生成的 changelog 条目。 如果您只是添加补丁,则足以使用 changelog,否则根据需要扩展它并键入:wq。 请使用 scripts/log 进行提交,以便 changelog 具有统一的格式。

刷新其他补丁

series.conf中添加了补丁后,后续的某些补丁可能需要刷新。 在添加更大的补丁系列时,这可能会很麻烦。 在这种情况下,您可以

  • git tag base
  • 将所有补丁添加到 series.conf
  • ./scripts/log# 不刷新任何其他补丁
  • git rebase -i -x ~/bin/kseries_check base
  • git tag -d base

的内容~/bin/kseries_check

 #!/bin/sh
 if hash rapidquilt 2> /dev/null ; then
   scripts/sequence-patch.sh -q --rapid --dry-run || exit 1
 else
   scripts/sequence-patch.sh -q --fast > /dev/null 2>&1 || exit 1
 fi

它将在需要刷新补丁时将您放入 shell。 刷新后,运行

  • git reset HEAD^
  • ./scripts/log
  • git rebase --continue

构建内核包

 scripts/tar-up.sh

这将在 kernel-source 子目录中创建一个源包。 您可以使用 rpmbuild 构建内核 RPM,或者如果您有 构建服务 帐户,请使用 osc_wrapper 脚本

 scripts/osc_wrapper                                  # local build
 scripts/osc_wrapper kernel-source/kernel-debug.spec  # locally build a flavor other than "default"
 scripts/osc_wrapper upload home:$login:kernel        # remote build

将您的更改提交给内核团队

请记住,将补丁包含在 openSUSE 内核中的推荐方法是将其推送到上游(对于 master,Linus 的树;对于已发布的产品,v5.x.y)。 如果您想更改打包、脚本或配置文件中的内容,请将您的补丁发送到