linux 模块编程
1, 先准备好编译环境
最好是重新编译内核,并用编译好的内核启动和运行系统,注意不好删除编译的源码文件,保留内核源码,在编译模块时要用到源码树。现在一切就绪,可以开始编写我们自己的模块了。
2, 最简单的模块
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
static int __init hello_init(void)
{
printk("hello world!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk("goodbye world!\n");
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
|
Makefile的内容
obj-m := hello.o
all :
make -C /root/linux-2.6.28 SUBDIRS=`pwd` modules
clean :
rm *.o *.ko *.mod.c *.order *.symvers
2.1 运行模块
#insmod ./hello.ko
可以看到有信息输出了把,说明模块安装成功了。不过这个模块什么也做不了。它只能告诉你它已经活了。
#lsmod | grep hello
或
#cat /proc/modules | grep hello
可以看到模块已经被加载上了。
3,带参数的模块
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static char *book_name = "lld3";
static int num = 400;
static int book_init(void)
{
printk(KERN_ALERT "book name : %s\n", book_name);
printk(KERN_ALERT "book num : %d\n", num);
return 0;
}
static void book_exit(void)
{
printk(KERN_INFO "book module exit\n ");
}
module_init(book_init);
module_exit(book_exit);
module_param(num, int, S_IRUGO);
module_param(book_name, charp, S_IRUGO);
MODULE_AUTHOR("Hover");
MODULE_DESCRIPTION("A simple module with parameter");
MODULE_VERSION("V1.0");
|
3.1 Makefile的内容
obj-m := m_para.o
all :
make -C /root/linux-2.6.28 SUBDIRS=`pwd` modules
clean :
rm *.o *.ko *.mod.c *.order *.symvers
3.2 运行
注意这次的模块是可以加参数的了
#insmod m_para book_name="hellobook" num=1000
可以看到输出信息了,说明模块加载好了。
待续...
阅读(1512) | 评论(0) | 转发(1) |