您的位置:首页 > 编程语言

安装内核源代码(驱动学习)

2009-08-19 21:17 357 查看
安装内核源码包:

1.# rpm –Uvh kernel-2.6.11-1.1369_FC4.src.rpm

这个命令将 RPM 内容写到路径

/usr/src/redhat/SOURSE



/usr/src/redhat/SPECS

2. build源码包:

# cd /usr/src/redhat/SPECS

# rpmbuild -bp --target i686 kernel-2.6.spec

这个命令将会把内核源码树放到 目录

/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686

3. 配置内核:

Fedora Core 附带的内核配置文件在

~/kernel-2.6.11.686/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 .config //记住

要养成备份的好习惯!

您也可以在 /lib/modules/version/build/.config 这个位置找到与

您当前的内核匹配的 .config 文件。

注意:

您的内核必须已经启用这些选项进行了编译(用make menuconfi

g调出内核配置菜单):u

Loadable module support --->

[*] Enable loadable module support

[*] Module unloading

[ ] Module versioning support (EXPERIMENTAL)
[*] Automatic kernel module loading

4. 稍微更改一下Makefile:

每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示

的值。内核Makefile 的前四行定义了内核的名字。为了保护官方的

内核不被破坏,Makefile

经过了修改,以生成一个与运行中的内核不同的名字。在一个模块插
入运行中的内核前,这个模块必须针对运行中的内核进行编译。为此,

您必须编辑内核的Makefile。

例如,如果 uname -r 返回字符串 2.6.11-1.1369_FC4,就将 EX

TR***ERSION 定义从:

EXTR***ERSION = -prep

修改为:

EXTR***ERSION = -1.1369_FC4

也就是最后一个连字符后面的所有内容。

5. 编译内核:

跟普遍的编译方法一样了:

# make bzImage 编译内核

# make modules 编译模块

# make modules_install 安装编译



6. 完成“内核树”的安装:

目录“/usr/src/redhat/BUILD/kernel-2.6.11/kernel-2.6.11.686/”

中就是所谓的“内核代码树”

但是“/lib/modules/2.6.11-1.1369_FC4/build”是个符号链接,也

指向这个目录,所以这里也可以叫做“内核代码树”

7. 编写内核模块源文件:
// hello.c

#include <linux/init.h>

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {

printk(KERN_ALERT "Hello, world/n");

return 0;

}

static void hello_exit(void) {

printk(KERN_ALERT "Goodbye, cruel world/n");

}
module_init(hello_init);

module_exit(hello_exit);

编写makefile
ifneq ($(KERNELRELEASE),) //别把逗号忘了;

obj-m := hello.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules //-c为大写;

endif

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中你就会看到,

bye!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: