資料介紹
在Linux 2.6內核下編譯可以加載的內核模塊
By: Wu Yin
Date: 2007-05-18
Email: lazy_fox#msn.com
Homepage:
http://blog.csdn.net/wooin
版權信息: 該文章版權由Wu Yin所有。可在非商業目的下任意傳播和復制。
對于商業目的下對本文的任何行為需經作者同意。
聯系方式:lazy_fox#msn.com
1. 在舊的版本下(如linux 2.4)linux內核模塊的編譯只需要有內核的頭文件就行了,就可以通過和編譯其他程序一樣的方法編譯成filename.o文件,這個.o文件是直接可以加載道內核中的,加載之后就可以用了。然而在2.6下就截然不同了,在linux 2.6下內核的編譯要有系統內核樹的支持,下面介紹一下這個“內核樹”是如何建立的。
2. 本文的工作環境是Fedora Core 5,用“uname -r”查看內核版本是:2.6.15-1.2054_FC5
Fedora Core 5 與舊版本不同,不包含 kernel-source 軟件包,我是網上下載的rpm包,地址是:
下面的工作都是用root用戶執行的。
3. 安裝內核源碼包:
# rpm –Uvh kernel-2.6.15-1.2054_FC5.src.rpm
這個命令將 RPM 內容寫到路徑
/usr/src/redhat/SOURSE
和
/usr/src/redhat/SPECS
4. build源碼包:
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target i686 kernel-2.6.spec
這個命令將會把內核源碼樹放到 目錄
/usr/src/redhat/BUILD/kernel-2.6.15/kernel-2.6.15.686
5. 配置內核:
Fedora Core 附帶的內核配置文件在 configs/ 目錄。
例如,i686 SMP 配置文件被命名為
configs/kernel-version-i686-smp.config。
使用下列命令來將需要的配置文件復制到合適的位置,用來編譯:
# cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
# cp configs/kernel-version-i686-smp .config
您也可以在 /lib/modules/version/build/.config 這個位置找到與您當前的內核匹配的 .config 文件。
注意:
您的內核必須已經啟用這些選項進行了編譯(用make menuconfig調出內核配置菜單):
Loadable module support ---》
Enable loadable module support
Module unloading
[ ] Module versioning support (EXPERIMENTAL)
Automatic kernel module loading
6. 稍微更改一下Makefile:
每個內核的名字都包含了它的版本號,這也是 uname -r 命令顯示的值。內核Makefile 的前四行定義了內核的名字。為了保護官方的內核不被破壞,Makefile
經過了修改,以生成一個與運行中的內核不同的名字。在一個模塊插入運行中的內核前,這個模塊必須針對運行中的內核進行編譯。為此,您必須編輯內核的
Makefile。
例如,如果 uname -r 返回字符串 2.6.15-1.2054_FC5,就將 EXTRAVERSION 定義從:
EXTRAVERSION = -prep
修改為:
EXTRAVERSION = -1.2054_FC5
也就是最后一個連字符后面的所有內容。
7. 編譯內核:
跟普遍的編譯方法一樣了:
# make bzImage 編譯內核
# make modules 編譯模塊
# make modules_install 安裝編譯
8. 完成“內核樹”的安裝:
目錄“/usr/src/redhat/BUILD/kernel-2.6.15/kernel-2.6.15.686/”中就是所謂的“內核代碼樹”
但是“/lib/modules/2.6.15-1.2054_FC5/build”是個符號鏈接,也指向這個目錄,所以這里也可以叫做“內核代碼樹”
9. 編寫內核模塊源文件:
// hello.c
#include 《linux/init.h》
#include 《linux/module.h》
MODULE_LICENSE(“Dual BSD/GPL”);
static int hello_init(void) {
printk(KERN_ALERT “Hello, worldn”);
return 0;
}
static void hello_exit(void) {
printk(KERN_ALERT “Goodbye, cruel worldn”);
}
module_init(hello_init);
module_exit(hello_exit);
編寫Makefile:
# Makefile
obj-m:=hello.o
KDIR:=/lib/modules/2.6.15-1.2054_FC5/build
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
10. 執行make命令進行編譯就行了, 執行完畢后,會生成幾個文件:
hello.ko
hello.mod.c
hello.mod.o
hello.o
運行命令:
# insmod hello.ko
應該可以看到返回的信息:Hello, world
然后再運行命令:
# rmmod hello
應該可以看到返回的信息:Goodbye, cruel world
如果沒看到,就是輸出到系統的日志文件中去了,可以查看文件:
/var/log/messages
應該有信息的輸出。
By: Wu Yin
Date: 2007-05-18
Email: lazy_fox#msn.com
Homepage:
http://blog.csdn.net/wooin
版權信息: 該文章版權由Wu Yin所有。可在非商業目的下任意傳播和復制。
對于商業目的下對本文的任何行為需經作者同意。
聯系方式:lazy_fox#msn.com
1. 在舊的版本下(如linux 2.4)linux內核模塊的編譯只需要有內核的頭文件就行了,就可以通過和編譯其他程序一樣的方法編譯成filename.o文件,這個.o文件是直接可以加載道內核中的,加載之后就可以用了。然而在2.6下就截然不同了,在linux 2.6下內核的編譯要有系統內核樹的支持,下面介紹一下這個“內核樹”是如何建立的。
2. 本文的工作環境是Fedora Core 5,用“uname -r”查看內核版本是:2.6.15-1.2054_FC5
Fedora Core 5 與舊版本不同,不包含 kernel-source 軟件包,我是網上下載的rpm包,地址是:
下面的工作都是用root用戶執行的。
3. 安裝內核源碼包:
# rpm –Uvh kernel-2.6.15-1.2054_FC5.src.rpm
這個命令將 RPM 內容寫到路徑
/usr/src/redhat/SOURSE
和
/usr/src/redhat/SPECS
4. build源碼包:
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target i686 kernel-2.6.spec
這個命令將會把內核源碼樹放到 目錄
/usr/src/redhat/BUILD/kernel-2.6.15/kernel-2.6.15.686
5. 配置內核:
Fedora Core 附帶的內核配置文件在 configs/ 目錄。
例如,i686 SMP 配置文件被命名為
configs/kernel-version-i686-smp.config。
使用下列命令來將需要的配置文件復制到合適的位置,用來編譯:
# cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
# cp configs/kernel-version-i686-smp .config
您也可以在 /lib/modules/version/build/.config 這個位置找到與您當前的內核匹配的 .config 文件。
注意:
您的內核必須已經啟用這些選項進行了編譯(用make menuconfig調出內核配置菜單):
Loadable module support ---》
Enable loadable module support
Module unloading
[ ] Module versioning support (EXPERIMENTAL)
Automatic kernel module loading
6. 稍微更改一下Makefile:
每個內核的名字都包含了它的版本號,這也是 uname -r 命令顯示的值。內核Makefile 的前四行定義了內核的名字。為了保護官方的內核不被破壞,Makefile
經過了修改,以生成一個與運行中的內核不同的名字。在一個模塊插入運行中的內核前,這個模塊必須針對運行中的內核進行編譯。為此,您必須編輯內核的
Makefile。
例如,如果 uname -r 返回字符串 2.6.15-1.2054_FC5,就將 EXTRAVERSION 定義從:
EXTRAVERSION = -prep
修改為:
EXTRAVERSION = -1.2054_FC5
也就是最后一個連字符后面的所有內容。
7. 編譯內核:
跟普遍的編譯方法一樣了:
# make bzImage 編譯內核
# make modules 編譯模塊
# make modules_install 安裝編譯
8. 完成“內核樹”的安裝:
目錄“/usr/src/redhat/BUILD/kernel-2.6.15/kernel-2.6.15.686/”中就是所謂的“內核代碼樹”
但是“/lib/modules/2.6.15-1.2054_FC5/build”是個符號鏈接,也指向這個目錄,所以這里也可以叫做“內核代碼樹”
9. 編寫內核模塊源文件:
// hello.c
#include 《linux/init.h》
#include 《linux/module.h》
MODULE_LICENSE(“Dual BSD/GPL”);
static int hello_init(void) {
printk(KERN_ALERT “Hello, worldn”);
return 0;
}
static void hello_exit(void) {
printk(KERN_ALERT “Goodbye, cruel worldn”);
}
module_init(hello_init);
module_exit(hello_exit);
編寫Makefile:
# Makefile
obj-m:=hello.o
KDIR:=/lib/modules/2.6.15-1.2054_FC5/build
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
10. 執行make命令進行編譯就行了, 執行完畢后,會生成幾個文件:
hello.ko
hello.mod.c
hello.mod.o
hello.o
運行命令:
# insmod hello.ko
應該可以看到返回的信息:Hello, world
然后再運行命令:
# rmmod hello
應該可以看到返回的信息:Goodbye, cruel world
如果沒看到,就是輸出到系統的日志文件中去了,可以查看文件:
/var/log/messages
應該有信息的輸出。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- Linux內核模塊簡介
- 嵌入式Linux的內核編譯
- 嵌入式LINUX系統內核和內核模塊調試
- Linux內核的編譯與運行 11次下載
- Asterisk內核模塊介紹 7次下載
- 嵌入式LINUX系統內核和內核模塊調試教程 21次下載
- 如何才能編譯Linux的內核 8次下載
- 什么是內核模塊?如何編寫一個簡單的模塊? 20次下載
- modutils是什么?內核模塊的命令介紹內核模塊的實用程序簡介免費下載 8次下載
- 關于Linux 2.6內核Makefile的分析 1次下載
- 基于Arm的Linux內核編譯指導 15次下載
- Linux內核編譯詳談 7次下載
- 《Linux設備驅動開發詳解》第4章、Linux內核模塊 0次下載
- 基于Linux 2.6內核Makefile分析 0次下載
- 編譯Linux2.6內核并添加一個系統調用 46次下載
- NVIDIA全面轉向開源GPU內核模塊 251次閱讀
- 使用 PREEMPT_RT 在 Ubuntu 中構建實時 Linux 內核 1284次閱讀
- 獲取Linux內核源碼的方法 514次閱讀
- Linux:QEMU調試內核的步驟 3040次閱讀
- 深入linux內核架構 Linux內核架構分析解讀 3604次閱讀
- Linux 5.4.1內核已經發布你期待使用嗎 3193次閱讀
- 什么是 Linux 內核模塊? 3132次閱讀
- Linux內核與Android的關系 4504次閱讀
- 基于Linux2.6內核的實時性增強方案設計 930次閱讀
- 如何自行編譯一個Linux內核的詳細資料概述 3128次閱讀
- Linux內核地址映射模型與Linux內核高端內存詳解 3397次閱讀
- Linux內核模塊介紹,使用Linux模塊的優點 7275次閱讀
- 嵌入式Linux內核編譯步驟和經驗 9555次閱讀
- 內核模塊的原理以及其模塊編寫 4346次閱讀
- petalinux(二)開啟petalinux內核調試模式 1w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多