linux 設備驅動程序開發 第3版_Chapter2_Kernel Modules Vers...

在咱們進行下一步工做以前,應該明白普通應用程序和內核模塊程序之間的不一樣。linux

對於小中型的應用程序來講,處理任務是按照代碼從頭至尾順序執行的。內核模塊程序的處理與它 不一樣,各個模塊首先向內核註冊本身用來對外提供服務,內核模塊的這種設計思路和事件驅動的程序 相似。可是事件驅動的應用程序和內核模塊程序之間也有很大的不一樣,主要體如今程序的退出上:對 於應用程序來講,退出後未釋放的資源能夠由操做系統收回;可是對於內核驅動程,全部的資源都必 須正確的釋放。編程

另外,模塊能夠卸載也是模塊化編程一個很方便的地方,由於它能夠縮短開發週期,不準要關機或 者重啓來測試咱們的驅動程序。模塊化

咱們在編寫應用程序事,能夠調用咱們沒有定義過函數,這些函數能夠在連接的時候能夠從別的函 數庫中取得,例如printf函數。可是對於模塊驅動程序來講,它只能被連接到內核,因此它只能調用那 些從內核導出的函數;不能連接到其餘的庫函數。在前面章節中的hello.c例子中,printk函數就是內 核導出的,它相似與標準IO庫中的printf函數,可是有一些不一樣,其中的一個主要區別是printk函數不 支持浮點數的操做。函數

由於內核驅動編程時沒有別的函數庫能夠連接,因此咱們的源程序不該該包含一般的頭文件,可是 <stdarg.h>和一些很是特殊的頭文件是例外。內核模塊只能調用那些確實在內核中的函數。全部在內 核中定義的函數均可一在內核樹的頭文件中找的到。大部分用到的頭文件在include/linux和include /asm文件夾下,可是include中的其餘子目錄中保存有和特定內核子系統相關的頭文件。測試

各個內核頭文件的做用將在用到的時候詳加介紹。操作系統

內核程序和應用程序另一個不一樣之處是對各類環境錯誤的處理,對於應用程序來講,段錯誤老是能夠用調試器追蹤到的,而且影響和內核程序比起來也不大。可是對於內核程序來講,段錯誤至少會殺死當前的進程,甚至是整個系統。咱們將在第四章來詳細介紹如何來追蹤內核錯誤。設計

相關文章
相關標籤/搜索