From a3d32ac8ff4097346143999f9be490ea6e9ce687 Mon Sep 17 00:00:00 2001 From: gatieme Date: Mon, 16 May 2016 22:50:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=9A=84=E9=80=9A=E8=BF=87thread=5Finfo=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=88=B0current=E8=BF=9B=E7=A8=8B=E7=9A=84=E9=A9=B1=E5=8A=A8..?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- study/kernel/process/task/current/Makefile | 18 +++++++++ .../kernel/process/task/current/my_current.c | 39 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 study/kernel/process/task/current/Makefile create mode 100644 study/kernel/process/task/current/my_current.c diff --git a/study/kernel/process/task/current/Makefile b/study/kernel/process/task/current/Makefile new file mode 100644 index 0000000..96d7084 --- /dev/null +++ b/study/kernel/process/task/current/Makefile @@ -0,0 +1,18 @@ +ifneq ($(KERNELRELEASE),) + +obj-m := my_current.o + +else + +KERNELDIR ?= /lib/modules/$(shell uname -r)/build + +PWD := $(shell pwd) + +all: + make -C $(KERNELDIR) M=$(PWD) modules + +clean: + make -C $(KERNELDIR) M=$(PWD) clean + + +endif diff --git a/study/kernel/process/task/current/my_current.c b/study/kernel/process/task/current/my_current.c new file mode 100644 index 0000000..8a9add2 --- /dev/null +++ b/study/kernel/process/task/current/my_current.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include + +#ifndef THREAD_SIZE +#define THREAD_SIZE 0x00002000 +#endif + +#define my_current my_get_current +#define my_get_current (my_current_thread_info()->task) + +register unsigned long my_current_stack_pointer asm("esp") __used; + + static inline struct thread_info *my_current_thread_info(void) +{ + return (struct thread_info *) + (my_current_stack_pointer & ~(THREAD_SIZE - 1)); +} + +static int __init lkp_init(void) +{ + printk("pid = %d\n",current->pid); + printk("name = %s\n",current->comm); + printk("pid = %d\n",my_current->pid); + printk("name = %s\n",my_current->comm); + return 0; +} + +static void __exit lkp_cleanup(void) +{ + printk("<1>bye!\n"); +} + +module_init(lkp_init); +module_exit(lkp_cleanup); +MODULE_LICENSE("GPL");