我是一個自由軟體愛好者,同時也是 Linux 愛好者,我喜歡探究將自由軟體應用於日常生活的可能性。一方面可以節省不必要的開支,另一方面也可以讓大家看到,一些需要使用專有軟體的方案也可以被自由軟體所取代,而且實作甚至優於商業軟體。
在這方面,我有採用架設 Nextcloud 雲端伺服器用於取代專有的 Microsoft 365,Google Workspace 之類線上服務的經驗,不需要一分錢就可以隨時隨地存取我的工作檔案,文書處理,只需要通過瀏覽器就可以遠端辦公。這種自由度的體驗,對於我來說,是一種享受。特別是隨着我的日用設備從 X86 遷移到 ARM 架構之後,自由軟體在我日常生活中所佔的比例日漸提高。當別人在爲 Office 365 的費用而苦惱,時常抱怨 Windows 11 的強制更新,效能低下時,我早就開始思考取代另一個專有軟體的方案了。
爲什麼會選擇高通平臺開始研究?
從自身的玩機歷程而言,我與高通驍龍晶片結下的「羈絆」從2016年的 Coolpad Cool 1就開始了。因爲早期驍龍晶片 GPU 效能強,所以很長一段時間,驍龍晶片一直都是我選擇手機,平板電腦等裝置的「依據」,也成爲了我刷機的開始。比起後來接觸到的 Rockchip,全志,Mediatek 平臺的裝置,我在高通平臺上的經驗比較豐富,網路上流傳的文檔也比較多。另外,高通的晶片在行動裝置市場甚至 ARM 市場上都具有較高的知名度。這樣看來,在高通平臺(特別是 MTP, QRD, CRD 等原型機)上的主線核心移植及韌體開發就有了意義。很多零售設備上的主線核心原始碼都是從 MTP,QRD 之類的原型機修改而來的,具有比較高的參考意義。
一切「奇跡」的開始
採用 Arm 晶片的筆電,並不是沒有「前車之鑒」。2017年,由 PINE64 公司推出的 Pinebook 就是採用 Allwinner A64 晶片,預載 KDE Neon Linux 發行版的筆電。但是 A64 晶片的效能實在是不堪入目呀…平時放個 YouTube 1080P 解析度的影片都可以讓 SoC 使用率飆到90% 以上,平時執行軟體也總是慢慢的,甚至還會有當機的情況。後面換了 Apple MacBook Air(不是講了不宣傳 Apple 產品嗎)改用 Asahi Linux,效能有了提升,續航也不錯。
2024年,驍龍 X Elite 和強大的 Oryon 核心誕生時,業界曾寄予其厚望,認爲這是繼 Apple Silicon 之後,又一個可以撼動 X86 晶片的存在。加上高通積極推動主線核心的支援,許多 Arm 筆電愛好者都認爲 SC8380XP(就是 X Elite 的早期稱呼) 如此強悍的晶片,將會成爲筆電的「奇跡」。
對於我,驍龍筆電的到來,就像我在 Linux 學習心得中講到的,完全是「意外」。但也不得不承認驍龍筆電的「強悍」,4.2GHz的時脈,32GB的記憶體,以及42MB的L2快取無論是程式開發或者是日常使用都可以完美應對,雖然不能玩PC上常見的大型遊戲,但是依舊不錯(畢竟我也不會用嵌入式裝置玩遊戲)。在我的程式開發和日常使用中,它陪伴着我創造了一個又一個「奇跡」:第一次設定 Ollama LLM,第一次開起KVM虛擬機…或許對於經驗豐富的開發人員而言,這些早就不是「新鮮事」,但是對於普通的使用者而言,這是非常驚豔的。
然而…
高通平臺真的對自由軟體友好嗎?
高通每個晶片參考平臺(QRD,MTP,CRD/CLS)的板級開發套件庫幾乎都支援 Android(LA/LAA),對於面向筆電,桌機等場景的原型機,還會有 Windows(WP)或者 ChromeOS(LC)的原始碼。妳一定就會問了:既然 Android 的 BSP 支援那麼好,而 Android 核心基本是同時期的 Linux LTS 核心分支修改而來的,那麼支援主線核心應該也是很容易的事情吧?想得美!高通的下游核心涉及驅動程式,設備樹之類的修改多達
上萬處,早就和主線核心相去甚遠了。拋開驅動程式原始碼是否開源不談,就算是直接使用下游核心移植 Linux 系統,核心驅動也會因爲執行機理不同而無法使用,半數以上的硬體是無法工作的。至於主線核心,如果運氣好的話,興許可以利用高通提交給上游的一些驅動程式來修補。像是針對高通 Wifi 網路卡的 ath 模組,qcom-soundwire 也有針對高通新平臺(例如 8750,8850)的音訊支援。在主線核心面前,就連高通自己的參考平臺都不能做到硬體100%支援(SM8750 MTP 的相機不被主線核心支援,幾乎所有原型機的相機都無法使用)。至於改用 linux-libre 這種100%自由軟體的核心…相信我,所有裝置都開不起來!

