当前位置: 技术问答>linux和unix
关于linux驱动的"hello world"
来源: 互联网 发布时间:2015-09-13
本文导语: 以前从未用过linux,最近因工作需要开始学习linux驱动开发,结果却连"hello world"都运行不了,恳请高手帮忙。 本人用的系统为:Fodora core 3,新装的系统。(视窗模式和非视窗模式都试过) 程序非常简单:hello.c #include...
以前从未用过linux,最近因工作需要开始学习linux驱动开发,结果却连"hello world"都运行不了,恳请高手帮忙。
本人用的系统为:Fodora core 3,新装的系统。(视窗模式和非视窗模式都试过)
程序非常简单:hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk("Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
采用编译命令:gcc -c hello.c得到hello.o
然后用insmod hello.o
结果如下:insmod:error inserting "hello.o": -1 Invalid module format.
请教该如何解决这个问题?
本人用的系统为:Fodora core 3,新装的系统。(视窗模式和非视窗模式都试过)
程序非常简单:hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("Hello, worldn");
return 0;
}
static void hello_exit(void)
{
printk("Goodbye, cruel worldn");
}
module_init(hello_init);
module_exit(hello_exit);
采用编译命令:gcc -c hello.c得到hello.o
然后用insmod hello.o
结果如下:insmod:error inserting "hello.o": -1 Invalid module format.
请教该如何解决这个问题?
|
在你的代码目录下,
如果没有makefile要建立1个
echo "obj-m := hello.o" > Makefile
make -C /usr/src/linux-2.6.10 SUBDIRS=$PWD modules
cd /usr/src/linux-2.6.10
make modules_install
modprobe hello
应该可以了,如果不行看源码树中的Documentation/kbuild/modules.txt
如果没有makefile要建立1个
echo "obj-m := hello.o" > Makefile
make -C /usr/src/linux-2.6.10 SUBDIRS=$PWD modules
cd /usr/src/linux-2.6.10
make modules_install
modprobe hello
应该可以了,如果不行看源码树中的Documentation/kbuild/modules.txt
|
Makefile:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
然后使用:
#make
搞定.....
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
endif
然后使用:
#make
搞定.....
|
这个不是核心模块的编译方式吧?核心模块应该有自己的格式的……