Linux 內核開發與驅動開發有什么關系?
整個工作流程是:linux應用程序-內核-驅動-硬件
一、Linux內核的組成
一個完整的Linux內核一般由5部分組成,它們分別是內存管理、進程管理、進程間通信、虛擬文件系統和網絡接口。
1、內存管理
內存管理主要完成的是如何合理有效地管理整個系統的物理內存,同時快速響應內核各個子系統對內存分配的請求。Linux內存管理支持虛擬內存,而多余出的這部分內存就是通過磁盤申請得到的,平時系統只把當前運行的程序塊保留在內存中,其他程序塊則保留在磁盤中。在內存緊缺時,內存管理負責在磁盤和內存間交換程序塊。
2、進程管理
進程管理主要控制系統進程對CPU的訪問。當需要某個進程運行時,由進程調度器根據基於優先級的調度算法啟動新的進程。:Linux支持多任務運行,那么如何在一個單CPU上支持多任務呢?這個工作就是由進程調度管理來實現的。在系統運行時,每個進程都會分得一定的時間片,然后進程調度器根據時間片的不同,選擇每個進程依次運行,例如當某個進程的時間片用完后,調度器會選擇一個新的進程繼續運行。由於切換的時間和頻率都非常的快,由此用戶感覺是多個程序在同時運行,而實際上,CPU在同一時間內只有一個進程在運行,這一切都是進程調度管理的結果。
3、進程間通信
進程間通信主要用於控制不同進程之間在用戶空間的同步、數據共享和交換。由於不用的用戶進程擁有不同的進程空間,因此進程間的通信要借助於內核的中轉來實現。一般情況下,當一個進程等待硬件操作完成時,會被掛起。當硬件操作完成,進程被恢復執行,而協調這個過程的就是進程間的通信機制。
4、虛擬文件系統
Linux內核中的虛擬文件系統用一個通用的文件模型表示了各種不同的文件系統,這個文件模型屏蔽了很多具體文件系統的差異,使Linux內核支持很多不同的文件系統,這個文件系統可以分為邏輯文件系統和設備驅動程序:邏輯文件系統指Linux所支持的文件系統,例如ext2、ext3和fat等;設備驅動程序指為每一種硬件控制器所編寫的設備驅動程序模塊。
5、網絡接口
網絡接口提供了對各種網絡標准的實現和各種網絡硬件的支持。網絡接口一般分為網絡協議和網絡驅動程序。網絡協議部分負責實現每一種可能的網絡傳輸協議。網絡設備驅動程序則主要負責與硬件設備進行通信,每一種可能的網絡硬件設備都有相應的設備驅動程序。
二、Linux 內核開發與 驅動開發有什么關系?
Linux設備驅動需要使用內核API來實現,一般被包含在Linux內核源碼樹中。驅動可以編譯到內核,隨着內核一起在系統啟動的時候被加載。也可以編譯成內核模塊,在系統運行起來之后動態地加載到內核中,使得調試的時候無需重新編譯內核,也無需重啟系統,很大程度上方便了驅動代碼的調試。但並不是只有設備驅動才能編譯成模塊,有些內核功能的實現也可以,以便在需要的時候再加載,比如內核中文件系統的實現、加密及校驗的實現、網絡協議棧的實現等等。
平時你聽到的驅動開發一般指的是開發系統外圍設備的驅動,使得設備能被內核操控,如USB主從設備、Flash設備驅動、I2C設備驅動、LCD設備驅動、網絡設備驅動。平時你聽到的內核開發一般就指除了設備驅動之外的開發了,比如Linux系統啟動流程、進程管理、內存管理、時間管理、系統調用、文件系統等,但這些部分也在很大程度上被所謂的“驅動開發”所用。所以,實際上驅動開發只是內核開發的一部分。
轉自:https://blog.csdn.net/cutter2002/article/details/39055101