日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 技術(shù)讓夢(mèng)想更偉大
[導(dǎo)讀]??關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來(lái)源:土豆居士一、前言本文是“Linux內(nèi)核源碼分析”系列的專(zhuān)業(yè),會(huì)以?xún)?nèi)核的核心功能為出發(fā)點(diǎn),描述Linux內(nèi)核的整體架構(gòu),以及架構(gòu)之下主要的軟件子系統(tǒng)。之后,會(huì)介紹Linux內(nèi)核源文件的目錄結(jié)構(gòu),并和各個(gè)軟件子系統(tǒng)對(duì)應(yīng)。注:本文和其它的“Lin...



來(lái)源:土豆居士



一、前言


本文是“Linux內(nèi)核源碼分析”系列的專(zhuān)業(yè),會(huì)以?xún)?nèi)核的核心功能為出發(fā)點(diǎn),描述Linux內(nèi)核的整體架構(gòu),以及架構(gòu)之下主要的軟件子系統(tǒng)。之后,會(huì)介紹Linux內(nèi)核源文件的目錄結(jié)構(gòu),并和各個(gè)軟件子系統(tǒng)對(duì)應(yīng)。


注:本文和其它的“Linux內(nèi)核分析”文章都基于如下約定:
a) 內(nèi)核版本為L(zhǎng)inux 5.6.18,可以從下面的鏈接獲?。?br /> https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.6.18.tar.xz
b) 鑒于嵌入式系統(tǒng)大多使用ARM處理器,因此涉及到體系結(jié)構(gòu)部分的內(nèi)容,都以ARM為分析對(duì)象


二、 Linux內(nèi)核的核心功能


如下圖所示,Linux內(nèi)核只是Linux操作系統(tǒng)一部分。對(duì)下,它管理系統(tǒng)的所有硬件設(shè)備;對(duì)上,它通過(guò)系統(tǒng)調(diào)用,向Library Routine(例如C庫(kù))或者其它應(yīng)用程序提供接口。




因此,其核心功能就是:管理硬件設(shè)備,供應(yīng)用程序使用。而現(xiàn)代計(jì)算機(jī)(無(wú)論是PC還是嵌入式系統(tǒng))的標(biāo)準(zhǔn)組成,就是CPU、Memory(內(nèi)存和外存)、輸入輸出設(shè)備、網(wǎng)絡(luò)設(shè)備和其它的外圍設(shè)備。所以為了管理這些設(shè)備,Linux內(nèi)核提出了如下的架構(gòu)。


(代碼免費(fèi)獲取后臺(tái)私信【代碼】)


三、Linux內(nèi)核的整體架構(gòu)


3.1 整體架構(gòu)和子系統(tǒng)劃分




上圖說(shuō)明了Linux內(nèi)核的整體架構(gòu)。根據(jù)內(nèi)核的核心功能,Linux內(nèi)核提出了5個(gè)子系統(tǒng),分別負(fù)責(zé)如下的功能:


1. Process Scheduler,也稱(chēng)作進(jìn)程管理、進(jìn)程調(diào)度。負(fù)責(zé)管理CPU資源,以便讓各個(gè)進(jìn)程可以以盡量公平的方式訪問(wèn)CPU。


2. Memory Manager,內(nèi)存管理。負(fù)責(zé)管理Memory(內(nèi)存)資源,以便讓各個(gè)進(jìn)程可以安全地共享機(jī)器的內(nèi)存資源。另外,內(nèi)存管理會(huì)提供虛擬內(nèi)存的機(jī)制,該機(jī)制可以讓進(jìn)程使用多于系統(tǒng)可用Memory的內(nèi)存,不用的內(nèi)存會(huì)通過(guò)文件系統(tǒng)保存在外部非易失存儲(chǔ)器中,需要使用的時(shí)候,再取回到內(nèi)存中。


3. VFS(Virtual File System),虛擬文件系統(tǒng)。Linux內(nèi)核將不同功能的外部設(shè)備,例如Disk設(shè)備(硬盤(pán)、磁盤(pán)、NAND Flash、Nor Flash等)、輸入輸出設(shè)備、顯示設(shè)備等等,抽象為可以通過(guò)統(tǒng)一的文件操作接口(open、close、read、write等)來(lái)訪問(wèn)。這就是Linux系統(tǒng)“一切皆是文件”的體現(xiàn)(其實(shí)Linux做的并不徹底,因?yàn)镃PU、內(nèi)存、網(wǎng)絡(luò)等還不是文件,如果真的需要一切皆是文件,還得看貝爾實(shí)驗(yàn)室正在開(kāi)發(fā)的"Plan 9”的)。


