向Linux内核提交第一个patch
向Linux内核提交第一个patch
- 本文介绍如何下载linux内核工程代码,以及提交patch的步骤。
下载Linux-next工程代码
不同分支
在官网上首页中可以看到Linux有多个分支。mainline,stable,longterm和next分支。patch提交应该在最新版本,也就是next分支。
Linux官网: https://www.kernel.org/
git clone Linux工程
下载源码的方式很多,包括直接在上图官网下载,使用git命令下载,但使用git clone的方式会更方便些。
比如后续的更新(git pull)、获取模块信息(git log)。
如果使用git命令下载,可以到国内镜像网站获取最新代码,如:
清华镜像: https://www.csdn.net/
使用命令自动下载linux-next分支的最新版本
git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux-next.git
后续如果要更新源代码,使用git pull拉取最新代码。具体参数根据自己需求更改。
git pull --rebase=merges
完成上述步骤后,就出现了一个linux-next文件夹。
提交patch
在进入linux-next文件夹之前,需要做一些准备。
配置邮箱信息
vim ~/.gitconfig
推荐使用gmail,国内常见类型的邮箱不能起效。具体邮箱参数自行搜索。
配置完参数后,cd linux-next 进入linux-next文件夹。
cd linux-next
这里要说明的是,提交patch是一个比较严肃的事情,更多的是对某个bug进行修复。当然对于初学者来说,这太难了,遇见bug并修复是一件可遇不可求的事情。所以我们的第一个patch可以是修复单词拼写错误。
更新本地暂存区
在你对具体的文件修改后,使用git add filename 更新暂存区,如我们对drive/md/md-cluster.c中的两个单词拼写错误进行修改后保存。
git add drivers/md/md-cluster.c
提交本地最新更新
git commit是提交本地更新,运行下列命令后,会进入一个文本编辑窗口。
git commit -s -v
-s 会自动为你在message中添加你的签名,形如 Signed off by: XXX aaa@bbb.com;
-v 会显示你的修改。
获取提交信息中的需要的模块名
在这个文本编辑界面,我们需要添加其他信息。第一行是subject,首先添加模块信息,这个信息可以通过git log filename 查看以往其他人的提交得到 模块名。
git log drivers/md/md-cluster.c
编辑message信息
可以看到,模块为 md,记住’md: ‘,冒号后有一个空格,对于commit messag格式排版是有要求的。
添加模块名后,在同一行继续添加主要做了什么。
换行后,空一行,解释为什么这么做。
Crtl + x 保存后离开。
生成patch
git format-patch HEAD^1
0001-md-Fix-spelling-mistake-in-comments.patch
可以看到生成了0001-md-Fix-spelling-mistake-in-comments.patch文件,可以用 vim 查看。
检查patch格式
./scripts/checkpatch.pl 0001-md-Fix-spelling-mistake-in-comments.patch
total: 0 errors, 0 warnings, 16 lines checked
0001-md-Fix-spelling-mistake-in-comments.patch has no obvious style problems and is ready for submission.
这里要求0 errors, 0 warnings。
获取邮件maintainer
应该把patch发送给哪些人?
./scripts/get_maintainer.pl 0001-md-Fix-spelling-mistake-in-comments.patch
Song Liu song@kernel.org (supporter:SOFTWARE RAID (Multiple Disks) SUPPORT)
linux-raid@vger.kernel.org (open list:SOFTWARE RAID (Multiple Disks) SUPPORT)
linux-kernel@vger.kernel.org (open list)
这里不太典型,括号中应该要有maintainer:XXX的信息,但对于supporter一样可以发送。
发送patch
建议如果是第一次发送patch,先试着向自己发送来检验下各配置是否正确,确认格式排版无误后,再向维护者发送。
另外,系统可能会提示你没有安装git send-email部件,按照报错信息搜索不同系统的安装 git send-email命令。
git send-email --to song@kernel.org --cc linux-raid@vger.kernel.org --cc linux-kernel@vger.kernel.org 0001-md-Fix-spelling-mistake-in-comments.patch
‘—to’是发送,’—cc’是抄送。确认后,发送邮件。
发送成功后会有Message-Id,这个Id在你后续修改第二版patch时会用到。
git format-patch -v2 …,生成第二版本的patch。
git send-email —in-reply-to=’Id’ --to… ‘v2patch’,回复v2patch。
后续
发送patch,收到回复是不确定的,可能马上就会有回应,也可能一两天,也有可能没有回应。这些都是正常的,请关注邮箱信息。因为内核维护者是人,应该有这个意识。
如果你接受到类似的回复,那么你的patch将会出现在后续的linux版本中,也包括Reviewed-By的回复。