Verdin iMX8M Plus 實(shí)現(xiàn)上電亮屏的無閃爍啟動(dòng)
幾秒之后,界面也許才會(huì)亮起,顯示一個(gè)臨時(shí)啟動(dòng)畫面,在初始化過程中閃爍幾下,最后才進(jìn)入真正的應(yīng)用界面。即使在性能很快的系統(tǒng)上,這個(gè)過程依然顯得不穩(wěn)定,因?yàn)閱栴}通常并不在于算力性能,而在于啟動(dòng)期間“誰在控制顯示輸出”。
GraphLab Boot 采用了不同的思路。實(shí)時(shí)核心在上電瞬間就激活顯示器,在 Linux 啟動(dòng)期間持續(xù)維持顯示,并讓 Linux 直接渲染到這條已經(jīng)處于活動(dòng)狀態(tài)的顯示路徑中,而不會(huì)觸發(fā)一次肉眼可見的覆蓋。
根本原因很簡(jiǎn)單:在傳統(tǒng)的嵌入式 Linux 啟動(dòng)流程中,并不存在一個(gè)組件從頭到尾一直擁有顯示控制權(quán)。
即使每個(gè)階段單獨(dú)來看都運(yùn)行正常,它們之間的切換仍然可能帶來黑幀、閃爍,或者與時(shí)序相關(guān)的不穩(wěn)定行為。從工程視角看,這很常見;但從產(chǎn)品視角看,這并不理想。
GraphLab Boot 如何在第一時(shí)間顯示第一個(gè)像素?
在默認(rèn)配置中,這第一幀可以是一個(gè)啟動(dòng)畫面,并帶有可配置的狀態(tài)文本,而不是一張靜態(tài)圖片。顯示出來的消息可以對(duì)應(yīng)真實(shí)的系統(tǒng)狀態(tài),例如顯示 pipeline 初始化、切換準(zhǔn)備就緒,或 Linux DRM 的關(guān)鍵里程碑,同時(shí)又能針對(duì)不同項(xiàng)目做定制。
如果項(xiàng)目需求不止于啟動(dòng)畫面,GraphLab 還可以把實(shí)時(shí)核心階段的渲染擴(kuò)展成更豐富的早期 UI,包括動(dòng)畫、文字、圖片以及來自 I2C、SPI、CAN 等外設(shè)的實(shí)時(shí)數(shù)據(jù)。不過文中強(qiáng)調(diào),這類能力目前應(yīng)被視為 GraphLab 提供的項(xiàng)目級(jí)擴(kuò)展,而不是今天就能由客戶自助啟用的標(biāo)準(zhǔn)功能。
第二個(gè)挑戰(zhàn)是向 Linux 圖形棧切換的過程。在傳統(tǒng)方案中,Linux 會(huì)接管顯示pipeline,重新初始化 DRM 狀態(tài),而控制權(quán)變更期間很容易出現(xiàn)可見的熄屏或空白。
在 Torizon 環(huán)境中,Linux 圖形棧、合成器和 UI 容器仍然可以在后臺(tái)啟動(dòng),而用戶可見的輸出始終由實(shí)時(shí)核心控制。只有到了選定的交接點(diǎn),才會(huì)切換到 Linux 渲染的輸出,因此用戶不需要在屏幕上看到 Linux 啟動(dòng)過程中的中間階段。
Linux UI 如何在沒有可見切換的情況下變得可交互?
這種切換可以通過連續(xù)幀檢測(cè)自動(dòng)發(fā)生,也可以通過一個(gè) sysfs 開關(guān),由應(yīng)用程序在確認(rèn) Linux 輸出已經(jīng)準(zhǔn)備好時(shí)顯式觸發(fā)。
從用戶視角來看,系統(tǒng)就像是直接啟動(dòng)進(jìn)入應(yīng)用的就緒狀態(tài)。由于底層顯示 pipeline 始終保持活動(dòng),整個(gè)切換過程可以在沒有可見重置、空白幀或模式切換的情況下完成。
這種“無切換”架構(gòu)是如何工作的?
通俗地說,Linux 并不是把每次顯示更新都通過 Cortex-M 核心“轉(zhuǎn)發(fā)”,從而形成瓶頸。相反,Cortex-M 只負(fù)責(zé)讓顯示引擎保持激活并持續(xù)擁有控制權(quán),而 Linux 則把內(nèi)容渲染到已經(jīng)連接到活動(dòng)顯示 pipeline 的共享幀緩沖區(qū)中。
隨后,一個(gè)定制 DRM 驅(qū)動(dòng)會(huì)把這條現(xiàn)有顯示 pipeline 暴露給 Linux,但不會(huì)轉(zhuǎn)移其所有權(quán)。Linux 仍然可以通過熟悉的圖形路徑進(jìn)行渲染,只不過它所依賴的顯示 pipeline 從始至終都不需要真正“切換”過來。
啟動(dòng)流程概覽
這里的“零拷貝共享幀緩沖”模型很關(guān)鍵。它避免了為了跨越啟動(dòng)階段而額外進(jìn)行圖像切換或合成,也解釋了為什么整個(gè)切換過程能夠在視覺上保持無縫。
這在 Toradex Verdin iMX8M Plus 上實(shí)際帶來了什么變化?
Linux 仍然運(yùn)行在應(yīng)用處理器核心上,并配合專用 DRM 驅(qū)動(dòng);與此同時(shí),GraphLab Boot 與標(biāo)準(zhǔn)啟動(dòng)流程并行工作,以保證顯示輸出持續(xù)不斷。
實(shí)際測(cè)試
早期啟動(dòng):GraphLab Boot 已有可見輸出,而標(biāo)準(zhǔn) Linux 仍是黑屏。
啟動(dòng)中期:GraphLab Boot 持續(xù)顯示受控的進(jìn)度信息,而標(biāo)準(zhǔn) Linux 路徑則在真正應(yīng)用準(zhǔn)備好之前顯示一個(gè) compositor(Weston) 畫面。
應(yīng)用就緒:兩套系統(tǒng)最終都能進(jìn)入 UI,但只有 GraphLab Boot 在整個(gè)過程中始終保持視覺連續(xù)。
在當(dāng)前配置下,GraphLab Boot 能在 800 毫秒內(nèi)顯示第一個(gè)可見像素。
標(biāo)準(zhǔn) Linux 啟動(dòng)在真正 UI 準(zhǔn)備好之前會(huì)出現(xiàn)多個(gè)可見的空白或重置時(shí)刻;而 GraphLab Boot 則在整個(gè)過程中都保持連續(xù)輸出,不會(huì)讓用戶看到顯示被重置。
這種方案的一個(gè)關(guān)鍵優(yōu)勢(shì),是 Linux 側(cè)應(yīng)用開發(fā)方式依然保持不變。GraphLab Boot 改變的是啟動(dòng)過程中顯示 pipeline 的初始化、保護(hù)和顯示方式;它并不要求對(duì) Linux 圖形棧進(jìn)行根本性重寫。
目前這已經(jīng)在 Torizon 的 Demo Gallery 鏡像上完成驗(yàn)證,包括 Qt、Embedded Wizard 和 Crank Storyboard 等示例。這說明現(xiàn)有應(yīng)用框架可以繼續(xù)保留,而 GraphLab Boot 則在底層改善了從啟動(dòng)到 UI 的體驗(yàn)。
工業(yè) HMI 可以從中受益,因?yàn)樗転椴僮鲉T提供即時(shí)反饋,讓啟動(dòng)過程看起來是確定的,而不是“抖動(dòng)、閃屏、像出故障”。醫(yī)療設(shè)備可以從上電到 UI 可用之間獲得更可控、也更容易追蹤的路徑。
在 Toradex Verdin iMX8M Plus 上進(jìn)行實(shí)際評(píng)估時(shí),可以從 GraphLab 的基礎(chǔ) OS 鏡像開始,再在其上運(yùn)行 Toradex Demo Gallery 項(xiàng)目。
若想進(jìn)一步了解 GraphLab Boot,可訪問 https://graphlab.net/。如果想試用演示,首先需要?jiǎng)?chuàng)建 GraphLab Portal 工作區(qū),并按照 https://portal.graphlab.net/ 上的入門與技術(shù)文檔操作。如果你需要商業(yè)層面的支持,可通過 graphlab.net 上的 Request Sales Information 流程聯(lián)系;如果需要面向硬件的評(píng)估,則可使用 Request Evaluation Kit 流程進(jìn)入 Toradex 的評(píng)估通道。
結(jié)論
GraphLab Boot 證明了:第一個(gè)像素可以在上電時(shí)就出現(xiàn);Linux 初始化期間顯示可以始終保持連續(xù)活動(dòng);真正的應(yīng)用可以在不經(jīng)過破壞性顯示切換的情況下直接呈現(xiàn)出來。
目前,這個(gè)方案的已驗(yàn)證落地點(diǎn)是 Toradex Verdin iMX8M Plus。但相同的架構(gòu)思路并不局限于這一種模塊,它同樣適用于更多基于 i.MX 91、i.MX 93 或 i.MX 95 的 Toradex 平臺(tái),只是具體如何落地,需要結(jié)合客戶項(xiàng)目來實(shí)現(xiàn)。
FAQ
? 是否需要重寫 Linux 側(cè)的圖形框架? 不需要,至少不“重寫應(yīng)用側(cè)圖形框架”。Linux 側(cè)仍然使用原本的渲染模型;關(guān)鍵變化在于啟動(dòng)期間顯示 pipeline 如何被初始化、保護(hù)、顯示,以及在合適的時(shí)刻切換。
? Cortex-M 會(huì)不會(huì)變成每幀渲染瓶頸? 不會(huì)。Cortex-M 核心不會(huì)成為逐幀渲染瓶頸。它負(fù)責(zé)持續(xù)擁有顯示管線,而 Linux 則把內(nèi)容渲染到仍連接在活動(dòng)輸出路徑上的共享幀緩沖區(qū)中。
? 切換到 Linux 輸出的時(shí)機(jī)由什么決定? 這個(gè)時(shí)機(jī)是可配置的。GraphLab Boot 可以基于連續(xù)幀檢測(cè)自動(dòng)切換,也可以在 Linux 側(cè)應(yīng)用認(rèn)為自己已經(jīng)準(zhǔn)備好時(shí),通過 sysfs 控制進(jìn)行顯式切換。
? Linux 應(yīng)用后續(xù)維護(hù)或崩潰時(shí)還能切回實(shí)時(shí)核心嗎? 可以。當(dāng) Linux 應(yīng)用需要維護(hù)、重啟或服務(wù)操作時(shí),渲染路徑可以切回實(shí)時(shí)核心;這有助于在 Linux 已經(jīng)啟動(dòng)之后,依然保持穩(wěn)定的視覺體驗(yàn)。
? 現(xiàn)有 UI 框架還能繼續(xù)用嗎? 可以,這正是它的價(jià)值主張之一?,F(xiàn)有 Linux 側(cè) UI 框架,例如已驗(yàn)證的 Toradex Demo Gallery 中的 Qt、Embedded Wizard 和 Crank Storyboard,都可以繼續(xù)保留,因?yàn)?GraphLab Boot 針對(duì)的是啟動(dòng)期與交接行為,而不是替換上層應(yīng)用框架。
? 啟動(dòng)畫面的狀態(tài)文字能動(dòng)態(tài)變化嗎? 可以。默認(rèn)情況下,GraphLab Boot 顯示的狀態(tài)文字不是靜態(tài)的,而是與真實(shí)的啟動(dòng)和顯示狀態(tài)關(guān)聯(lián),例如顯示 pipieline 進(jìn)程或 Linux DRM 就緒里程碑。這些可見消息仍然可以通過一套可配置的狀態(tài)到消息映射,按項(xiàng)目需求進(jìn)行定制。
? 它能做的不只是 splash screen 嗎? 可以,但需要注意幾點(diǎn)。默認(rèn)情況下,GraphLab Boot 提供的是帶可定制、狀態(tài)驅(qū)動(dòng)文本的啟動(dòng)畫面。再往上擴(kuò)展,GraphLab 在實(shí)時(shí)核心側(cè)具備內(nèi)部工程能力和渲染基礎(chǔ),可將早期顯示體驗(yàn)擴(kuò)展成更豐富的 UI,包括動(dòng)畫、文字、圖片以及實(shí)時(shí)外設(shè)數(shù)據(jù)。不過這屬于 GraphLab 提供的項(xiàng)目定制工程服務(wù),而不是現(xiàn)成自助開箱功能。
? 閃爍是怎么被消除的? 關(guān)鍵在于避免重復(fù)初始化顯示,并從早期啟動(dòng)開始就維持一個(gè)持久的顯示 pipieline 所有者。Linux 是作為渲染者加入這條已在運(yùn)行的pipieline,而不是通過破壞性的模式切換來奪取控制權(quán)。
? 從哪里開始評(píng)估? 可以從 GraphLab Portal 開始,并按照入門文檔在真實(shí)硬件上探索 GraphLab Boot:https://portal.graphlab.net/
提交
基于 Verdin i.MX95 的單目深度估計(jì)
從0開始點(diǎn)亮DSI屏幕
基于 NXP iMX8MP ARM平臺(tái)安裝測(cè)試 Openclaw
在NXP iMX8QM上使用 Jailhouse
基于 Toradex 硬件和 ROS 2 加速機(jī)器人原型開發(fā):SiBrain 的技術(shù)視角


投訴建議