4. Network,網(wǎng)絡(luò)子系統(tǒng)。負(fù)責(zé)管理系統(tǒng)的網(wǎng)絡(luò)設(shè)備,并實(shí)現(xiàn)多種多樣的網(wǎng)絡(luò)標(biāo)準(zhǔn)。


5. IPC(Inter-Process Communication),進(jìn)程間通信。IPC不管理任何的硬件,它主要負(fù)責(zé)Linux系統(tǒng)中進(jìn)程之間的通信。


3.2 進(jìn)程調(diào)度(Process Scheduler)


進(jìn)程調(diào)度是Linux內(nèi)核中最重要的子系統(tǒng),它主要提供對(duì)CPU的訪問(wèn)控制。因?yàn)樵谟?jì)算機(jī)中,CPU資源是有限的,而眾多的應(yīng)用程序都要使用CPU資源,所以需要“進(jìn)程調(diào)度子系統(tǒng)”對(duì)CPU進(jìn)行調(diào)度管理。


進(jìn)程調(diào)度子系統(tǒng)包括4個(gè)子模塊(見(jiàn)下圖),它們的功能如下:




1. Scheduling Policy,實(shí)現(xiàn)進(jìn)程調(diào)度的策略,它決定哪個(gè)(或哪幾個(gè))進(jìn)程將擁有CPU。


2. Architecture-specific Schedulers,體系結(jié)構(gòu)相關(guān)的部分,用于將對(duì)不同CPU的控制,抽象為統(tǒng)一的接口。這些控制主要在suspend和resume進(jìn)程時(shí)使用,牽涉到CPU的寄存器訪問(wèn)、匯編指令操作等。


3. Architecture-independent Scheduler,體系結(jié)構(gòu)無(wú)關(guān)的部分。它會(huì)和“Scheduling Policy模塊”溝通,決定接下來(lái)要執(zhí)行哪個(gè)進(jìn)程,然后通過(guò)“Architecture-specific Schedulers模塊”resume指定的進(jìn)程。


4. System Call Interface,系統(tǒng)調(diào)用接口。進(jìn)程調(diào)度子系統(tǒng)通過(guò)系統(tǒng)調(diào)用接口,將需要提供給用戶(hù)空間的接口開(kāi)放出去,同時(shí)屏蔽掉不需要用戶(hù)空間程序關(guān)心的細(xì)節(jié)。


3.3 內(nèi)存管理(Memory Manager, MM)


內(nèi)存管理同樣是Linux內(nèi)核中最重要的子系統(tǒng),它主要提供對(duì)內(nèi)存資源的訪問(wèn)控制。Linux系統(tǒng)會(huì)在硬件物理內(nèi)存和進(jìn)程所使用的內(nèi)存(稱(chēng)作虛擬內(nèi)存)之間建立一種映射關(guān)系,這種映射是以進(jìn)程為單位,因而不同的進(jìn)程可以使用相同的虛擬內(nèi)存,而這些相同的虛擬內(nèi)存,可以映射到不同的物理內(nèi)存上。


內(nèi)存管理子系統(tǒng)包括3個(gè)子模塊(見(jiàn)下圖),它們的功能如下:




1. Architecture Specific Managers,體系結(jié)構(gòu)相關(guān)部分。提供用于訪問(wèn)硬件Memory的虛擬接口。


2. Architecture Independent Manager,體系結(jié)構(gòu)無(wú)關(guān)部分。提供所有的內(nèi)存管理機(jī)制,包括:以進(jìn)程為單位的memory mapping;虛擬內(nèi)存的Swapping。


3. System Call Interface,系統(tǒng)調(diào)用接口。通過(guò)該接口,向用戶(hù)空間程序應(yīng)用程序提供內(nèi)存的分配、釋放,文件的map等功能。


3.4 虛擬文件系統(tǒng)(Virtual Filesystem, VFS)


傳統(tǒng)意義上的文件系統(tǒng),是一種存儲(chǔ)和組織計(jì)算機(jī)數(shù)據(jù)的方法。它用易懂、人性化的方法(文件和目錄結(jié)構(gòu)),抽象計(jì)算機(jī)磁盤(pán)、硬盤(pán)等設(shè)備上冰冷的數(shù)據(jù)塊,從而使對(duì)它們的查找和訪問(wèn)變得容易。因而文件系統(tǒng)的實(shí)質(zhì),就是“存儲(chǔ)和組織數(shù)據(jù)的方法”,文件系統(tǒng)的表現(xiàn)形式,就是“從某個(gè)設(shè)備中讀取數(shù)據(jù)和向某個(gè)設(shè)備寫(xiě)入數(shù)據(jù)”。


