当前位置: 技术问答>linux和unix
入门级别菜鸟问题
来源: 互联网 发布时间:2016-12-05
本文导语: 学着写一个内核模块程序 环境: 2.6以上内核,前不久安装的fedora 1.0 代码: hello.c #include //needed by all modules #include //needed for KERN_ALERT #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) { ...
学着写一个内核模块程序
环境:
2.6以上内核,前不久安装的fedora 1.0
代码:
hello.c
Makefile:
obj-m := hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c Module.symvers
make不通
对机制不是很理解
还是摸索
大家帮我看看错误,thx!
环境:
2.6以上内核,前不久安装的fedora 1.0
代码:
hello.c
#include //needed by all modules
#include //needed for KERN_ALERT
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO "hello, world!n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO "goodbye worldn");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile:
obj-m := hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c Module.symvers
make不通
对机制不是很理解
还是摸索
大家帮我看看错误,thx!
|
前面增加
MAKE=make
RM=rm
obj-m := hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c Module.symvers
MAKE=make
RM=rm
obj-m := hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c Module.symvers
|
好像那么写没有什么错误啊,
可能是其他错吧
内核代码有吗?其他工具都装齐了吗?
还是把错误贴一下看看
可能是其他错吧
内核代码有吗?其他工具都装齐了吗?
还是把错误贴一下看看
|
参考:http://blog.csdn.net/wenxy1/archive/2008/03/20/2199507.aspx
|
刚才试了一个,错误很简单。
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules前面要用tab键缩行,不能用空格。
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules前面要用tab键缩行,不能用空格。
|
BTW:
$(RM) *.o *.ko *.mod.c Module.symvers也是
|
进了一步了,出现这种情况是你的机器上没有内核源码树。从安装光盘里找kernel-devel这个包安装上估计再make一一下
|
不需要编译内核,只要找到kernel-devel包安装上就行。这时
[lihua@wuqingmin 2.6.31.12-174.2.19.fc12.i686.PAE]$ pwd
/usr/src/kernels/2.6.31.12-174.2.19.fc12.i686.PAE
[lihua@wuqingmin 2.6.31.12-174.2.19.fc12.i686.PAE]$ ls
arch crypto firmware include ipc lib mm Module.symvers samples security System.map usr
block drivers fs init kernel Makefile Module.markers net scripts sound tools
[lihua@wuqingmin 2.6.31.12-174.2.19.fc12.i686.PAE]$
|
不需要自己写makefile,把hello.c放到/drivers/char里,在里面的makefile中增加obj-m +=hello.o一行,在内核根目录下make modules即可生成hello.ko文件
|
Good and have a try .
|
我也都是这么用,推荐,如果你只是研究驱动的话