当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : ubuntu7.04下面编译模块问题!请大家帮助!谢谢!
帖子发表于 : 2007-12-16 21:15 

注册: 2007-11-03 11:35
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
//在ubuntu上面的原程序如下:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk("Hello world\n");
return 0;
}

static void hello_exit(void)
{
printk("Goodbye world\n");
}

module_init(hello_init);
module_exit(hello_exit);

在终端输入编译命令如下:
gcc -D__KERNEL__ -DMODULE -DLINUX -I /usr/src/linux-headers-2.6.20-15/include -c -o hello.o hello.c


但是并不能通过编译,错误提示如下::
In file included from /usr/src/linux-headers-2.6.20-15/include/asm/thread_info.h:16,
from /usr/src/linux-headers-2.6.20-15/include/linux/thread_info.h:21,
from /usr/src/linux-headers-2.6.20-15/include/linux/preempt.h:9,
from /usr/src/linux-headers-2.6.20-15/include/linux/spinlock.h:49,
from /usr/src/linux-headers-2.6.20-15/include/linux/module.h:9,
from hello.c:2:
/usr/src/linux-headers-2.6.20-15/include/asm/processor.h:82: 错误: ‘CONFIG_X86_L1_CACHE_SHIFT’ 未声明 (不在函数内)
/usr/src/linux-headers-2.6.20-15/include/asm/processor.h:82: 错误: 要求的对齐边界不是常量
在包含自 /usr/src/linux-headers-2.6.20-15/include/linux/sched.h:51 的文件中,
从 /usr/src/linux-headers-2.6.20-15/include/linux/utsname.h:35,
从 /usr/src/linux-headers-2.6.20-15/include/asm/elf.h:12,
从 /usr/src/linux-headers-2.6.20-15/include/linux/elf.h:7,
从 /usr/src/linux-headers-2.6.20-15/include/linux/module.h:15,
从 hello.c:2:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:33:3: 错误: #error You lose.
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:225:31: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:269:46: 错误: #if 中用零做除数
In file included from /usr/src/linux-headers-2.6.20-15/include/linux/sched.h:51,
from /usr/src/linux-headers-2.6.20-15/include/linux/utsname.h:35,
from /usr/src/linux-headers-2.6.20-15/include/asm/elf.h:12,
from /usr/src/linux-headers-2.6.20-15/include/linux/elf.h:7,
from /usr/src/linux-headers-2.6.20-15/include/linux/module.h:15,
from hello.c:2:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘jiffies_to_msecs’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:274: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:274: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:274: 错误: 所在的函数内只报告一次。)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:280:46: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘jiffies_to_usecs’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:285: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:293:46: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘msecs_to_jiffies’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:298: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:306:46: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘usecs_to_jiffies’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:311: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘timespec_to_jiffies’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:330: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:336: 错误: ‘SHIFT_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘jiffies_to_timespec’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:349: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘timeval_to_jiffies’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:371: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:375: 错误: ‘SHIFT_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘jiffies_to_timeval’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:387: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:400:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘jiffies_to_clock_t’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:401: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘clock_t_to_jiffies’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:412: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:431:6: 错误: #if 中用零做除数
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h: 在函数 ‘jiffies_64_to_clock_t’ 中:
/usr/src/linux-headers-2.6.20-15/include/linux/jiffies.h:432: 错误: ‘CONFIG_HZ’ 未声明 (在此函数内第一次使用)
在包含自 /usr/src/linux-headers-2.6.20-15/include/linux/module.h:21 的文件中,
从 hello.c:2:
/usr/src/linux-headers-2.6.20-15/include/asm/module.h:62:2: 错误: #error unknown processor family


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-01-05 16:23 

注册: 2008-01-05 16:19
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
内核编程的时候也遇到同样的问题了!几乎都一样~!
到处找都没找到答案…… :cry:
不过,在另一个论坛也看到同样的问题,然后那个楼主后来自己解决了,留下了这么句话:

引用:
搞定了,难道就没有人知道吗,就是编译连接库文件路径不对

引用:
/lib/modules/2.6.18-1.2798.fc6/build


然后就没有下文了,小弟才接触linux没几天……看了还是白看啊。
那位高手再拉我一把啊,谢谢。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-01-09 16:26 

注册: 2007-04-17 20:06
帖子: 32
送出感谢: 0 次
接收感谢: 0 次
2.4内核编译的方法和2.6内核是有区别的。具体什么区别我也说不上来,可能是内核的编写的区别
编译内核模块你们使用下面的Makefile试试看
ifneq ($(KERNELRELEASE),)
obj-m :=readtest.o
else
KDIR :=/lib/modules/`uname -r`/build
PWD :=$(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
编译的时候只要有源程序 改了obj-m的那个选项的名字就好了。
我一直是用的这个方法。没有出现过问题。
加载的时候加载生成的.ko文件就好了。
具体的可以参考linux device drivers (第三版)


_________________
我肯定会尽我所能帮助那些需要帮助的人,因为别人也帮助过我~


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-01-17 10:17 

注册: 2007-06-18 10:02
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
按楼上方法可行 书上不是也有么
$MAKE对应你用的gcc版本

我有一个问题就是 如果要编译一个特定版本的模块 KDIR :=/lib/modules/`uname -r`/build 只是针对当前shell版本的么???

该怎么作


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-07-21 13:39 

注册: 2008-05-25 20:35
帖子: 241
送出感谢: 0 次
接收感谢: 0 次
我也遇到同样的问题了....我的makefile是
代码:
TARGET  := hello-1
WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS  := -c -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC      := gcc

${TARGET}.o: ${TARGET}.c

.PHONY: clean

clean:
        rm -rf ${TARGET}.o


程序代码是
代码:
#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
        printk("<1>Hello world 1. \n");
}

void cleanup_module(void)
{
        printk(KERN_ALERT "Goodbye world 1. \n");
}


页首
 用户资料  
 
6 楼 
 文章标题 : Re:
帖子发表于 : 2008-09-22 10:11 

注册: 2008-05-25 20:35
帖子: 241
送出感谢: 0 次
接收感谢: 0 次
makefile应该是
代码:
obj-m += hello-1.o
all:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译