提交 linux kernel 补丁流程备忘录
1. 订阅 linux 邮件列表
linux 邮件列表 Kernel Mailing Lists 是所有 linux kernel 开源贡献者协同工作的平台,可以通过向 VGER.KERNEL.ORG 发邮件的方式来加入到对应的 Mailing List 中。
订阅/取消 Mailing Lists 的方法:
Send request in email to address <
majordomo@vger.kernel.org>To subscribe a list (``linux-kernel'' is given as an example), use following as the only content of your letter:
subscribe linux-kernel
Like via this URL: "subscribe linux-kernel".
To get off a list (``linux-kernel'' is given as an example), use following as the only content of your letter:
unsubscribe linux-kernel
Like via this URL: "unsubscribe linux-kernel".
相信信息参考如下链接:
http://vger.kernel.org/majordomo-info.html
2. 下载 linux 源代码 git 仓库
2.1 安装配置 git 环境
执行如下命令安装配置 git 程序以及 send-email 工具:
1. sudo apt-get install git
2. sudo apt-get install git-email
执行完上述命令后,修改 ~/.gitconfig 文件内容如下:
[user]
name = your_name
email = your_email_address
[sendemail]
from = your_name <your_email_address>
smtpserver = smtp.gmail.com
smtpserverport = 587
smtpencryption = tls
smtpuser = your_email_address
smtppass = your_password
suppresscc = self
chainreplyto = false
上述 sendemail 配置是不使用 proxy 代理时的配置,如果实际网络环境需要 proxy 访问 gmail,则其配置方法可参考第 5 小节的内容。
2.2 下载 linux 源代码仓库
完成 2.1 中 git 环境配置后,我们需要下载 linux 的源代码仓库作为工作环境,仓库地址可在 linux kernel 源码树的 MAINTAINERS 文件中查找。
从 MAINTAINERS 文件中找到你所要修改的模块的 git 仓库地址,通常每个模块都有一个单独的 git 仓库,以 mmc drier 为例,可查到其 git 仓库地址为:
git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git
将该仓库 clone 到本地,即可以在此基础上进行修改并制作 patch。
3. 制作补丁
1. 创建一个工作分支:git checkout -b develop
2. 修改代码并编译验证
3. 提交修改
git add .
git commit -s -v
-s 参数是在 commit 信息中添加你的签名,必须使用该参数
-v 参数可以在 commit 信息中显示你的修改内容,该参数不强制要求,但是建议添加
4. 执行 git commit -s -v 后会弹出一个文本编辑器,在该编辑器中输入补丁的描述信息,其格式模板示例如下:
mmc: core: fix some errors —— 这一行是补丁描述的标题部分,简要描述修改内容
Why I do these changes and how I do it. ——这部分是详细描述
Signed-off-by: your_name <your_email@gmail.com> ——签名信息
注意:以上三部分之间各需要一个空行,标题部分和详细描述部分每一行的字符数不要超过 75。
可以参考 https://www.kernel.org/ 中其他人提交的补丁描述来完善你自己的描述信息。
5. 生成 patch
git format-patch master
以 master 分支为基准生成 patch 文件,成功执行该命令后会看到类似 0001-xxx-xxx-xxx-xxx.patch 的 patch 文件,xxx-xxx-xxx-xxx 的内容根据 4 中标题部分内容生成。
6. 检查 patch
./scripts/checkpatch.pl 0001-xxx-xxx-xxx-xxx.patch
根据检查结果修改你的提交,直至满足 0 warnings,0 errors
4. 发送补丁
向 linux kernel mailing lists 提交 patch 需要以邮件的方式,将上述生成的 0001-xxx-xxx-xxx-xxx.patch 发送给对应的收件人。
首先需要确认需要将 patch 发送给哪些人,使用如下脚本:
./scripts/get_maintainer.pl -f path/to/file.c
根据你修改的文件 file.c 来查找邮件接收者,以 mmc driver 为例,运行 get_maintainer.pl 脚本后会得到如下输出:
Ulf Hansson <ulf.hansson@linaro.org> (maintainer:MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND...)
your_name <your_mail@gmail.com> (commit_signer:1/1=100%,authored:1/1=100%,added_lines:4/4=100%,removed_lines:2/2=100%)
linux-mmc@vger.kernel.org (open list:MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND...)
linux-kernel@vger.kernel.org (open list)
使用如下命令发送 patch 文件:
git send-email --to ulf.hansson@linaro.org --cc your_mail@gmail.com \
--cc linux-mmc@vger.kernel.org \
--cc linux-kernel@vger.kernel.org \
0001-xxx-xxx-xxx-xxx.patch
5. send-email 使用代理
由于某些众所周知的原因,国内访问 gmail 可能需要费一番周折,需要使用 proxy 才可以。
因此,上述使用 git send-email 通过 gmail 邮箱发送补丁的方式在某些网络环境中无法正常使用。
如果你的网络环境可以正常访问 gmail,参考上述 git send-email 使用方式即可,否则,你需要花点小钱(花点小钱相比免费的 proxy 也许是更经济的解决方案)购买一个 proxy 来完成发送补丁的任务。
假设现在我们已经有了一个可正常使用的 proxy,参考如下步骤完成 send-email 的代理设置:
1.
sudo apt-get install msmtp2.
vi ~/.msmtprc输入如下配置信息:
# Example for a user configuration file
# Set default values for all following accounts.
defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/msmtp.log
# My email service
account gmail
host smtp.gmail.com
port 587
from <your-gmail-id>@gmail.com
auth on
user <your-gmail-id>@gmail.com
password <your-gmail-password>
# Set a default account
account default : gmail3.
chmod 0600 ~/.msmtprc4.
sudo apt-get install proxychains5.
vi /etc/proxychains.conf添加如下配置代码:
[ProxyList]
# add proxy here ...
socks5 127.0.0.1 10806.
vi ~/.gitconfig修改 git 的 sendmail 配置项如下:
[sendemail]
smtpserver = /usr/bin/msmtp7.使用如下命令发送补丁:
proxychains git send-email ulf.hansson@linaro.org --c your_mail@gmail.com \
--cc linux-mmc@vger.kernel.org \
--cc linux-kernel@vger.kernel.org \
0001-xxx-xxx-xxx-xxx.patch
提交 linux kernel 补丁流程备忘录的更多相关文章
- linux kernel启动流程
linux kernel启动是从./init/main.c中开始的,其大概流程是: 1. 调用start_kernel()函数: 2. start_kernel()调用rest_init()函数: 3 ...
- andriod and linux kernel启动流程
虽然这里的Arm Linux kernel前面加上了Android,但实际上还是和普遍Arm linux kernel启动的过程一样的,这里只是结合一下Android的Makefile,讲一下boot ...
- Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback
Linux Kernel文件系统写I/O流程代码分析(二)bdi_writeback 上一篇# Linux Kernel文件系统写I/O流程代码分析(一),我们看到Buffered IO,写操作写入到 ...
- Linux Kernel文件系统写I/O流程代码分析(一)
Linux Kernel文件系统写I/O流程代码分析(一) 在Linux VFS机制简析(二)这篇博客上介绍了struct address_space_operations里底层文件系统需要实现的操作 ...
- 拥抱开源,怎样关注Linux Kernel 邮件列表?
现在开源如此火爆.以至于张口闭口不提到都仿佛不是搞IT 的.那么怎样拥抱开源?本文适合刚開始学习的人,如有大神至此,goto exit ! 一.怎样增加开源 以Linux 为例,这么一个成功的开源项目 ...
- 如何进行Linux Kernel 开发
转自:http://www.cppblog.com/flyonok/archive/2011/04/15/144316.html 如何进行Linux Kernel 开发? (Take 3) 译者序:这 ...
- Linux Kernel - Debug Guide (Linux内核调试指南 )
http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...
- Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State
目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...
- Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞
漏洞名称: Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-067 发布时间: 2013-11-07 ...
随机推荐
- 精讲响应式WebClient第5篇-请求超时设置与异常处理
本文是精讲响应式WebClient第5篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...
- 使用C#对华为IPC摄像头二次开发(一)
开发环境: 操作系统:Win10 x64专业版2004 开发工具:VS2019 16.7.2 目标平台:x86 首先去下载IPC SDK(点击下载,需要华为授权账户.) 新建一个WPF的项目,Fram ...
- springMVC使用JSR303数据校验
JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...
- python爬虫-爬取豆瓣电影数据
#!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:27# 文件 :spider_05.py# IDE :PyChar ...
- Linux下关闭和开启IPv6的方法
确认IPV6是否开启 在Linux下确认IPv6是否已经被启用,可以从三个方面确定. 1.使用ifconfig查看自己的IP地址是否含有IPv6地址. eth0 Link encap:Ethernet ...
- e3mall商城总结12之购物车的实现、以及购物车小计问题、json406报错
说在前面的话 1.本节主要讲了e3mall购物车的实现方法,我搭建的项目和系统购物车有一些区别,因此这里需要说一下.系统搭建的项目在未登陆的情况下也可以通过cookie进行加入购物车,当用户要下单的时 ...
- 蒲公英 · JELLY技术周刊 Vol.20: Vue3 极致优化——分析 Vue3 Compiler 告诉你为什么这么快
蒲公英 · JELLY技术周刊 Vol.20 性能优化是一条无尽的路,我们总是可以找到各种途径去提升体验,不论是响应时间还是按需加载,亦或是根据框架或者组件有针对性的优化都会是不错的方法.如果你在使用 ...
- 发生错误 1069 sqlserver
---------------------------SQL Server 服务管理器---------------------------发生错误 1069 - (由于登录失败而无法启动服务.),此 ...
- 小程序开发-block组件的使用
微信小程序中,block不是一个组件,而是一个包装元素,不会在页面中做任何渲染. 使用情况:条件渲染 wx:if 因为 wx:if 是一个控制属性,需要将它添加到一个标签/组件上,用于控制隐藏与显示. ...
- 如何解决SpringBoot工程中的错误:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required
出错原因:MySQL依赖及MySQL驱动包高于在使用的MySQL数据库版本. 比如,我本地数据库版本是:Server version: 5.2.3-falcon-alpha-community-nt ...