1. include/linux/config.h
include/linux/module.h中包含著linux/config.h的標頭檔案,linux/config.h中包含著以#define形式定義的核心編譯編譯時所選擇的項。
2. __init和__exit
在將程式編譯為模組時(即gcc 編譯選項了加了_dmodule),這兩個核心巨集不被識別,從而導致編譯出錯。
3.驅動程式中的ioctl()的command
在redhat 9 (kernel 2.4.20-8)中,include/asm-i386/ioctl.h中有如下定義:
#define _ioc_nrbits 8
#define _ioc_typebits 8
#define _ioc_sizebits 14
#define _ioc_dirbits 2
由此可見,整個ioctl() 的command 的長度為32 bits,各個欄位的長度如上所示。
知道了這些,那些同樣在include/asm-i386/ioctl.h中定義的用來構造和解析ioctl()的command的巨集也就很好理解了。
4. include/linux/version.h
include/linux/version.h包含在include/linux/module.h中。在include/linux/version.h內容如下:
#include
#if defined(__module__smp)
#define uts_release "2.4.20-8smp"
#elif defined(__module__boot)
#define uts_release "2.4.20-8boot"
#elif defined(__module__bigmem)
#define uts_release "2.4.20-8bigmem"
#else
#define uts_release "2.4.20-8"
#endif
#define linux_version_code 132116
#define kernel_version(a,b,c) (((a) << 16) + ((b) << 8) + (c))
其中,巨集linux_version_code擴充套件為核心版本的二進位制表示,版本發行號的每乙個部分對應乙個位元組。132116的16進製表示為0x020416,點分十進位制即為:2.4.20
.巨集kernel_version 以組成版本號的三部分(三個整數)為引數,建立「kernel_version_code」。
5.模組使用計數
linux/module.h 中定義的關於模組使用技術的巨集:
mod_inc_use_count
mod_dec_use_count
mod_in_use : 計數非0時返回真。
6. kdev_t
現在linux 核心使用kdev_t 型別儲存裝置號。kdev_t 的相關資訊在中定義。對kdev_t進行操作的巨集以及函式如下:
major(kdev_t dev) : 從kdev_t 結構中得出主裝置號。
minor(kdev_t dev): 從kdev_t結構中得出次裝置號。
mkdev(int ma, int mi) : 通過主裝置號和次裝置號建立kdev_t。
redhat9核心公升級過程
本文記錄了我在winxp下的vmware6.5虛擬機器中公升級linux2.4.2核心到2.6.18的過程。飄揚的這篇文章寫的很詳細,只是個別地方還有瑕疵,本文主要就是以該文為藍本,修正了原文中的一些錯誤,並加入了編譯圖示的詳細說明。2 我自己以前寫的核心編譯過程筆記。一 安裝linux系統並登陸 ...
redhat9核心公升級過程
本文記錄了我在winxp下的vmware6.5虛擬機器中公升級linux2.4.2核心到2.6.18的過程。飄揚的這篇文章寫的很詳細,只是個別地方還有瑕疵,本文主要就是以該文為藍本,修正了原文中的一些錯誤,並加入了編譯圖示的詳細說明。2 我自己以前寫的核心編譯過程筆記。一 安裝linux系統並登陸 ...
redhat9核心公升級過程
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!本文記錄了我在winxp下的vmware6.5虛擬機器中公升級linux2.4.2核心到2.6.18的過程。飄揚的這篇文章寫的很詳細,只是個別地方還有瑕疵,本文主要就是以該文為藍本,修正了原文中的一些錯誤,並加入了編譯圖示的詳細說明。2 我自己以前...