QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 763|回复: 9

我写的内核模块为啥老是出错?

[复制链接]
发表于 2003-4-20 11:03:47 | 显示全部楼层 |阅读模式
[code:1]
#include <linux/kernel.h>
#include <linux/module.h>                                                                                
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include <linux/modversions.h>
#endif
                                                                                
int init_module(){
  printk("Hello world! \n");                                                                                
  return 0;
}
                                                                                
void cleanup_module(){
  printk("the module exits the kernel\n");
}
[/code:1]
make的时候说printk出错  
insmod的时候说
module.o: couldn't find the kernel version the module was compiled for

我哪里写错了? 我可是抄书的
发表于 2003-4-21 10:52:24 | 显示全部楼层
add 'include <linux/slab.h>'
回复

使用道具 举报

 楼主| 发表于 2003-4-21 15:22:33 | 显示全部楼层
还是老样子
回复

使用道具 举报

发表于 2003-4-21 22:03:03 | 显示全部楼层
try this one
[code:1]
#include <linux/module.h>
#include <linux/slab.h>

int hello_init(void)
{
        printk("module init\n");
        return 0;
}

void hello_clean(void)
{
        printk("module cleanup\n");
}

module_init(hello_init);
module_exit(hello_clean);

MODULE_LICENSE("GPL");
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2003-4-22 12:36:51 | 显示全部楼层
gcc -Wall -DMODULS -D__KERNEL__ -DLINUX -c module.c
module.c: In function `hello_init':
module.c:6: warning: implicit declaration of function `printk'
module.c: At top level:
module.c:15: warning: type defaults to `int' in declaration of `module_init'
module.c:15: warning: parameter names (without types) in function declaration
module.c:15: warning: data definition has no type or storage class
module.c:16: warning: type defaults to `int' in declaration of `module_exit'
module.c:16: warning: parameter names (without types) in function declaration
module.c:16: warning: data definition has no type or storage class
你编译成功了吗?
回复

使用道具 举报

发表于 2003-4-22 21:50:37 | 显示全部楼层
this is because u do not include the kernel header file correctly. can u check /usr/src, which kernel header u want to use.
for example, if u installl rh 7.3. then under /usr/src, several dirs is possible, linux-2.4, linux-2.4.18-3. u linux-2..4 is a symbol link to linux-2.4.18-3. so if u want to use linux-2.4.18-3 as u kernel, u need add '-I /usr/src/linux-2.4.18-3/include' in u make file.
回复

使用道具 举报

 楼主| 发表于 2003-4-22 22:22:27 | 显示全部楼层
src]# ls -l :
drwxr-xr-x    2 root     root         4096  1月 25 07:52 debug
lrwxrwxrwx    1 root     root           14  4月  8 23:46 linux-2.4 -> linux-2.4.20-8
drwxr-xr-x   16 root     root         4096  4月  8 23:46 linux-2.4.20-8
drwxr-xr-x    7 root     root         4096  4月  8 23:41 redhat

my Makefile:
CC=gcc
MODCFLAGS := -Wall -DMODULS -D__KERNEL__ -DLINUX -I /usr/src/linux-2.4.20-8/include
module.o:       module.c /usr/include/linux/version.h
        $(CC) $(MODCFLAGS) -c module.c
编译没有问题了 但是
]# insmod module.o :
module.o: couldn't find the kernel version the module was compiled for

help!!
回复

使用道具 举报

发表于 2003-4-22 22:30:36 | 显示全部楼层
'MODCFLAGS := -Wall -DMODULS -D__KERNEL__ -DLINUX -I /usr/src/linux-2.4.20-8/include'?

use this one '-O2 -Wall -D__KERNEL__ -DMODULE -I /usr/src/linux-2.4.20-8/include'
if still have problem, go u /usr/src/linux-2.4.20-8, run make menuconfig, make dep.
回复

使用道具 举报

 楼主| 发表于 2003-4-23 16:14:20 | 显示全部楼层
ok !!
thanks!!
回复

使用道具 举报

发表于 2003-4-23 22:12:11 | 显示全部楼层
welcome  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 02:49 , Processed in 0.062803 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表