謝寶友: 手把手教你給Linux內核發(fā)patch

本文簡介

?????? 本文一步一步的演示如何生成一個簡單Linux內核補丁,并提交給Linux社區(qū)。用以展示向社區(qū)提交補丁的步驟。本文英文名稱:《Submit Patches Step by Step》


作者簡介

???????謝寶友,在編程一線工作已經有20年時間,其中接近10年時間工作于Linux操作系統(tǒng)。目前,他是Linux ZTE平臺的Maintainer,向社區(qū)提交了130個補丁,4000多行代碼。同時,他也是《深入理解并行編程》一書的譯者。該書作者Paul E.McKeney是IBM Linux中心領導者,Linux RCU Maintainer。

?????? 作者聯系方式:baoyou.xie@gmail.com

?????? 微信或者QQ:373364645

歡迎關注微信公眾號:linux閱碼場 (id: linuxdev)



一、應有的心態(tài)

Paul在《深入理解并行編程》一書第11.1.2節(jié)中說,驗證和測試工作都需要良好的心態(tài)。應當以一種破壞性的、甚至帶一點仇恨的心理來驗證代碼,有時也應當考慮到:不少人的生命依賴于我們代碼正確性的幾率??傊?,心態(tài)對事情的成敗有重要的影響。

同樣的,在向社區(qū)提交補丁之前,我們也應當有正確的心態(tài):

1. 我們的代碼,可能會影響不少人的生命,所以一定要細心。

2. 悲觀的說,如果補丁做得不好,會被社區(qū)大牛的口水淹死。當然,更可能的情況是,大牛懶得向你吐口水:)所以在提交補丁前,請為自己的聲譽負責。

3. 樂觀的說,社區(qū)牛人一般都比較Nice,如果你的水平真的比較牛的話。

4. 更進一步樂觀的說,你提交的高質量的補丁,可能會為你帶來良好的聲譽、滿意的工作。

5. 需要強調一點的是,在社區(qū),千萬不要和Maintainer作對。要象對待學校老師那樣,謙恭的對待Maintainer。不管你信不信這一點,反正我信了:)


如果你和我一樣,有著近乎自大的自信,請接著讀完本文^-^



二、準備工作

在開始工作之前,請準備如下工作:

1.安裝一份Linux。

不論是ubuntu、centos還是其他Linux發(fā)行版本,都是可以的。我個人習慣使用ubuntu 16.04版本。雖然我曾經嘗試在windows下面安裝git,但是最終你會發(fā)現,在windows下面使用git提交補丁幾乎可以用痛苦來描述。

2.安裝git。

默認的Linux發(fā)行版,一般都已經安裝好git。如果沒有,隨便找一本git的書都可以。這里不詳述。比較好的git資料有:

http://git.oschina.net/progit/

https://item.jd.com/11615420.html

3.配置git

A.配置用戶名和郵箱

在配置用戶名的時候,請注意社區(qū)朋友習慣用英語溝通,也就是名在前,姓在后。這一點會影響社區(qū)郵件討論,因此需要留意。

在配置郵箱時,也要注意。社區(qū)會將國內某些著名的郵件服務器屏蔽。因此建議你申請一個gmail郵箱。

以下是我的配置:


```

? ? ? ?xiebaoyou@ThinkPad-T440$git config -l | grep "user"

?????? user.email=baoyou.xie@linaro.org

?????? user.name=Baoyou Xie

```

B.配置 sendemail

你可以手工修改~/.gitconfig,或者git倉庫下的.git/config文件,添加\[sendemail\]節(jié)。該配置用于指定發(fā)送補丁時用到的郵件服務器參數。

以下是我的配置,供參考:


```

? ? ? ?[sendemail]

????????????? smtp encryption= tls

????????????? smtp server= smtp.gmail.com

????????????? smtp user= baoyou.xie@linaro.org

????????????? smtp serverport= 587

```

