嗨,我是 linux 的新手,正在通过一个示例
http://www.linuxforu.com/2010/12/writing-your-first-linux-driver/
我正在使用 Ubuntu 12.04 并创建了 c 代码名为 ofd.c 的文件(见下文)并保存在我在 ~/Development/MyProgs/myHelloWorldLinuxModule/v2 创建的目录中。我还创建了一个位于同一目录中的 Makefile(见下文)。
我希望在键入 make 时看到在同一目录中生成的 .ko 文件,但我得到的只是一条消息,上面写着“默认情况下无事可做”
我真的不明白makefile
我应该在某处定义 KERNELRELEASE,
默认情况下实际在做什么,这是否意味着在内核目录和工作目录上执行 make 或者我应该将我的代码放在某个特定的地方。
没有usr/src/linux but a /usr/src/linux-headers-3.8.0-29
,所以我改变了这个,对吗?(虽然似乎没有任何区别)。
任何帮助将不胜感激。
代码:
/* ofd.c – Our First Driver code */
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
static int __init ofd_init(void) /* Constructor */
{
printk(KERN_INFO "Namaskar: ofd registered");
return 0;
}
static void __exit ofd_exit(void) /* Destructor */
{
printk(KERN_INFO "Alvida: ofd unregistered");
}
module_init(ofd_init);
module_exit(ofd_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Anil Kumar Pugalia <email_at_sarika-pugs_dot_com>");
MODULE_DESCRIPTION("Our First Driver");`
生成文件……
# Makefile – makefile of our first driver
# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)
obj-m := ofd.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
else
KERNEL_SOURCE := /usr/src/linux
PWD := $(shell pwd)
default:
${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules
clean:
${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif