Fuchsia操作系統(tǒng)號(hào)稱谷歌的“三兒子”,前兩個(gè)是Android和Chrome OS。Android和Chrome OS的內(nèi)核都是Linux,不同的是Chrome OS是針對(duì)PC的,核心功能基于Chrome瀏覽器,一切都在瀏覽器中使用,數(shù)據(jù)都在云上,更適合上網(wǎng)筆記本的使用,一個(gè)大的弊端是沒有桌面程序,這還怎么用?Android大家都知道針對(duì)的是移動(dòng)設(shè)備,最常見的手機(jī)就是。但是安卓有很多技術(shù)弊端,例如內(nèi)存碎片化、安全性、HAL層雞肋、對(duì)硬件渲染支持等缺點(diǎn),后續(xù)會(huì)進(jìn)行說明。所以需要一個(gè)新的OS。
隨著各種設(shè)備例如手機(jī)、平板、PC、物聯(lián)網(wǎng)設(shè)備等各種智能設(shè)備的普及,谷歌就想做一個(gè)統(tǒng)一的OS,而且要脫離Linux的魔爪,在2016年 8 Fuchsia正式推出,F(xiàn)uchsia的說明是“Pink(粉紅)+Purple(紫色)=Fuchsia。它不再基于 Linux 內(nèi)核,而是基于名為Zircon的微內(nèi)核,并且是一個(gè)開源的實(shí)時(shí)操作系統(tǒng),并使用Dart和Flutter打造全新的 UI。這下可炸鍋了,大家一看谷歌還能這么玩,各個(gè)頭部公司就紛紛入局。
更多了解參考Fuchsia中文社區(qū):https://fuchsia-china.com/
Fuchsia在2016年就開始起步了,但是幾年沒有一個(gè)對(duì)外的版本,華為的HarmoneyOS雖然在2019 年8 月華為開發(fā)者大會(huì)正式發(fā)布,但是進(jìn)展神速。在手機(jī)還有各種家用電器物聯(lián)網(wǎng)領(lǐng)域HarmoneyOS的裝機(jī)量據(jù)說明年就要突破10億臺(tái)了。谷歌可以說“起了個(gè)大早,趕了個(gè)晚集”,一方面有自家的安卓,改革的動(dòng)力不足。另一方面是不是因?yàn)椤盎ヂ?lián)網(wǎng)基因”,但是安卓系統(tǒng)都也維護(hù)的好好的,技術(shù)應(yīng)該也沒問題,底層技術(shù)應(yīng)該也很有功底,也可能是“目標(biāo)太宏大,什么都想支持”所以有點(diǎn)難產(chǎn),換句話說就是先進(jìn)的思想太多了,啥都想要,最后非常多的代碼搞的沉重難行。
不得不說Fuchsia真是個(gè)好東西,里面有很多先進(jìn)的技術(shù)值得去分析和學(xué)習(xí),但是谷歌就這么開源了,可能就是現(xiàn)在的新玩法:不怕別人抄,重要的獲得市場(chǎng),讓更多的設(shè)備用起來,相對(duì)于競(jìng)爭(zhēng)者,更多的是愿意不付錢合作的客戶。只要領(lǐng)先,別人會(huì)一直在追趕但是超越不了,真是這么霸氣。回想下當(dāng)年安卓和塞班的斗爭(zhēng)就是一個(gè)活生生的例子,攪局者也許真能獲得勝利。
2020 年谷歌再次推動(dòng)宣傳,F(xiàn)uchsia開始二次發(fā)育,希望通過平臺(tái)開放為其吸引更多軟件開發(fā)支持者。2021 年初,先是項(xiàng)目的 F1 分支,之后又有 F3 分支,隨著一個(gè)個(gè)重要代碼開發(fā)步驟的落地,F(xiàn)uchsia 的面貌及發(fā)展方向也開始愈發(fā)清晰。具體其官網(wǎng)文檔介紹網(wǎng)址:
雖然華為目前鴻蒙的裝機(jī)量和技術(shù)發(fā)展的很好,但是谷歌老大的地位還是不可撼動(dòng),搖旗一呼,小弟們就乖乖的歸位了,目前三星、索尼、聯(lián)發(fā)科、小米、華為、OPPO、ViVo、高通等公司已經(jīng)在參與Fuchsia 項(xiàng)目。眾所周知,華為的風(fēng)格一向比較霸道,動(dòng)不動(dòng)就世界第一,遙遙領(lǐng)先,愿意合作的商家比較少,怕被搶了飯碗。但是國(guó)家還是力挺華為,鹿死誰手,還是將來見分曉,至少:
華為現(xiàn)在有跟谷歌剛的資格了。
2. 揮淚拋棄Linux
Linux一直是開源軟件的領(lǐng)頭羊,但是我們的世界還是由商業(yè)組成的,沒有利益就沒有動(dòng)力啊。Linux內(nèi)核是基于GPL協(xié)議的,GPL協(xié)議意味著對(duì)源碼的任何修改與引用都必須開源,Android底層采用的Linux 內(nèi)核,所以Android是開源的,而硬件廠商給Android開發(fā)的驅(qū)動(dòng)是不可能開源的.
當(dāng)初Google為了解決這個(gè)問題,找到了一個(gè)解決辦法,底層Linux內(nèi)核做了修改,但是把驅(qū)動(dòng)程序放在了Linux內(nèi)核上層跑,而且特意搞了一個(gè)隔離層叫HAL,即Hardware Abstraction Layer,硬件抽象層,所以,Android 系統(tǒng)架構(gòu)中的HAL層本質(zhì)是為了規(guī)避 GPL 協(xié)議而生的,這事在當(dāng)時(shí)還蠻有爭(zhēng)議的,但是不得不說,Google 的這種思路徹底解決了問題,既保護(hù)了「不想開源」的硬件廠商的利益,又解決了「軟硬件兼容」,既利用出色而現(xiàn)成的 Linux Kernel 又防止了被 Linux Kernel 傳染上GPL 后遺癥。
單一的開源協(xié)議還是生命力不那么旺盛,F(xiàn)uchsia就采用了綜合的開源協(xié)議(包括BSD、 MIT 和 Apache許可證) ,任何人都可以在 Google 的公共 Git 倉(cāng)庫中查看和下載。所有的代碼模塊化,其他廠商想開源就開源,隨意集成,不用擔(dān)心很多法律問題,特別是進(jìn)行代碼修改后的OTA相關(guān)操作。
3.Zircon微內(nèi)核歷史
Fuchsia早期是一個(gè)研究型的項(xiàng)目,感覺這點(diǎn)跟國(guó)內(nèi)的不太一樣,應(yīng)該是外國(guó)有錢的公司會(huì)搞一個(gè)研究所,招一些高學(xué)歷、行業(yè)內(nèi)厲害的人物,隨意發(fā)揮的搞研究,偶爾會(huì)有能商用的東西就可以了,想想真是下血本搞創(chuàng)新啊。國(guó)內(nèi)的大公司目前也開始這么搞了,可以說是暫時(shí)養(yǎng)了一堆高薪水的閑人,給他們自由,來搞研究,甚至能發(fā)論文就是成果。牛人就喜歡這類工作,不是做產(chǎn)品,出版本,上線設(shè)備維護(hù),處理客戶需求等低級(jí)勞動(dòng)。
下面介紹一個(gè)牛人TravisGeiselbrecht,其個(gè)人主頁:http://tkgeisel.com/
網(wǎng)頁翻譯后,如下:
感覺這也是一個(gè)老外的傳統(tǒng),我見過一些教授會(huì)把自己的研究成果,學(xué)習(xí)工作經(jīng)歷,甚至旅游或者生活的照片都放到個(gè)人主頁上,然后就是個(gè)人愛好,真是彰顯的個(gè)性十足,估計(jì)以后死了別人看這些資料也能了解他的一生。
Little Kernel是Travis Geiselbrecht 寫的一個(gè)針對(duì) ARM的嵌入式開源操作系統(tǒng),https://github.com/littlekernel/lk 。另外他還搞過IOS等其他OS。
然后介紹另外一個(gè)牛人Brian Swetland,他是安卓初創(chuàng)團(tuán)體的成員,谷歌另外一個(gè)項(xiàng)目Magenta是從 LK 出發(fā),提供多進(jìn)程、安全空間等支持的,針對(duì)大型機(jī)(有很多 RAM,接口豐富)的內(nèi)核。然后, LK for embedded + Magenta 就算是 Fuchisa OS 系統(tǒng)了。
4.Fuchsia與VR/AR技術(shù)領(lǐng)域
對(duì)于Android和Chrome OS的技術(shù)短板,F(xiàn)uchsia當(dāng)然是重點(diǎn)發(fā)力的地方,有兩個(gè)新的點(diǎn)就是硬實(shí)時(shí)和基于物理硬件的渲染,結(jié)合起來有一個(gè)很適合的領(lǐng)域就是VR/AR,F(xiàn)acebook都開始發(fā)力元宇宙了,大家可以看一個(gè)電影《頭號(hào)玩家》里面對(duì)虛擬現(xiàn)實(shí)的描述還是有那么會(huì)事。可見谷歌下的是一盤大棋。
5.多語言應(yīng)用支持和模塊化
在編碼領(lǐng)域,為一種新的語言,某個(gè)應(yīng)用要“重復(fù)造輪子”幾乎是不可能的,例如用java寫了一個(gè)應(yīng)用,再用C++寫一遍,基本很難。目前市場(chǎng)上的安卓程序員用java做的安卓應(yīng)用還需要在IPone上用object-c再寫一遍,還要在網(wǎng)頁上再實(shí)現(xiàn)一遍,還要在小程序上再實(shí)現(xiàn)一遍,真是要了老命了。這個(gè)角度新的OS都是在搶應(yīng)用,就是要支撐各種語言平臺(tái)的應(yīng)用都可以在自己的OS上運(yùn)行,來增強(qiáng)自己的生命力。Fuchsia已經(jīng)超越平臺(tái)的角度,站在了語言的角度來支撐應(yīng)用了。
原生前端應(yīng)用程序是在Dart/Flutter中開發(fā)的,這將極大地促進(jìn)從Android平臺(tái)到Fuchsia的遷移。同時(shí)支撐C,C++,Rust,Go和Dart等語言程序的應(yīng)用。
Fuchsia,被設(shè)計(jì)成一個(gè)完全模塊化的系統(tǒng),允許其庫和應(yīng)用程序完全刪除,更新和添加,而不會(huì)影響系統(tǒng)。除了確保系統(tǒng)完整性之外,這還使其更加安全,例如可以使用簡(jiǎn)單的軟件包輕松獲得安全補(bǔ)丁更新,而不會(huì)影響用戶數(shù)據(jù)或其他應(yīng)用程序。
個(gè)語言優(yōu)缺點(diǎn)詳細(xì)參考:
https://blog.csdn.net/weixin_39658118/article/details/104530466?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-104530466-blog-84035260.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-104530466-blog-84035260.pc_relevant_landingrelevant&utm_relevant_index=9
6.架構(gòu)介紹
本部分參考官網(wǎng)文檔:
https://fuchsia.dev/fuchsia-src/get-started/sdk/learn/intro?hl=en
最小特權(quán)原則:
該系統(tǒng)的核心是Zircon,用于處理系統(tǒng)啟動(dòng)和引導(dǎo)的內(nèi)核和庫集合。所有其他系統(tǒng)組件都在用戶空間中實(shí)現(xiàn)并相互隔離,強(qiáng)化了最小特權(quán)原則。這包括:設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)、網(wǎng)絡(luò)堆棧。
簡(jiǎn)而言之,這要求在操作系統(tǒng)環(huán)境的抽象層中,每個(gè)模塊(例如進(jìn)程,用戶或應(yīng)用程序)只能訪問其執(zhí)行所需的信息和資源。
模塊化/包容性和可升級(jí):
模塊化意味著系統(tǒng)與語言無關(guān)。由于它被設(shè)計(jì)為可擴(kuò)展的,并允許集成用多種語言和運(yùn)行時(shí)編寫的軟件,因此您可以使用C,C++,Rust,Go,Python或Dart /Flutter進(jìn)行開發(fā)。
可升級(jí)意味著Fuchsia軟件包被設(shè)計(jì)為獨(dú)立更新,甚至是即時(shí)交付,或Enphemery,這意味著軟件包被設(shè)計(jì)為解耦,因此根據(jù)需要從設(shè)備隨意添加刪除更新,并且系統(tǒng)始終保持最新狀態(tài)。
內(nèi)核:
系統(tǒng)核心是Zircon,它是具有一組庫的內(nèi)核,用于管理系統(tǒng)的啟動(dòng)和引導(dǎo)。內(nèi)核之外的所有系統(tǒng)組件都是在所謂的用戶空間中實(shí)現(xiàn)的,并且與系統(tǒng)的關(guān)鍵層完全隔離 - 正如我們已經(jīng)在這里討論的那樣,加強(qiáng)了最小特權(quán)的原則 - 所以即使是設(shè)備驅(qū)動(dòng)程序也在用戶空間中隔離。
Zircon帶來了我們通過微內(nèi)核了解的架構(gòu)和許多概念。這種架構(gòu)使Fuchsia能夠盡可能地減少信任代碼的數(shù)量,從而限制內(nèi)存管理,調(diào)度和IPC(進(jìn)程間通信)。
因此,我們遇到了一個(gè)可能的問題:如果系統(tǒng)的整個(gè)核心與用戶空間隔離,我們?nèi)绾伍_發(fā)需要信息甚至與系統(tǒng)“對(duì)話”的應(yīng)用程序?
我們的代碼執(zhí)行交互,例如:手動(dòng)內(nèi)存管理,系統(tǒng)任務(wù)或進(jìn)程,IPC,設(shè)備I / O等;我們可以使用系統(tǒng)調(diào)用。這些執(zhí)行系統(tǒng)調(diào)用的進(jìn)程由VDSO(虛擬動(dòng)態(tài)共享對(duì)象 — libzircon.so)庫執(zhí)行,該庫讀取生成的內(nèi)核映像,而不是直接讀取內(nèi)核中的文件。
用戶空間進(jìn)程通過訪問系統(tǒng)調(diào)用libzircon.so- 一個(gè)虛擬動(dòng)態(tài)共享對(duì)象(vDSO)。Zircon vDSO 是一個(gè)ELF格式的共享庫,內(nèi)核將其映射到每個(gè)新進(jìn)程的地址空間。這個(gè)庫被認(rèn)為是“虛擬的”,因?yàn)樗苯佑蓛?nèi)核映像公開,而不是從文件加載。
Zircon 公開了三個(gè)用于運(yùn)行代碼的主要內(nèi)核對(duì)象:
線程:給定地址空間內(nèi)的執(zhí)行線程。
進(jìn)程:在私有、隔離的地址空間中運(yùn)行的一組可執(zhí)行指令。
作業(yè):一組相關(guān)的流程和作業(yè)。所有作業(yè)形成一個(gè)單根樹。
流程構(gòu)成了系統(tǒng)功能的基礎(chǔ)。每個(gè)進(jìn)程都通過它持有的各種句柄被授予一組能力。
Fuchsia 軟件可能會(huì)也可能不會(huì)在單個(gè)進(jìn)程的范圍內(nèi)運(yùn)行。作業(yè)允許將由多個(gè)進(jìn)程組成的“應(yīng)用程序”作為單個(gè)實(shí)體進(jìn)行控制。
進(jìn)程間通信:
Zircon通道是Fuchsia接口定義語言(FIDL)描述的服務(wù)級(jí)IPC 協(xié)議的基礎(chǔ) . FIDL協(xié)議是Fuchsia 程序使用的主要IPC方法。
Zircon 包含以下用于進(jìn)程間通信 (IPC) 的內(nèi)核對(duì)象類型:Event、Socket、Stream、Channel、FIFO,在這些對(duì)象中,通道特別適合協(xié)助啟動(dòng)新進(jìn)程,因?yàn)樗鼈兡軌驅(qū)⒕浔ㄒ约肮δ埽┺D(zhuǎn)移到另一個(gè)進(jìn)程。
通道恰好有兩個(gè)端點(diǎn)句柄,每個(gè)句柄都由一個(gè)單獨(dú)的進(jìn)程擁有。只有所有者可以讀取或?qū)懭胂ⅲ它c(diǎn)的所有權(quán)可以從一個(gè)進(jìn)程轉(zhuǎn)移到另一個(gè)進(jìn)程。當(dāng)句柄寫入通道時(shí),它們將從發(fā)送進(jìn)程中刪除。當(dāng)從通道中讀取帶有句柄的消息時(shí),會(huì)將句柄添加到接收進(jìn)程。
這里跟seL4很像,基于能力權(quán)限的通信,也是最小化權(quán)限原則的體現(xiàn),就是把需要的權(quán)限都定義出來,不大片的賦予權(quán)限。
組件管理器:
組件框架的核心是組件管理器。它負(fù)責(zé)協(xié)調(diào)所有組件實(shí)例的執(zhí)行,為它們提供功能,并在組件之間建立中介連接。
組件可以顯式啟動(dòng)(例如,從 URL)或從對(duì)特定功能的請(qǐng)求中隱式啟動(dòng)。組件管理器執(zhí)行必要的決議以確定是啟動(dòng)新組件還是將請(qǐng)求路由到現(xiàn)有實(shí)例。為了進(jìn)行這種路由,每個(gè)組件都必須聲明它提供給系統(tǒng)的任何功能以及它使用的任何功能。組件通過capabilities獲得訪問更廣泛系統(tǒng)的各個(gè)部分的權(quán)限。
組件的組織:
7. 代碼下載編譯運(yùn)行
參考官網(wǎng)說明:
https://fuchsia.dev/fuchsia-src/development?hl=en
官網(wǎng)說的很詳細(xì),這里不展開說明了,需要了自己查看。
直接查看源代碼的網(wǎng)址:
https://cs.opensource.google/fuchsia/fuchsia
下載的代碼目錄:
zircon: 操作系統(tǒng)內(nèi)核主體代碼,bootloader, 內(nèi)核的進(jìn)程,內(nèi)存管理,內(nèi)核對(duì)象,arch相關(guān)代碼; 以及運(yùn)行在用戶態(tài)的系統(tǒng)核心進(jìn)程,系統(tǒng)調(diào)用和library都在這里
garnet: 基礎(chǔ)軟件層的主體代碼,主要是屬于garnet層的bin文件代碼,
topaz:應(yīng)用層,最關(guān)鍵的是dart,flutter的runtime
src:操作系統(tǒng)的基礎(chǔ)代碼模塊,應(yīng)該來說很多屬于garnet層,這里有camera,網(wǎng)絡(luò)connectivity,graphics,media,security, storage
build基本上是gni文件,構(gòu)建需要的
sdk構(gòu)建sdk/ddk所需要的配置和腳本
boards全部是gni文件,和板子相關(guān)的編譯配置
tools本地pc機(jī)上運(yùn)行的工具,比如fidl的工具
third_party從外部引入的庫,比如flatbuffers,go,dart,ssl,iperf,libpng,protobuf等等
examples一些c/c++/rust/go的是示例代碼,可以學(xué)習(xí)在fuchsia上怎么開發(fā)
bootloader:Gigaboot引導(dǎo)加載程序。Gigaboot引導(dǎo)加載程序是一個(gè)針對(duì)Zircon的UEFI引導(dǎo)加載程序,可以通過鏈接從iPXE、UEFI可訪問的文件系統(tǒng)或本地磁盤分區(qū)加載圖像。
kernel內(nèi)核主體部分,進(jìn)程調(diào)度,內(nèi)存管理 內(nèi)核對(duì)象object等
system運(yùn)行在用戶態(tài)的核心系統(tǒng)進(jìn)程,bootsvc,devmgr,svchost等,這個(gè)后面細(xì)細(xì)的品;一些基礎(chǔ)的library ulib和基礎(chǔ)的工具uapp
vdso偏底層的系統(tǒng)調(diào)用相關(guān)的fidl文件
在vituralbox的ubuntu上運(yùn)行:fx qemu -N
審核編輯 :李倩
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6896瀏覽量
123765 -
代碼
+關(guān)注
關(guān)注
30文章
4829瀏覽量
69068 -
智能設(shè)備
+關(guān)注
關(guān)注
5文章
1066瀏覽量
50747
原文標(biāo)題:Fuchsia入門-簡(jiǎn)介和代碼介紹
文章出處:【微信號(hào):OS與AUTOSAR研究,微信公眾號(hào):OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【瑞薩RA2L1入門學(xué)習(xí)】2. PWM呼吸燈
華為云 Flexus 云服務(wù)器 X 實(shí)例的快速入門與配置指南
![華為云 Flexus 云服務(wù)器 X 實(shí)例的快速<b class='flag-5'>入門</b>與配置指南](https://file1.elecfans.com//web3/M00/05/BB/wKgZPGeEhG-AHnjhAAEM2AGPJC4938.png)
AIGC入門及鴻蒙入門
【「嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)」閱讀體驗(yàn)】全書概覽與內(nèi)容簡(jiǎn)介
UART串口通信示例:開啟通信寶藏之門的定位模組LuatOS入門
![UART串口通信示例:開啟通信寶藏之門的定位模組LuatOS<b class='flag-5'>入門</b>](https://file1.elecfans.com/web1/M00/F4/38/wKgZoWcnYy-AeH-rAAs3cKMldkQ680.png)
TMS320LF240x DSP的C語言和匯編代碼快速入門
![TMS320LF240x DSP的C語言和匯編<b class='flag-5'>代碼</b>快速<b class='flag-5'>入門</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【「數(shù)字IC設(shè)計(jì)入門」閱讀體驗(yàn)】+ 概觀
新書推薦 | TSMaster開發(fā)從入門到精通
![新書推薦 | TSMaster開發(fā)從<b class='flag-5'>入門</b>到精通](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
松下伺服驅(qū)動(dòng)器故障代碼介紹
![松下伺服驅(qū)動(dòng)器故障<b class='flag-5'>代碼</b><b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/F3/17/wKgaomZ365CAX1pzAABx_KH7F4Y798.png)
panasonic伺服驅(qū)動(dòng)器故障代碼介紹
第二講:?jiǎn)纹瑱C(jī)STC89C52+RA8889驅(qū)動(dòng)控制彩屏 代碼移植介紹
![第二講:?jiǎn)纹瑱C(jī)STC89C52+RA8889驅(qū)動(dòng)控制彩屏 <b class='flag-5'>代碼</b>移植<b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/EB/82/wKgZomZefHKALF8kAAAX4SRXXOI467.png)
評(píng)論