Warning
此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。
Note
如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。
- Original:
- Translator:
- Alex Shi <alexs@kernel.org> 
- Wu XiangCheng <bobwxc@email.cn> 
- Hu Haowen <2023002089@link.tyut.edu.cn> 
 
Linux內核補丁提交檢查單¶
如果開發人員希望看到他們的內核補丁提交更快地被接受,那麼他們應該做一些基本 的事情。
這些都是在 提交补丁:如何让你的改动进入内核 和其他有關提交Linux內核補丁的文檔中提供的。
- 如果使用工具,則包括定義/聲明該工具的文件。不要依賴其他頭文件來引入您使用 的頭文件。 
- 乾淨的編譯: - 使用合適的 - CONFIG選項- =y、- =m和- =n。沒有- gcc警告/錯誤,沒有鏈接器警告/錯誤。
- 通過 - allnoconfig、- allmodconfig
- 使用 - O=builddir時可以成功編譯
- 任何 Documentation/ 下的變更都能成功構建且不引入新警告/錯誤。 用 - make htmldocs或- make pdfdocs檢驗構建情況並修復問題。
 
- 通過使用本地交叉編譯工具或其他一些構建設施在多個CPU體系結構上構建。 
- PPC64是一種很好的交叉編譯檢查體系結構,因爲它傾向於對64位的數使用無符號 長整型。 
- 按 Linux 内核代码风格 所述檢查您的 補丁是否爲常規樣式。在提交之前使用補丁樣式檢查器 - scripts/checkpatch.pl檢查是否有輕微的衝突。您應該能夠處理您的補丁中存在的所有 違規行爲。
- 任何新的或修改過的 - CONFIG選項都不應搞亂配置菜單,並默認爲關閉,除非 它們符合- Documentation/kbuild/kconfig-language.rst菜單屬性:默認值中 記錄的例外條件。
- 所有新的 - kconfig選項都有幫助文本。
- 已仔細審查了相關的 - Kconfig組合。這很難用測試來糾正——腦力在這裏是有 回報的。
- 通過 sparse 清查。 (參見 Sparse ) 
- 使用 - make checkstack並修復他們發現的任何問題。- Note - checkstack並不會明確指出問題,但是任何一個在堆棧上使用超過512 字節的函數都可以進行更改。
- 包括 kernel-doc 內核文檔以記錄全局內核API。(靜態 函數不需要,但也可以。)使用 - make htmldocs或- make pdfdocs檢查 kernel-doc 並修復任何問題。
- 通過以下選項同時啓用的測試: - CONFIG_PREEMPT,- CONFIG_DEBUG_PREEMPT,- CONFIG_DEBUG_SLAB,- CONFIG_DEBUG_PAGEALLOC,- CONFIG_DEBUG_MUTEXES,- CONFIG_DEBUG_SPINLOCK,- CONFIG_DEBUG_ATOMIC_SLEEP,- CONFIG_PROVE_RCU和- CONFIG_DEBUG_OBJECTS_RCU_HEAD。
- 在 - CONFIG_SMP,- CONFIG_PREEMPT開啓和關閉的情況下都進行構建和運行 時測試。
- 所有代碼路徑都已在啓用所有死鎖檢測(lockdep)功能的情況下運行。 
- 所有新的 - /proc條目都記錄在- Documentation/
- 所有新的內核引導參數都記錄在 The kernel’s command-line parameters 中。 
- 所有新的模塊參數都記錄在 - MODULE_PARM_DESC()
- 所有新的用戶空間接口都記錄在 - Documentation/ABI/中。有關詳細信息, 請參閱 Linux ABI description (或- Documentation/ABI/README)。 更改用戶空間接口的補丁應該抄送 linux-api@vger.kernel.org。
- 已通過至少注入slab和page分配失敗進行檢查。請參閱 - Documentation/fault-injection/。 如果新代碼是實質性的,那麼添加子系統特定的故障注入可能是合適的。
- 新添加的代碼已經用 - gcc -W編譯(使用- make EXTRA-CFLAGS=-W)。這 將產生大量噪聲,但對於查找諸如“警告:有符號和無符號之間的比較”之類的錯誤 很有用。
- 在它被合併到-mm補丁集中之後進行測試,以確保它仍然與所有其他排隊的補丁以 及VM、VFS和其他子系統中的各種更改一起工作。 
- 所有內存屏障(例如 - barrier(),- rmb(),- wmb())都需要源代碼注 釋來解釋它們正在執行的操作及其原因的邏輯。
- 如果補丁添加了任何ioctl,那麼也要更新 - Documentation/userspace-api/ioctl/ioctl-number.rst。
- 如果修改後的源代碼依賴或使用與以下 - Kconfig符號相關的任何內核API或 功能,則在禁用相關- Kconfig符號和/或- =m(如果該選項可用)的情況 下測試以下多個構建[並非所有這些都同時存在,只是它們的各種/隨機組合]:- CONFIG_SMP,- CONFIG_SYSFS,- CONFIG_PROC_FS,- CONFIG_INPUT,- CONFIG_PCI,- CONFIG_BLOCK,- CONFIG_PM,- CONFIG_MAGIC_SYSRQ,- CONFIG_NET,- CONFIG_INET=n(但是最後一個需要- CONFIG_NET=y)。