• 提交 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 msmtp

    2. 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 : gmail

    3. chmod 0600 ~/.msmtprc

    4. sudo apt-get install proxychains

    5. vi /etc/proxychains.conf

    添加如下配置代码:

    [ProxyList]
    # add proxy here ...
    socks5 127.0.0.1 1080

    6. vi ~/.gitconfig

    修改 git 的 sendmail 配置项如下:

    [sendemail]
            smtpserver = /usr/bin/msmtp

    7.使用如下命令发送补丁:

        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

  • 相关阅读:
    Java——数组
    Java——控制循环结构
    脏检查
    Session跟SessionFactory的线程安全与非安全
    脏检查and刷新机构
    oracle函数
    多线程下单列模式
    多线程
    线程同步
    文件上传功能的实现
  • 原文地址:https://www.cnblogs.com/gctech/p/13034983.html
Copyright © 2020-2023  润新知