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 2.6内核下编译可以加载的内核模块
- linux 2.6下编译内核启用iptables及netfilter
- 在Linux下编译内核模块的Makefile的几种写法 转
- linux编译内核模块Makefile
- linux 内核模块编程之编译多个源文件(三)
- linux 2.6内核 编译模块Makefile 详解
- linux编译内核模块的条件
- linux启动时对编译进内核驱动模块的加载
- linux 编译进内核 && 编译成模块module
- linux 将模块编译进内核
- 在Linux 2.6内核下编译可以加载的内核模块
- CentOS 5.6下将linux内核2.6.18升级到2.6.30,并编译动态加载linux下第一个模块
- linux驱动编译进内核或模块配置
- Linux 驱动开发之内核模块开发 (二)—— 内核模块编译 Makefile 入门
- Ubuntu:编译Linux"内核源代码"和"内核模块"
- 将LED驱动模块编译到Linux3.10.17内核
- 编译内核模块出现 include/linux/autoconf.h or include/config/auto.conf are missing.解决方法
- Linux 2.6内核下外部模块的编译
- Linux(Ubuntu)下编译内核模块
- 【TINY4412】LINUX学习笔记:(2)内核模块编译、安装、加载、卸载