diff --git a/study/kernel/memory/cr3_pgd/Makefile b/study/kernel/memory/cr3_pgd/Makefile new file mode 100644 index 0000000..c655fa9 --- /dev/null +++ b/study/kernel/memory/cr3_pgd/Makefile @@ -0,0 +1,18 @@ +ifneq ($(KERNELRELEASE),) + +obj-m := crs_pgd.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/memory/cr3_pgd/crs_pgd.c b/study/kernel/memory/cr3_pgd/crs_pgd.c new file mode 100644 index 0000000..6cd2b1a --- /dev/null +++ b/study/kernel/memory/cr3_pgd/crs_pgd.c @@ -0,0 +1,31 @@ +//#include +#include +#include +#include +#include + +static unsigned long read_pgd(void) +{ + return (unsigned long)current->mm->pgd; +} + +static int __init init_cr3_pgd(void) +{ + unsigned long cr3; + unsigned long pgd = 0; + + cr3 = read_cr3(); + printk("cr3----------------->0x%lx\n",cr3); + pgd = __pa(read_pgd()); + printk("pgd----------------->0x%lx\n",pgd); + return 0; +} + +static void __exit exit_cr3_pgd(void) +{ + printk("--------------------->exit!\n"); + return ; +} + +module_init(init_cr3_pgd); +module_exit(exit_cr3_pgd);