Chinaunix首页 | 论坛 | 博客
  • 博客访问: 491795
  • 博文数量: 52
  • 博客积分: 5017
  • 博客等级: 大校
  • 技术积分: 707
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-20 11:34
文章分类
文章存档

2011年(1)

2008年(51)

我的朋友

分类: LINUX

2008-06-21 11:35:01

嵌入式Linux2.6 Kernel Module模板

/* hello.c */
#include        /* Needed by all modules */
#include          /* Needed for the module-macros */
 
static int __init hello_init(void)    // Module entry function specified by module_init()
{
        printk("Hello,world!\n");
        return 0;
}
 
static void __exit hello_exit(void)  //Module exit function specified by module_exit()
{
        printk("Goodbye,cruel world!\n");
}
 
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_LICENSE("Dual BSD/GPL");  //should always exist or you’ll get a warning
MODULE_AUTHOR("BENSON"); //optional
MODULE_DESCRIPTION("STUDY_MODULE"); //optional
 
/* Makefile */
# Makefile 2.6
obj-m += hello.o
KDIR:=/work/src/kernel/linux-2.6.18_pro500
#The source code directory of the kernel which runs on the development board 
CC = arm-linux-gcc
#PWD=$(shell pwd)
all:
        make -C $(KDIR) M=$(PWD) modules
clean:
        make -C $(KDIR) M=$(PWD) clean
 
obj-m := hello.o表示编译后生成hello.o模块。
$(KDIR) 指定了内核源码的路径,“M=”表示这是个外部模块,M=$(PWD) 指定了该模块文件所在的路径。
注: makefile预定义了$(PWD)变量,此处可以不必重复定义。
 
执行#make编译成功后将生成的hello.ko拷贝到nfs文件系统。
 
加载到开发板上运行
#insmod hello.ko
Hello,world!
#lsmod 输出内核已加载模块信息,可以查看到刚刚加载成功的hello模块
……
Module                  Size  Used by
hello                   5632  0
 
卸载模块
#rmmod hello.ko
Goodbye,cruel world!
#lsmod 发现hello模块已经被卸载
 
 
参考资料:
The Linux Kernel Module Programming Guide 2.6  非常好的kernel module program 入门教程
阅读(1793) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~