我们可以通过patch的形式把驱动程序提交给staging tree。提交之前,需要首先把staging tree clone到本地,然后基于当前的工作目录制作patch。
Git提供了制作格式化的patch的功能,命令如下:
git format-patch -N
其中,N是整数,用来指定我们把最近N次提交做成N个patch。比如当N=1时,就表示把最近一次提交制作成patch。Git会根据提交的log信息来自动命名patch文件。
这里需要注意的是,每次提交的log的描述要遵循一定的格式。
Log的第一行是一个简短的描述。本文主要介绍如何向staging tree提交代码,我们需要在Log首行以“staging:”开头。Log的最后一行需要提供提交者的email信息,我们可以这样写:“Signed-off-by: wwang <wwang@some.site>”。
举个例子,假定我们的staging driver命名为hello_world,log的格式可以参考如下:
staging: hello_world: My first commit
This is my first commit.
Signed-off-by: wwang <wwang@some.site>
Patch生成之后,我们需要把它寄给staging tree的维护者,通常是Greg KH本人以及linux内核驱动的开发者列表。这个步骤也可以使用git来帮助我们完成,但首先需要确定系统里已经安装msmtp和git-email这两个包。这里还需提醒一下,如果您的邮件服务器是Exchange,很可能需要NTLM认证,这就要求msmtp支持NTLM。Ubuntu仓库里的msmtp默认支持NTLM,可以直接使用,但还有些其他的发行版的软件仓库里自带的msmtp并不支持NTLM(如Arch Linux),这种情况就需要自己编译了。
msmtp安装好之后,需要配置"~/.msmtprc"文件。以Gmail为例,".msmtprc"可以这样配置:
# Set default values for all following accounts.
defaults
logfile ~/.msmtp.log
# gmail
account gmail
protocol smtp
host smtp.gmail.com
from my@gmail.com
user my@gmail.com
password mypasswd
port 587
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
syslog LOG_MAIL
# Set a default account
account default : gmail
用git发送patch的命令如下:
git send-email
--smtp-server /usr/bin/msmtp
--from my@gmail.com
--to gregkh@suse.de
--to devel@linuxdriverproject.org
--to linux-kernel@vger.kernel.org
./my.patch
将patch发送出去只是提交驱动程序的第一步,之后还需要不断的维护与完善,把代码丢给内核然后就放手不管的做法是不可取的。提交代码还有一个原则,就是每次提交只做一件事情,这样才会比较方便内核维护者来review我们的代码。