gmail郵箱的配置比較麻煩,需要按照google的說明,制作證書。配置完成后,請用如下命令,向自己發(fā)送一個測試補?。?/p>

```

?????? git send-email your.patch --to your.mail --cc your.mail

```

C.下載源碼

首先,請用如下命令,拉取linus維護的Linux主分支代碼到本地:

```

?????? git clone ssh://git@dev-private.git.linaro.org/zte/kernel.git

```

這個過程比較長,請耐心等待。

一般情況下,Linux主分支代碼不夠新,如果你基于這個代碼制作補丁,很有可能不會順利的合入到Maintainer那里,換句話說,Maintainer會將補丁發(fā)回給你,要求你重新制作。所以,一般情況下,你需要再用以下命令,添加其他分支,特別是linux-next分支。強調一下,你需要習慣基于linux-next分支進行工作。

```

? ? ? ?git remote add linux-nexthttps://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git

?????? git remote add staging https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git

?????? git remote add net git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git

```

然后用如下命令拉取這三個分支的代碼到本地:

```

? ? ? ?git fetch --tags linux-next

?????? git fetch --tags staging

?????? git fetch --tags net

```

有些Maintainer維護了自己的代碼分支,那么,你可以在內核源碼目錄\\MAINTAINERS文件中,找一下相應文件的維護者,及其git地址。

例如,watchdog模塊的信息如下:

```

? ? ? ?WATCHDOGDEVICE DRIVERS

?????? M:????? Wim Van Sebroeck <wim@iguana.be>

?????? R:????? Guenter Roeck <linux@roeck-us.net>

?????? L:????? linux-watchdog@vger.kernel.org

?????? W:????? http://www.linux-watchdog.org/

?????? T:????? gitgit://www.linux-watchdog.org/linux-watchdog.git

?????? S:????? Maintained

?????? F:????? Documentation/devicetree/bindings/watchdog/

?????? F:????? Documentation/watchdog/

?????? F:????? drivers/watchdog/

?????? F:????? include/linux/watchdog.h

?????? F:????? include/uapi/linux/watchdog.h

```

其中,git://www.linux-watchdog.org/linux-watchdog.git是其git地址。

你可以用如下命令拉取watchdog代碼到本地:

```

?????? gitremote add watchdog git://www.linux-watchdog.org/linux-watchdog.git

?????? gitfetch --tags watchdog

```

當然,這里友情提醒一下,MAINTAINERS里面的信息可能不一定準確,這時候你可能需要借助google,或者問一下社區(qū)的朋友,或者直接問一下作者本人。不過,一般情況下,基于linux-next分支工作不會有太大的問題。實在有問題再去打擾作者本人。

**4.閱讀Documentation/SubmittingPatches,這很重要。**

5.檢出源碼

```

? ? ? git branch mybranch next-20170807

```

這個命令表示將linux-next分支的20170807這個tag作為本地mybranch的基礎。

```

? ? ? git checkout? mybranch

```

三、尋找軟柿子

如果沒有奇遇,大廚一般都是從小工做起的。我們不可能一開始就維護一個重要的模塊,或者修復一些非常重要的故障。那么我們應當怎么樣入手參與社區(qū)?這當然要尋找軟柿子了。拿著軟柿子做出來的補丁,可以讓Maintainer無法拒絕合入你的補丁。當然,這么做主要還是為了在Maintainer那里混個臉熟。否則,以后你發(fā)的重要補丁,人家可能不會理你。

什么樣的柿子最軟?下面是答案:

1. 消除編譯警告

2. 編碼格式,例如注釋里面的單詞拼寫錯誤、對齊不規(guī)范、代碼格式不符合社區(qū)要求。

建議是從“消除編譯警告”入手。社區(qū)很多大牛,都是這樣成長起來的。

我們平時編譯內核,基本上遇不到編譯警告。是不是內核非常完美,沒有編譯警告,非矣!你用下面這個步驟試一下:

