|
|
我从《Linux设备驱动程序 第三版》上复制出来了一个hello world 的模块:
- #include <linux/init.h>
- #include <linux/module.h>
- MODULE_LICENSE ("GPL");
- static int hello_init(void)
- {
- printk (KERN_ALERT "hello, world\n");
- return 0;
- }
- static void hello_exit(void)
- {
- printk (KERN_ALERT "Good bye, cruel world\n");
- }
- module_init(hello_init);
- module_exit(hello_exit);
复制代码
Makefile只写一行: obj-m :=hello.o
编译命令是 : make –C /usr/src/linux-source-2.6.15-2 M=`pwd` modules
我的源码环境是这样建立的:
先安装源码包和头文件包,然后把头文件都拷贝到源码目录,然后把/boot目录里面的config文件拷贝到源码目录,名为.config。
这样之后,我编译模块。出来的模块用modinfo查看,其vermagic 和系统中其它模块是不一样的,总多出来“ preempt PENTIUM4”的字样,无法装载。
之后,我从源码编译一遍内核,但是不用这个新内核启动机器。用以前的内核,再编译我自己的模块。这回得到的hello.ko,它的vermagic就和系统中的一样了,可以装载了。
我在两个环境中试验:五一节之前下载的 debian etch weekly build版和sarge 3.1r2版,结果都是这样的。
我的问题是:
1. 为什么第一次编译出来的模块,它的vermagic不同。
2. 为什么第二次编译出来的模块,它的vermagic和第一次就不一样了
3. 如何正确地配置源码树呢? |
|