換平台真正的痛,不在算法
先亮個底:CoreEdge 做的就是 Android 平台工程,我對 Android 有偏好,這篇不假裝中立。但我自己也實際弄過 Linux/Yocto 平台,很清楚那條路的痛——沒有一層抽象,app 幾乎是綁死在平台上,換顆 SoC 或大改 BSP,上層就得跟著重來。正因為兩邊都做過,我才想把 Linux 該贏的地方也講清楚,不然「取捨」就是空話。
換晶片時,大家直覺以為麻煩的是模型要重調。其實模型還算好搬,卡住你的是它底下那層私有 SDK:相機、ISP、感測器、編解碼、NPU、連線,每一個都是晶片廠自己的一套。換一顆 SoC,這層等於重接一遍。
晶片廠每一兩年就丟一顆更強的 SoC 出來,NPU 算力翻倍、換新的加速器。你要是把產品直接疊在裸 Linux 加原廠 SDK 上,就等於焊死在這一顆;哪天想換更便宜或更快的平台,底層整包重做。
Android 的真實身分:一層可攜的隔離契約
很多人把 Android 想成「一個有漂亮介面的作業系統」。做 edge 產品,它更關鍵的角色是一層標準化的硬體抽象(HAL、Camera2、AIDL、framework API)。你的 app 寫的是 Android API,不是某顆 SoC 的 SDK;底層換晶片,衝擊擋在平台層(BSP/HAL)裡,上層 app 幾乎不用動。
講白一點,新創做 Edge AI,錢在賺到之前就先燒掉一大半:先付一筆 NRE 給晶片大廠、拿 BSP 跟硬體參考設計,再養 app 工程師、養硬體工程師,量產前還卡著 MOQ——全是硬成本。偏偏 Android 上還有個尷尬的空隙:原廠大多只顧 kernel 以下、幫你救底層當機,上面那層系統優化(開機、記憶體、連線行為、精簡)原廠管得不多,網路上能抄的資源也少。
要一個還沒獲利的新創,為了這層去養一整隊 BSP 工程師,幾乎是緣木求魚。常見的結局就是——PoC 會動,然後就卡在那,量產推不下去。Android 這層抽象的意義正在這:先讓你把力氣擺在自己的 app 跟模型上,底層換晶片那些事暫時不用碰;只是「上層系統誰來調」這題不會消失,會在 PoC 之後才浮出來。
誠實的取捨:它贏什麼、輸什麼
但這層抽象不是免費的,該講的代價也得講清楚。
Android 贏在:高通 BSP 成熟(原廠先支援 Android)、相機棧完整(CamX/ISP)、NPU 工具鏈最全(QNN/Hexagon HTP)、UI 與 app 生態、OTA 與裝置管理、連線(modem/LTE),還有開發人才多、上手快。
舉個對工業設備最有感的:A/B 無縫更新。Android 從 7.0 起就內建雙槽 A/B——update_engine 把更新寫進另一個槽、重開切過去,新槽開不起來還會自動回滾,整套跟 Verified Boot 綁在一起,高通原廠就出貨了。對無人值守設備這幾乎是命脈:現場 OTA 更到一半斷電,也不會變成一台回不來的磚。代價是雙槽吃掉約兩倍的分區空間(Android 11 起的 virtual A/B 用快照省一些、但更複雜)。標準 Yocto/Linux SDK 沒有內建這套——A/B 要靠 RAUC、Mender、SWUpdate 這類(其實都很成熟的)方案自己接,還得自己處理 bootloader 切槽跟回滾。能做,只是那是一個你自己要扛的整合案,不是開箱就有。
Android 輸在:常駐記憶體大(2–4GB 起)、開機慢、非硬即時(not RT)、攻擊面大、更新負擔重,單一功能的裝置用它嫌太重。
關鍵是:右邊那些「輸」,多半是工程能解的,不是先天絕症。開機能砍半、常駐砍得下去、GMS 能精簡、記憶體吃緊可以上執行期的守護機制。調過的 Android 跟開箱的 Android,根本是兩回事。多數人是拿沒動過的版本去跟 Linux 比,當然覺得又肥又慢——那是沒人去調,不是 Android 本身爛。
連線這塊,Android 給的比你想的多
底層 Android 的網路就是 Linux 那一套 kernel stack(netfilter、ip rule、routing 都一樣),真正差的是上面那層管理。ConnectivityService、netd、telephony 這幾層,被幾十億支手機磨了十幾年:多網路同時在、WiFi 跟行動網路之間無縫切、per-network DNS,這些在裸嵌入式 Linux 上你得自己拼 ModemManager、connman,再加一堆 failover 邏輯;Android 開箱就給你了。
最有感的是高通的 on-die modem。純 Linux 上這東西很煩——QMI、rmnet、一堆私有韌體,能跑起來就要脫層皮;Android 上原廠 telephony 幫你顧好了。要一台機器「插上 SIM 就穩穩上網、斷線自己接回來」,在 Android 上省掉的是好幾個月。
不過它有個脾氣得摸清楚:整套連線是照手機的假設設計的——心裡只有一個 default 網路、預設偏好 WiFi、什麼都繞著 app 轉。一搬到工業現場(行動網路要一直掛著、乙太專走內網、路由要固定、不准亂跳),它的預設就開始跟你作對。把它扳成「工業腦」——強制走 LTE、讓行動網路一直熱著、per-interface 的策略路由——這些才是真的要下功夫的地方。(連線的另一半——「Android 顯示已連線,為什麼還是會失聯」——我們另外寫過一篇。)
講白了,連線這塊 Android 不是天生比較強,是先塞給你一大包現成的成熟度,但得有人把它從「手機腦」調成「工業腦」。老樣子。
抽象的破口:NPU 那層仍是 per-chip
有一塊抽象是騙不了人的:AI 加速這層,Android 並沒有做到跨晶片可攜。NNAPI 名目上是統一介面,但真要壓出效能,各家還是走自己的私有 SDK(高通就是 QNN/SNPE/Hexagon 那一套,別家各有各的),NNAPI 的效能一直沒兌現,Google 自己後來也放生了。所以「換晶片、模型自動最佳化」是想太多,這層換一次就得重接、重調一次。
不過這剛好畫出抽象的邊界:app、相機、感測、UI 換晶片好搬;NPU 跟 BSP 這層,每換一顆都得有人重接重調。這不是選哪個 OS 就能省掉的,得靠平台工程。選 OS 只是開頭,麻煩都在後面。
那什麼時候該選 Linux?(別亂搬)
也不是什麼裝置都該上 Android。而且要公平講,Linux 有 Android 給不了的東西:沒有 AOSP 那條版本與安全補丁的追趕跑步機,維護週期你自己掌握;系統小、攻擊面小;硬即時有 PREEMPT_RT;授權單純、不綁 Google。對生命週期長、要長期自己維護、或根本用不到相機/UI/NPU 的裝置,Linux 常常是更省心的選擇——不是退而求其次。
具體來說,這幾種情況 lean Linux 或 RTOS 才是對的:
- 無螢幕的感測閘道器(headless)——沒有 UI,吃不到 Android 的介面紅利,只剩它的體積成本。
- 硬即時控制——交通號誌、產線安全、馬達控制,Android 不是即時系統。
- 極省 RAM(≤1GB)——成本敏感裝置,塞不下、也不該塞 full Android。
- 單一功能專用機——要極小攻擊面、極快開機,越精簡越好。
這些情況該用 Linux 就用,別為了「用 Android 看起來比較潮」硬套。反過來,裝置有螢幕、要相機、要在晶片上跑 AI、又不想被單一晶片綁死,那大概率就是 Android。
還有一條中間路值得知道:容器化 Linux(balenaOS、Torizon、OSTree 這類)——用不可變基底加容器,把應用跟系統分開,某種程度也是在補「app 綁死平台」那個洞,只是走 Linux 這一邊。它不會解決 NPU/相機那層仍要 per-chip 的問題,但值得放進選項裡。
結論:Android 不是問題,是一塊要調的底子
先補一句:這裡的原理不綁高通——只是高通把 Android 這條路鋪得最完整。換到 Android 支援參差的晶片,天平可能就偏回 Linux,得看你手上那顆。
說到底,Android 還是 Linux,看的是裝置要做什麼:有介面、要相機、在晶片上跑 AI、又想留換晶片的餘地,就 Android,然後花力氣去調它;無螢幕、硬即時、RAM 摳到底、只做一件事,就 Linux。多數 edge AI 新創(有畫面、有相機、跑視覺模型、又在高通上)落在前者:留住可攜性跟專注度,把肥腫的地方處理掉就好。
對這類產品,Android 不是該被拔掉的包袱,是塊需要有人去調的底子。差別就在有沒有人把 App 底下那層做對而已。
這正是 CoreEdge Lab 在做的事:把 Android 調到 edge 級(開機、記憶體、連線行為、精簡、OTA),或在真的該用 Linux 時,給你一個誠實的評估——而不是替某個 OS 站隊。