您的位置:首页 > 运维架构 > Linux

Linux2.6下内核模块编译

2007-04-06 17:07 323 查看
 
[align=center][b]Linux2.6[b]下内核模块编译[/b][/b][/align]
经过几天的努力,自己写的内核模块终于可以在linux2.6下编译并加载道内核中了,现在对这几天的努力做个总结。
在旧的版本下(如linux 2.4)linux内核模块的编译只需要有内核的头文件就行了,就可以通过和编译其他程序一样的方法编译成filename.o文件,这个.o文件是直接可以加载道内核中的,加载之后就可以用了,然而在2.6下就截然不同了,在linux 2.6下内核的编译要有系统内核树的支持,至于怎么去构建内核树,现在找到的方法,也估计是最笨的办法,那就是重新编译内核,下面就把2.6内核编译的过程做一纪录:
注:1.version是指内核版本号,可用uname –r命令的到
     2.以下命令在root用户下进行
     3.以下是以FEDORA CORE5为例
[align=left]1.      得到linux源文件[/align]
[align=left]    从 ftp://ftp.kernel.org/pub/linux/kernel/v2.6 中下载,或从源码包中找(一般名为:kernel-version.src.rpm),要和内核版本一样的[/align]
[align=left]2.      安装kernel-version.src.rpm:到/usr/src/redhat/SOURSE[/align]
[align=left]    #rpm –Uvh kernel-2.6.15-1.2054_FC5.src.rpm[/align]
[align=left]3.      准备源码:[/align]
[align=left]     #cd /usr/src/redhat/SOURSE[/align]
[align=left]      #rpmbuild -bp --target $(uname -m) kernel-2.6.spec[/align]
[align=left]     内核源码位于/usr/src/redhat/SOURSE/kernel-version下[/align]
[align=left]4.      做个连接:[/align]
[align=left]     #cd /usr/src/[/align]
[align=left]      # ln -s ./redhat/BUILD/kernel-version/linux-version.i686/ linux            [/align]
[align=left]      #cd linux[/align]
[align=left]5.      修改Makefile [/align]
[align=left]例如uneme –r得到的为 2.6.15-1.23_FC5[/align]
[align=left]     就将Makefile中EXTRAVERSION = -prep改为:EXTRAVERSION = -1.23_FC5[/align]
[align=left]6.      内核编译选项[/align]
[align=left]#make menuconfig[/align]
[align=left]具体配置略,可按照默认的配置[/align]
[align=left]7.      编译内核[/align]
[align=left]#make bzImage[/align]
[align=left]8.      编译模块[/align]
[align=left]#make modules[/align]
9.      安装编译
#make modules_install
[align=left]下面就可以进行编译自己的内核模块了,举个例子:[/align]
[align=left]        (Hello.c)[/align]
 
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
 static int dummy_init(void)
{
printk("hello,world./n");
return 0;
}
 
static void dummy_exit(void)
{
return;
}
 
module_init(dummy_init);
module_exit(dummy_exit);
 
         (Makefile)
 
obj-m := hello.o
 
KDIR := /usr/src/linux
PWD := $(shell pwd)
 
ndefault:
        $(MAKE) -C $(KDIR) M=$(PWD) modules
 
         执行命令:make
         加载内核模块:insmod hello.ko
         卸载模块:rmmod hello
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux makefile module shell