当前位置: 技术问答>linux和unix
fedora 7 驱动开发环境构建(500分)
来源: 互联网 发布时间:2016-02-22
本文导语: 各位牛人好: 各位在此平台上验证后,可以跑,希望提供具体指示,问题解决,理解结贴!!! 我用了fedora 7也有一段时间,目前开发驱动程序,可是我kernel-devel已经安装,我也试过重编内核,...
各位牛人好:
各位在此平台上验证后,可以跑,希望提供具体指示,问题解决,理解结贴!!!
我用了fedora 7也有一段时间,目前开发驱动程序,可是我kernel-devel已经安装,我也试过重编内核,仍然不行,下面是我用的代码:
hello.c
======================================
#include
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include
#endif
#include
static __init int init_module(void)
{
printk(KERN_DEBUG “Hello, kernel!n”);
return 0;
}
static __exit void cleanup_module(void)
{
printk(KERN_DEBUG “Good-bye, kernel!n”);
}
编译指令:
====================
gcc -D__KERNEL__ -I/usr/src/kernels/2.6.21-1.3194.fc7-i686/include -DMODULE -Wall -O2 -c hello.c -o hello.o
以下是报错:
=====================================
In file included from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/asm/thread_info.h:16,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/thread_info.h:21,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/preempt.h:9,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/spinlock.h:49,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/module.h:9,
from hello.c:2:
/usr/src/kernels/2.6.21-1.3194.fc7-i686/include/asm/processor.h:82: 错误:‘CONFIG_X86_L1_CACHE_SHIFT’ 未声明 (不在函数内)
/usr/src/kernels/2.6.21-1.3194.fc7-i686/include/asm/processor.h:82: 错误:要求的对齐边界不...
各位在此平台上验证后,可以跑,希望提供具体指示,问题解决,理解结贴!!!
我用了fedora 7也有一段时间,目前开发驱动程序,可是我kernel-devel已经安装,我也试过重编内核,仍然不行,下面是我用的代码:
hello.c
======================================
#include
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include
#endif
#include
static __init int init_module(void)
{
printk(KERN_DEBUG “Hello, kernel!n”);
return 0;
}
static __exit void cleanup_module(void)
{
printk(KERN_DEBUG “Good-bye, kernel!n”);
}
编译指令:
====================
gcc -D__KERNEL__ -I/usr/src/kernels/2.6.21-1.3194.fc7-i686/include -DMODULE -Wall -O2 -c hello.c -o hello.o
以下是报错:
=====================================
In file included from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/asm/thread_info.h:16,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/thread_info.h:21,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/preempt.h:9,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/spinlock.h:49,
from /usr/src/kernels/2.6.21-1.3194.fc7-i686/include/linux/module.h:9,
from hello.c:2:
/usr/src/kernels/2.6.21-1.3194.fc7-i686/include/asm/processor.h:82: 错误:‘CONFIG_X86_L1_CACHE_SHIFT’ 未声明 (不在函数内)
/usr/src/kernels/2.6.21-1.3194.fc7-i686/include/asm/processor.h:82: 错误:要求的对齐边界不...
|
吼吼. 楼主,
2.6 下面 Makefile 不能这么写了。
开发环境
内核版本: 2.6.22 (我下载的最新版本)
gcc : gcc (GCC) 4.1.2
hello.c 程序可以参考
http://dev.yesky.com/154/2621154.shtml
Makefile
gcc -D__KERNEL__ -DMODULE -DLINUX -I /usr/local/src/linux2.6/include -c -o hello.o hello.c
上面这种写法适合 2.4 版本的内核, 在2.6下用这种写法很可能导致许多编译错误,
即使编译通过也会产生 Invalid module format 错误。
至于原因请参考
http://blog.csdn.net/pottichu/archive/2007/11/19/1892203.aspx
2.6下正确的 Makefie 如下:
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
最后, 欢迎光临我的blog
http://blog.csdn.net/pottichu/archive/2007/11/19/1892245.aspx
哈哈. 真的给500分啊?
2.6 下面 Makefile 不能这么写了。
开发环境
内核版本: 2.6.22 (我下载的最新版本)
gcc : gcc (GCC) 4.1.2
hello.c 程序可以参考
http://dev.yesky.com/154/2621154.shtml
Makefile
gcc -D__KERNEL__ -DMODULE -DLINUX -I /usr/local/src/linux2.6/include -c -o hello.o hello.c
上面这种写法适合 2.4 版本的内核, 在2.6下用这种写法很可能导致许多编译错误,
即使编译通过也会产生 Invalid module format 错误。
至于原因请参考
http://blog.csdn.net/pottichu/archive/2007/11/19/1892203.aspx
2.6下正确的 Makefie 如下:
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
最后, 欢迎光临我的blog
http://blog.csdn.net/pottichu/archive/2007/11/19/1892245.aspx
哈哈. 真的给500分啊?