deepin 实现多架构适配的背后,我们做了什么?

[复制链接]
发表于 2025-12-9 19:31:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
检察原文
   * 全文引述 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 多架构适配机型清单
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表