Linux2.6下内核模块编译

 
Linux2.6下内核模块编译
经过几天的努力,自己写的内核模块终于可以在 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 为例
1.      得到linux 源文件
    从 ftp://ftp.kernel.org/pub/linux/kernel/v2.6 中下 ,或从源码包中找(一般名为: kernel-version.src.rpm ),要和内核版本一样的
2.      安装 kernel-version.src.rpm :到 /usr/src/redhat/SOURSE
    #rpm –Uvh kernel-2.6.15-1.2054_FC5.src.rpm
3.      准备源码:
     #cd /usr/src/redhat/SOURSE
      #rpmbuild -bp --target $(uname -m) kernel-2.6.spec
     内核源码位于 /usr/src/redhat/SOURSE/kernel- version
4.      做个连接:
     #cd /usr/src/
       # ln -s . /redhat/BUILD/kernel- version /linux- version .i686/  linux            
      # cd linux
5.      修改Makefile
例如uneme –r得到的为 2.6.15-1.23_FC5
     就将Makefile中EXTRAVERSION = -prep改为:EXTRAVERSION = -1.23_FC5
6.      内核编译选项
#make menuconfig
具体配置略,可按照默认的配置
7.      编译内核
#make bzImage
8.      编译模块
#make modules
9.      安装编译
#make modules_install
下面就可以进行编译自己的内核模块了,举个例子:
*        (Hello.c)
 
#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
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值