LWN:2022年嵌入式Linux的進(jìn)展!
關(guān)注了就能看到更多這么棒的文章哦~
The 2022 embedded Linux update
By Jake Edge
July 6, 2022
OSSNA
DeepL assisted translation
https://lwn.net/Articles/899742/
Embedded Linux Conference(ELC)的一個常規(guī)內(nèi)容是會議組織者 Tim Bird 對嵌入式 Linux 狀況的更新。我已經(jīng)有好幾年沒有機(jī)會參加了,所以這次德克薩斯州奧斯汀舉行的 2022 年北美開源峰會(OSSNA)我就去參加了一下。OSSNA 是一個總括性的會議(umbrella conference),現(xiàn)在包含了 ELC 以及其他很多內(nèi)容。Bird 從嵌入式的角度介紹了內(nèi)核里最新的相關(guān)功能,談到了若干種各不相同的技術(shù)領(lǐng)域及其對嵌入式 Linux 的影響,還試圖回答 Andrew Morton 在 2008 年 ELC 的主題演講中提出的一個問題。
Bird 有眾多職務(wù),其中之一就是 ELC 的 program committee chair,并且他是索尼電子的首席軟件工程師。他首先介紹說,他正試圖將他平常在各種活動中經(jīng)常發(fā)表的演講從通常的一個半小時壓縮到 40 分鐘。因此,他警告與會者他會講得非???。他演講的主要目標(biāo)是介紹那些已經(jīng)添加到 Linux 內(nèi)核中的新技術(shù),以便與會者可以將這些技術(shù)加入他們的產(chǎn)品中,同時也會在生態(tài)系統(tǒng)中開始討論大家需要關(guān)注的領(lǐng)域。
Past
Bird 于 1993 年開始了他的 Linux 之旅,并于 1998 年在 Lineo 公司轉(zhuǎn)向開始了嵌入式 Linux 開發(fā)。2003 年他跳槽到索尼公司,受雇于該公司來幫助創(chuàng)建消費電子 Linux 論壇(CELF),該論壇于 2005 年開始舉辦 "Embedded Linux Technical Conference"。這就是 ELC 的前身了。2010 年,CELF 轉(zhuǎn)到了 Linux 基金會的旗下,成為 Core Embedded Linux Project。
在 20 世紀(jì) 90 年代末,為了說服各個公司相信 Linux 是嵌入式項目的一個好選擇,大家花費了大量的時間和精力。當(dāng)時的競爭者是商業(yè)版本的實時操作系統(tǒng)(RTOS)和 "公司自己做的一大堆自己攢出來的 bare-metal 的內(nèi)容"。當(dāng)時的主要體系架構(gòu)英特爾、Arm 和 MIPS,都支持 Linux,但沒有一家主要的芯片供應(yīng)商在為內(nèi)核進(jìn)行架構(gòu)開發(fā)和支持;這部分工作是由志愿者和嵌入式 Linux 公司完成。發(fā)行版要么是自己準(zhǔn)備,要么就是來自幾個供應(yīng)商之一(如 MontaVista、Lineo、TimeSys)。
CELF 一開始做的第一件事就是分析 Linux,找出需要改進(jìn)的地方,以使其適用于嵌入式設(shè)備。2003 年,CELF 確定了五個具體的領(lǐng)域:系統(tǒng)規(guī)模(system size)、啟動時間(boot time)、電源管理(power management)、實時性和安全性。然后,該組織資助了這些領(lǐng)域的幾個內(nèi)核功能(以及其他一些領(lǐng)域,如文件系統(tǒng))。
所以,目前已經(jīng)做了很多工作,而且已經(jīng)過去將近 20 年了,"我們還沒有完成嗎?" 這個問題來自于 Morton 在 2008 年的主題演講,也許是一個小小的玩笑,但它至今仍困擾著 Bird。順便說一下,他指出,得感謝 Bootlin,所以該講座的視頻仍然存在,在錄制該講座時 Bootlin 仍被稱為 Free Electrons(當(dāng)年還錄制了許多其他視頻)。Morton 的談話仍然是有意義的,"他當(dāng)年說的東西今天仍然適用,這很令人驚訝"。
Kernel features
然后,Bird 從嵌入式開發(fā)者感興趣的功能和改動出發(fā),對去年的內(nèi)核 release 進(jìn)行了一次旋風(fēng)式的參觀。當(dāng)然,在每個版本中都有很多用于其他用途的功能,他不會涵蓋這些部分。此外,他說也不會過多提及新內(nèi)核版本中的不同驅(qū)動或新的片上系統(tǒng)(SoC)支持。

