内核模块编译入门
环境:redhat AS4
今天突然心血来潮,想知道内核模块的编程。于是在网上找了一些例子,但是总不能用,经过千辛万苦,终于找到一个能用的代码。
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");//许可证
int
init_module()
{
printk("/nhello, world/n");
return 0;
}
void
cleanup_module()
{
printk("bye bye, world/n");
}
Makefile
注意,第一个字母一定要大写,原因未知
obj-m := hello.o
KERNELBUILD :=/lib/modules/`uname -r`/build
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules
运行make即可,
然后 insmod hello.ko
运行 dmesg即可看到内容
然后 rmmod hello.ko
运行 dmesg即可看到结束内容。
关于hello.c的另一种写法
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
static int __init hello_init (void)
{
printk("Hello World!!/n");
return 0;
}
static void __exit hello_exit (void)
{
printk("Bye Bye World!!/n");
}
module_init(hello_init);
module_exit(hello_exit);
环境:redhat AS4
今天突然心血来潮,想知道内核模块的编程。于是在网上找了一些例子,但是总不能用,经过千辛万苦,终于找到一个能用的代码。
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");//许可证
int
init_module()
{
printk("/nhello, world/n");
return 0;
}
void
cleanup_module()
{
printk("bye bye, world/n");
}
Makefile
注意,第一个字母一定要大写,原因未知
obj-m := hello.o
KERNELBUILD :=/lib/modules/`uname -r`/build
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules
运行make即可,
然后 insmod hello.ko
运行 dmesg即可看到内容
然后 rmmod hello.ko
运行 dmesg即可看到结束内容。
关于hello.c的另一种写法
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
static int __init hello_init (void)
{
printk("Hello World!!/n");
return 0;
}
static void __exit hello_exit (void)
{
printk("Bye Bye World!!/n");
}
module_init(hello_init);
module_exit(hello_exit);