首先,配置內核,選擇所有模塊:

```

? ? ? makeARCH=arm64 allmodconfig

```

請注意其中“allmodconfig”,很有用的配置,我們暫且可以理解為,將所有模塊都編譯。這樣我們就可以查找所有模塊中的編譯警告了。

下面這個命令開始編譯所有模塊:

```

? ? ? make ARCH=arm64 EXTRA_CFLAGS="-Wmissing-declarations -Wmissing-prototypes" CROSS_COMPILE=/toolchains/aarch64-linux-gnu/bin/aarch64-linux-gnu-

```

其中 **EXTRA_CFLAGS="-Wmissing-declarations-Wmissing-prototypes"** 參數表示追蹤所有missing-declarations、missing-prototypes類型的警告。

CROSS_COMPILE=/toolchains/aarch64-linux-gnu/bin/aarch64-linux-gnu-是指定交叉編譯工具鏈路徑,需要根據你的實際情況修改。當然,如果是x86架構,則不需要指定此參數。

在編譯的過程中,我們發(fā)現如下錯誤:

```

? ? ? scripts/Makefile.build:311:recipe for target 'drivers/staging/fsl-mc/bus/dpio/qbman-portal.o' failed

```

我們可以簡單的忽略drivers/staging/fsl-mc/bus/dpio/qbman-portal.c這個文件。在drivers/staging/fsl-mc/bus/dpio/Makefile文件中,發(fā)現這個文件的編譯依賴于宏CONFIG\_FSL\_MC\_DPIO。

于是,我們修改編譯命令,以如下命令繼續(xù)編譯:

```

? ? ? make CONFIG_ACPI_SPCR_TABLE=n ARCH=arm64 EXTRA_CFLAGS="-Wmissing-declarations -Wmissing-prototypes" CROSS_COMPILE=/toolchains/aarch64-linux-gnu/bin/aarch64-linux-gnu-

```

請注意該命令中的“CONFIG\_ACPI\_SPCR\_TABLE=n”,它強制關閉了 CONFIG\_ACPI\_SPCR\_TABLE配置。

當編譯完成以后,我們是不是發(fā)現有很多警告?特別是在drivers目錄下。

下面是我在next-20170807版本中發(fā)現的警告:

```

? ? ? ?/dimsum/git/kernel.next/drivers/clk/samsung/clk-s3c2410.c:363:13:warning: no previous prototype for 's3c2410_common_clk_init'[-Wmissing-prototypes]

?void__init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

????????????^

?CC?????drivers/clk/samsung/clk-s3c2412.o

/dimsum/git/kernel.next/drivers/clk/samsung/clk-s3c2412.c:254:13:warning: no previous prototype for 's3c2412_common_clk_init'[-Wmissing-prototypes]

?void__init s3c2412_common_clk_init(struct device_node *np, unsigned long xti_f,

????????????^

?CC?????drivers/clk/samsung/clk-s3c2443.o

/dimsum/git/kernel.next/drivers/clk/samsung/clk-s3c2443.c:388:13:warning: no previous prototype for 's3c2443_common_clk_init' [-Wmissing-prototypes]

?void__init s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f,

```

下一節(jié),我們就基于這幾個警告來制作補丁。

四、制作補丁

要消除這幾個警告,當然很簡單了。將這幾個函數聲明為static即可。下面是我的修改:

