軟件定義的汽車
與20年前的數(shù)據(jù)中心類似,傳統(tǒng)汽車是經(jīng)典的“硬件隔離軟件”架構(gòu)。每一輛量產(chǎn)車有50+軟件供應(yīng)商,要讓這么多軟件模塊安全可靠地在同一輛車上運(yùn)行,傳統(tǒng)的方法是讓每一個供應(yīng)商把軟件封裝在自己的計算機(jī)硬件里面。這些供應(yīng)商封裝提供的計算機(jī)叫作ECU。每個ECU里面有一套完整的芯片、存儲、操作系統(tǒng)與應(yīng)用軟件,ECU之間只通過簡單的實時網(wǎng)絡(luò)傳輸信息,從而達(dá)成隔離不同供應(yīng)商軟件的目的。今天每一輛汽車有100~150個ECU,其軟件的復(fù)雜性已經(jīng)很難管理。
因而,以Tesla為代表的“造車新勢力”開始采用以軟件為中心的架構(gòu),新一代智能汽車也不再有100+ECU,而是擁有一臺到幾臺通用計算機(jī)。供應(yīng)商的軟件作為模塊運(yùn)行在這些計算機(jī)上,隔離不同供應(yīng)商模塊的不再是硬件與網(wǎng)絡(luò),而是軟件容器,這就是“軟件定義的汽車”。而以軟件為中心的新架構(gòu)對下一代汽車的基礎(chǔ)軟件,包括其核心操作系統(tǒng),提出了新的要求。
智能汽車操作系統(tǒng)之爭
目前,智能汽車正在從ECU向“軟件定義”過渡,車企不能一步到位,走到每輛車只有一臺超級計算機(jī)的架構(gòu),只能過渡到每輛車3~4個“域計算機(jī)”(也稱“域控制器”),其中有兩個很重要的域:ADAS域與座艙域。
ADAS域計算機(jī)管理著汽車自動駕駛的傳感器、AI推理、決策與控制。
座艙域計算機(jī)管理著汽車座艙的控制與用戶交互體驗。
這兩個域的操作系統(tǒng)并不相同。在座艙域中,車企一般使用的是Android系統(tǒng),或者是剪裁版的Linux,以保證大量應(yīng)用程序的兼容性。座艙里的Linux與Android系統(tǒng)使用開源的底層操作系統(tǒng),有巨大的開發(fā)者社區(qū)。其上層的應(yīng)用App可以是開源或閉源的。
在ADAS域中,車企一般使用商業(yè)的實時操作系統(tǒng),如QNX與VxWorks等。ADAS的底層操作系統(tǒng)一般不開源,而應(yīng)用雖然有開源的,如Autoware與百度的Apollo,但是絕大部分算法、傳感器集成以及推理應(yīng)用都是不開源的。
當(dāng)然,這兩個域的操作系統(tǒng)也有重疊的地方。例如,座艙域中顯示駕駛數(shù)據(jù)的屏幕(車速、自動駕駛信息)一般是用QNX,以保證實時的數(shù)據(jù)讀寫。在座艙內(nèi),對Android、Linux與QNX的需求還產(chǎn)生了專門的Hypervisor虛擬化解決方案,如OpenSynergy,能讓幾個操作系統(tǒng)用虛擬化的方式運(yùn)行在同一個硬件計算機(jī)上。
因而,未來“軟件定義的汽車”有很大幾率會從幾個域進(jìn)一步進(jìn)化為一個超級計算機(jī)。這個計算機(jī)需要一整套操作系統(tǒng)與中間件服務(wù),去為座艙、自動駕駛等各種車內(nèi)應(yīng)用服務(wù)。想要實現(xiàn)這個操作系統(tǒng),主要有以下兩條路徑。
以目前座艙使用的Linux為基礎(chǔ)改造。一方面是把Linux繼續(xù)剪裁;另一方面是在Linux上增加對實時任務(wù)的支持。盡管Linux本身不是一個實時操作系統(tǒng),也不是為嵌入式設(shè)備設(shè)計的,這條路徑有相當(dāng)大的難度,但Linux已經(jīng)有了龐大的開發(fā)者社區(qū)與應(yīng)用生態(tài)。這里比較有代表性的是Linux基金會旗下的Automotive Grade Linux (AGL)。AGL有近百個成員公司,包含了世界上主要的主機(jī)廠商與一級供應(yīng)商。
開發(fā)嶄新的下一代實時操作系統(tǒng)。一個有力的競爭者是Linux基金會旗下的seL4。seL4是一個基于微內(nèi)核的實時操作系統(tǒng),它的一個主要特點是經(jīng)過形式化驗證,能保證內(nèi)核的安全穩(wěn)定性。但seL4目前只有內(nèi)核,中間件與應(yīng)用生態(tài)建設(shè)仍然有很長的路。好消息是汽車行業(yè)的地平線、蔚來汽車、理想汽車、Second State最近都加入了seL4基金會,共建生態(tài)。
我們注意到,未來汽車操作系統(tǒng)的明顯趨勢是開源的。這意味著開發(fā)者試驗與進(jìn)入汽車生態(tài)的門檻會越來越低。
在智能汽車火熱的中國市場中,有技術(shù)實力的汽車軟件公司也都在向自研操作系統(tǒng)努力。它們都是從基于Linux的座艙系統(tǒng)(如前述的AGL)往實時車控操作系統(tǒng)演進(jìn)。其中比較有代表性的是以下幾家。
阿里與上汽合資的斑馬智行于2021年7月獲得30億元的增資,主要用于基于開源的AliOS的汽車操作系統(tǒng)開發(fā)。
華為于2021年發(fā)布了開源微內(nèi)核的鴻蒙操作系統(tǒng),業(yè)界普遍認(rèn)為是可以用在未來汽車上的。
鎂佳在2021年5月融資一億美元,用于汽車操作系統(tǒng)與應(yīng)用商店的研發(fā)。
中科創(chuàng)達(dá)是國內(nèi)領(lǐng)先的汽車軟件應(yīng)用開發(fā)商,其高層在最近的訪談中反復(fù)強(qiáng)調(diào)了公司要做操作系統(tǒng)的決心。
加之前面提到的seL4基金會成員地平線、蔚來、理想、Second State,中國廠商目前在汽車操作系統(tǒng)的兩個主要方向都有布局,正走在世界智能汽車操作系統(tǒng)領(lǐng)域的前列。
軟件生態(tài)與容器
放眼智能汽車的生態(tài)圈,今天的座艙與ADAS兩個域計算機(jī)都是以整體解決方案的方式售賣給整車廠。對于整車廠來說,這兩個重要域計算機(jī)是黑盒。域計算機(jī)的供應(yīng)商,而不是整車廠,正在掌控著這兩個域的相關(guān)軟硬件生態(tài)。例如,ADAS激光雷達(dá)的選型、座艙語音識別的算法選擇都是由域計算機(jī)供應(yīng)商決定的。這與今天的汽車生態(tài)格格不入,也不是整車廠能夠長期接受的方案。而未來,如果軟件定義的汽車發(fā)展到每輛車只有一臺超級計算機(jī),對這臺計算機(jī)的操作系統(tǒng)與軟件生態(tài)的控制權(quán),更是整車廠不能放棄的。
這里的挑戰(zhàn)是,整車廠或者域供應(yīng)商,如何在一個開放的計算平臺上安全高效地集成多個下游供應(yīng)商與開發(fā)者寫的軟件?其實,這個問題在“軟件定義的數(shù)據(jù)中心”已經(jīng)有了很好的解決方向:使用軟件容器隔離各個供應(yīng)商寫的模塊。
云原生數(shù)據(jù)中心用Docker這類軟件容器實現(xiàn)隔離。汽車廠商也一直在試圖使用Docker這樣的軟件容器。
豐田汽車以及多個整車廠都已經(jīng)試驗過在車上的Linux系統(tǒng)上運(yùn)行Docker。
實時操作系統(tǒng)VxWorks在2019年正式推出了Docker與Kubernetes(以下簡稱K8s)的支持。
QNX也在多個技術(shù)會議上表達(dá)了支持Docker的意愿。但是,在云原生數(shù)據(jù)中心大量使用的Docker與K8s并不能從根本上滿足汽車上軟件容器的需求。它們太慢,太重,也不能滿足實時性的需求。市場上急需一個更好的解決方案。
新一代的輕量級軟件沙盒/容器技術(shù),如支持多種編程語言與多種操作系統(tǒng)/硬件的WebAssembly Runtime,是在汽車這種邊緣設(shè)備上實現(xiàn)軟件隔離的很好選擇。WebAssembly直接從操作系統(tǒng)的線程啟動,并不需要模擬一個自己的操作系統(tǒng)環(huán)境,在啟動時間上可以比Docker這類解決方案快100倍以上。
基于WebAssembly的軟件容器也需要自己的管理與編排工具。這里主要有兩個思路。
利用K8s在云原生成熟的生態(tài),將K8s改造為能編排邊緣設(shè)備上WebAssembly容器的工具。輕量級的K8s工具,如KubeEdge、SuperEdge與OpenYurt,已經(jīng)在邊緣設(shè)備上應(yīng)用。
用數(shù)據(jù)流處理框架,在傳感器的數(shù)據(jù)流之中實時啟動容器與第三方應(yīng)用。目前基于ROS的自動駕駛解決方案,如ERDOS與Autoware,都可以走這個方案。工業(yè)應(yīng)用的實時流處理框架,如YoMo,也可以用來調(diào)度WebAssembly容器。云原生計算基金會(CNCF)的正式托管項目WasmEdge也已經(jīng)實現(xiàn)了與YoMo和ERDOS 的適配。
WebAssembly Runtime抽象了底層的硬件與操作系統(tǒng),開發(fā)者就能用現(xiàn)代的編程語言與框架,如Rust,寫出高性能、可移植的汽車應(yīng)用。
開發(fā)者的機(jī)會
軟件定義的數(shù)據(jù)中心產(chǎn)生了“云原生”的使用場景,賦能了大量開發(fā)者。軟件定義的汽車也會讓第三方開發(fā)者更容易進(jìn)入汽車。對于廣大開發(fā)者來說,軟件定義的汽車的意義在于把汽車變成一個開放的計算平臺。標(biāo)準(zhǔn)化的硬件、開源的操作系統(tǒng)、開源的容器與運(yùn)行沙盒,都會大大降低開發(fā)者參與汽車應(yīng)用開發(fā)的門檻。
未來整車廠的核心能力將不再是引擎與變速箱,也不再是整合幾個一級供應(yīng)商的部件,而是像今天的公有云或者手機(jī)廠一樣,整合軟件開發(fā)者的生態(tài),為用戶提供最好的軟件體驗。
新程序員們,軟件定義的汽車時代已經(jīng)來臨了,你們準(zhǔn)備好了嗎?