在一個系統上編譯多個核心版本的驅動模組(轉)

BSDLite發表於2007-08-12
在一個系統上編譯多個核心版本的驅動模組(轉)[@more@]我們可以只在一個系統中使用一份核心原始碼就編譯出來不同的驅動模組,
方法如下:
1、安裝相應版本的核心原始碼。
2、進入/usr/src目錄,假設你安裝的是2.4.17-1的原始碼,那麼需要建立聯結linux指向/usr/src/linux-2.4.17-1目錄,因為許多驅動原始碼都需要使用/usr/src/linux目錄。
3、檢查你係統中下面兩個目錄: /usr/include/linux /usr/include/asm 如果不存在或不是聯結,那麼需要建立聯結,指向/usr/src/linux/include/linux和/usr/src/linux/include/asm: ln -s /usr/src/linux/include/linux /usr/include/linux ln -s /usr/src/linux/include/asm /usr/include/asm
4、下面開始修改核心原始碼的配置以適應編譯不同版本的驅動模組: *首先進入/usr/src/linux目錄,執行命令make mrproper, 然後確定你需要編譯的版本,假設是2.4.17-1BOOT,那麼首先進入/usr/src/linux目錄,修改Makefile檔案,檔案前幾行如下: VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 17 EXTRAVERSION = -1custom 將最後一行改為你需要的-1BOOT,然後儲存退出。 然後將configs/kernel-2.4.18-i386-BOOT.config檔案複製到當前目錄下,命名為.config 然後執行命令make oldconfig進行配置,完成後執行命令make dep,之後就完成了核心原始碼的設定工作。 如果你需要編譯其他版本,比如SMP的,那麼需要重複上面幾個步驟,將Makefile中那行改為-1smp,然後將configs/kernel-2.4.18-i686-smp.config檔案複製到當前目錄下命名為.config,然後也是連續執行make oldconfig和make dep命令,之後就可以重新編譯你的驅動原始碼了。
5、編譯驅動原始碼時可以參考其中的README或INSTALL檔案,修改還核心原始碼配置後就可以開始編譯了,編譯好一個版本之後一定要記得備份,因為下次編譯會沖掉原來的驅動模組。驅動模組編譯好之後可以透過查詢其中的關鍵字kernel_version來檢視相應的版本。

6、如果你只是拿到了幾個C檔案和標頭檔案,說明中說要替換掉核心原始碼中相應的檔案然後重新編譯核心模組,那麼就會需要很長的編譯時間,這裡有一個簡單的方法,就是隻編譯這個驅動而不需要重新編譯所有核心模組,使用命令: gcc -DMODULE -D__KERNEL__ -O6 -c filename.c 可以直接將C程式編譯成驅動模組,在當前目錄下生成。 *如果有多個C程式,可以分別使用上述命令編譯,然後使用命令ld -r -o destname.o sourcename.o進行連線就可以了。
7、如果是需要放在核心原始碼中編譯的,可以執行這個命令:make -n modules > cmd.sh 這個命令不是編譯模組,只是將編譯時要執行的命令打出來,所以我們可以編輯cmd.sh檔案, 找到編譯你的那些模組的命令,然後將他們複製出來,另存為一個指令碼檔案,然後在相應的目錄下執行你的指令碼檔案就可以得到驅動的模組了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-948966/,如需轉載,請註明出處,否則將追究法律責任。

相關文章