```

git diff

diff --git a/drivers/clk/samsung/clk-s3c2410.c b/drivers/clk/samsung/clk-s3c2410.c

index e0650c3..8f4fc5a 100644

--- a/drivers/clk/samsung/clk-s3c2410.c

+++ b/drivers/clk/samsung/clk-s3c2410.c

@@ -360,7 +360,7 @@ static void __inits3c2410_common_clk_register_fixed_ext(

???????samsung_clk_register_alias(ctx, &xti_alias, 1);

?}


-void __init s3c2410_common_clk_init(structdevice_node *np, unsigned long xti_f,

+static void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

??????????????????????????????????? intcurrent_soc,

??????????????????????????????????? void__iomem *base)

?{

diff --git a/drivers/clk/samsung/clk-s3c2412.c b/drivers/clk/samsung/clk-s3c2412.c

index b8340a4..2a2ce06 100644

--- a/drivers/clk/samsung/clk-s3c2412.c

+++ b/drivers/clk/samsung/clk-s3c2412.c

@@ -251,7 +251,7 @@ static void __init s3c2412_common_clk_register_fixed_ext(

???????samsung_clk_register_alias(ctx, &xti_alias, 1);

?}


-void __init s3c2412_common_clk_init(struct device_node *np, unsigned long xti_f,

+static void __init s3c2412_common_clk_init(struct device_node *np, unsigned long xti_f,

??????????????????????????????????? unsigned long ext_f, void __iomem *base)

?{

???????struct samsung_clk_provider *ctx;

diff --gita/drivers/clk/samsung/clk-s3c2443.c b/drivers/clk/samsung/clk-s3c2443.c

index abb935c..f0b88bf 100644

--- a/drivers/clk/samsung/clk-s3c2443.c

+++ b/drivers/clk/samsung/clk-s3c2443.c

@@ -385,7 +385,7 @@ static void __inits3c2443_common_clk_register_fixed_ext(

???????????????????????????????ARRAY_SIZE(s3c2443_common_frate_clks));

?}


-void __init s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f,

+static void __init s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f,

??????????????????????????????????? int current_soc,

??????????????????????????????????? void __iomem *base)?

```

再編譯一次,警告果然被消除了。原來,社區(qū)工作如此簡單:)

但是請允許我澆一盆冷水!

你先試著用下面的命令做一個補丁出來看看!

```

? ? ? ?git add drivers/clk/samsung/clk-s3c2410.c

?????? git add drivers/clk/samsung/clk-s3c2412.c

?????? git add drivers/clk/samsung/clk-s3c2443.c

?????? git commit drivers/clk/samsung/

????????????? [zxic/67184930591] this is my test

????????????? ?3 files changed, 3 insertions(+), 3deletions(-)

?????? gitformat-patch -s -v 1 -1

```

生成的補丁內容如下:

```

cat v1-0001-this-is-my-test.patch

From 493059190e9ca691cf08063ebaf945627a5568c7 Mon Sep 17 00:00:00 2001

From: Baoyou Xie<baoyou.xie@linaro.org>

Date: Thu, 17 Aug 2017 19:23:13 +0800

Subject: [PATCH v1] this is my test


Signed-off-by: Baoyou Xie<baoyou.xie@linaro.org>

---

?drivers/clk/samsung/clk-s3c2410.c | 2 +-

?drivers/clk/samsung/clk-s3c2412.c | 2 +-

?drivers/clk/samsung/clk-s3c2443.c | 2 +-

?3files changed, 3 insertions(+), 3 deletions(-)


diff --git a/drivers/clk/samsung/clk-s3c2410.c b/drivers/clk/samsung/clk-s3c2410.c

index e0650c3..8f4fc5a 100644

--- a/drivers/clk/samsung/clk-s3c2410.c

+++ b/drivers/clk/samsung/clk-s3c2410.c

@@ -360,7 +360,7 @@ static void __init s3c2410_common_clk_register_fixed_ext(

????? samsung_clk_register_alias(ctx,&xti_alias, 1);

?}


-void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

+static void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

?????????????????????????? ??? int current_soc,

?????????????????????????? ??? void __iomem *base)

?{

diff --git a/drivers/clk/samsung/clk-s3c2412.c b/drivers/clk/samsung/clk-s3c2412.c

index b8340a4..2a2ce06 100644

--- a/drivers/clk/samsung/clk-s3c2412.c

+++ b/drivers/clk/samsung/clk-s3c2412.c

@@ -251,7 +251,7 @@ static void __inits3c2412_common_clk_register_fixed_ext(

????? samsung_clk_register_alias(ctx,&xti_alias, 1);

?}


-void __init s3c2412_common_clk_init(structdevice_node *np, unsigned long xti_f,

+static void __init s3c2412_common_clk_init(struct device_node *np, unsigned long xti_f,

?????????????????????????? ??? unsigned long ext_f, void __iomem *base)

?{

????? struct samsung_clk_provider *ctx;

diff --git a/drivers/clk/samsung/clk-s3c2443.c b/drivers/clk/samsung/clk-s3c2443.c

index abb935c..f0b88bf 100644

--- a/drivers/clk/samsung/clk-s3c2443.c

+++ b/drivers/clk/samsung/clk-s3c2443.c

@@ -385,7 +385,7 @@ static void __inits3c2443_common_clk_register_fixed_ext(

?????????????????????????? ARRAY_SIZE(s3c2443_common_frate_clks));

?}


-void __init s3c2443_common_clk_init(structdevice_node *np, unsigned long xti_f,

+static void __init s3c2443_common_clk_init(struct device_node *np, unsigned long xti_f,

?????????????????????????? ??? int current_soc,

?????????????????????????? ??? void __iomem *base)

?{

--

2.7.4

```

