哪些网站可以兼职做设计,wordpress ftp 插件,网站开发需要多少费用,广州 网站建设网络推广网页设计2021年#xff0c;我曾经在openEuler社区上看到一项改进Linux内核工具的需求#xff0c;因此参与过Linux内核社区的开源贡献。贡献开源社区的流程都可以在内核社区文档中找到#xff0c;但是#xff0c;单独学习需要一个较长的过程#xff0c;新手难以入门#xff0c;因此…2021年我曾经在openEuler社区上看到一项改进Linux内核工具的需求因此参与过Linux内核社区的开源贡献。贡献开源社区的流程都可以在内核社区文档中找到但是单独学习需要一个较长的过程新手难以入门因此本文整理当年的经验给出一个简明的方法供大家参考。如果本文中有和社区文档描述相矛盾的地方应以社区文档为准。
内存管理子系统的维护者Andrew Morton在一次演讲时观众提问如何参与内核贡献能否出一个教程印象中Andrew Morton的回答是如果想参加Linux内核项目应该先动手做起来。
1. 安装git和git send-email
笔者使用基于鲲鹏服务器的openEuler系统首先使用yum安装git和git-email。Ubuntu用户也可以使用apt工具斯不赘述。
yum install git
yum install git-email其中Yixuan Cao为最终的patch中发送者的名字而caoyixuan2019email.szu.edu.cn指电子邮箱。
配置git和smtp
配置git的姓名和邮箱信息
打开~/.gitconfig文件在文件末尾添加如下信息以腾讯企业邮箱为例
[sendemail]smtpencryption sslsmtpserversmtp.exmail.qq.comsmtpusercaoyixuan2019email.szu.edu.cnsmtpserverport465smtpass***************通过配置腾讯企业邮箱的信息将git-email和自己的邮箱账户绑定在一起。其中smtpuser是指电子邮箱账号smtpass是私有的客户端密码有了这个密码就可以无需验证利用git发送电子邮件。
3.下载和修改Linux kernel源码
使用git下载linux-next分支
下载并修改linux-next分支的代码这样才能保证我们的工作是基于最新的linux代码。实际上Linux内核供开发者开发和测试的版本为next版本next版本经过若干迭代后会在一个被社区称为“merge window”的时期内合入主线mainline版本主线版本经过若干迭代后会进入稳定版。下图为Linux内核社区主页。
使用git下载linux-next的命令如下
git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git下载完成后就会有一个当前目录下就会有一个linux的目录。进入之查看当前的git状态然后建立新的开发分支并切换到开发分支去。
git status
# 创建新分支
git branch develop
git checkout develop接着我们修改代码。需要注意的是可以修改的不仅是代码实现也可以是注释、文档等。修改完成后在开发分支代执行
git status
git add .
git commit -s -v注意 git commit 命令会自动打开编辑器用以编辑提交信息。-s 参数可以自动在你的提交信息下加上一行Signed-off-by: Yixuan Cao caoyixuan2019email.szu.edu.cn -v 参数会在你的提交信息下方显示出你做的修改确保你能再三检查自己的改动这一个参数不是必须的但是推荐这么做。提交信息务必规范不规范的提交信息可能会被直接拒绝至少会被认为是不礼貌的。最终这个git的提交会被制作成开源补丁patch以电子邮件的形式向维护者发送。
对于自动打开的编辑器我们需要补充信息其模板如下
第一部分是 short description以子系统名打头比如 mm注意分号后面加个空格。这一部分最终会作为补丁的标题要让维护者一眼就看出这个补丁大概干了什么事。请注意为了方便内核的维护者管理应该遵循工作的文件中前人提交时的命名惯例。 如内存管理子系统常见的标题写法是mm/cma.c: fail if fixed declaration cant be honored而在别的场景中也有这样的写法arm64: dts: rockchip: fix rk3399 hdmi ports node。第二部分是 the body of your patch这一部分要详细的解释你为何要做这个修改以及怎么做的注意时态用现在时语态用主动形式。第三部分是之前的 -s 参数自动加上的表示邮件和署名是自动生成的不用管。
一个简单的示例如下
mm: fix some errorWhy I do these changes and how I do it.Signed-off-by: Yixuan Cao caoyixuan2019email.szu.edu.cn如果commit之后还想修改提交信息使用命令 git commit --amend -v编辑器重新弹出。这些都是使用git的基本能力更复杂的功能可以自行学习。需要注意如果一次需要修改多处功能应该使用多次提交并生成patchset。
4. 生成补丁
以master分支为基准生成补丁。
git format-patch master这条命令是以 master 分支为基准检测你在当前 develop 分支所做的修改并生成 Patch 文件。
命令完成后你就可以在当前目录下看到你的 Patch 文件了。
5. 检查patch和发送邮件
检查补丁格式要做到 0 errors, 0 warnings。 之所以要做这一件事是因为补丁的格式有严格的限制。例如为了维护者的阅读方便输入的文本内容的每一行都不可太长。但是另一方面这一行命令只能做简单的格式的检查不能检查其是否能够通过编译、功能符合要求等。因此在提交之前应该做好充分的测试。
./scripts/checkpatch.pl 0001-mm-page_owner.c-Modify-the-type-of-argument-order-in.patch6.发送补丁
要将上补丁发送给社区维护者需要查看相关的上游维护者的电子邮箱地址。例如要修改mm/page_owner.c使用命令
./scripts/get_maintainer.pl -f mm/page_owner.c当时的输出结果是
Andrew Morton akpmlinux-foundation.org (maintainer:MEMORY MANAGEMENT)
linux-mmkvack.org (open list:MEMORY MANAGEMENT)
linux-kernelvger.kernel.org (open list)根据输出结果我们知道是Andrew Morton维护mm子系统。用如下命令可以通过电子邮件发送补丁。需注意参数--to后接收件人--cc后接被抄送者。
git send-email --to akpmlinux-foundation.org \
--cc linux-mmkvack.org \
--cc linux-kernelvger.kernel.org \
*.patch至此工作已经全部完成。如果补丁并入上游分支的话会收到通知邮件如果被打回也会被告知有不妥之处。