废话不说,上code,1stDrv.c:
=======================================================================================
#define __NO_VERSION__
#include <linux/init.h>
#include <linux/module.h>
#include <linux/version.h>
#include <linux/sched.h>
#include <linux/delay.h>
MODULE_LICENSE("GPL");
static int __hello_init(void)
{
printk(KERN_ALERT "Hello, inserted !\n");
printk(KERN_ALERT "current pid:%d, father pid:%d", current->pid, current->parent->pid); //打印自己和父进程id,父进程就是shell了
msleep(10000); //稍微sleep一下便于观察
return 0;
}
static void __hello_exit(void)
{
printk(KERN_ALERT "Hello, exited! \n");
}
module_init(__hello_init);
module_exit(__hello_exit);
===================================================================================
Makefile用最标准的写法:
ifneq ($(KERNELRELEASE),)
obj-m := 1stDrv.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean
endif
===================================================================================
在insmod 1stDrv.ko后,结果用dmesg可以看到:
Hello, inserted !
current pid:4436, father pid:2594