Linux: 向内核提交补丁
创始人
2024-05-31 12:00:13

文章目录

  • 1. 前言
  • 2. 提交内核补丁的步骤
    • 2.1 从代码仓库下载内核源码
    • 2.2 建立本地分支 linux-next_master
    • 2.3 制作一个补丁
    • 2.4 提交补丁
      • 2.4.1 配置发送邮箱
      • 2.4.2 配置 git send-email
      • 2.4.3 发送补丁

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 提交内核补丁的步骤

后续操作基于 GIT 工具完成,作者假定读者已经安装并配置好了 GIT 。如果没有,可以自行搜索相关资料安装 GIT

2.1 从代码仓库下载内核源码

首先,从Linux内核代码仓库下载主分支代码到本地:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

主分支代码是相对稳定的代码,一般不够新,本文选择最新尚在开发中的 linux-next 分支来演示内核补丁的提交,所以还要更新代码到最新分支:

git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git

这些仓库的地址可以从 https://git.kernel.org/ 查找。接下来将 linux-next 的代码下载到本地:

git fetch --tags linux-next

2.2 建立本地分支 linux-next_master

注意,此时我们只是将 linux-next 分支的代码同步到了本地,但是本地还没有对应的可操作分支,为此,我们还要建立一个本地分支。先看一下当前分支情况:

$ git branch -a
* masterremotes/linux-next/akpmremotes/linux-next/akpm-baseremotes/linux-next/masterremotes/linux-next/pending-fixesremotes/linux-next/stableremotes/origin/HEAD -> origin/masterremotes/origin/master

所有名字前面有 remotes 是都是远程分支引用,我们看到已经有一个 master 本地分支,这是在 git clone 时自动创建的。但这个本地分支不是我们要的,我们要建立一个关联到 linux-next 的本地分支:

$ git checkout -b linux-next_master # 建立新的本地分支 linux-next_master
$ git branch -u linux-next/master # 关联 本地分支 linux-next_master 到远程分支 linux-next/master$ git branch -vv
* linux-next_master 709c6adf19dc [linux-next/master] Add linux-next specific files for 20230307master            413c1061e467 [origin/master: ahead 2, behind 125519] Merge remote-tracking branch 'origin/master'$ git branch -a
* linux-next_mastermasterremotes/linux-next/akpmremotes/linux-next/akpm-baseremotes/linux-next/masterremotes/linux-next/pending-fixesremotes/linux-next/stableremotes/origin/HEAD -> origin/masterremotes/origin/master

好,新的本地分支 linux-next_master 已经建立好了。

2.3 制作一个补丁

修改代码,然后运行系列指令:

git add /path/to/file
git commit -s -m 'message for patch.'

提交修改到本地分支 linux-next_master ,然后用工具制作可提交的补丁:

git format-patch -s -1 # 将自动按最近一次提交生成一个补丁文件 xxx.patch
./scripts/checkpatch.pl xxx.patch # 检查补丁的格式是否合法
./scripts/get_maintainer.pl xxx.patch # 补丁是以邮件形式发送,这里是找出要发送的邮箱

2.4 提交补丁

2.4.1 配置发送邮箱

提交补丁就是将前面制作的 xxx.patch 发送到 get_maintainer.pl 提取的邮箱列表中。既然是发送邮件,那首先得准备一个邮箱,这里就有很多选择了,譬如 gmail ,但国内的用起来很麻烦,这里以 126 邮箱举例。首先配置下126邮箱:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4.2 配置 git send-email

GIT 默认不带 send-email ,运行下面的命令安装它:

 sudo apt-get install git-email

编辑 ~/.gitconfig 进行邮件配置:

[user]name = Your nameemail = 你的126邮箱地址[sendemail]smtpserver = smtp.126.comsmtpuser = 你的126邮箱地址smtpserverport = 465smtpencryption = sslsmtppass = 2.4.1章节得到的授权码

2.4.3 发送补丁

运行下面的命令发送章节 2.3 制作的补丁 xxx.patch

git send-email --smtp-debug \--to=david@redhat.com \--cc=linux-kernel@vger.kernel.org \xxx.patch

命令中的邮件列表根据 get_maintainer.pl 脚本得到的列表进行调整。可以先给自己发送,测试一下。我在实际过程中经常遇到下面的错误提示:

DEBUG: .../IO/Socket/SSL.pm:1177: global error: Undefined SSL object

但不影响邮件发送到社区,如果有哪位读者知道原因,请告知,不胜感激!邮件有没有发送到社区,可以到 https://lore.kernel.org/ 查询。在查询框输入自己在 .gitconfig 中配置的 nameemail,如果你的邮件发送成功,就可以找到自己发送的邮件。

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...