[Tim Bird]
從 2021 年 8 月的 Linux 5.14 開始介紹,該版本增加了對調(diào)查 realtime kernel 有幫助的 osnoise 和 timerlat tracer,還針對各種設(shè)備添加了高通和聯(lián)發(fā)科的新的驅(qū)動,還有一個 simpledrm 驅(qū)動,用來給簡單的 framebuffer device(嵌入式系統(tǒng)中經(jīng)常出現(xiàn)的設(shè)備)來提供直接渲染管理器(DRM, direct-rendering manager)接口。5.14 中最重要的針對嵌入式的功能是增加了 memfd_secret()系統(tǒng)調(diào)用。它創(chuàng)建了一個其他進(jìn)程無法訪問到的內(nèi)存區(qū)域,哪怕是內(nèi)核自己也很難訪問到這個區(qū)域,所以它是一個存儲秘密數(shù)據(jù)的好地方,比如可以存放加密密鑰。Bird 推薦了一篇 LWN 文章以及相關(guān) commit 來幫助大家了解更多信息。
2021 年 10 月的內(nèi)核 5.15 帶來了 sleeping spinlocks,這是實時(即 PREEMPT_RT)patch set 的一個核心部分;他將在講座的后面對 realtime 進(jìn)行更多的介紹。調(diào)度器獲得了對非對稱系統(tǒng)(asymmetric systems)的支持,在同一芯片上的內(nèi)核不能同時運行 32 位和 64 位代碼,因此調(diào)度器在將進(jìn)程遷移到不同 CPU core 的時候需要記住這一點。那些開發(fā)網(wǎng)絡(luò)連接存儲(NAS)設(shè)備的人可能想看看內(nèi)核內(nèi)的 SMB 服務(wù)器,ksmbd,它在 5.15 合入的。
該內(nèi)核的另一個特性是 printk() indexing 功能,它為那些開發(fā) log 文件處理工具的開發(fā)者提供了一種方法,可以在 printk()信息發(fā)生變化的時候能夠知道。這樣一來這些工具在正則表達(dá)式突然無法匹配時就不用只能悄悄失敗了,而是可以正確地適配。由于許多嵌入式開發(fā)者使用了舊的內(nèi)核(通常是由 SoC 或電路板開發(fā)商所提供的),當(dāng)他們有一天轉(zhuǎn)移到 5.15 或更高版本的內(nèi)核時,他們可能會感到驚訝,因為現(xiàn)在的 mainline 的 build 默認(rèn)帶有 -Werror 標(biāo)志。該標(biāo)志會將編譯器的 warning 變成了 error,因此,當(dāng)在較新的內(nèi)核上使用含有 warning 的代碼時,會發(fā)生編譯失敗。
此外,還增加了 "data access monitor"(DAMON)工具。它提供了一種記錄內(nèi)核中數(shù)據(jù)訪問模式并進(jìn)行可視化的方法。這是一個診斷工具,就像 Linux 中的其他 tracer 一樣,"但它實際上功能更強(qiáng)嗎?" 而且,事實上,我們在 5.16 中看到,DAMON 除了 monitoring 這種監(jiān)控功能之外還有其他功能,Bird 說。
2022 年 1 月的 5.16 內(nèi)核還增加了增強(qiáng)型只讀文件系統(tǒng)(EROFS)的功能。尤其是可以支持多個設(shè)備了。用于異步 I/O 的 io_uring 功能已經(jīng)迅速發(fā)展起來;它可能值得嵌入式產(chǎn)品采用。在 5.16 中,io_uring 支持了 SELinux 和 Smack 的安全策略的 enforcement 的功能。DAMON 操作方案(DAMOS, DAMON operating schemes)也合入了進(jìn)來,用來幫助 proactive reclaim 內(nèi)存積極回收;DAMOS 可以向內(nèi)核提供提示信息,說明應(yīng)該著重針對哪些內(nèi)存區(qū)域來進(jìn)行。他說,這可能對內(nèi)存很有限的嵌入式產(chǎn)品特別有用。
3 月,5.17 版本內(nèi)核發(fā)布?,F(xiàn)在可以在內(nèi)核內(nèi)部對 kernel module 進(jìn)行解壓縮,而不用依賴用戶空間來解壓了。這對某些安全啟動方案和 LoadPin 安全模塊來說非常重要。實時 Linux 分析工具(RTLA, realtime Linux analysis tool)也被添加進(jìn)來;它使用了 5.14 中添加的 osnoise 和 timerlat tracer。此外,用戶空間文件系統(tǒng)(FUSE)設(shè)施的 FUSE_INIT 命令中的一些 flag 字段改變了。因此,使用 FUSE 文件系統(tǒng)的系統(tǒng)在轉(zhuǎn)移到 5.17 及以后的版本時,應(yīng)該檢查一下來確保兼容。
5.18 內(nèi)核于 5 月發(fā)布,其中有幾項內(nèi)容是嵌入式社區(qū)感興趣的。例如,刪除了對老式 Arm MMU-less 架構(gòu)(ARMv4 和 ARMv5)的支持。"內(nèi)核代碼并不總是真的越變越大的,有時也會刪除一些東西"。不過,在 ARMv7 系列中仍有對 MMU-less 系統(tǒng)的支持。除此之外,還增加了對 RISC-V 的支持,tracing 子系統(tǒng)增加了用戶空間應(yīng)用中的 dynamic tracepoint 的 user_events 支持,而且內(nèi)核現(xiàn)在是用 C11 而不是 C89 構(gòu)建的了。
在即將到來的 5.19 內(nèi)核中,最大的新聞是 Arm 多平臺內(nèi)核的工作即將完成。在過去的 12 年里,人們一直在努力整合所有的 Arm 內(nèi)核,從而可以讓一個內(nèi)核鏡像文件就可以在所有的 Arm 系統(tǒng)上啟動,只需提供一個根據(jù)相關(guān)板子來寫的 devicetree 文件就行。此外,還增加了新的 RISC 架構(gòu)的支持,即 LoongArch,以及一個新的硬件時間戳引擎,他將在今后進(jìn)一步討論。
Bird 花了一點時間來介紹一些內(nèi)核開發(fā)的統(tǒng)計數(shù)據(jù),這些數(shù)據(jù)對于 LWN 的讀者來說是很熟悉的。他說,這是因為大多數(shù)統(tǒng)計數(shù)字以及他在幻燈片中使用的許多鏈接都來自 LWN。
Technology
他再次為自己快速的介紹表示歉意,接著談到了嵌入式開發(fā)者感興趣的不同的技術(shù)領(lǐng)域。他說,另一組來自更加冗長版本的幻燈片可能有助于細(xì)化一些內(nèi)容。他從音頻開始介紹,指出 PipeWire 是一個新興的項目,嵌入式公司可能會需要關(guān)注一下,但 PulseAudio 仍然是一個主要玩家,5月份發(fā)布了 16.0 版本。
他列舉了一些他已經(jīng)說過的 "core kernel" 方面的變動,但對切換到 C11 的這一點做了一些擴(kuò)展解讀。這主要是因為 speculative execution 漏洞(如 Spectre)及其與內(nèi)核 macro 的交互配合問題。事實證明,能夠在循環(huán)內(nèi)聲明變量(這在 C89 中是不可能的)對此類問題中的某些類型是有緩解作用的。
另一個 "內(nèi)核核心部分的大新聞 "是 Rust for Linux 項目。它目前是一個內(nèi)核代碼樹之外的 patch set,大約有 35000 行代碼,人們認(rèn)為仍然是實驗性的。這些 patch 最近被遷移到較新的 Rust 語言版本(1.59)上了;他說對于語言版本變化的速度"有一些抱怨"。關(guān)于這個項目的各個方面已經(jīng)有過了爭論,包括當(dāng)時那一周在 ksummit-discuss 郵件列表中進(jìn)行的爭論。大多數(shù)內(nèi)核開發(fā)者都對該項目持 "wait and see" 的態(tài)度,Bird 說。
對于文件系統(tǒng)和 I/O 來說,各方面的情況正在更加成熟,包括 io_uring;有一些用于 io_uring 的 zero-copy 網(wǎng)絡(luò)相關(guān) patch 正在 "飛來飛去" 進(jìn)行 review,他說。與此同時,EROFS 和 Flash-Friendly File System(F2FS)對壓縮功能以及擴(kuò)展屬性(xattrs)有更好的支持。
在圖形方面,有 "幾件小事和幾件大事"。從小事來說,5.14 中增加了 simpledrm 驅(qū)動,而且 framebuffer 設(shè)備(fbdev)子系統(tǒng)有了新的維護(hù)者。后者對嵌入式領(lǐng)域特別重要,因為這個領(lǐng)域中仍然有一些舊的設(shè)備需要繼續(xù)支持。
大事方面,Mali GPU 現(xiàn)在有一個完全符合 OpenGL ES 3.1 標(biāo)準(zhǔn)的開源驅(qū)動程序,名為 Panfrost。此外,英偉達(dá)公司還宣布將其部分代碼作為開源代碼發(fā)布。"這代表了英偉達(dá)的一個重大轉(zhuǎn)變"。不過,他不確定這對一直致力于為英偉達(dá)硬件開發(fā)開源驅(qū)動程序的 nouveau 項目會產(chǎn)生什么影響。
"在網(wǎng)絡(luò)方面總是有持續(xù)的一些奇怪功能正在進(jìn)行中"。他說,在新協(xié)議方面的工作并不多,而那些被加入的晦澀的協(xié)議與嵌入式世界也并不真正相關(guān)。不過確實提供丟包原因的新機(jī)制將有助于診斷這種類型的問題。
Realtime and more
PREEMPT_RT 這個 patch set 的進(jìn)展是 "非常、非常大的新聞",Bird 說。在過去的幾個版本中,越來越多的 realtime Linux 的 patch 已經(jīng)進(jìn)入 mainline,首先是 5.15 中添加的 sleeping spinlock。這種睡眠自旋鎖允許另一個 task 在 lock 已被持有時被調(diào)度運行,這就是實時內(nèi)核可以提供低延遲保證的主要原因。它們 "可能是 PREEMPT_RT patch set 的核心功能"。
目前來看,realtime patch 在該項目 17 年的歷史中已經(jīng)進(jìn)行了 "廣泛地測試和驗證"。自然就會有一個問題:"還剩下些什么沒有做的?" 還有大約 50 個 patch 中的約 1300 行代碼。雖然這聽起來很多,但實際上并非如此;"與之前的情況相比,剩余這么一點代碼簡直是令人難以置信的"。事實上,僅從 2 月份開始,就又有 1700 行代碼經(jīng)過一個 patch set 而合并。
在安全領(lǐng)域,他注意到 5.13 中的一些控制流完整性(CFI)的變動,這個可以幫助確保內(nèi)核中的 jump 都能跳到它們應(yīng)該去的地方。5.16 版的 memcpy() 邊界檢查會有助于防止內(nèi)存里的 memcpy 來超出其 buffer 的范圍。此外,還有源源不斷的 Spectre 的緩解措施被添加進(jìn)來,不過他發(fā)現(xiàn)了一個有意思的地方,就是在 5.16 版本中還刪除了一個 Spectre 緩解措施,因為它實際上并沒有在提高安全性方面起到什么作用,而且還有很大的性能代價。
在內(nèi)核測試領(lǐng)域,有很多測試正在進(jìn)行,許多報告都被提交給 upstream 的內(nèi)核開發(fā)者,這些報告來自 0-day 測試機(jī)器人、KernelCI、Syzbot 等等。Bird 說,一個新的自動化測試框架 Compass CI 也很值得關(guān)注。它是由現(xiàn)在在華為工作的 Fengguang Wu 開發(fā)的,他曾開發(fā)過 0-day 測試機(jī)器人。此外各種測試套件,如 LTP、kselftest 和 Kunit 都發(fā)布了新版本以及增加了新的測試。
在工具鏈方面,GCC 在 5 月發(fā)布了 12.1 版本。其中對未初始化的變量進(jìn)行了更好的處理,同時還有一些靜態(tài)分析功能。LLVM 也在 5 月份發(fā)布了一個版本(14.0.4 版)。Bird 說,目前有些人正在使用 LLVM 來構(gòu)建整個發(fā)行版,而不僅僅是內(nèi)核。
5.18 版中的硬件時間戳引擎的支持是對 Linux 中 tracing 功能的一個很好的補充。它提供了一種訪問硬件的機(jī)制,可以自動將時間戳添加到硬件的事件上,而不需要軟件中斷,這對于低開銷的 tracing 很有用。
到此就結(jié)束了他的旋風(fēng)之旅,這些介紹肯定是非常簡短的,但其目的是讓聽眾能知道對他們可以使用的各種功能應(yīng)該搜索什么詞來進(jìn)一步了解。這應(yīng)該能讓他們從其他渠道尋求到更多的信息,從而幫助他們開發(fā)新的產(chǎn)品,以及轉(zhuǎn)移到更新的內(nèi)核。
Mars
Bird 談到了一個 "有趣的嵌入式 Linux 用例",這個用例最近在新聞中出現(xiàn)了很多次:Mars Ingenuity 直升機(jī)。Bird 說,多年來他一直在問。"我們在火星上有 Linux 了嗎?" 事實證明,我們終于做到了。這架直升機(jī)有一些商用的 off-the-shelf 硬件(COTS)是在運行 Linux 的。
Ingenuity 于 2021 年 2 月落地,當(dāng)年 4 月和 5 月的前五次飛行純粹是 "技術(shù)演示",但它的效果非常好,已經(jīng)進(jìn)行了更多的飛行,目前共飛行了 29 次。其中一次飛行能夠拍攝其 "backshell" 導(dǎo)致的碎片區(qū)域的照片,這是其降落到地表時產(chǎn)生的。Bird 說,那是美國宇航局第一次能夠獲得如此詳細(xì)的航天器落地地點的照片。這不僅是一張有趣的照片,而且它的細(xì)節(jié)可以用來分析以了解更多關(guān)于火星的信息。
Bird 似乎對直升機(jī)在惡劣環(huán)境中的生存能力特別興奮;例如,現(xiàn)在是火星的冬天,灰塵減少了太陽能電池板所能提供的充電量,所以設(shè)備在晚上必須完全關(guān)閉。這意味著 COTS CPU 的運行遠(yuǎn)遠(yuǎn)超出了定義規(guī)格,因為夜間就到達(dá)了-80℃;有趣的是,直升機(jī)上的一些硬件來自 SparkFun 業(yè)余愛好者電子公司(hobbyist-electronics company),他笑著說。
寒冷有時會導(dǎo)致通信中斷,原因是 clock 出問題。而且還導(dǎo)致傾角儀(inclinometer)損壞。美國宇航局計劃發(fā)送一個軟件 patch,使直升機(jī)能夠使用其他傳感器來替代傾角儀的數(shù)據(jù)。"他們要在火星上進(jìn)行現(xiàn)場軟件更新"。他的幻燈片上有很多鏈接,可以獲得更多信息。"我認(rèn)為這是太陽系中嵌入式 Linux 最有趣的用途之一,"他笑著說。
Scorecards
Bird 有三張 "記分卡" 來判斷嵌入式 Linux 多年來在技術(shù)、開發(fā)和市場方面的進(jìn)展。早在 2003 年,CELF 已經(jīng)確定了五個需要關(guān)注的領(lǐng)域,根據(jù)過去幾年對內(nèi)核的貢獻(xiàn),這些領(lǐng)域顯然現(xiàn)在已經(jīng)達(dá)到了 "done" 的狀態(tài)。如今,system size、啟動時間和電源管理方面的 patch 很少,實時性正如他之前所說的那樣已經(jīng) "完成",而安全性始終是一項正在進(jìn)行的工作。"所以恭喜大家,我們成功了。"
當(dāng)然,事情并不完全是這樣的?,F(xiàn)在很少有 system-size 方面的 patch,原因是 "我們有些放棄了"。他說,Linux 永遠(yuǎn)不會運行在一分錢的處理器上,所以 10 萬億的物聯(lián)網(wǎng)傳感器會需要運行其他系統(tǒng)。在啟動時間方面也有類似的情況;現(xiàn)在的設(shè)備正在使用各種技巧,如 suspend/resume 或進(jìn)入低功耗狀態(tài)來避免完全重新啟動。"你認(rèn)為你的電視是關(guān)機(jī)的,其實它并沒有。"
他說,電源管理更像是一個灰色地帶。大部分所需的功能都在 upstream 了,但需要由電路板供應(yīng)商來實際整合這些功能。實時性基本上已經(jīng)完成,盡管它和其他大多數(shù)領(lǐng)域一樣,都需要維護(hù)來確保它能繼續(xù)良好工作。
在 development 相關(guān)的記分卡上,他說,總體而言,社區(qū)做得很好了。針對嵌入式系統(tǒng)環(huán)境有了很多種 build 系統(tǒng)以及發(fā)行選項,有各種不同的公司提供培訓(xùn)和咨詢,toolchain 的支持狀態(tài)也很不錯,調(diào)試選擇也很豐富。
然而,有兩個開發(fā)領(lǐng)域仍在進(jìn)行之中。首先是測試覆蓋面方面還是存在差距,特別是在自動測試和硬件測試方面。此外,雖然在支持更多硬件方面取得了巨大的進(jìn)展,但來自 SoC 和其他供應(yīng)商的許多代碼實際上沒有進(jìn)入 upstream。這意味著生產(chǎn)嵌入式 Linux 設(shè)備的公司必須帶有大量的 kernel tree 之外的 patch,從而增加了他們的技術(shù)負(fù)擔(dān)。
關(guān)于 market 方面,他已經(jīng)列出一個各種類型的嵌入式產(chǎn)品的清單,不保證全面。這表明 Linux 做得相當(dāng)好。例如,沃爾瑪和亞馬遜正在使用運行 Linux 的無人機(jī)來進(jìn)行無人機(jī)送貨;很多商用無人機(jī)也運行 Linux。運行基于 Linux 的機(jī)器人操作系統(tǒng)(ROS)的機(jī)器人預(yù)計在 2024 年將占到商業(yè)機(jī)器人銷售額的 55%。如今,汽車中的軟件也主要基于 Linux。
讓他感到驚訝的一個領(lǐng)域是 Linux 在太空中的應(yīng)用。他預(yù)計這需要更長的時間,但 Linux 在這一領(lǐng)域的使用也在迅速提高。Starlink 和 SpaceX 使用 Linux,Ingenuity 直升機(jī)和一些 cubesats 衛(wèi)星也是如此。他認(rèn)為,隨著更多的商業(yè)化硬件進(jìn)入太空,Linux 也將隨著它們一起進(jìn)入。路由器、移動電話和消費電子產(chǎn)品都由 Linux 主導(dǎo)。事實上,在某些領(lǐng)域如電視和 DVR,Linux 幾乎占據(jù)了 100%的市場份額。"在消費電子領(lǐng)域,我們完全是壓倒性的。"
總體而言,嵌入式 Linux 社區(qū) "做得非常好"。Linux 被廣泛部署,達(dá)到了 "統(tǒng)治世界" 的水平。但它不會出現(xiàn)在所有的產(chǎn)品中,我們不會看到 Linux 運行在 cereal box 麥片包裝盒上,也許永遠(yuǎn)不會。core kernel 擁有對嵌入式使用場景的支持,盡管總是需要新的驅(qū)動程序以及其他代碼來支持新的硬件。
他總結(jié)說,這里的底線是:"我們還沒有完成,但已經(jīng)很不錯了。" Linux 已經(jīng)準(zhǔn)備好用于很多不同種類的設(shè)備了。他希望他的旋風(fēng)式介紹可以幫助與會者準(zhǔn)備好設(shè)計和建造他們的后續(xù)產(chǎn)品,并幫助他們成為生態(tài)系統(tǒng)和社區(qū)中積極和有成效的成員。
[編者要感謝 LWN 訂戶支持去奧斯汀參加 ELC。]
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~
