![]()
整理 | 屠敏
出品 | CSDN(ID:CSDNnews)
眾所周知,向來(lái)脾氣火爆、直來(lái)直去的 Linux 之父 Linus Torvalds,對(duì)代碼質(zhì)量有著嚴(yán)苛的要求,尤其是要合并到 Linux 內(nèi)核的代碼,更是容不得半點(diǎn)瑕疵和敷衍。
可就在 Linux 7.0 內(nèi)核的開發(fā)進(jìn)程中,一批計(jì)劃合入的 MMC 相關(guān)代碼修改,卻直接撞了槍口——被 Linus 接連用“完全是垃圾”、“沒(méi)經(jīng)過(guò)測(cè)試的破爛”狠批,毫無(wú)情面地全部駁回,原本為 Linux 7.0 準(zhǔn)備的一眾 MMC 子系統(tǒng)優(yōu)化,也因此徹底無(wú)緣該版本。
![]()
![]()
MMC 是什么?
Linux MMC(MultiMediaCard)子系統(tǒng)是內(nèi)核中負(fù)責(zé)管理 MMC、SD 及 SDIO 總線協(xié)議的驅(qū)動(dòng)框架。它不僅驅(qū)動(dòng) eMMC、SD 卡等存儲(chǔ)設(shè)備,也驅(qū)動(dòng)通過(guò) SDIO 接口連接的非存儲(chǔ)外設(shè),如 Wi-Fi 模塊、藍(lán)牙適配器等。手機(jī)、嵌入式設(shè)備、開發(fā)板乃至部分服務(wù)器設(shè)備中的存儲(chǔ)及無(wú)線通信部件,都可能依賴這一機(jī)制。
它負(fù)責(zé)設(shè)備初始化、協(xié)議處理以及讀寫調(diào)度等底層工作。雖然普通用戶很少直接接觸這一層,但在實(shí)際系統(tǒng)運(yùn)行中,它是存儲(chǔ)棧里不可或缺的一部分。
![]()
![]()
Linus 怒拒 Linux 7.0 中的 MMC 代碼修改
這次子系統(tǒng)維護(hù)者原本計(jì)劃給 Linux MMC 做一波升級(jí),其實(shí)包含了一些頗有看點(diǎn)的改動(dòng),例如:
為通過(guò) SDIO 連接的 NXP IW61x WiFi 芯片添加設(shè)備 ID 支持;
加入對(duì) 2025 年之后生產(chǎn)日期的識(shí)別支持;
針對(duì)部分 Kingston eMMC 優(yōu)化安全擦除和 TRIM 操作;
對(duì) DW_MMC 代碼進(jìn)行清理;
在 mtk-sd 驅(qū)動(dòng)中新增對(duì)聯(lián)發(fā)科 MT8189 的支持,以及對(duì)多個(gè) SHDCI 驅(qū)動(dòng)的更新。
從功能層面看,這些改動(dòng)并不算激進(jìn),更像是一次常規(guī)迭代。
問(wèn)題出在代碼本身以及流程上。
按照內(nèi)核社區(qū)長(zhǎng)期形成的慣例,子系統(tǒng)更新在向 Linus 發(fā)起 pull request 之前,應(yīng)當(dāng)先進(jìn)入 linux-next 倉(cāng)庫(kù)進(jìn)行整合測(cè)試。linux-next 的作用,是在主線合入前發(fā)現(xiàn)跨子系統(tǒng)沖突、編譯問(wèn)題以及集成錯(cuò)誤。
然而,這次的 MMC 更新到了 Linus 手中時(shí)還存在一堆問(wèn)題。
Linus 在郵件伊始直接怒斥道:“這些改動(dòng)完全是垃圾,甚至連編譯都過(guò)不了。看起來(lái)它們根本沒(méi)有進(jìn)過(guò) linux-next,也沒(méi)有做過(guò)任何構(gòu)建測(cè)試。”
緊接著,他似乎是耐著性子一步一步告訴子系統(tǒng)的貢獻(xiàn)者這段代碼究竟錯(cuò)哪了:
當(dāng) CONFIG_MULTIPLEXER=m 時(shí),我們會(huì)構(gòu)建這個(gè) core.o 文件:
obj-$(CONFIG_MULTIPLEXER) += mux-core.o但在 include/linux/mux/consumer.h 里你卻寫了:
#ifdef CONFIG_MULTIPLEXER這個(gè)條件在這里并不會(huì)成立(因?yàn)閷?shí)際被定義的是 CONFIG_MULTIPLEXER_MODULE),結(jié)果就會(huì)引發(fā)一連串類似下面這樣的錯(cuò)誤:
drivers/mux/core.c:312:14: error: redefinition of ‘mux_control_states’因?yàn)?mux/consumer.h 頭文件里已經(jīng)定義了那個(gè)占位用的封裝函數(shù)。
換句話說(shuō),那條提交 ad314348ceb4(“mux: Add helper functions for getting optional and selected mux-state”)就是徹頭徹尾、未經(jīng)測(cè)試的垃圾。
![]()
Linus 的“代碼”潔癖
其實(shí)熟悉 Linux 社區(qū)的人都知道,Linus 對(duì)代碼質(zhì)量的要求向來(lái)嚴(yán)苛,這次的操作其實(shí)一點(diǎn)都不意外。Linux 作為全球使用最廣泛的開源內(nèi)核,從服務(wù)器、手機(jī)到嵌入式設(shè)備,都有它的身影,內(nèi)核代碼的穩(wěn)定性和可靠性直接關(guān)系到無(wú)數(shù)設(shè)備的正常運(yùn)行。
而 Linux-next 這個(gè)測(cè)試環(huán)節(jié),就是內(nèi)核代碼的“第一道安檢”,能提前發(fā)現(xiàn)編譯、兼容性問(wèn)題,避免有問(wèn)題的代碼進(jìn)入正式版本。這批 MMC 代碼不僅沒(méi)走安檢,還自帶一堆錯(cuò)誤,顯然觸碰了 Linus 的底線。
對(duì)此,Linus 的態(tài)度也很明確:
「我不想看到你再發(fā)什么“修復(fù)版”的 pull request。這件事完全不可接受,在這個(gè)合入窗口期間,我不會(huì)再?gòu)哪氵@里拉取任何東西。
別再給我發(fā)那些沒(méi)進(jìn)過(guò) linux-next、連最基本檢查都通不過(guò)的未測(cè)試?yán)a。
你可以在 7.1 周期再試一次——前提是它真的進(jìn)過(guò) linux-next,并且經(jīng)過(guò)了正確的測(cè)試。」
回看過(guò)往,Linux 內(nèi)核每個(gè)版本周期都會(huì)發(fā)生類似的“臨門剎車”事件。對(duì)外界來(lái)說(shuō),這看起來(lái)像是一次“怒批”;對(duì)長(zhǎng)期參與內(nèi)核開發(fā)的人來(lái)說(shuō),這更像是例行的流程糾偏。
開放協(xié)作并不等于放松標(biāo)準(zhǔn)。正是這種對(duì)流程和質(zhì)量的堅(jiān)持,才讓 Linux 主線在數(shù)十年高頻迭代中保持相對(duì)穩(wěn)定。
參考:
https://www.phoronix.com/news/Linux-7.0-No-MMC-Changes
https://lore.kernel.org/lkml/CAHk-=wgnRQiKqWVrO_uF1btYM2K8r8xL95RGdKU3QLe8B58nrw@mail.gmail.com/
https://gigazine.net/gsc_news/en/20260212-linus-torvalds-rejects-mmc-changes-linux-7/
未來(lái)沒(méi)有前后端,只有 AI Agent 工程師。
這場(chǎng)十倍速的變革已至,你的下一步在哪?
4 月 17-18 日,由 CSDN 與奇點(diǎn)智能研究院聯(lián)合主辦「2026 奇點(diǎn)智能技術(shù)大會(huì)」將在上海隆重召開,大會(huì)聚焦 Agent 系統(tǒng)、世界模型、AI 原生研發(fā)等 12 大前沿專題,為你繪制通往未來(lái)的認(rèn)知地圖。
成為時(shí)代的見(jiàn)證者,更要成為時(shí)代的先行者。
奇點(diǎn)智能技術(shù)大會(huì)上海站,我們不見(jiàn)不散!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.