//在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
ubuntu7.04下面编译模块问题!请大家帮助!谢谢!
-
- 帖子: 10
- 注册时间: 2007-11-03 11:35
-
- 帖子: 1
- 注册时间: 2008-01-05 16:19
-
- 帖子: 32
- 注册时间: 2007-04-17 20:06
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 (第三版)
编译内核模块你们使用下面的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 (第三版)
我肯定会尽我所能帮助那些需要帮助的人,因为别人也帮助过我~
-
- 帖子: 6
- 注册时间: 2007-06-18 10:02
-
- 帖子: 241
- 注册时间: 2008-05-25 20:35
我也遇到同样的问题了....我的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");
}