Warning
此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。
Note
如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。
- Original:
- 譯者:
吳想成 Wu XiangCheng <bobwxc@email.cn> 胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>
報告問題¶
簡明指南(亦即 太長不看)¶
您面臨的是否爲同系列穩定版或長期支持內核的普通內核的迴歸?是否仍然受支持? 請搜索 LKML內核郵件列表 和 Linux穩定版郵件列表 存檔中匹配的報告並 加入討論。如果找不到匹配的報告,請安裝該系列的最新版本。如果它仍然出現問題, 請報告給穩定版郵件列表(stable@vger.kernel.org)並抄送回歸郵件列表 (regressions@lists.linux.dev);理想情況下,還可以抄送維護者和相關子系統的 郵件列表。
在所有其他情況下,請儘可能猜測是哪個內核部分導致了問題。查看MAINTAINERS文件, 瞭解開發人員希望如何得知問題,大多數情況下,報告問題都是通過電子郵件和抄送 相關郵件列表進行的。檢查報告目的地的存檔中是否已有匹配的報告;也請搜索 LKML 和網絡。如果找不到可加入的討論,請 安裝 最新的主線內核 。如果仍存在問題,請發送報告。
問題已經解決了,但是您希望看到它在一個仍然支持的穩定版或長期支持系列中得到 解決?請安裝其最新版本。如果它出現了問題,那麼在主線中搜索修復它的更改,並 檢查是否正在回傳(backporting)或者已放棄;如果兩者都沒有,那麼可詢問處理 更改的人員。
通用提醒 :當安裝和測試上述內核時,請確保它是普通的(即:沒有補丁,也沒 有使用附加模塊)。還要確保它是在一個正常的環境中構建和運行,並且在問題發生 之前沒有被污染(tainted)。
當你同時面臨Linux內核的多個問題時,請分別報告。在編寫報告時,要涵蓋與問題 相關的所有信息,如使用的內核和發行版。如果碰見迴歸,請把報告抄送回歸郵件列表 (regressions@lists.linux.dev)。也請試試用二分法找出源頭;如果成功找到,請 在報告中寫上它的提交ID並抄送sign-off-by鏈中的所有人。
一旦報告發出,請回答任何出現的問題,並儘可能地提供幫助。這包括通過不時重新 測試新版本併發送狀態更新來推動進展。
如何向內核維護人員報告問題的逐步指南¶
上面的簡明指南概述瞭如何向Linux內核開發人員報告問題。對於已經熟悉向自由和開 源軟件(FLOSS)項目報告問題的人來說,這可能是他們所需要的全部內容。對於其他 人,本部分更爲詳細,並一步一步地描述。爲了便於閱讀,它仍然儘量簡潔,並省略 了許多細節;這些在逐步指南後的參考章節中進行了描述,該章節更詳細地解釋了每 個步驟。
注意:本節涉及的方面比簡明指南多,順序也稍有不同。這符合你的利益,以確保您 儘早意識到看起來像Linux內核毛病的問題可能實際上是由其他原因引起的。這些步驟 可以確保你最終不會覺得在這一過程中投入的時間是浪費:
您是否面臨硬件或軟件供應商提供的Linux內核的問題?那麼基本上您最好停止閱讀 本文檔,轉而向您的供應商報告問題,除非您願意自己安裝最新的Linux版本。尋找 和解決問題往往需要後者。
使用您喜愛的網絡搜索引擎對現有報告進行粗略搜索;此外,請檢查 Linux內核郵件列表(LKML) 的存檔。如果 找到匹配的報告,請加入討論而不是發送新報告。
看看你正在處理的問題是否爲迴歸問題、安全問題或非常嚴重的問題:這些都是需 要在接下來的一些步驟中特別處理的“高優先級問題”。
確保不是內核環境導致了您面臨的問題。
創建一個新的備份,並將系統修復和恢復工具放在手邊。
確保您的系統不會通過動態構建額外的內核模塊來增強其內核,像DKMS這樣的解決 方案可能在您不知情的情況下就在本地進行了這樣的工作。
當問題發生時,檢查您的內核是否被“污染”,因爲使內核設置這個標誌的事件可能 會導致您面臨的問題。
粗略地寫下如何重現這個問題。如果您同時處理多個問題,請爲每個問題單獨寫注 釋,並確保它們在新啓動的系統上獨立出現。這是必要的,因爲每個問題都需要分 別報告給內核開發人員,除非它們嚴重糾纏在一起。
如果您正面臨穩定版或長期支持版本線的迴歸(例如從5.10.4更新到5.10.5時出現 故障),請查看後文“報告穩定版和長期支持內核線的迴歸”小節。
定位可能引起問題的驅動程序或內核子系統。找出其開發人員期望的報告的方式和 位置。注意:大多數情況下不會是 bugzilla.kernel.org,因爲問題通常需要通 過郵件發送給維護人員和公共郵件列表。
在缺陷追蹤器或問題相關郵件列表的存檔中徹底搜索可能與您的問題匹配的報告。 如果你發現了一些相關討論,請加入討論而不是發送新的報告。
在完成這些準備之後,你將進入主要部分:
除非您已經在運行最新的“主線”Linux內核,否則最好在報告流程前安裝它。在某些 情況下,使用最新的“穩定版”Linux進行測試和報告也是可以接受的替代方案;在 合併窗口期間,這實際上可能是最好的方法,但在開發階段最好還是暫停幾天。無論 你選擇什麼版本,最好使用“普通”構建。忽略這些建議會大大增加您的報告被拒絕 或忽略的風險。
確保您剛剛安裝的內核在運行時不會“污染”自己。
在您剛剛安裝的內核中復現這個問題。如果它沒有出現,請查看下方只發生在 穩定版和長期支持內核的問題的說明。
優化你的筆記:試着找到並寫出最直接的復現問題的方法。確保最終結果包含所有 重要的細節,同時讓第一次聽說的人容易閱讀和理解。如果您在此過程中學到了一 些東西,請考慮再次搜索關於該問題的現有報告。
如果失敗涉及“panic”、“Oops”、“warning”或“BUG”,請考慮解碼內核日誌以查找觸 發錯誤的代碼行。
如果您的問題是迴歸問題,請儘可能縮小引入問題時的範圍。
通過詳細描述問題來開始編寫報告。記得包括以下條目:您爲復現而安裝的最新內 核版本、使用的Linux發行版以及關於如何復現該問題的說明。如果可能,將內核 構建配置(.config)和
dmesg的輸出放在網上的某個地方,並鏈接到它。包 含或上傳所有其他可能相關的信息,如Oops的輸出/截圖或來自lspci的輸出 。一旦你寫完了這個主要部分,請在上方插入一個正常長度的段落快速概述問題和 影響。再在此之上添加一個簡單描述問題的句子,以得到人們的閱讀。現在給出一 個更短的描述性標題或主題。然後就可以像MAINTAINERS文件告訴你的那樣發送或 提交報告了,除非你在處理一個“高優先級問題”:它們需要按照下面“高優先級問 題的特殊處理”所述特別關照。等待別人的反應,繼續推進事情,直到你能夠接受這樣或那樣的結果。因此,請公 開和及時地回應任何詢問。測試提出的修復。積極地測試:至少重新測試每個新主 線版本的首個候選版本(RC),並報告你的結果。如果出現拖延,就友好地提醒一 下。如果你沒有得到任何幫助或者未能滿意,請試着自己幫助自己。
報告穩定版和長期支持內核線的迴歸¶
如果您發現了穩定版或長期支持內核版本線中的迴歸問題並按上述流程跳到這裏,那麼 請閱讀本小節。即例如您在從5.10.4更新到5.10.5時出現了問題(從5.9.15到5.10.5則 不是)。開發人員希望儘快修復此類迴歸,因此有一個簡化流程來報告它們:
檢查內核開發人員是否仍然維護你關心的Linux內核版本線:去 kernel.org 的首頁 ,確保此特定版本線的最新版沒有“[EOL]”標記。
檢查 Linux穩定版郵件列表 中的現有報告。
從特定的版本線安裝最新版本作爲純淨內核。確保這個內核沒有被污染,並且仍然 存在問題,因爲問題可能已經在那裏被修復了。如果您第一次發現供應商內核的問題, 請檢查已知最新版本的普通構建是否可以正常運行。
向Linux穩定版郵件列表發送一個簡短的問題報告(stable@vger.kernel.org)並抄送 Linux迴歸郵件列表(regressions@lists.linux.dev);如果你懷疑是由某子系統 引起的,請抄送其維護人員和子系統郵件列表。大致描述問題,並解釋如何復現。 講清楚首個出現問題的版本和最後一個工作正常的版本。然後等待進一步的指示。
下面的參考章節部分詳細解釋了這些步驟中的每一步。
報告只發生在較舊內核版本線的問題¶
若您嘗試了上述的最新主線內核,但未能在那裏復現問題,那麼本小節適用於您;以下 流程有助於使問題在仍然支持的穩定版或長期支持版本線,或者定期基於最新穩定版或 長期支持內核的供應商內核中得到修復。如果是這種情況,請執行以下步驟:
請做好準備,接下來的幾個步驟可能無法在舊版本中解決問題:修復可能太大或太 冒險,無法移植到那裏。
執行前節“報告穩定版和長期支持內核線的迴歸”中的前三個步驟。
在Linux內核版本控制系統中搜索修復主線問題的更改,因爲它的提交消息可能會 告訴你修復是否已經計劃好了支持。如果你沒有找到,搜索適當的郵件列表,尋找 討論此類問題或同行評議可能修復的帖子;然後檢查討論是否認爲修復不適合支持。 如果支持根本不被考慮,加入最新的討論,詢問是否有可能。
前面的步驟之一應該會給出一個解決方案。如果仍未能成功,請向可能引起問題的 子系統的維護人員詢問建議;抄送特定子系統的郵件列表以及穩定版郵件列表
下面的參考章節部分詳細解釋了這些步驟中的每一步。
參考章節:向內核維護者報告問題¶
上面的詳細指南簡要地列出了所有主要步驟,這對大多數人來說應該足夠了。但有時, 即使是有經驗的用戶也可能想知道如何實際執行這些步驟之一。這就是本節的目的, 因爲它將提供關於上述每個步驟的更多細節。請將此作爲參考文檔:可以從頭到尾 閱讀它。但它主要是爲了瀏覽和查找如何實際執行這些步驟的詳細信息。
在深入挖掘細節之前,我想先給你一些一般性建議:
Linux內核開發人員很清楚這個過程很複雜,比其他的FLOSS項目要求更多。我們很 希望讓它更簡單。但這需要在不同的地方以及一些基礎設施上付諸努力,這些基礎 設施需要持續的維護;尚未有人站出來做這些工作,所以目前情況就是這樣。
與某些供應商簽訂的保證或支持合同並不能使您有權要求上游Linux內核社區的開 發人員進行修復:這樣的合同完全在Linux內核、其開發社區和本文檔的範圍之外。 這就是爲什麼在這種情況下,你不能要求任何契約保證,即使開發人員處理的問 題對供應商有效。如果您想主張您的權利,使用供應商的支持渠道代替。當這樣做 的時候,你可能想提出你希望看到這個問題在上游Linux內核中修復;可以這是確 保最終修復將被納入所有Linux發行版的唯一方法來鼓勵他們。
如果您從未向FLOSS項目報告過任何問題,那麼您應該考慮閱讀 如何有效地報告 缺陷 , 如何 以明智的方式提問 , 和 如何提出好問題 。
解決這些問題之後,可以在下面找到如何正確地向Linux內核報告問題的詳細信息。