全文引述 longlong 在 WHLUG 上的演講,故存在口語化表達。本文僅代表個人觀點和立場。
deepin 23 作為 deepin 20 的後繼版本,最大的改變之一就是添加了多架構支持:從原本只支持 AMD64 架構,到目前支持AMD64、RISC-V、LoongArch(新世界)、ARM64 多個CPU架構平台。
目前 deepin 23 已經發布了AMD64 架構的 Stable 鏡像,其他 CPU 架構的鏡像還處於生態建設的 Preview 版本階段,直到我們認為其質量滿足正式版發版標準,才會發佈 Stable 版本。
ARM64
ARM64 架構是 deepin 23 最早導入支持的架構,當23開始正式構建倉庫的時候,其就作為主要架構支持目標,現在看來也是除了x86架構之外生態最好的架構。我們對於ARM64 架構的支持也獲得了合作伙伴:飛騰和此芯科技的支持。
主力構建集羣
我們在做 deepin 23 適配的時候,只有一台 FT2000/64 服務器,當我們系統軟件包增加到3000+ 的時候,這樣的構建規模遠遠不足以支撐構建。而且市面上也不是很好購買ARM64 服務器。所以我們發揮了主觀能動性,在公司庫房尋寶,最後被我找來了一台鯤鵬920服務器,和五台盤古 w510 台式機,作為構建集羣。
幾乎不存在的生態屏障
ARM64 的 Linux 生態,幾乎是比肩 x86 ,無需擔心軟件是否適配的問題,幾乎在 x86 上能構建的軟件包在 ARM64 上都能正常編譯。
通用啓動的攔路虎
ARM64 初期的應用場景主要是嵌入式設備,所以用 U-Boot 的較多。但是 U-Boot 在啓動 deepin 23 的時候就會有一系列問題,比如需要針對不同的設備使用不同的設備樹二進制文件(dtb),這對我們 deepin 23的主線化帶來了挑戰。所以目前我們的設備也僅適配了能支持UEFI 的飛騰D2000/D3000、鯤鵬920和此芯科技的新品。對於其他的 ARM64 設備可能只能提供有限度的支持,因為針對不同開發板的板形做不同的適配,對於我們的人力物力都是一個巨大的挑戰。但是也歡迎更多的ARM64 開發板和設備廠商與我們合作,我們盡力適配好。
LoongArch
LoongArch(新世界)最初並不在 deepin 23 的目標支持架構範圍內,但在 2022 年前後,隨着龍芯大力推進新世界發行版生態的進程,我們決定嘗試適配 LoongArch 系統。這一決定的契機源於 Revy 老師寄來的兩台 LA50007A2000 機器。
在我們決定開發新世界發行版之初,便面臨着一個問題:硬件從哪裏來?當時龍芯發佈的新世界支持硬件僅有龍芯3A5000和7A2000。由於新世界剛剛推出,7A2000 的橋片狀態並不穩定,時常發生假死情況(即內核仍在運行,但不響應輸入輸出)。我們最初並不知情,直到 Revy 老師贈送給我們一台龍芯 3A5000 7A2000 新世界主機,並附帶了一份長達三頁的 PDF 文檔,詳細説明了龍芯硬件的各種問題,這讓我們感到擔憂。我也在 Revy 的影響下購買了一台 3A5000 主板,幸運的是,這塊主板並未出現類似的問題。
從Loong Arch Linux 到 deepin Linux
我們決定站在巨人肩膀上,選擇成熟度較高的 LoongArch Linux 作為基礎,而不是使用尚不完善的 qemu 手動製作 rootfs。在此基礎上,我們構建了 rootfs 並啓動了OBS worker ,進而獲得了 LoongArch (新世界)的構建能力。同時,龍芯的固件也在不斷改進,假死情況有所改善。
Loongson 3C5000 Power!
本着“靠着大樹好乘涼”的原則,我們去找我們的兄弟部門友好交流之後,借來了兩台四路Loongson 3C5000L 服務器,這也是我們最強的構建主力服務器。不過,在一開始的時候,它們沒有新世界固件的支持。後來,我們找龍芯的人要了一份固件,才得以使用(當然,陣列卡依然沒法在新世界下正常運行)。
而我們社區自己購買的 3C5000LL 雙路服務器則出了一點意外:它出廠就自帶新世界固件和 BMC,但在通電之後會以最高轉速發出“龍鳴”,其聲音之大一度蓋過我們機房所有的服務器,並且其運行也不是很穩定,幾乎每天都會死機。這讓我們感到無奈,只得求助於武漢龍芯的工程師的協助。在他們的幫助下,我們弄清了龍芯服務器發出“龍鳴”的原因:“其主板提供了8個風扇4pin的插座,新的 BMC 會檢測1,2,3,4位的插座是否連接正常。如果連接不正常,BMC會讓風扇以最大功率運行,導致機器過熱。但是,我們購買的主機廠商並不知道這回事,風扇並沒有按照順序插在1,2,3,4位上,導致了此現象的產生。
更多的 3C5000:後來,我們通過 UOS 獲取了更多的龍芯3C5000,極大地增強了我們的構建資源。
deepin loong64 啓動!
在一切準備完善後。我們手搓了 rootfs ,將 DDE 打包完成,並且做出了第一版的鏡像。在龍芯3a5000 上成功運行,不過由於第一版本我們並不熟悉龍芯內核的特調,所以是從隔壁的 Loong Arch Linux 借用的內核。而系統軟件包層面,基本是我們自己打包的系統源,也有部分是從 Revy 老師那“偷”的軟件包。
3A6000 性能飛昇
2024年初,龍芯發佈了3A6000,Revy 老師又第一時間贊助了一塊 3A6000 主板給我們。正如他之前給我們的那些早期樣品一樣,這塊主板遇到了各種問題:開機即死機、系統假死、PCIe 不穩定等。不過,隨着後期我們購入的 3A6000 主板和華碩的 3A6000 主板問題逐步得到緩解,系統的穩定性有了很大提升。當然,還是得吐槽一下龍芯的 7A2000橋片自帶的 GPU,因為缺乏穩定和功能完整的驅動,其早期表現非常不穩定,尤其是在外接4K顯示器時,幾乎無法顯示,後續我們會和龍芯合作,使用官方驅動解決這一問題,盡情期待。
生態建設
在生態建設方面,龍芯的新世界生態可以説是從零開始。UOS 等基於龍芯舊世界的成果無法直接遷移到新世界上,雖然 AOSC 的 libLoL 出現緩解了部分問題。為了推進龍芯的生態,我們也要求第一方應用必須能在 loong64 上編譯通過。所以,現在大家可以看到,deepin 的 unioncode(IDE) 已經能夠在 Loong 上正常運行,這無疑為龍芯的開發者生態帶來了極大的好處。
然而,我們仍面臨一些問題,比如上游對 Loong 補丁的傲慢態度,導致如 neovim 等軟件無法在 loong64 上運行。為了解決這個問題,deepin 自主維護了相關補丁,使得 luajit 能夠在 Loong 上順利運行。
目前,我們與各個新世界發行版社區保持着良好的關係,方便獲取最新的技術成果並解決疑難問題。比如 23 預裝了 libLoL 和在舊世界機器上啓動新世界系統的的支持。
何時Stable?
阻擋我們將 loong64 架構的鏡像 stable 的問題在於:
1、目前應用商店還只是一個空殼,作為一個目標就是開箱即用的發行版來説,這個肯定達不到發版本的標準。
2、目前構建資源還是匱乏,沒辦法做到和 ARM64 同等的構建資源支持,我們目前還在大量使用龍芯台式機作為構建的基礎設施。
3、穩定性不滿足發版本要求,因為龍架構無論是硬件軟件固件都在一個相對快的迭代過程中,很難在某一個時間點去 stable 一個版本,而要求這個版本能穩定的向用户提供服務,所以我們不發 stable 版本,咱一起滾動更新(let‘s roll!)
RISC-V
對於 RV 架構,其實作為個人我參與的不多,deepin 對於 RV 架構的支持,主要在我們的楊同學完成,此時她還在杭州的 RV 峯會上和各位大佬交換意見。那我就代為介紹我們的RV 適配情況。
板子?食之無味,棄之可惜
我們對 RV 架構的支持實際是早於 loong64 的,中科院 PLCT 團隊在我們做主線化支持之前就已經做好了一套非常早期的版本,並且可以啓動到桌面,然而那時我們獲得的硬件是全志 D1,當時我拿了一個回去玩,跑起了 Linux 之後就再也不想動它,讓它吃灰去了,因為性能實在是太弱了,和同樣價格的 rk3566 相比,無論是性能,生態,都遠遠不及。為啥我們要做RV,可能是因為創吧。
其實我們一開始拿到的開發板也不止全志D1 還有 TH1520:只能説是能用,但是用不了一點。性能依然堪憂。
所以在我們只有板子的狀態下,也沒法去做適配,只能用 qemu 手搓 rootfs ,跑起來了內核和tty,但是全功能的 dde 由於性能問題,是跑不起來的(吐槽:就算適配了看全志D1這個樣子,似乎也跑不動 dde)
Sg2042 中式暴力美學的RV處理器
後來Revy給我們弄來了兩台Sg2042的機器,每一個Sg2042使用的是64個平頭哥C910核心,而這個核心同樣用在TH1520的板子上。雖然單核很弱,但是耐不住它核心多啊。咱就靠堆核,也做到和PC級別的性能,至少我們可以在sg2042上插一個AMD信創神卡了:DDE 啓動!
因為sg2042的出現,我們已經大概夠上了批量構建的門檻了,兩台2042在機房日夜不休的構建下,我們的rv生態幾乎追平ARM64。因為RISC-V在上游接受度普遍較高,即使沒有比較強的硬件出現,rv依舊被Debian的主線支持,這也極大的方便了我們進行適配。
從筆記本到遙控車:探索RV的更多形態
而後我們接觸到更多的 RV 設備,(再次感謝各位 RV 廠商的投喂)包括且不限於筆記本,平板,甚至是遙控車這類稀奇古怪的玩意。這樣我們接觸的設備就不僅限於 EVB 了。這些設備雖然五花八門然而使用的無非那麼幾種核心,各有各的毛病,現在也還沒有一個設備能符合我們測試組的要求的。
GPU:RV 生態的攔路虎
我們對於RV生態的構建,其實是非常具有信心的,但是在桌面的支持上我們始終無法忽略 GPU 這個因素。因為 RV 大部分廠商一直以來,未來也將持續把重心放在嵌入式領域,有 PCIE 插槽的設備寥寥可數,寄希望於插一塊 AMD 亮機卡就能帶動桌面的打算基本上泡湯了。
於是擺在我們面前的問題就是 RV 的板載 GPU,它不僅不支持桌面的 GL,只支持 GLES,還沒有開源驅動,只有魔改版 mesa,要我們適配它,意味着我們要往系統裏面塞一坨不受包管理的髒東西。
於是後來我們便修復了 RV llvmpipe 試圖先扔掉這個殘廢 GPU 直接使用軟件渲染,奈何效果不佳,畢竟 DDE 主打的一個特效好看,關閉特效之後完全沒法用。
最後在高人指點下,我們採用了 GLVND 方案實現了開源驅動和閉源驅動的依賴共存,勉強地把它們都納入到了包管理,這才有了我們現在稍微正常一些的桌面體驗。
嵌入式的侷限性
在當前的RV設備適配領域,我們所接觸的大多數產品依然是以開發板的形式存在。這可能是因為對於RV技術來説,桌面應用的普及尚處於早期階段。因此,這種嵌入式設備的設計理念一直影響着我們的適配工作,使得適配過程充滿了挑戰。這段經歷讓我們深刻認識到,為了推動RV技術在桌面環境中的應用,我們需要與廠商更緊密地合作,共同探索和解決適配過程中遇問題。同時,也需要行業內的共同努力,以促進RV技術的成熟和廣泛應用。
以上便是本文所有內容了,感謝所有在 deepin 適配道路提供支持和幫助的老師和夥伴們。
相關閲讀:
(1)deepin 全版本鏡像下載(含 deepin V15)
(2)deepin RISC-V 架構鏡像(LicheePi 44A、VisionFive2等)
(3)deepin 多架構適配機型清單