隨著計(jì)算機(jī)技術(shù)的進(jìn)步,存儲(chǔ)和組織數(shù)據(jù)的方法也是在不斷進(jìn)步的,從而導(dǎo)致有多種類(lèi)型的文件系統(tǒng),例如FAT、FAT32、NTFS、EXT2、EXT3等等。而為了兼容,操作系統(tǒng)或者內(nèi)核,要以相同的表現(xiàn)形式,同時(shí)支持多種類(lèi)型的文件系統(tǒng),這就延伸出了虛擬文件系統(tǒng)(VFS)的概念。


VFS的功能就是管理各種各樣的文件系統(tǒng),屏蔽它們的差異,以統(tǒng)一的方式,為用戶(hù)程序提供訪問(wèn)文件的接口。


我們可以從磁盤(pán)、硬盤(pán)、NAND Flash等設(shè)備中讀取或?qū)懭霐?shù)據(jù),因而最初的文件系統(tǒng)都是構(gòu)建在這些設(shè)備之上的。這個(gè)概念也可以推廣到其它的硬件設(shè)備,例如內(nèi)存、顯示器(LCD)、鍵盤(pán)、串口等等。


我們對(duì)硬件設(shè)備的訪問(wèn)控制,也可以歸納為讀取或者寫(xiě)入數(shù)據(jù),因而可以用統(tǒng)一的文件操作接口訪問(wèn)。Linux內(nèi)核就是這樣做的,除了傳統(tǒng)的磁盤(pán)文件系統(tǒng)之外,它還抽象出了設(shè)備文件系統(tǒng)、內(nèi)存文件系統(tǒng)等等。這些邏輯,都是由VFS子系統(tǒng)實(shí)現(xiàn)。


VFS子系統(tǒng)包括6個(gè)子模塊(見(jiàn)下圖),它們的功能如下:




1. Device Drivers,設(shè)備驅(qū)動(dòng),用于控制所有的外部設(shè)備及控制器。由于存在大量不能相互兼容的硬件設(shè)備(特別是嵌入式產(chǎn)品),所以也有非常多的設(shè)備驅(qū)動(dòng)。因此,Linux內(nèi)核中將近一半的Source Code都是設(shè)備驅(qū)動(dòng),大多數(shù)的Linux底層工程師(特別是國(guó)內(nèi)的企業(yè))都是在編寫(xiě)或者維護(hù)設(shè)備驅(qū)動(dòng),而無(wú)暇估計(jì)其它內(nèi)容(它們恰恰是Linux內(nèi)核的精髓所在)。


2. Device Independent Interface, 該模塊定義了描述硬件設(shè)備的統(tǒng)一方式(統(tǒng)一設(shè)備模型),所有的設(shè)備驅(qū)動(dòng)都遵守這個(gè)定義,可以降低開(kāi)發(fā)的難度。同時(shí)可以用一致的形勢(shì)向上提供接口。


3. Logical Systems,每一種文件系統(tǒng),都會(huì)對(duì)應(yīng)一個(gè)Logical System(邏輯文件系統(tǒng)),它會(huì)實(shí)現(xiàn)具體的文件系統(tǒng)邏輯。


4. System Independent Interface,該模塊負(fù)責(zé)以統(tǒng)一的接口(快設(shè)備和字符設(shè)備)表示硬件設(shè)備和邏輯文件系統(tǒng),這樣上層軟件就不再關(guān)心具體的硬件形態(tài)了。


5. System Call Interface,系統(tǒng)調(diào)用接口,向用戶(hù)空間提供訪問(wèn)文件系統(tǒng)和硬件設(shè)備的統(tǒng)一的接口。


3.5 網(wǎng)絡(luò)子系統(tǒng)(Net)


網(wǎng)絡(luò)子系統(tǒng)在Linux內(nèi)核中主要負(fù)責(zé)管理各種網(wǎng)絡(luò)設(shè)備,并實(shí)現(xiàn)各種網(wǎng)絡(luò)協(xié)議棧,最終實(shí)現(xiàn)通過(guò)網(wǎng)絡(luò)連接其它系統(tǒng)的功能。在Linux內(nèi)核中,網(wǎng)絡(luò)子系統(tǒng)幾乎是自成體系,它包括5個(gè)子模塊(見(jiàn)下圖),它們的功能如下:




