在核心模式下執行程式禁止使用標準 C 程式庫,因為您的程式連結到的唯一內容是核心本身。所以我可以使用內核中定義的函數。但核心本身是一個用 C 語言編寫並針對某些特定體系結構編譯的程式。它不應該使用C標準庫,但也不應該使用任何驅動程序,因為驅動程式是可載入模組。所以我的問題是編寫核心時實際使用了哪些 C 函數?不透過內核如何與硬體互動?別說我要查看來源,這對我來說太新了,TY。
答案1
Unix 核心傳統上包含一些彙編語言程式碼。我最近沒有看過它的源代碼,但我懷疑這仍然是真的。
看驅動程式實際上如何與硬體設備通訊? 了解該主題的概述。該問題的答案討論了兩種電腦體系結構。在使用連接埠映射 I/O (PMIO) 的系統上,內核必須部分用彙編語言編寫—儘管您可能可以透過幾個非常短的例程來完成。在使用記憶體映射 I/O (MMIO) 的系統上,甚至裝置驅動程式也可以完全用 C 編寫。內存一樣操作設備。
答案2
並非所有驅動程式都是可載入模組,可載入只是一個選項,但一些關鍵驅動程式不是動態載入的,它們是核心的一部分。
答案3
核心在其內部靜態地再現了 libc 提供的一整套功能。
就像在用戶模式C 程式設計中一樣,一個函數可以在一個編譯單元中定義,而另一個單元可以簡單地引用它(通常透過頭檔),編譯器會將其設為未定義引用,連結器會將其連結到實際提供符號的編譯單元。
載入核心模組的工作原理與動態載入其描述如下: http://www.tldp.org/LDP/tlk/modules/modules.html