那些常見的零售機就可想而知了。這對於追求客製化軟體和韌體的自由軟體使用者來說,真的有點不友善。
雖然相容 Arm V8 指令集,但是無法開啓虛擬化
對於自由軟體使用者而言,還有另外一個讓人困惑的問題,在於高通對於硬體虛擬化的封堵。
「同學們,我們這學期即將結束,需要大家採用X軟體完成網路相關的實驗,並把結果發表在Y上,使用
docx格式發表。」
對於學生或者員工而言,常常因爲各種原因不得不使用專有軟體去完成工作。有時這份工作又非常重要,甚至關係到這學期或者季度的「生死」,又該怎麼辦?比較好的辦法就是使用虛擬機來執行那些專有軟體。然而很多時候都是妳只能在一邊拿着妳安裝了 Linux 的驍龍裝置乾坐着,妳問我爲什麼不開虛擬機?
問得好,因爲驍龍晶片的裝置開不起來!自從驍龍410之後,除了筆記本平臺之外的晶片都完全拔掉了 EL2 等級,加上驍龍平臺的 UEFI 韌體不符合 ARM BBR 規定,UEFI 韌體執行在 EL1 等級之下,Linux 核心也就只能執行在 EL1 等級,在這種情況下,Hypervisor 被完全地關閉。使得妳那擁有足量記憶體和效能的晶片,要麼只能作爲一個客戶機去存取其他的遠端虛擬機,要麼就只能改用 Docker 等採用容器的方案了。
即使 Google 在 Android 13 發佈時推出了系統內建的「終端機」功能,高通也從 SM8650 內建了執行在 EL1 等級的 Hypervisor,但目前僅限於 Android 核心使用,也只能執行經過廠家簽章的受保護虛擬機(PKVM)。這種虛擬機的功能受限,只可以跑 Linux。還只限載有 pvmfw 韌體的裝置才可以用,符合這一點的裝置還要採用6.1及以上的核心。雖然原型機可以使用 Windows 裝置的方法拿到 EL2,卻需要修補 QSEE 設定來實現。
而在 Windows on ARM 設備上,想要讓作業系統核心執行在 EL2 下也並不容易。就拿我自己的經歷講,單是在我自己的筆電上開虛擬機,就花費了幾天時間去研究。slbounce 專案就講了高通對於 Windows 平臺的重重限制,必須使用一種自訂開機流程來拿到 EL2 等級來使用 Hypervisor。因此在很長一段時間內,執行主線核心的 Windows 平臺是無法使用虛擬機的,儘管晶片支援虛擬化。而且讓作業系統跑在 EL2 下會導致不少「side effects」,例如 ADSP,CDSP 還有 PCIe 裝置會噴掉(高通平臺的 Linux 核心會藉由 Hypervisor 啓動像是 ADSP,CDSP,Modem 之類的遠端處理器,而不是讓 UEFI 韌體管理)從而導致裝置上音訊,無線網路,還有電池計量器(對於筆電,手機等可攜裝置)等依靠遠端處理器的功能不工作,雖然已有 qebspil 可以讓 UEFI 韌體管理,但是這需要修補核心原始碼。往往需要更多不必要的時間。
儘管從 SC8380XP 往後的晶片也同手機晶片一樣支援 Gunyah(군얘) Hypervisor,但是目前主線核心尚未有明確支援,需要給核心打 patch 才可以啓用,也必須使用特製的 QEMU fork 才可以運作。唯一的例外應該是執行 ChromeOS 的晶片,採用 Arm 的 TF-A 取代了高通專有的開機流程,使得核心會跑在 EL2 下並且所有功能正常。
# sudo dmesg | grep gunyah
# 這段 dmesg 展示了 Linux 核心爲 Gunyah 保留的記憶體區段,證實了 Gunyah 的存在
[ 0.000000] OF: reserved mem: 0x0000000080000000..0x00000000807fffff (8192 KiB) nomap non-reusable gunyah-hyp@80000000忘記之前在 Duckduckgo 上爬文的時候在哪裏看到的一段總結了,覺得對於高通平臺的總結非常正確:
「這或許就是高通「萬物基於 Android 的」理念,把手機上 Bootloader 鎖的概念帶到了筆電上。基於軟體的 UEFI Secure boot (高通的開機韌體基於 Coreboot 和 EDK II UEFI 開發,叫做「Core platform boot」)可以關掉,但是熔燬在 eFUSE 上的硬體 secure boot 卻不能關掉。」
所謂的「爲了使用者安全」,實際是用「安全」爲名,限制了使用者的自由,阻止了使用者隨意的更換軟硬體。難怪史托曼從來不會看上 Arm 筆電!雖然不會像 Intel,AMD 那樣在 Microcode 或者 硬體內內建「後門(Intel ME 管理引擎就是例子)」,但卻可以做出比 X86 更加限制使用者自由的行爲來(例如 Lenovo 在自家的驍龍筆電上限制 EDL 刷機的 「VIP 映像驗證」)。
雖然效能強大,但是穩定性較差
我真的已經受夠了每次開機都需要 tweak 的裝置了。雖然有證據表明,驍龍晶片在 Linux 下的效率是要優於 Windows on ARM 的。但是驅動程式的支援和軟體支援的差勁,無一不是在給我的日常體驗上帶來不便。例如我最常使用的 OBS Studio 和 Moonlight,以及爲了存取遠端伺服器的 Rustdesk 軟體,隨便到網路上爬文就可以看到對於驍龍的 H264/HEVC 硬體解碼的問題的抱怨,對於 SC8380 更是好不到哪裏。目前內建的 TPM,NPU 和 Venus 硬體解碼暫時無法工作,這使得這些裝置的影片播放和處理等相對於其它筆電而言形同玩具。而且高通SC8380 晶片組常見的 Quectel NCM825A PCIe 無線網路卡在主線核心中也有不少問題,甚至還有因爲網路卡韌體問題而當掉整臺筆電的事情出現。這或許是 TUXEDO 最終放棄開發採用驍龍晶片的 Linux 筆電的原因。在驍龍裝置上使用 Linux,意味着妳必須要有主動的系統維護意識,知道怎麼通過 log 發現和解決問題。
在我的日常使用中,每次想要使用虛擬機時,還要開機到 UEFI shell 下,手動加載 slbounce 驅動才可以執行 Linux 核心。雖然後期通過 startup.nsh 指令稿解決,依舊不方便。有的時候也不禁想要問:「爲什麼不能像其它 ARM 晶片一樣把韌體跑在 EL2 下,開機就可以用虛擬機?整這些黑箱是在衝三小?」儘管嘴上總是抱怨,但我依然使用着採用驍龍晶片的裝置,爲此還學會了不少新的知識,這些「知識」後來被用來移植 Linux 系統到其它裝置上做了堅實的基礎。使得我有時候會想:我是否也是受虐狂?明明可以選擇離開,可我還是忍不住要去 tweak ,僅僅爲了讓裝置更好用,還有提升可憐的一點點效能;明明可以直接用廠商提供的那個黏滿了私有驅動、核心版本停留在 6.1 的「Android味」下游核心,卻偏要死磕最新的 linux-next。僅僅是因為我無法忍受系統裡存在那些無法被審計的二進位檔案(Blob),或者是那種「被廠商牽著鼻子走」的感覺。仿佛不 tweak 裝置就不知該做些什麼,有時還會覺得就應該在「蔚藍檔案」中迷失自我,享受着所謂「九藍一金」的生活…
爲此不得不感嘆,給驍龍裝置開發主線核心,移植 Linux 發行版,甚至逆向裝置原本的韌體開發出新的 UEFI 韌體(知名的有 Renegade EFI,「阿羅娜(아로하, Aloha),在我個人建設的 Minecraft 鐵路地圖中設有「阿羅娜平原站(Aloha Plain)」作爲紀念」)的開發者,真的非常厲害。
NOTE下圖來自社群創作的「原信地下鐵案內圖(路線圖),2026年4月線路分佈情況」,注意地圖中的「Aloha Plain(阿羅娜平原站)」。
圖中青色線路爲「OpenCore 支線」,淺綠色線路爲「熔絲輕軌(Fuse L.R.T.)」。
「阿羅娜平原站」出入口,注意地面上的「Microsoft logo,曾是 Aloha 擁有重新設計的圖示前,MU UEFI 韌體的默認 Logo」。
他們不畏懼艱難,在沒有原理圖,BSP 的情況下,憑藉着廠商釋出的原始碼,在荒野中開闢出一條條小路,他們花費大量時間,對裝置展開逆向工程,只是爲了讓主線核心更好的相容裝置,在這混亂的硬體中建立起統一的秩序。無論是讓 Android 手機重獲新生,可以載入 Linux 甚至 OpenBSD 作業系統的 Renegade Project,還是致力於讓驍龍 X Elite 真正成為「Linux 生力軍」的開發者們,他們在 GitHub 上提交的每一行 commit,都是在為我們爭取那一點點微弱但珍貴的選擇權。
雖然我移植 Linux 的裝置不多,但是作爲主線核心的受益者,同時也是一名 Linux porter,我也知道移植的不易。爲了能夠讓裝置「完美」相容主線核心,往往需要學習很多知識,還有除錯技巧。雖然這些知識在我的日常生活中用處不大,在常人眼中甚至是「不必要」的。好端端的電腦,幹嘛要天天折騰呢?但當我成功把 Arch Linux ARM 藉助我修改過的設備樹,和主線核心成功在那些人們所謂「本不能執行 Linux 系統的手機,平板電腦甚至是原型機」上跑起來時,那種感受不亞於在「蔚藍檔案」中一發入魂,看到閃着虹光的「學生」檔案的感受。
「或許我們追求的從來不是一台完美的電腦,而是在修補缺陷的過程中,證明自己還擁有對硬體的掌握權。」
-------- Hamoa Oryon 寫於 2022 年 1 月 23 日
要務實的使用自由軟體
如果完全遵循理查·史托曼(RMS)那套嚴苛的定義,那麼我們手頭上這台搭載驍龍晶片的裝置,從通電那一刻起就已經是「不自由」的。那些封裝在 /lib/firmware 路徑下的二進位檔,就像是不可見的黑箱,操控著原本應該屬於我的硬體。但我始終認為,自由軟體的目的應該是賦能於人,而不是限制人的使用。
我不反對爲了自由,而把裝置從韌體到軟體,全部改用自由軟體的做法。但是這樣做顯然會有後果:妳無法使用包括 GPU,網路卡,數據機在內的硬體。因爲幾乎所有的裝置都需要韌體工作,而這些韌體幾乎都是專有軟體,很少裝置支援三方自由韌體。這種現象在高通平臺更常見,ADSP,CDSP,Modem 這些遠端處理器全都需要韌體才能正常工作!如果為了追求純粹的自由而拔掉無線網路卡的韌體,導致我必須拖著一根 RJ45 網線才能在咖啡廳發電子郵件;或者為了拒絕專有驅動而關閉 GPU 加速,讓我的桌面環境流暢度退化到像是在翻閱投影片,那這種「自由」更像是一種苦難。
我自己是非常堅持自由軟體的人啦…但我的「堅持」是要求我的裝置底層的硬體,半數以上可以工作,如果無法工作的話至少不會影響我的裝置使用。我接受那些為了啟動硬體而必須存在的 Blob,但我絕不接受在作業系統層面被廠商的私有軟體綁架。
當我能在驍龍裝置上跑起自己編譯的核心,並配合 Arch Linux 這種高度自定義的發行版時,我已經實現了 90% 的數位主權。我可以決定系統如何調度核心、如何管理記憶體、如何過濾網路流量,而不是忍受廠商預裝軟體中潛藏的追蹤器,必須強迫簽下「最終使用者許可協定」。雖然 ADSP 和 CDSP 依然運行著那些看不懂的專有韌體,但只要它們能乖乖聽從核心的調度,為我的音訊處理或異構計算提供動力,而不會越權干涉我的主系統,這就是一種可以接受的平衡。
務實地使用自由軟體,本質上是一種技術上的長征。我們在專有韌體的荒漠中,利用主線核心與開源工具開闢出一片綠洲。這並不可恥,反而是開發者在面對硬體巨頭壟斷時,所能展現出的韌性。
與其執著於那些無法工作的硬體,不如把精力放在如何優化現有的開源驅動,或者是像開發者們那樣,逆向出更好的 UEFI 實現。當我們能在確保日常使用的前提下,一點一滴地用自由軟體取代原本的專有元件,這台裝置才真正開始屬於它的使用者,而不是它的製造商。
畢竟,最好的裝置,永遠是那個妳真正了解它每一行配置、並且能隨心所欲地進行 tweak 的那一台。

「阿羅娜平原站」出入口,注意地面上的「Microsoft logo,曾是 Aloha 擁有重新設計的圖示前,MU UEFI 韌體的默認 Logo」。