当前位置: 技术问答>linux和unix
2.6内核问题
来源: 互联网 发布时间:2015-11-15
本文导语: 在2.6内核下,用insmod加载模块时出现下面问题:insmod:error inserting 'hello.o':-l Invalid module format. 我程序的源代码: #ifndef MODULE #define MODULE #endif #ifndef __KERNEL__ #define __KERNEL__ #endif #include #include int init_module(void) {...
在2.6内核下,用insmod加载模块时出现下面问题:insmod:error inserting 'hello.o':-l Invalid module format.
我程序的源代码:
#ifndef MODULE
#define MODULE
#endif
#ifndef __KERNEL__
#define __KERNEL__
#endif
#include
#include
int init_module(void)
{
printk(KERN_ALERT "Hello World!n");
return 0; // Must return 0!
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world!n");
}
MODULE_LICENSE("GPL");
我程序的源代码:
#ifndef MODULE
#define MODULE
#endif
#ifndef __KERNEL__
#define __KERNEL__
#endif
#include
#include
int init_module(void)
{
printk(KERN_ALERT "Hello World!n");
return 0; // Must return 0!
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world!n");
}
MODULE_LICENSE("GPL");
|
怀疑你的insmod 版本是否是for 2.6的
|
你这样做是不行的。如果我没有说错,你实际看的参考书是基于2.4内核的。如果你要在2.6内核下编译内核程序,需要写Makefile文件,具体写法你可以参考《linux device driver》第三版。也可以参考我这里的简单程序:
http://www.blogcn.com/user46/booklijian/blog/22073848.html
http://www.blogcn.com/user46/booklijian/blog/22073848.html
|
假定你有以下几种情况:
1.你原来是安装的基于2.4的LINUX发行版,仅仅只是升级了你的内核
2.升级了你的内核后,却没有正确设置你内核模块所需的头文件,就是说没有在/usr/src下设置正确的连接符号
3.就如同楼上所说的那样,你的驱动程序的写法是基于2.4的
4.你的内核与源文件都是2.6的,绝大多数情况下应用层程序与内核的依赖关系不是很大,也就是说内核升级了,应用程序一般都不需要重新编译,但有些可能与内核关系密切的也许需要重新编写吧?比如在新的内核更改了某个系统调用(假定你的应用程序直接在代码中发出系统调用,而不通过C库),增加了一些系统调用,而新的应用层程序就有可能会用到这些特性等等,这时就有可能会重新找到基于特定内核版本的应用程序重新编译,不过这种情况是非常少的,可以忽略
1.你原来是安装的基于2.4的LINUX发行版,仅仅只是升级了你的内核
2.升级了你的内核后,却没有正确设置你内核模块所需的头文件,就是说没有在/usr/src下设置正确的连接符号
3.就如同楼上所说的那样,你的驱动程序的写法是基于2.4的
4.你的内核与源文件都是2.6的,绝大多数情况下应用层程序与内核的依赖关系不是很大,也就是说内核升级了,应用程序一般都不需要重新编译,但有些可能与内核关系密切的也许需要重新编写吧?比如在新的内核更改了某个系统调用(假定你的应用程序直接在代码中发出系统调用,而不通过C库),增加了一些系统调用,而新的应用层程序就有可能会用到这些特性等等,这时就有可能会重新找到基于特定内核版本的应用程序重新编译,不过这种情况是非常少的,可以忽略
|
楼上都没对,
2.6内核要加载.ko文件,make时一并生成的哈
2.6内核要加载.ko文件,make时一并生成的哈
|
这是最主要的区别!!!!