你可以試著用git send-email v1-0001-this-is-my-test.patch --to baoyou.xie@linaro.org將補丁發(fā)給Maintainer。記得準備好一個盆子,接大家的口水:)

在制作正確的補丁之前,我們需要這個錯誤的補丁錯在何處:

1.應該將它拆分成三個補丁。

也許這一點值得商酌,因為這三個文件都是同一個驅動:clk: samsung。也許Maintainer認為它是同一個驅動,做成一個補丁也是可以的。

我覺得應該拆分成三個。

當然了,應當以Maintainer的意見為準。不同的Maintainer也許會有不同的意見。

2.補丁描述實在太LOW。

3.補丁格式不正確。

4.補丁內容不正確。

下一節(jié)我們逐個解決這幾個問題。

但是首先我們應當將補丁回退。使用如下命令:

```

? ? ? git reset HEAD~1

```

五、制作正確的補丁

1.補丁描述

補丁第一行是標題,比較重要。它首先應當是模塊名稱。

但是我們怎么找到drivers/clk/samsung/clk-s3c2412.c文件屬于哪個模塊?

可以試試下面這個命令,看看drivers/clk/samsung/clk-s3c2412.c文件的歷史補?。?/p>

```

? ? ? ?root@ThinkPad-T440:/dimsum/git/kernel.next#?git log drivers/clk/samsung/clk-s3c2412.c

?????? commit 02c952c8f95fd0adf1835704db95215f57cfc8e6

?????? Author:Martin Kaiser <martin@kaiser.cx>

?????? Date:?? Wed Jan 25 22:42:25 2017 +0100


??? ??????clk: samsung:mark s3c...._clk_sleep_init() as __init?

```

ok,模塊名稱是 “clk:samsung”

下面是我為這個補丁添加的描述,其中第一行是標題:

```

clk: samsung: mark symbols static where possible for s3c2410


We get 1 warnings when building kernel withW=1:

/dimsum/git/kernel.next/drivers/clk/samsung/clk-s3c2410.c:363:13:warning: no previous prototype for 's3c2410_common_clk_init'[-Wmissing-prototypes]

?void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,


In fact, this function is only used in thefile in which they are

declared and don't need a declaration, butcan be made static.

So this patch marks these functions with 'static'.

```

這段描述是我從其他補丁中拷貝出來的,有幾下幾點需要注意:

1. 標題中故意添加了“for s3c2410”,以區(qū)別于另外兩個補丁

2. “1 warnings”這個單詞中,錯誤的使用了復數,這是因為復制的原因

3. “/dimsum/git/kernel.next/”這個路徑名與我的本地路徑相關,不應當出現在補丁中。

