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