简介
LDD第二章中以一个HELLO WORLD程序,阐述模块的安装与卸载。
前置内容关于内核编译树的构建请参考博文:Ubuntu 10.04内核源码树的编译和安装
源码编辑
源码同LDD书中内容
//hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MakeFile编辑
obj-m := hello.o
KERNELDIR := /lib/modules/2.6.35.14/build
PWD:=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
注意make modules_install 与 insmod 还是有区别的,make modules_install是将模块复制到
/lib/modules下,而insmod是将模块加载到内核可以运行
在源码所在目录下执行make即可。注意可能无法看到printk的消息,此消息保存在 /var/log/kern.log中