4. 警告描述超過了80個字符,但是這是一個特例,這里允許超過80字符。

這些問題,如果不處理的話,Maintainer會不高興的!如果Maintainer表示了不滿,而你不修正的話,這個補丁就會被忽略。

修正后的補丁描述如下:

```

clk: samsung: mark symbols static wherepossible for s3c2410


We get 1 warning when building kernel withW=1:

drivers/clk/samsung/clk-s3c2410.c:363:13:warning: no previous prototype for 's3c2410_common_clk_init'[-Wmissing-prototypes]

?void__init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,


In fact, this function is only used in thefile in which they are

declared and don't need a declaration, but can be made static.

So this patch marks these functions with 'static'.

```

我們的補丁描述一定要注意用詞,不要出現將“unused”寫為“no used”這樣的錯誤。

反復使用git add,git commit將補丁提交到git倉庫。

終于快成功,是不是想慶祝一下。用git命令看看我們剛才提交的三個補?。?/p>

```

root@ThinkPad-T440:/dimsum/git/kernel.next#git log drivers/clk/samsung/

commit0539c5bc17247010d17394b0dc9f788959381c8f

Author: Baoyou Xie<baoyou.xie@linaro.org>

Date:??Thu Aug 17 20:43:09 2017 +0800


???clk: samsung: mark symbols static where possible for s3c2443


???We get 1 warning when building kernel with W=1:

???drivers/clk/samsung/clk-s3c2443.c:388:13: warning: no previous prototypefor 's3c2443_common_clk_init' [-Wmissing-prototypes]

????void __init s3c2443_common_clk_init(struct device_node *np, unsignedlong xti_f,


???In fact, this function is only used in the file in which they are

???declared and don't need a declaration, but can be made static.

???So this patch marks these functions with 'static'.


commitc231d40296b4ee4667e3559e34b00f738cae1e58

Author: Baoyou Xie<baoyou.xie@linaro.org>

Date:??Thu Aug 17 20:41:38 2017 +0800


???clk: samsung: mark symbols static where possible for s3c2412


???We get 1 warning when building kernel with W=1:

???drivers/clk/samsung/clk-s3c2412.c:254:13: warning: no previous prototypefor 's3c2412_common_clk_init' [-Wmissing-prototypes]

????void __init s3c2412_common_clk_init(struct device_node *np, unsignedlong xti_f,


???In fact, this function is only used in the file in which they are

???declared and don't need a declaration, but can be made static.

???So this patch marks these functions with 'static'.


commit ff8ea5ed4947d9a643a216d51f14f6cb87abcb97

Author: Baoyou Xie<baoyou.xie@linaro.org>

Date:??Thu Aug 17 20:40:50 2017 +0800


???clk: samsung: mark symbols static where possible for s3c2410

```

**但是,你發(fā)現補丁描述里面還有什么不正確的嗎??**

不過Maintainer也許發(fā)現不了這個問題,然后~這個補丁也可能被接收入內核。

下面我們生成補?。?/p>

```

root@ThinkPad-T440:/dimsum/git/kernel.next#git format-patch -s -3

0001-clk-samsung-mark-symbols-static-where-possible-for-s.patch

0002-clk-samsung-mark-symbols-static-where-possible-for-s.patch

0003-clk-samsung-mark-symbols-static-where-possible-for-s.patch

```

實際上,我們的補丁仍然是錯誤的。

在發(fā)送補丁前,我們需要用腳本檢查一下補丁:

```

root@ThinkPad-T440:/dimsum/git/kernel.next#./scripts/checkpatch.pl 000*

---------------------------------------------------------------

0001-clk-samsung-mark-symbols-static-where-possible-for-s.patch

---------------------------------------------------------------

WARNING: Possible unwrapped commit description (prefer a maximum 75 chars per line)

#9:

?void__init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,


WARNING: line over 80 characters

#29: FILE:drivers/clk/samsung/clk-s3c2410.c:363:

+static void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,


total: 0 errors, 2 warnings, 8 lineschecked?

```

請留意輸出警告,其中第一個警告是說我們的描述中,有過長的語句。前面已經提到,這個警告可以忽略。

但是第二個警告告訴我們代碼行超過80個字符了。這是不能忽略的警告,必須處理。

使用“git resetHEAD~3”命令將三個補丁回退。重新修改代碼:

```

? static void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

```

修改為

```

? ? ? static void __init

? ? ? s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

```

也可以修改為

```

? ? ? static void __init s3c2410_common_clk_init(struct device_node *np, unsigned long xti_f,

```

我個人習慣用第一種方法,因為看其他代碼也是第一種修改方法。

重新提交補丁,并用gitformat-patch命令生成補丁。

#### 六、發(fā)送補丁

生成正確的補丁后,請再次用**checkpatch.pl**檢查補丁正確性。

確保無誤后,可以準備將它發(fā)送給Maintainer了。

但是應該將補丁發(fā)給誰?這可以用**get_maintainer.pl**來查看:

```

? root@ThinkPad-T440:/dimsum/git/kernel.next#./scripts/get_maintainer.pl 000*

Kukjin Kim <kgene@kernel.org>(maintainer:ARM/SAMSUNG EXYNOS ARM ARCHITECTURES)

Krzysztof Kozlowski <krzk@kernel.org>(maintainer:ARM/SAMSUNG EXYNOS ARM ARCHITECTURES)

Sylwester Nawrocki<s.nawrocki@samsung.com> (supporter:SAMSUNG SOC CLOCK DRIVERS)

Tomasz Figa <tomasz.figa@gmail.com>(supporter:SAMSUNG SOC CLOCK DRIVERS)

Chanwoo Choi <cw00.choi@samsung.com>(supporter:SAMSUNG SOC CLOCK DRIVERS)

Michael Turquette<mturquette@baylibre.com> (maintainer:COMMON CLK FRAMEWORK)

Stephen Boyd <sboyd@codeaurora.org>(maintainer:COMMON CLK FRAMEWORK)

linux-arm-kernel@lists.infradead.org(moderated list:ARM/SAMSUNG EXYNOS ARM ARCHITECTURES)

linux-samsung-soc@vger.kernel.org (moderatedlist:ARM/SAMSUNG EXYNOS ARM ARCHITECTURES)

linux-clk@vger.kernel.org (open list:COMMONCLK FRAMEWORK)

linux-kernel@vger.kernel.org (open list)

```

接下來,可以用git send-email命令發(fā)送補丁了:

```

git send-email 000* --tokgene@kernel.org,krzk@kernel.org,s.nawrocki@samsung.com,tomasz.figa@gmail.com,cw00.choi@samsung.com,mturquette@baylibre.com,sboyd@codeaurora.org--cc linux-arm-kernel@lists.infradead.org,linux-samsung-soc@vger.kernel.org,linux-clk@vger.kernel.org,linux-kernel@vger.kernel.org

```

注意,哪些人應當作為郵件接收者,哪些人應當作為抄送者。在本例中,補丁是屬于實驗性質的,可以不抄送給郵件列表帳戶。

提醒:你應當將補丁先發(fā)給自己,檢查無誤后再發(fā)出去。如果你有朋友在社區(qū)有較高的威望,也可以抄送給他,必要的時候,也許他能給你一些幫助。這有助于將補丁順利的合入社區(qū)。

重要提醒:本文講述的,主要是實驗性質的補丁,用于打開社區(qū)大門。真正重要的補丁,可能需要經過反復修改,才能合入社區(qū)。我知道有一些補丁,超過兩年時間都沒能合入社區(qū),因為總是有需要完善的地方,也許還涉及一些社區(qū)政治:)

更多精彩更新中……歡迎關注公眾號 linux閱碼場 id: linuxdev

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容