感受開(kāi)源之美共享Linux的安全與便捷
一提到哪種系統(tǒng)更安全這個(gè)問(wèn)題時(shí),大家首先就會(huì)說(shuō)開(kāi)源的系統(tǒng)更安全,為什么呢?這是因?yàn)樗粌H具有著廣泛的參與性,而且還具有很好的共享性,達(dá)到了人人參與,人人受益的目的;所以,這類(lèi)系統(tǒng)受到惡意攻擊的次數(shù)遠(yuǎn)遠(yuǎn)低于其他商業(yè)類(lèi)軟件系統(tǒng),是更加安全的一類(lèi)系統(tǒng)。其中的佼佼者,就是 Linux 系統(tǒng)和以 Linux 內(nèi)核作為核心的開(kāi)源操作系統(tǒng)。
模塊化程度高:Linux 的內(nèi)核設(shè)計(jì)非常精巧,分成進(jìn)程調(diào)度、內(nèi)存管理、進(jìn)程間通信、虛擬文件系統(tǒng)和網(wǎng)絡(luò)接口五大部分;其獨(dú)特的模塊機(jī)制可根據(jù)用戶(hù)的需要,實(shí)時(shí)地將某些模塊插入或從內(nèi)核中移走,使得 Linux 系統(tǒng)內(nèi)核可以裁剪得非常小巧,很適合于嵌入式系統(tǒng)的需要。
源碼公開(kāi):由于 Linux 系統(tǒng)的開(kāi)發(fā)從一開(kāi)始就與 GNU 項(xiàng)目緊密地結(jié)合起來(lái),所以它的大多數(shù)組成部分都直接來(lái)自 GNU 項(xiàng)目。任何人、任何組織只要遵守 GPL 條款,就可以自由使用 Linux 源代碼,為用戶(hù)提供了最大限度的自由。
? ? ? ?這一點(diǎn)也正投嵌入式系統(tǒng)所好,因?yàn)榍度胧较到y(tǒng)應(yīng)用千差萬(wàn)別,設(shè)計(jì)者往往需要針對(duì)具體的應(yīng)用對(duì)源碼進(jìn)行修改和優(yōu)化,所以是否能獲得源代碼對(duì)于嵌入式系統(tǒng)的開(kāi)發(fā)是至關(guān)重要的。加之 Linux 的軟件資源十分豐富,每種通用程序在 Linux 上幾乎都可以找到,并且數(shù)量還在不斷增加。這一切令設(shè)計(jì)者在其基礎(chǔ)之上進(jìn)行二次開(kāi)發(fā)變得非常容易。另外,由于 Linux 源代碼公開(kāi),用戶(hù)不用擔(dān)心有“后閘”等安全隱患。同時(shí),源碼的開(kāi)放給各教育機(jī)構(gòu)提供了極大的方便,促進(jìn)了 Linux 的學(xué)習(xí)、推廣和應(yīng)用。
廣泛的硬件支持:Linux 支持 x86、ARM、MIPS、ALPHA 和 PowerPC 等多種體系結(jié)構(gòu)的微處理器。目前已成功地移植到數(shù)十種硬件平臺(tái),幾乎能運(yùn)行在所有流行的處理器上。由于世界范圍內(nèi)有眾多開(kāi)發(fā)者在為 Linux 的擴(kuò)充貢獻(xiàn)力量,所以 Linux 有著異常豐富的驅(qū)動(dòng)程序資源,支持各種主流硬件設(shè)備和最新的硬件技術(shù),甚至可在沒(méi)有存儲(chǔ)管理單元 MMU 的處理器上運(yùn)行,這些都進(jìn)一步促進(jìn)了 Linux 在嵌入式系統(tǒng)中的應(yīng)用。
內(nèi)核安全、高效、穩(wěn)定與易用性更好: Linux 內(nèi)核的高效和穩(wěn)定已在各個(gè)領(lǐng)域內(nèi)得到了大量事實(shí)的驗(yàn)證。Linux 中大量網(wǎng)絡(luò)管理、網(wǎng)絡(luò)服務(wù)等方面的功能,可使用戶(hù)很方便地建立高效穩(wěn)定的防火墻、路由器、工作站、服務(wù)器等。為提高安全性,它還提供了大量的網(wǎng)絡(luò)管理軟件、網(wǎng)絡(luò)分析軟件和網(wǎng)絡(luò)安全軟件等。
具有優(yōu)秀的開(kāi)發(fā)工具:開(kāi)發(fā)嵌入式系統(tǒng)的關(guān)鍵是需要有一套完善的開(kāi)發(fā)和調(diào)試工具。傳統(tǒng)的嵌入式開(kāi)發(fā)調(diào)試工具是在線仿真器(In Circuit Emulator,ICE),它通過(guò)取代目標(biāo)板的微處理器,給目標(biāo)程序提供一個(gè)完整的仿真環(huán)境,從而使開(kāi)發(fā)者能非常清楚地了解到程序在目標(biāo)板上的工作狀態(tài),便于監(jiān)視和調(diào)試程序。在線仿真器的價(jià)格非常高,而且只適合做非常底層的調(diào)試。如果使用嵌人式 Linux,一旦軟硬件能支持正常的串口功能,即使不用在線仿真器,也可以很好地進(jìn)行開(kāi)發(fā)和調(diào)試工作,從而節(jié)省了一筆不小的開(kāi)發(fā)費(fèi)用。嵌入式 Linux 為開(kāi)發(fā)者提供了一套完整的工具鏈(Tool Chain),能夠很方便地實(shí)現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各個(gè)級(jí)別的調(diào)試。
有很好的網(wǎng)絡(luò)支持和文件系統(tǒng)支持: Linux 從誕生之日起就與 Internet 密不可分,支持各種標(biāo)準(zhǔn)的 Internet 網(wǎng)絡(luò)協(xié)議,并且很容易移植到嵌入式系統(tǒng)當(dāng)中。目前,Linux 幾乎支持所有主流的網(wǎng)絡(luò)硬件、網(wǎng)絡(luò)協(xié)議和文件系統(tǒng),因此它是 NFS 的一個(gè)很好的平臺(tái)。另一方面,由于 Linux 有很好的文件系統(tǒng)支持 (例如,它支持 Ext2、FAT32、romfs 等文件系統(tǒng)),是數(shù)據(jù)備份、同步和復(fù)制的良好平臺(tái),這些都為開(kāi)發(fā)嵌入式系統(tǒng)應(yīng)用打下了堅(jiān)實(shí)的基礎(chǔ)。
Lockdep(Linux 內(nèi)核中的死鎖檢測(cè)器)是一個(gè)用來(lái)檢測(cè)死鎖的強(qiáng)有力工具,且內(nèi)核開(kāi)發(fā)人員已使用了很長(zhǎng)一段時(shí)間。但是,當(dāng)涉及到讀寫(xiě)/寫(xiě)鎖死鎖檢測(cè)時(shí),Lockdep 僅能夠提供有限的支持。同時(shí),一些主要架構(gòu)(x86 與 arm64)已經(jīng)或正試圖將其 rwlock 實(shí)現(xiàn)轉(zhuǎn)變?yōu)殛?duì)列 rwlock,從而使得這一支持變得更加有限。例如,我們發(fā)現(xiàn)了一些發(fā)生在內(nèi)核中的死鎖案例,無(wú)法使用 Lockdep 對(duì)其進(jìn)行檢測(cè)。為了改善這一情況,ikml 發(fā)布了一個(gè)補(bǔ)丁集以支持在 Lockdep 內(nèi)進(jìn)行讀寫(xiě)/寫(xiě)入死鎖檢測(cè),并已更新到了第 6 版。 本演講將簡(jiǎn)要介紹 rwlock 相關(guān)死鎖(遞歸讀寫(xiě)死鎖),以及我們?nèi)绾螌?duì) Lockdep 進(jìn)行微調(diào)以進(jìn)行檢測(cè)。其將著重于檢測(cè)算法以及準(zhǔn)確性和一些實(shí)現(xiàn)細(xì)節(jié)。
EROFS 文件系統(tǒng)是一個(gè) Linux 只讀文件系統(tǒng),用以節(jié)省額外的存儲(chǔ)空間,并保證嵌入式設(shè)備,尤其是安卓設(shè)備的端到端性能。與其他通用文件系統(tǒng)相比,這一系統(tǒng)旨在減少元數(shù)據(jù)的數(shù)量,并為目標(biāo)文件系統(tǒng)用戶(hù)提供透明的壓縮支持。在過(guò)去的 2018 年里,EROFS 已完成開(kāi)發(fā),合并入 Linux 的狀態(tài)樹(shù),并安裝入多種智能手機(jī)中。請(qǐng)注意,其目前仍在積極開(kāi)發(fā)中。在之后,將會(huì)增加更多有用的功能。本演講將展示與在消費(fèi)者的嵌入式設(shè)備內(nèi)進(jìn)行實(shí)時(shí)解壓相關(guān)的問(wèn)題以及我們的實(shí)踐、EROFS 的詳細(xì)設(shè)計(jì)、基準(zhǔn)評(píng)測(cè)、與當(dāng)前的 squashfs 的對(duì)比、被壓縮的 btrfs 以及 EROFS 的未來(lái)藍(lán)圖。