本文基于ubuntu系统,linux内核3.0.0。
1.hello.c
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include <linux/sched.h>
MODULE_LICENSE("GPL");
static int __init lkp_init(void)
{
printk("Hello World!\n");
printk("The process is %s pid is %d\n", current->comm, current->pid);
return 0;
}
static void __exit lkp_cleanup(void)
{
printk(KERN_ALERT "Bye World!\n");
return 0;
}
module_init(lkp_init);
module_exit(lkp_cleanup);
MODULE_AUTHOR("tankai");
MODULE_DESCRIPTION("hello");
2.Makefile
obj-m := hello.o
KERNELBUILD :=/lib/modules/$(shell uname -r)/build
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order *.symvers .tmp_versions
3.
make
sudo insmod hello.ko
4.dmesg
[19231.402640] Hello World!
[19231.402646] The process is insmod pid is 14820
由此说明:用户通过系统调用进入内核态;仍然保留对该进程在用户态时资源的使用。