如下圖所示,linux 體系結構,從大的方面可以分為使用者空間(user space)和核心空間(kernel space)。
使用者空間中包含了 c 庫,使用者的應用程式。在某些體系結構圖中還包含了 shell,當然 shell指令碼也是 linux 體系中不可缺少的一部分。
核心空間包括硬體平台、平台依賴**、核心、系統呼叫介面。
在任何乙個現代作業系統中,都是分層的。為什麼需要分層呢?
從程式設計師的角度分析,將 linux 底層和和應用分開,將 linux 底層和應用分開,做應用的做應用,做底層的做底層,各幹各的。經濟學的基本原理是,分工產生效率。
從安全性的角度分析,是為了保護核心。現代 cpu 通常都實現了不同的工作模式。
另外,使用者空間和核心空間是程式執行的兩種不同狀態,可以通過「系統呼叫」和「硬體中斷」來完成使用者空間到核心空間的轉移。
如下圖所示,是 linux 核心結構圖。
sci 層(system call inte***ce),這一層是給應用使用者空間提供一套標準的系統呼叫函式來訪問 linux。前面分析 linux 體系結構的時候,介紹過任何一類現代作業系統都不會允許上層應用直接訪問底層,在 linux 中,核心提供了一套標準介面,上層應用就可以通過這一套標準介面來訪問底層。
pm(procees management),這一部分包括具體建立建立程序(fork、exec),停止程序(kill、exit),並控制他們之間的通訊(signal 等)。還包括程序排程,控制活動程序如何共享 cpu。這一部分是 linux 已經做好的,在寫驅動的時候,只需要呼叫對應的函式即可實現這些功能,例如建立程序、程序通訊等等。
mm(memory management),記憶體管理的主要作用是控制多個程序安全的共享記憶體區域。
vfs(virtual file systems),虛擬檔案系統,隱藏各種檔案系統的具體細節,為檔案操作提供統一的介面。在 linux 中「一切皆檔案」,這些檔案就是通過 vfs 來實現的。linux 提供了乙個大的通用模型,使這個模型包含了所有檔案系統功能的集合。如下圖所示,是乙個虛擬檔案系統的結構圖。
device drivers 裝置驅動,這一部分就是需要學習和掌握的。linux 核心中有大量的**在裝置驅動程式部分,用於控制特定的硬體裝置。
linux 驅動一般分為網路裝置、塊裝置、字元裝置、雜項裝置,需要編寫的只有字元裝置,雜項裝置是不容易歸類的一種驅動,雜項裝置和字元裝置有很多重合的地方。
網路協議棧,linux 核心中提供了豐富的網路協議實現。
裝置驅動開發實驗教程(9) 註冊字元類裝置號
前面學習的雜項裝置,主裝置號已經固定為 10,這裡介紹申請標準的字元類裝置號,包括主裝置號以及次裝置號。字元類裝置號分為靜態申請和動態申請,靜態申請就是主裝置號是程式設計師手動分配,動態申請是系統給分配。字元裝置函式在檔案 include linux fs.h 中。核心提供了三個函式來註冊一組字元裝...
Linux核心 2 裝置驅動實驗
今天做了linux課設關於裝置驅動的實驗。實驗採用模組的方法編寫乙個可以進行簡單讀寫的字元裝置驅動,該裝置可以儲存一定長的字串,寫入裝置即可以將字串存入裝置,讀出即可以獲取該字串,並編寫了測試程式對其測試。1 首先新建並編寫了字元驅動裝置chardev.c檔案,檔案 如下 建立乙個字元裝置 讀寫 必...
linux字元裝置驅動開發之裝置樹 2
裝置樹描述了裝置的詳細資訊 比如reg 暫存器位址 編寫驅動的目的在於獲取這些資訊.linux提供了一些of函式讀取這些資訊,include linux of.h.查詢節點相關函式 裝置節點 struct device node 通過節點名查詢指定的節點 from 節點,若為null,則從根節點查起...