1. Network Device Drivers,網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng),和VFS子系統(tǒng)中的設(shè)備驅(qū)動(dòng)是一樣的。


2. Device Independent Interface,和VFS子系統(tǒng)中的是一樣的。


3. Network Protocols,實(shí)現(xiàn)各種網(wǎng)絡(luò)傳輸協(xié)議,例如IP, TCP, UDP等等。


4. Protocol Independent Interface,屏蔽不同的硬件設(shè)備和網(wǎng)絡(luò)協(xié)議,以相同的格式提供接口(socket)。


5. System Call interface,系統(tǒng)調(diào)用接口,向用戶(hù)空間提供訪問(wèn)網(wǎng)絡(luò)設(shè)備的統(tǒng)一的接口。


至于IPC子系統(tǒng),由于功能比較單純,這里就不再描述。


四、Linux內(nèi)核源代碼的目錄結(jié)構(gòu)


Linux內(nèi)核源代碼包括三個(gè)主要部分:


1. 內(nèi)核核心代碼,包括第3章所描述的各個(gè)子系統(tǒng)和子模塊,以及其它的支撐子系統(tǒng),例如電源管理、Linux初始化等


2. 其它非核心代碼,例如庫(kù)文件(因?yàn)長(zhǎng)inux內(nèi)核是一個(gè)自包含的內(nèi)核,即內(nèi)核不依賴(lài)其它的任何軟件,自己就可以編譯通過(guò))、固件集合、KVM(虛擬機(jī)技術(shù))等


3. 編譯腳本、配置文件、幫助文檔、版權(quán)說(shuō)明等輔助性文件


下圖r所示使用ls命令看到的內(nèi)核源代碼的頂層目錄結(jié)構(gòu),具體描述如下。





include/ ---- 內(nèi)核頭文件,需要提供給外部模塊(例如用戶(hù)空間代碼)使用。kernel/ ---- Linux內(nèi)核的核心代碼,包含了3.2小節(jié)所描述的進(jìn)程調(diào)度子系統(tǒng),以及和進(jìn)程調(diào)度相關(guān)的模塊。mm/ ---- 內(nèi)存管理子系統(tǒng)(3.3小節(jié))。fs/ ---- VFS子系統(tǒng)(3.4小節(jié))。net/ ---- 不包括網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的網(wǎng)絡(luò)子系統(tǒng)(3.5小節(jié))。ipc/ ---- IPC(進(jìn)程間通信)子系統(tǒng)。arch// ---- 體系結(jié)構(gòu)相關(guān)的代碼,例如arm, x86等等。arch//mach- ---- 具體的machine/board相關(guān)的代碼。arch//include/asm ---- 體系結(jié)構(gòu)相關(guān)的頭文件。arch//boot/dts ---- 設(shè)備樹(shù)(Device Tree)文件。init/ ---- Linux系統(tǒng)啟動(dòng)初始化相關(guān)的代碼。block/ ---- 提供塊設(shè)備的層次。sound/ ---- 音頻相關(guān)的驅(qū)動(dòng)及子系統(tǒng),可以看作“音頻子系統(tǒng)”。drivers/ ---- 設(shè)備驅(qū)動(dòng)(在Linux kernel 3.10中,設(shè)備驅(qū)動(dòng)占了49.4的代碼量)。lib/ ---- 實(shí)現(xiàn)需要在內(nèi)核中使用的庫(kù)函數(shù),例如CRC、FIFO、list、MD5等。crypto/ ----- 加密、解密相關(guān)的庫(kù)函數(shù)。security/ ---- 提供安全特性(SELinux)。virt/ ---- 提供虛擬機(jī)技術(shù)(KVM等)的支持。usr/ ---- 用于生成initramfs的代碼。firmware/ ---- 保存用于驅(qū)動(dòng)第三方設(shè)備的固件。samples/ ---- 一些示例代碼。tools/ ---- 一些常用工具,如性能剖析、自測(cè)試等。Kconfig, Kbuild, Makefile, scripts/ ---- 用于內(nèi)核編譯的配置文件、腳本等。COPYING ---- 版權(quán)聲明。MAINTAINERS ----維護(hù)者名單。CREDITS ---- Linux主要的貢獻(xiàn)者名單。REPORTING-BUGS ---- Bug上報(bào)的指南。Documentation, README ---- 幫助、說(shuō)明文檔。 版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。????????????????  END  ????????????????





本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