4845 words
24 minutes
高通平臺真的對自由軟體友好嗎?-- 我對於使用自由軟體的看法
2026-04-27 民國 115 年 4 月 27 日
2026-05-22 民國 115 年 5 月 22 日

我是一個自由軟體愛好者,同時也是 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 的那一台。

高通平臺真的對自由軟體友好嗎?-- 我對於使用自由軟體的看法
https://blog.cloudflare88.eu.org/posts/is-qualcomm-platform-compatible-for-foss/
Author
EDK Piepaint
Published at
2026-04-27
License
CC BY-NC-SA 4.0