在一個系統上編譯多個核心版本的驅動模組(轉)
在一個系統上編譯多個核心版本的驅動模組(轉)[@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檔案, 找到編譯你的那些模組的命令,然後將他們複製出來,另存為一個指令碼檔案,然後在相應的目錄下執行你的指令碼檔案就可以得到驅動的模組了。
方法如下:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux系統核心模組和驅動的編寫(轉)Linux
- 只編譯核心裡面的一個模組的方法(轉)編譯
- Ubuntu上編譯多個版本的fridaUbuntu編譯
- 在單個硬碟驅動器上構建雙引導Linux系統(轉)硬碟Linux
- [linux]一個通用驅動Makefile-V2-支援編譯多目錄Linux編譯
- 在一個硬碟上安裝五個作業系統(轉)硬碟作業系統
- 教你在一個伺服器上安裝多個版本PHP伺服器PHP
- 編譯系統核心編譯
- 一個工程的多個模組中的一個模組打包成jar在轉為.exe可執行檔案JAR
- Ubuntu編譯Android整個系統以及編譯指定模組到模擬器Ubuntu編譯Android
- 由驅動原始碼編譯的.o檔案在不同版本的核心環境下無法通用原始碼編譯
- 一個檔案系統過濾驅動的demo
- Linux驅動開發: Ubuntu(PC機)系統上編譯驅動並載入測試LinuxUbuntu編譯
- 一個作業系統下安裝多個版本DB的Listener配置作業系統
- Linux驅動實踐:帶你一步一步編譯核心驅動程式Linux編譯
- 一個Linux愛好者的2.6.11核心編譯過程(轉)Linux編譯
- 一個嵌入式Linux系統的鍵盤驅動實現(轉)Linux
- Linux核心模組編譯Linux編譯
- 編寫屬於你的第一個Linux核心模組Linux
- 多個Jdk版本(轉)JDK
- 拖慢系統啟動的8個原因[上](轉)
- 在 Linux 上如何得到一個段錯誤的核心轉儲Linux
- 微服務中多個模組啟動類統一管理微服務
- 驅動篇——核心空間與核心模組
- 在Debian系統中編譯Linux核心需要安裝的軟體包(轉)編譯Linux
- gcc 編譯多個原始檔GC編譯
- 04_Linux下把驅動編譯進核心Linux編譯
- 切換系統中多個python版本Python
- 系統安裝到用raid做成的邏輯驅動器上不能啟動的一個原因!AI
- 怎樣在同一系統中啟動多個TOMCAT薦Tomcat
- 【轉】編譯Android系統原始碼和核心原始碼編譯Android原始碼
- Linux作業系統核心編譯詳解(2)(轉)Linux作業系統編譯
- 編譯核心的一點點經驗(轉)編譯
- 高效學習Linux核心——核心模組編譯Linux編譯
- 如何編寫一個簡單的Linux驅動(三)——完善裝置驅動Linux
- 【linux】驅動-2-核心模組Linux
- 編譯安裝最新的Linux系統核心編譯Linux
- Linux驅動開發筆記(一):helloworld驅動原始碼編寫、makefile編寫以及驅動編譯Linux筆記原始碼編譯