How_to_contribute_to_linux_kernel

  1. 在GitHub上forklinux的项目

  2. 克隆fork之后的linux到本地

    1
    git clone https://github.com/[username]/linux.git
  3. (可选)对于已克隆到本地的项目,要让fork的项目和原项目保持同步,使用以下指令更新本地和远端项目

    1
    2
    3
    4
    cd path/to/repo
    git fetch --all
    git merge [original_repo_name]/master
    git push -u origin
  4. 定位缺陷

  5. bugzilla提交缺陷。首先要确定缺陷发生的文件隶属于哪个产品,Summary要写清楚缺陷位置及内容,如200511中写道Potential NULL pointer dereference when kzalloc() fails in drivers/clk/pxa/clk-pxa.c;在Description位置适当加上详细的描述,包括具体位置、为什么这是一个缺陷可附上一小段代码片段。

  6. (可选)新建分支用于修改代码

    1
    git checkout -b [new_branch_name]
  7. 修复缺陷,保存

  8. 提交修改

    1
    2
    git add [modified_files]
    git commit

    commit message一般包含两部分:

    1. title:用简短的话说明本次修改的内容,一般格式为:[file_name]: do something。如#6585中写道ssl/statem/statem_srvr.c: add missing check for EVP_PKEY_get0_DH()
    2. body:解释本次修改的原因,如果修复了某个issue,使用Fixes #[issue_ID]来引用
  9. (可选)push commit

    1
    git push

与OpenSSL不同的是,linux并非通过pull request来提交贡献,而是通过git patch的方式来提交,下面介绍如何生成并提交patch。

  1. 接上面第8步(如果需要生成git patch的话,仅在本地有commit即可,不需要推送到远端),使用git format-patch即可生成patch文件,如果仅有一个commit需要patch的话使用git format-patch -1即可。指令生成若干0001-*.patch文件。

  2. linux提供了一个获得patch对应维护者的脚本scripts/get_maintainer.pl,在linux根目录下使用

    1
    ./script/get_maintainer.pl [patch_file]

    即可获得维护者邮箱地址

  3. 将patch使用git send-email发送至相应维护者的邮箱,使用以下指令

    1
    git send-email [patch_file] --to=maintainer@email

    如果是第一次使用git send-email的话,需要进行设置,打开~/.gitconfig并在最后加上下面的设置

    1
    2
    3
    4
    5
    6
    [sendemail]
    smtpserver = [mailserveraddr]
    smtpserverport = 587
    smtpencryption = tls
    smtpuser = [user@mailserveraddr]
    from = name