From 212a9fac6ea4292ff22c004ec25b761eb6abe0c2 Mon Sep 17 00:00:00 2001 From: gatieme Date: Sun, 7 Aug 2016 16:35:13 +0800 Subject: [PATCH] =?UTF-8?q?=E9=8F=87=E5=AD=98=E6=9F=8A=E6=B5=9C=E5=97=97?= =?UTF-8?q?=E5=94=B4=E7=80=9B=E6=A8=BC=EE=85=B8=E9=90=9E=E5=97=95=E7=AE=A3?= =?UTF-8?q?=E6=A4=A4=E9=9D=9B=E7=B4=A1=E7=BB=A0=EF=BC=84=E6=82=8A=E9=8F=88?= =?UTF-8?q?=E5=93=84=E5=9F=97...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{01-task => 00-code}/current/Makefile | 0 .../{01-task => 00-code}/current/my_current.c | 0 .../find_task/.find-task.ko.cmd | 0 .../find_task/.find-task.mod.o.cmd | 0 .../find_task/.find-task.o.cmd | 0 .../find_task/.find_task.o.cmd | 0 .../find_task/.print_task.o.cmd | 0 .../find_task/.print_vmarea.o.cmd | 0 .../find_task/.tmp_versions/find-task.mod | 0 .../{01-task => 00-code}/find_task/Makefile | 0 .../find_task/Module.symvers | 0 .../find_task/find-task.mod.c | 0 .../find_task/find_task.c | 0 .../find_task/modules.order | 0 .../find_task/print_task.c | 0 .../find_task/print_task.h | 0 .../find_task/print_vmarea.c | 0 .../find_task/print_vmarea.h | 0 .../list_process/.list_process.ko.cmd | 0 .../list_process/.list_process.mod.o.cmd | 0 .../list_process/.list_process.o.cmd | 0 .../.tmp_versions/list_process.mod | 0 .../list_process/Makefile | 0 .../list_process/Module.symvers | 0 .../list_process/list_process.c | 0 .../list_process/list_process.mod.c | 0 .../list_process/modules.order | 0 .../{01-task => 00-code}/print_task/Makefile | 138 ++++----- .../print_task/print_task.c | 0 .../print_thread_info/Makefile | 0 .../print_thread_info/print_thread_info.c | 0 .../print_vmarea/Makefile | 134 ++++----- .../print_vmarea/print_vmarea.c | 0 .../print_vmarea/print_vmarea.c.bak | 0 .../02-memory/{ => 00-code}/cr3_pgd/Makefile | 0 .../02-memory/{ => 00-code}/cr3_pgd/crs_pgd.c | 62 ++-- .../02-memory/{ => 00-code}/kv2p/.kv2p.ko.cmd | 0 .../{ => 00-code}/kv2p/.kv2p.mod.o.cmd | 0 .../02-memory/{ => 00-code}/kv2p/.kv2p.o.cmd | 0 .../{ => 00-code}/kv2p/.tmp_versions/kv2p.mod | 0 study/kernel/02-memory/{ => 00-code}/kv2p/1.c | 0 .../02-memory/{ => 00-code}/kv2p/Makefile | 0 .../{ => 00-code}/kv2p/Module.symvers | 0 .../02-memory/{ => 00-code}/kv2p/README.md | 0 .../kv2p/images/CONFIG_PHYS_ADDR_T_64BIT.png | Bin .../02-memory/{ => 00-code}/kv2p/kv2p.c | 90 +++--- .../02-memory/{ => 00-code}/kv2p/kv2p.mod.c | 0 .../{ => 00-code}/kv2p/modules.order | 0 .../02-memory/{ => 00-code}/mem/Makefile | 0 .../02-memory/{ => 00-code}/mem/mem_dev.c | 0 .../02-memory/{ => 00-code}/mmap/Makefile | 0 .../02-memory/{ => 00-code}/mmap/devkmem.c | 0 .../02-memory/{ => 00-code}/mmap/devmem | Bin .../02-memory/{ => 00-code}/mmap/devmem.c | 0 .../02-memory/{ => 00-code}/mmap/getjiff.c | 280 +++++++++--------- .../02-memory/{ => 00-code}/mmap/mmap_test.c | 276 ++++++++--------- .../02-memory/{ => 00-code}/mmap/test.c | 114 +++---- .../02-memory/{ => 00-code}/v2p/Makefile | 0 .../kernel/02-memory/{ => 00-code}/v2p/v2p.c | 278 ++++++++--------- 59 files changed, 686 insertions(+), 686 deletions(-) rename study/kernel/01-process/{01-task => 00-code}/current/Makefile (100%) rename study/kernel/01-process/{01-task => 00-code}/current/my_current.c (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.find-task.ko.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.find-task.mod.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.find-task.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.find_task.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.print_task.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.print_vmarea.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/.tmp_versions/find-task.mod (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/Makefile (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/Module.symvers (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/find-task.mod.c (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/find_task.c (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/modules.order (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/print_task.c (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/print_task.h (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/print_vmarea.c (100%) rename study/kernel/01-process/{01-task => 00-code}/find_task/print_vmarea.h (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/.list_process.ko.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/.list_process.mod.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/.list_process.o.cmd (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/.tmp_versions/list_process.mod (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/Makefile (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/Module.symvers (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/list_process.c (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/list_process.mod.c (100%) rename study/kernel/01-process/{01-task => 00-code}/list_process/modules.order (100%) rename study/kernel/01-process/{01-task => 00-code}/print_task/Makefile (95%) rename study/kernel/01-process/{01-task => 00-code}/print_task/print_task.c (100%) rename study/kernel/01-process/{01-task => 00-code}/print_thread_info/Makefile (100%) rename study/kernel/01-process/{01-task => 00-code}/print_thread_info/print_thread_info.c (100%) rename study/kernel/01-process/{01-task => 00-code}/print_vmarea/Makefile (94%) rename study/kernel/01-process/{01-task => 00-code}/print_vmarea/print_vmarea.c (100%) rename study/kernel/01-process/{01-task => 00-code}/print_vmarea/print_vmarea.c.bak (100%) rename study/kernel/02-memory/{ => 00-code}/cr3_pgd/Makefile (100%) rename study/kernel/02-memory/{ => 00-code}/cr3_pgd/crs_pgd.c (95%) rename study/kernel/02-memory/{ => 00-code}/kv2p/.kv2p.ko.cmd (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/.kv2p.mod.o.cmd (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/.kv2p.o.cmd (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/.tmp_versions/kv2p.mod (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/1.c (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/Makefile (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/Module.symvers (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/README.md (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/images/CONFIG_PHYS_ADDR_T_64BIT.png (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/kv2p.c (95%) rename study/kernel/02-memory/{ => 00-code}/kv2p/kv2p.mod.c (100%) rename study/kernel/02-memory/{ => 00-code}/kv2p/modules.order (100%) rename study/kernel/02-memory/{ => 00-code}/mem/Makefile (100%) rename study/kernel/02-memory/{ => 00-code}/mem/mem_dev.c (100%) rename study/kernel/02-memory/{ => 00-code}/mmap/Makefile (100%) rename study/kernel/02-memory/{ => 00-code}/mmap/devkmem.c (100%) rename study/kernel/02-memory/{ => 00-code}/mmap/devmem (100%) mode change 100755 => 100644 rename study/kernel/02-memory/{ => 00-code}/mmap/devmem.c (100%) rename study/kernel/02-memory/{ => 00-code}/mmap/getjiff.c (96%) rename study/kernel/02-memory/{ => 00-code}/mmap/mmap_test.c (95%) rename study/kernel/02-memory/{ => 00-code}/mmap/test.c (93%) rename study/kernel/02-memory/{ => 00-code}/v2p/Makefile (100%) rename study/kernel/02-memory/{ => 00-code}/v2p/v2p.c (96%) diff --git a/study/kernel/01-process/01-task/current/Makefile b/study/kernel/01-process/00-code/current/Makefile similarity index 100% rename from study/kernel/01-process/01-task/current/Makefile rename to study/kernel/01-process/00-code/current/Makefile diff --git a/study/kernel/01-process/01-task/current/my_current.c b/study/kernel/01-process/00-code/current/my_current.c similarity index 100% rename from study/kernel/01-process/01-task/current/my_current.c rename to study/kernel/01-process/00-code/current/my_current.c diff --git a/study/kernel/01-process/01-task/find_task/.find-task.ko.cmd b/study/kernel/01-process/00-code/find_task/.find-task.ko.cmd similarity index 100% rename from study/kernel/01-process/01-task/find_task/.find-task.ko.cmd rename to study/kernel/01-process/00-code/find_task/.find-task.ko.cmd diff --git a/study/kernel/01-process/01-task/find_task/.find-task.mod.o.cmd b/study/kernel/01-process/00-code/find_task/.find-task.mod.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/find_task/.find-task.mod.o.cmd rename to study/kernel/01-process/00-code/find_task/.find-task.mod.o.cmd diff --git a/study/kernel/01-process/01-task/find_task/.find-task.o.cmd b/study/kernel/01-process/00-code/find_task/.find-task.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/find_task/.find-task.o.cmd rename to study/kernel/01-process/00-code/find_task/.find-task.o.cmd diff --git a/study/kernel/01-process/01-task/find_task/.find_task.o.cmd b/study/kernel/01-process/00-code/find_task/.find_task.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/find_task/.find_task.o.cmd rename to study/kernel/01-process/00-code/find_task/.find_task.o.cmd diff --git a/study/kernel/01-process/01-task/find_task/.print_task.o.cmd b/study/kernel/01-process/00-code/find_task/.print_task.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/find_task/.print_task.o.cmd rename to study/kernel/01-process/00-code/find_task/.print_task.o.cmd diff --git a/study/kernel/01-process/01-task/find_task/.print_vmarea.o.cmd b/study/kernel/01-process/00-code/find_task/.print_vmarea.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/find_task/.print_vmarea.o.cmd rename to study/kernel/01-process/00-code/find_task/.print_vmarea.o.cmd diff --git a/study/kernel/01-process/01-task/find_task/.tmp_versions/find-task.mod b/study/kernel/01-process/00-code/find_task/.tmp_versions/find-task.mod similarity index 100% rename from study/kernel/01-process/01-task/find_task/.tmp_versions/find-task.mod rename to study/kernel/01-process/00-code/find_task/.tmp_versions/find-task.mod diff --git a/study/kernel/01-process/01-task/find_task/Makefile b/study/kernel/01-process/00-code/find_task/Makefile similarity index 100% rename from study/kernel/01-process/01-task/find_task/Makefile rename to study/kernel/01-process/00-code/find_task/Makefile diff --git a/study/kernel/01-process/01-task/find_task/Module.symvers b/study/kernel/01-process/00-code/find_task/Module.symvers similarity index 100% rename from study/kernel/01-process/01-task/find_task/Module.symvers rename to study/kernel/01-process/00-code/find_task/Module.symvers diff --git a/study/kernel/01-process/01-task/find_task/find-task.mod.c b/study/kernel/01-process/00-code/find_task/find-task.mod.c similarity index 100% rename from study/kernel/01-process/01-task/find_task/find-task.mod.c rename to study/kernel/01-process/00-code/find_task/find-task.mod.c diff --git a/study/kernel/01-process/01-task/find_task/find_task.c b/study/kernel/01-process/00-code/find_task/find_task.c similarity index 100% rename from study/kernel/01-process/01-task/find_task/find_task.c rename to study/kernel/01-process/00-code/find_task/find_task.c diff --git a/study/kernel/01-process/01-task/find_task/modules.order b/study/kernel/01-process/00-code/find_task/modules.order similarity index 100% rename from study/kernel/01-process/01-task/find_task/modules.order rename to study/kernel/01-process/00-code/find_task/modules.order diff --git a/study/kernel/01-process/01-task/find_task/print_task.c b/study/kernel/01-process/00-code/find_task/print_task.c similarity index 100% rename from study/kernel/01-process/01-task/find_task/print_task.c rename to study/kernel/01-process/00-code/find_task/print_task.c diff --git a/study/kernel/01-process/01-task/find_task/print_task.h b/study/kernel/01-process/00-code/find_task/print_task.h similarity index 100% rename from study/kernel/01-process/01-task/find_task/print_task.h rename to study/kernel/01-process/00-code/find_task/print_task.h diff --git a/study/kernel/01-process/01-task/find_task/print_vmarea.c b/study/kernel/01-process/00-code/find_task/print_vmarea.c similarity index 100% rename from study/kernel/01-process/01-task/find_task/print_vmarea.c rename to study/kernel/01-process/00-code/find_task/print_vmarea.c diff --git a/study/kernel/01-process/01-task/find_task/print_vmarea.h b/study/kernel/01-process/00-code/find_task/print_vmarea.h similarity index 100% rename from study/kernel/01-process/01-task/find_task/print_vmarea.h rename to study/kernel/01-process/00-code/find_task/print_vmarea.h diff --git a/study/kernel/01-process/01-task/list_process/.list_process.ko.cmd b/study/kernel/01-process/00-code/list_process/.list_process.ko.cmd similarity index 100% rename from study/kernel/01-process/01-task/list_process/.list_process.ko.cmd rename to study/kernel/01-process/00-code/list_process/.list_process.ko.cmd diff --git a/study/kernel/01-process/01-task/list_process/.list_process.mod.o.cmd b/study/kernel/01-process/00-code/list_process/.list_process.mod.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/list_process/.list_process.mod.o.cmd rename to study/kernel/01-process/00-code/list_process/.list_process.mod.o.cmd diff --git a/study/kernel/01-process/01-task/list_process/.list_process.o.cmd b/study/kernel/01-process/00-code/list_process/.list_process.o.cmd similarity index 100% rename from study/kernel/01-process/01-task/list_process/.list_process.o.cmd rename to study/kernel/01-process/00-code/list_process/.list_process.o.cmd diff --git a/study/kernel/01-process/01-task/list_process/.tmp_versions/list_process.mod b/study/kernel/01-process/00-code/list_process/.tmp_versions/list_process.mod similarity index 100% rename from study/kernel/01-process/01-task/list_process/.tmp_versions/list_process.mod rename to study/kernel/01-process/00-code/list_process/.tmp_versions/list_process.mod diff --git a/study/kernel/01-process/01-task/list_process/Makefile b/study/kernel/01-process/00-code/list_process/Makefile similarity index 100% rename from study/kernel/01-process/01-task/list_process/Makefile rename to study/kernel/01-process/00-code/list_process/Makefile diff --git a/study/kernel/01-process/01-task/list_process/Module.symvers b/study/kernel/01-process/00-code/list_process/Module.symvers similarity index 100% rename from study/kernel/01-process/01-task/list_process/Module.symvers rename to study/kernel/01-process/00-code/list_process/Module.symvers diff --git a/study/kernel/01-process/01-task/list_process/list_process.c b/study/kernel/01-process/00-code/list_process/list_process.c similarity index 100% rename from study/kernel/01-process/01-task/list_process/list_process.c rename to study/kernel/01-process/00-code/list_process/list_process.c diff --git a/study/kernel/01-process/01-task/list_process/list_process.mod.c b/study/kernel/01-process/00-code/list_process/list_process.mod.c similarity index 100% rename from study/kernel/01-process/01-task/list_process/list_process.mod.c rename to study/kernel/01-process/00-code/list_process/list_process.mod.c diff --git a/study/kernel/01-process/01-task/list_process/modules.order b/study/kernel/01-process/00-code/list_process/modules.order similarity index 100% rename from study/kernel/01-process/01-task/list_process/modules.order rename to study/kernel/01-process/00-code/list_process/modules.order diff --git a/study/kernel/01-process/01-task/print_task/Makefile b/study/kernel/01-process/00-code/print_task/Makefile similarity index 95% rename from study/kernel/01-process/01-task/print_task/Makefile rename to study/kernel/01-process/00-code/print_task/Makefile index e66facb..68c52de 100644 --- a/study/kernel/01-process/01-task/print_task/Makefile +++ b/study/kernel/01-process/00-code/print_task/Makefile @@ -1,69 +1,69 @@ -# ------------------------------------------------------------------------------ -# -# Makefile for the LDD-LinuxDeviceDrivers print_task. -# -# Author: gatieme -# Create: 2016-07-29 15:50:46 -# Last modified: 2016-07-29 16:10:29 -# Description: -# This program is loaded as a kernel(v2.6.18 or later) module. -# Use "make install" to load it into kernel. -# Use "make remove" to remove the module out of kernel. -# -# ------------------------------------------------------------------------------ - - -ROOT=.. -#PLATFORM=$(shell $(ROOT)/systype.sh) -#include $(ROOT)/Make.defines.$(PLATFORM) - -MODULE_NAME := print_task - -ifneq ($(KERNELRELEASE),) - -#CFG_FLAGS += -O2 -I./ -#EXTRA_CFLAGS += $(C_FLAGS) $(CFG_INC) $(CFG_INC) - - - -obj-m := $(MODULE_NAME).o #print_task.o - -else - -KERNELDIR ?= /lib/modules/$(shell uname -r)/build - -PWD := $(shell pwd) - -modules: - make -C $(KERNELDIR) M=$(PWD) modules - -modules_install: - make -C $(KERNELDIR) M=$(PWD) modules_install - - - -insmod: - sudo insmod $(MODULE_NAME).ko - -reinsmod: - sudo rmmod $(MODULE_NAME) - sudo insmod $(MODULE_NAME).ko - -github: - cd $(ROOT) && make github - -rmmod: - sudo rmmod $(MODULE_NAME) - -test : - sudo ../injector/memInjector -l stack -m random -t word_0 --time 1 --timeout 3 -p 1 - -clean: - make -C $(KERNELDIR) M=$(PWD) clean - rm -f modules.order Module.symvers Module.markers - -.PHNOY: - modules modules_install clean - -endif - +# ------------------------------------------------------------------------------ +# +# Makefile for the LDD-LinuxDeviceDrivers print_task. +# +# Author: gatieme +# Create: 2016-07-29 15:50:46 +# Last modified: 2016-07-29 16:10:29 +# Description: +# This program is loaded as a kernel(v2.6.18 or later) module. +# Use "make install" to load it into kernel. +# Use "make remove" to remove the module out of kernel. +# +# ------------------------------------------------------------------------------ + + +ROOT=.. +#PLATFORM=$(shell $(ROOT)/systype.sh) +#include $(ROOT)/Make.defines.$(PLATFORM) + +MODULE_NAME := print_task + +ifneq ($(KERNELRELEASE),) + +#CFG_FLAGS += -O2 -I./ +#EXTRA_CFLAGS += $(C_FLAGS) $(CFG_INC) $(CFG_INC) + + + +obj-m := $(MODULE_NAME).o #print_task.o + +else + +KERNELDIR ?= /lib/modules/$(shell uname -r)/build + +PWD := $(shell pwd) + +modules: + make -C $(KERNELDIR) M=$(PWD) modules + +modules_install: + make -C $(KERNELDIR) M=$(PWD) modules_install + + + +insmod: + sudo insmod $(MODULE_NAME).ko + +reinsmod: + sudo rmmod $(MODULE_NAME) + sudo insmod $(MODULE_NAME).ko + +github: + cd $(ROOT) && make github + +rmmod: + sudo rmmod $(MODULE_NAME) + +test : + sudo ../injector/memInjector -l stack -m random -t word_0 --time 1 --timeout 3 -p 1 + +clean: + make -C $(KERNELDIR) M=$(PWD) clean + rm -f modules.order Module.symvers Module.markers + +.PHNOY: + modules modules_install clean + +endif + diff --git a/study/kernel/01-process/01-task/print_task/print_task.c b/study/kernel/01-process/00-code/print_task/print_task.c similarity index 100% rename from study/kernel/01-process/01-task/print_task/print_task.c rename to study/kernel/01-process/00-code/print_task/print_task.c diff --git a/study/kernel/01-process/01-task/print_thread_info/Makefile b/study/kernel/01-process/00-code/print_thread_info/Makefile similarity index 100% rename from study/kernel/01-process/01-task/print_thread_info/Makefile rename to study/kernel/01-process/00-code/print_thread_info/Makefile diff --git a/study/kernel/01-process/01-task/print_thread_info/print_thread_info.c b/study/kernel/01-process/00-code/print_thread_info/print_thread_info.c similarity index 100% rename from study/kernel/01-process/01-task/print_thread_info/print_thread_info.c rename to study/kernel/01-process/00-code/print_thread_info/print_thread_info.c diff --git a/study/kernel/01-process/01-task/print_vmarea/Makefile b/study/kernel/01-process/00-code/print_vmarea/Makefile similarity index 94% rename from study/kernel/01-process/01-task/print_vmarea/Makefile rename to study/kernel/01-process/00-code/print_vmarea/Makefile index 2bf1ad4..bca5972 100644 --- a/study/kernel/01-process/01-task/print_vmarea/Makefile +++ b/study/kernel/01-process/00-code/print_vmarea/Makefile @@ -1,67 +1,67 @@ -# Makefile for the memory fault injection engine. -# -# Author: gatieme -# Create: 2016-07-29 15:50:46 -# Last modified: 2016-07-29 16:10:29 -# Description: -# This program is loaded as a kernel(v2.6.18 or later) module. -# Use "make install" to load it into kernel. -# Use "make remove" to remove the module out of kernel. -# -ROOT=.. -#PLATFORM=$(shell $(ROOT)/systype.sh) -#include $(ROOT)/Make.defines.$(PLATFORM) - -MODULE_NAME := print_vmarea - -ifneq ($(KERNELRELEASE),) - -#CFG_FLAGS += -O2 -I./ -#EXTRA_CFLAGS += $(C_FLAGS) $(CFG_INC) $(CFG_INC) - - - -obj-m := $(MODULE_NAME).o #print_vmarea.o - -else - -#MODULE_NAME := print_vmarea -KERNELDIR ?= /lib/modules/$(shell uname -r)/build -#KERNELDIR ?= /home/gatieme/Work/Kernel/ -PWD := $(shell pwd) - -modules: - make -C $(KERNELDIR) M=$(PWD) modules - -modules_install: - make -C $(KERNELDIR) M=$(PWD) modules_install - - - -insmod: - sudo insmod $(MODULE_NAME).ko - -reinsmod: - sudo rmmod $(MODULE_NAME) - sudo insmod $(MODULE_NAME).ko - -github: - cd $(ROOT) && make github - -rmmod: - sudo rmmod $(MODULE_NAME) - -test : - sudo ../injector/memInjector -l stack -m random -t word_0 --time 1 --timeout 3 -p 1 - -clean: - make -C $(KERNELDIR) M=$(PWD) clean - rm -f modules.order Module.symvers Module.markers - -.PHNOY: - modules modules_install clean - - - -endif - +# Makefile for the memory fault injection engine. +# +# Author: gatieme +# Create: 2016-07-29 15:50:46 +# Last modified: 2016-07-29 16:10:29 +# Description: +# This program is loaded as a kernel(v2.6.18 or later) module. +# Use "make install" to load it into kernel. +# Use "make remove" to remove the module out of kernel. +# +ROOT=.. +#PLATFORM=$(shell $(ROOT)/systype.sh) +#include $(ROOT)/Make.defines.$(PLATFORM) + +MODULE_NAME := print_vmarea + +ifneq ($(KERNELRELEASE),) + +#CFG_FLAGS += -O2 -I./ +#EXTRA_CFLAGS += $(C_FLAGS) $(CFG_INC) $(CFG_INC) + + + +obj-m := $(MODULE_NAME).o #print_vmarea.o + +else + +#MODULE_NAME := print_vmarea +KERNELDIR ?= /lib/modules/$(shell uname -r)/build +#KERNELDIR ?= /home/gatieme/Work/Kernel/ +PWD := $(shell pwd) + +modules: + make -C $(KERNELDIR) M=$(PWD) modules + +modules_install: + make -C $(KERNELDIR) M=$(PWD) modules_install + + + +insmod: + sudo insmod $(MODULE_NAME).ko + +reinsmod: + sudo rmmod $(MODULE_NAME) + sudo insmod $(MODULE_NAME).ko + +github: + cd $(ROOT) && make github + +rmmod: + sudo rmmod $(MODULE_NAME) + +test : + sudo ../injector/memInjector -l stack -m random -t word_0 --time 1 --timeout 3 -p 1 + +clean: + make -C $(KERNELDIR) M=$(PWD) clean + rm -f modules.order Module.symvers Module.markers + +.PHNOY: + modules modules_install clean + + + +endif + diff --git a/study/kernel/01-process/01-task/print_vmarea/print_vmarea.c b/study/kernel/01-process/00-code/print_vmarea/print_vmarea.c similarity index 100% rename from study/kernel/01-process/01-task/print_vmarea/print_vmarea.c rename to study/kernel/01-process/00-code/print_vmarea/print_vmarea.c diff --git a/study/kernel/01-process/01-task/print_vmarea/print_vmarea.c.bak b/study/kernel/01-process/00-code/print_vmarea/print_vmarea.c.bak similarity index 100% rename from study/kernel/01-process/01-task/print_vmarea/print_vmarea.c.bak rename to study/kernel/01-process/00-code/print_vmarea/print_vmarea.c.bak diff --git a/study/kernel/02-memory/cr3_pgd/Makefile b/study/kernel/02-memory/00-code/cr3_pgd/Makefile similarity index 100% rename from study/kernel/02-memory/cr3_pgd/Makefile rename to study/kernel/02-memory/00-code/cr3_pgd/Makefile diff --git a/study/kernel/02-memory/cr3_pgd/crs_pgd.c b/study/kernel/02-memory/00-code/cr3_pgd/crs_pgd.c similarity index 95% rename from study/kernel/02-memory/cr3_pgd/crs_pgd.c rename to study/kernel/02-memory/00-code/cr3_pgd/crs_pgd.c index c2775aa..50ec77d 100644 --- a/study/kernel/02-memory/cr3_pgd/crs_pgd.c +++ b/study/kernel/02-memory/00-code/cr3_pgd/crs_pgd.c @@ -1,31 +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); +//#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); diff --git a/study/kernel/02-memory/kv2p/.kv2p.ko.cmd b/study/kernel/02-memory/00-code/kv2p/.kv2p.ko.cmd similarity index 100% rename from study/kernel/02-memory/kv2p/.kv2p.ko.cmd rename to study/kernel/02-memory/00-code/kv2p/.kv2p.ko.cmd diff --git a/study/kernel/02-memory/kv2p/.kv2p.mod.o.cmd b/study/kernel/02-memory/00-code/kv2p/.kv2p.mod.o.cmd similarity index 100% rename from study/kernel/02-memory/kv2p/.kv2p.mod.o.cmd rename to study/kernel/02-memory/00-code/kv2p/.kv2p.mod.o.cmd diff --git a/study/kernel/02-memory/kv2p/.kv2p.o.cmd b/study/kernel/02-memory/00-code/kv2p/.kv2p.o.cmd similarity index 100% rename from study/kernel/02-memory/kv2p/.kv2p.o.cmd rename to study/kernel/02-memory/00-code/kv2p/.kv2p.o.cmd diff --git a/study/kernel/02-memory/kv2p/.tmp_versions/kv2p.mod b/study/kernel/02-memory/00-code/kv2p/.tmp_versions/kv2p.mod similarity index 100% rename from study/kernel/02-memory/kv2p/.tmp_versions/kv2p.mod rename to study/kernel/02-memory/00-code/kv2p/.tmp_versions/kv2p.mod diff --git a/study/kernel/02-memory/kv2p/1.c b/study/kernel/02-memory/00-code/kv2p/1.c similarity index 100% rename from study/kernel/02-memory/kv2p/1.c rename to study/kernel/02-memory/00-code/kv2p/1.c diff --git a/study/kernel/02-memory/kv2p/Makefile b/study/kernel/02-memory/00-code/kv2p/Makefile similarity index 100% rename from study/kernel/02-memory/kv2p/Makefile rename to study/kernel/02-memory/00-code/kv2p/Makefile diff --git a/study/kernel/02-memory/kv2p/Module.symvers b/study/kernel/02-memory/00-code/kv2p/Module.symvers similarity index 100% rename from study/kernel/02-memory/kv2p/Module.symvers rename to study/kernel/02-memory/00-code/kv2p/Module.symvers diff --git a/study/kernel/02-memory/kv2p/README.md b/study/kernel/02-memory/00-code/kv2p/README.md similarity index 100% rename from study/kernel/02-memory/kv2p/README.md rename to study/kernel/02-memory/00-code/kv2p/README.md diff --git a/study/kernel/02-memory/kv2p/images/CONFIG_PHYS_ADDR_T_64BIT.png b/study/kernel/02-memory/00-code/kv2p/images/CONFIG_PHYS_ADDR_T_64BIT.png similarity index 100% rename from study/kernel/02-memory/kv2p/images/CONFIG_PHYS_ADDR_T_64BIT.png rename to study/kernel/02-memory/00-code/kv2p/images/CONFIG_PHYS_ADDR_T_64BIT.png diff --git a/study/kernel/02-memory/kv2p/kv2p.c b/study/kernel/02-memory/00-code/kv2p/kv2p.c similarity index 95% rename from study/kernel/02-memory/kv2p/kv2p.c rename to study/kernel/02-memory/00-code/kv2p/kv2p.c index 385c24b..1b1ab25 100644 --- a/study/kernel/02-memory/kv2p/kv2p.c +++ b/study/kernel/02-memory/00-code/kv2p/kv2p.c @@ -1,45 +1,45 @@ -/***************************************************************** -文件名:mem.c -输入参数: -pid 接收待查询进程的PID -va 接收待查询的虚拟地址 -*****************************************************************/ - - -#include -#include -#include -#include -#include -#include -#include - -MODULE_LICENSE("GPL"); - - -static unsigned long VA; -module_param(VA, ulong, 0644); - - - -static int __init kv2p_init(void) -{ - int value = 10; - // use virt_to_phys - // http://lxr.free-electrons.com/source/arch/arm64/include/asm/memory.h?v4.7#L189 - - phys_addr_t phyaddr = virt_to_phys((const volatile void *)&value); - printk("0x%lx\n", (unsigned long )phyaddr); - - return 0; -} - - - -static void __exit kv2p_exit(void) -{ - printk(KERN_INFO"Goodbye!\n"); -} - -module_init(kv2p_init); -module_exit(kv2p_exit); +/***************************************************************** +文件名:mem.c +输入参数: +pid 接收待查询进程的PID +va 接收待查询的虚拟地址 +*****************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include + +MODULE_LICENSE("GPL"); + + +static unsigned long VA; +module_param(VA, ulong, 0644); + + + +static int __init kv2p_init(void) +{ + int value = 10; + // use virt_to_phys + // http://lxr.free-electrons.com/source/arch/arm64/include/asm/memory.h?v4.7#L189 + + phys_addr_t phyaddr = virt_to_phys((const volatile void *)&value); + printk("0x%lx\n", (unsigned long )phyaddr); + + return 0; +} + + + +static void __exit kv2p_exit(void) +{ + printk(KERN_INFO"Goodbye!\n"); +} + +module_init(kv2p_init); +module_exit(kv2p_exit); diff --git a/study/kernel/02-memory/kv2p/kv2p.mod.c b/study/kernel/02-memory/00-code/kv2p/kv2p.mod.c similarity index 100% rename from study/kernel/02-memory/kv2p/kv2p.mod.c rename to study/kernel/02-memory/00-code/kv2p/kv2p.mod.c diff --git a/study/kernel/02-memory/kv2p/modules.order b/study/kernel/02-memory/00-code/kv2p/modules.order similarity index 100% rename from study/kernel/02-memory/kv2p/modules.order rename to study/kernel/02-memory/00-code/kv2p/modules.order diff --git a/study/kernel/02-memory/mem/Makefile b/study/kernel/02-memory/00-code/mem/Makefile similarity index 100% rename from study/kernel/02-memory/mem/Makefile rename to study/kernel/02-memory/00-code/mem/Makefile diff --git a/study/kernel/02-memory/mem/mem_dev.c b/study/kernel/02-memory/00-code/mem/mem_dev.c similarity index 100% rename from study/kernel/02-memory/mem/mem_dev.c rename to study/kernel/02-memory/00-code/mem/mem_dev.c diff --git a/study/kernel/02-memory/mmap/Makefile b/study/kernel/02-memory/00-code/mmap/Makefile similarity index 100% rename from study/kernel/02-memory/mmap/Makefile rename to study/kernel/02-memory/00-code/mmap/Makefile diff --git a/study/kernel/02-memory/mmap/devkmem.c b/study/kernel/02-memory/00-code/mmap/devkmem.c similarity index 100% rename from study/kernel/02-memory/mmap/devkmem.c rename to study/kernel/02-memory/00-code/mmap/devkmem.c diff --git a/study/kernel/02-memory/mmap/devmem b/study/kernel/02-memory/00-code/mmap/devmem old mode 100755 new mode 100644 similarity index 100% rename from study/kernel/02-memory/mmap/devmem rename to study/kernel/02-memory/00-code/mmap/devmem diff --git a/study/kernel/02-memory/mmap/devmem.c b/study/kernel/02-memory/00-code/mmap/devmem.c similarity index 100% rename from study/kernel/02-memory/mmap/devmem.c rename to study/kernel/02-memory/00-code/mmap/devmem.c diff --git a/study/kernel/02-memory/mmap/getjiff.c b/study/kernel/02-memory/00-code/mmap/getjiff.c similarity index 96% rename from study/kernel/02-memory/mmap/getjiff.c rename to study/kernel/02-memory/00-code/mmap/getjiff.c index d13bd57..5f249fa 100644 --- a/study/kernel/02-memory/mmap/getjiff.c +++ b/study/kernel/02-memory/00-code/mmap/getjiff.c @@ -1,140 +1,140 @@ - -/* -* getjiff.c -* -* this toolkit shows how to get jiffies value from user space: -* 1. find jiffies's address from kernel image. -* 2. access virtual address space to get jiffies value. -* 3. access physical address sapce to get jiffies value. -* -* demostrate following techniques: -* o get ELF object symbol address by calling nlist() -* o access virtual memory space from /dev/kmem -* o access virtual memory space from /dev/mem -*/ - -#include -#include //exit -#include //nlist -#include -#include -#include -#include -#include -#include -#include -#include - -#define LONG *(volatile unsigned long*) - -/* read from virtual memory */ -int read_kmem(off_t offset, void* buf, size_t count) -{ - int fd; - int n; - - fd = open("/dev/kmem", O_RDONLY); - if (fd < 0) - { - perror("open /dev/kmem failed"); - return -1; - } - - lseek(fd, offset, SEEK_SET); - n = read(fd, buf, count); - if (n != count) - perror("/dev/kmem read failed"); - else - printf("/dev/kmem read buf = %ld\n", *(unsigned long *)buf); - - close(fd); - return n; -} - -/* read from physical memory */ -int read_mem(off_t offset, void* buf, size_t count) -{ - int fd; - int n; - int page_size; - void *map_base; - unsigned long value; - - printf("/dev/mem: the offset is %lx\n", offset); - - fd = open("/dev/mem", O_RDONLY); - if (fd < 0) - { - perror("open /dev/mem failed"); - return -1; - } - - if(1){ - page_size = getpagesize(); - printf("the page size = %d\n", page_size); - map_base = mmap(0,page_size,PROT_READ,MAP_SHARED,fd,offset); - if (map_base == MAP_FAILED){ - perror("mmap"); - exit(1); - } - value = LONG(map_base); - printf("/dev/mem: the value is %ld\n", value); - buf = (unsigned long *)map_base; - } - - if(0){ - lseek(fd, offset, SEEK_SET); - n = read(fd, buf, count); - if (n != count) - perror("/dev/mem read failed"); - else - printf("/dev/mem read buf = %ld\n", *(unsigned long *)buf); - } - - close(fd); - return n; -} - -int main(int argc, char **argv) -{ - FILE *fp; - char addr_str[11]="0x"; - char var[51]; - unsigned long addr; - unsigned long jiffies; - char ch; - int r; - - if (argc != 2) { - fprintf(stderr,"usage: %s System.map\n",argv[0]); - exit(-1); - } - - if ((fp = fopen(argv[1],"r")) == NULL) { - perror("fopen"); - exit(-1); - } - - do { - r = fscanf(fp,"%8s %c %50s\n",&addr_str[2],&ch,var); // format of System.map - if (strcmp(var,"jiffies")==0) - break; - } while(r > 0); - if (r < 0) { - printf("could not find jiffies\n"); - exit(-1); - } - - addr = strtoul(addr_str,NULL,16); //Convert string to unsigned long integer - printf("found jiffies at (%s) %08lx\n",addr_str,addr); - - read_kmem(addr, &jiffies, sizeof(jiffies)); - printf("jiffies=%ld (read from virtual memory)\n\n", jiffies); - - jiffies = 0; //reinit for checking read_mem() below - - read_mem(addr-0xC0000000, &jiffies, sizeof(jiffies)); - printf("jiffies=%ld (read from physical memory)\n", jiffies); - - return 0; -} + +/* +* getjiff.c +* +* this toolkit shows how to get jiffies value from user space: +* 1. find jiffies's address from kernel image. +* 2. access virtual address space to get jiffies value. +* 3. access physical address sapce to get jiffies value. +* +* demostrate following techniques: +* o get ELF object symbol address by calling nlist() +* o access virtual memory space from /dev/kmem +* o access virtual memory space from /dev/mem +*/ + +#include +#include //exit +#include //nlist +#include +#include +#include +#include +#include +#include +#include +#include + +#define LONG *(volatile unsigned long*) + +/* read from virtual memory */ +int read_kmem(off_t offset, void* buf, size_t count) +{ + int fd; + int n; + + fd = open("/dev/kmem", O_RDONLY); + if (fd < 0) + { + perror("open /dev/kmem failed"); + return -1; + } + + lseek(fd, offset, SEEK_SET); + n = read(fd, buf, count); + if (n != count) + perror("/dev/kmem read failed"); + else + printf("/dev/kmem read buf = %ld\n", *(unsigned long *)buf); + + close(fd); + return n; +} + +/* read from physical memory */ +int read_mem(off_t offset, void* buf, size_t count) +{ + int fd; + int n; + int page_size; + void *map_base; + unsigned long value; + + printf("/dev/mem: the offset is %lx\n", offset); + + fd = open("/dev/mem", O_RDONLY); + if (fd < 0) + { + perror("open /dev/mem failed"); + return -1; + } + + if(1){ + page_size = getpagesize(); + printf("the page size = %d\n", page_size); + map_base = mmap(0,page_size,PROT_READ,MAP_SHARED,fd,offset); + if (map_base == MAP_FAILED){ + perror("mmap"); + exit(1); + } + value = LONG(map_base); + printf("/dev/mem: the value is %ld\n", value); + buf = (unsigned long *)map_base; + } + + if(0){ + lseek(fd, offset, SEEK_SET); + n = read(fd, buf, count); + if (n != count) + perror("/dev/mem read failed"); + else + printf("/dev/mem read buf = %ld\n", *(unsigned long *)buf); + } + + close(fd); + return n; +} + +int main(int argc, char **argv) +{ + FILE *fp; + char addr_str[11]="0x"; + char var[51]; + unsigned long addr; + unsigned long jiffies; + char ch; + int r; + + if (argc != 2) { + fprintf(stderr,"usage: %s System.map\n",argv[0]); + exit(-1); + } + + if ((fp = fopen(argv[1],"r")) == NULL) { + perror("fopen"); + exit(-1); + } + + do { + r = fscanf(fp,"%8s %c %50s\n",&addr_str[2],&ch,var); // format of System.map + if (strcmp(var,"jiffies")==0) + break; + } while(r > 0); + if (r < 0) { + printf("could not find jiffies\n"); + exit(-1); + } + + addr = strtoul(addr_str,NULL,16); //Convert string to unsigned long integer + printf("found jiffies at (%s) %08lx\n",addr_str,addr); + + read_kmem(addr, &jiffies, sizeof(jiffies)); + printf("jiffies=%ld (read from virtual memory)\n\n", jiffies); + + jiffies = 0; //reinit for checking read_mem() below + + read_mem(addr-0xC0000000, &jiffies, sizeof(jiffies)); + printf("jiffies=%ld (read from physical memory)\n", jiffies); + + return 0; +} diff --git a/study/kernel/02-memory/mmap/mmap_test.c b/study/kernel/02-memory/00-code/mmap/mmap_test.c similarity index 95% rename from study/kernel/02-memory/mmap/mmap_test.c rename to study/kernel/02-memory/00-code/mmap/mmap_test.c index c873dfd..438000a 100644 --- a/study/kernel/02-memory/mmap/mmap_test.c +++ b/study/kernel/02-memory/00-code/mmap/mmap_test.c @@ -1,138 +1,138 @@ -/* - * http://blog.csdn.net/weed_hz/article/details/9787163 - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define DEVICE_NAME "mymap" - - -static unsigned char array[10]={0,1,2,3,4,5,6,7,8,9}; -static unsigned char *buffer; - - -static int my_open(struct inode *inode, struct file *file) -{ - return 0; -} - - -static int my_map(struct file *filp, struct vm_area_struct *vma) -{ - unsigned long page; - - unsigned char i; - - unsigned long start = (unsigned long)vma->vm_start; - unsigned long end = (unsigned long)vma->vm_end; - unsigned long size = (unsigned long)(vma->vm_end - vma->vm_start); - - - //得到物理地址 - page = virt_to_phys(buffer); - - //将用户空间的一个vma虚拟内存区映射到以page开始的一段连续物理页面上 - if(remap_pfn_range(vma, start, page>>PAGE_SHIFT,size,PAGE_SHARED)) //第三个参数是页帧号,由物理地址右移PAGE_SHIFT得到 - { - return -1; - } - - - //往该内存写10字节数据 - for(i=0;i<10;i++) - { - buffer[i] = array[i]; - } - - - return 0; -} - - -static struct file_operations dev_fops = -{ - .owner = THIS_MODULE, - .open = my_open, - .mmap = my_map, -}; - -static struct miscdevice misc = -{ - .minor = MISC_DYNAMIC_MINOR, - .name = DEVICE_NAME, - .fops = &dev_fops, -}; - -static ssize_t hwrng_attr_current_show(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - int i; - - for(i = 0; i < 10 ; i++) - { - printk("%d\n",buffer[i]); - } - - return 0; -} - -static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR, - hwrng_attr_current_show, - NULL); - - -static int __init dev_init(void) -{ - int ret; - - //注册混杂设备 - ret = misc_register(&misc); - - //内存分配 - buffer = (unsigned char *)kmalloc(PAGE_SIZE,GFP_KERNEL); - - //将该段内存设置为保留 - SetPageReserved(virt_to_page(buffer)); - - ret = device_create_file(misc.this_device,&dev_attr_rng_current); - - return ret; -} - - -static void __exit dev_exit(void) -{ - //注销设备 - misc_deregister(&misc); - - //清除保留 - ClearPageReserved(virt_to_page(buffer)); - - //释放内存 - kfree(buffer); -} - - -module_init(dev_init); -module_exit(dev_exit); -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("LKN@SCUT"); +/* + * http://blog.csdn.net/weed_hz/article/details/9787163 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define DEVICE_NAME "mymap" + + +static unsigned char array[10]={0,1,2,3,4,5,6,7,8,9}; +static unsigned char *buffer; + + +static int my_open(struct inode *inode, struct file *file) +{ + return 0; +} + + +static int my_map(struct file *filp, struct vm_area_struct *vma) +{ + unsigned long page; + + unsigned char i; + + unsigned long start = (unsigned long)vma->vm_start; + unsigned long end = (unsigned long)vma->vm_end; + unsigned long size = (unsigned long)(vma->vm_end - vma->vm_start); + + + //得到物理地址 + page = virt_to_phys(buffer); + + //将用户空间的一个vma虚拟内存区映射到以page开始的一段连续物理页面上 + if(remap_pfn_range(vma, start, page>>PAGE_SHIFT,size,PAGE_SHARED)) //第三个参数是页帧号,由物理地址右移PAGE_SHIFT得到 + { + return -1; + } + + + //往该内存写10字节数据 + for(i=0;i<10;i++) + { + buffer[i] = array[i]; + } + + + return 0; +} + + +static struct file_operations dev_fops = +{ + .owner = THIS_MODULE, + .open = my_open, + .mmap = my_map, +}; + +static struct miscdevice misc = +{ + .minor = MISC_DYNAMIC_MINOR, + .name = DEVICE_NAME, + .fops = &dev_fops, +}; + +static ssize_t hwrng_attr_current_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int i; + + for(i = 0; i < 10 ; i++) + { + printk("%d\n",buffer[i]); + } + + return 0; +} + +static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR, + hwrng_attr_current_show, + NULL); + + +static int __init dev_init(void) +{ + int ret; + + //注册混杂设备 + ret = misc_register(&misc); + + //内存分配 + buffer = (unsigned char *)kmalloc(PAGE_SIZE,GFP_KERNEL); + + //将该段内存设置为保留 + SetPageReserved(virt_to_page(buffer)); + + ret = device_create_file(misc.this_device,&dev_attr_rng_current); + + return ret; +} + + +static void __exit dev_exit(void) +{ + //注销设备 + misc_deregister(&misc); + + //清除保留 + ClearPageReserved(virt_to_page(buffer)); + + //释放内存 + kfree(buffer); +} + + +module_init(dev_init); +module_exit(dev_exit); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("LKN@SCUT"); diff --git a/study/kernel/02-memory/mmap/test.c b/study/kernel/02-memory/00-code/mmap/test.c similarity index 93% rename from study/kernel/02-memory/mmap/test.c rename to study/kernel/02-memory/00-code/mmap/test.c index 62a5bf3..0e1200f 100644 --- a/study/kernel/02-memory/mmap/test.c +++ b/study/kernel/02-memory/00-code/mmap/test.c @@ -1,57 +1,57 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define PAGE_SIZE 4096 - - -int main(int argc , char *argv[]) -{ - - int fd; - int i; - unsigned char *p_map; - - - //打开设备 - fd = open("/dev/mymap",O_RDWR); - - if(fd < 0) - { - printf("open fail\n"); - exit(1); - } - - - - //内存映射 - p_map = (unsigned char *)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0); - if(p_map == MAP_FAILED) - { - - printf("mmap fail\n"); - goto here; - } - - - - //打印映射后的内存中的前10个字节内容 - for(i=0;i<10;i++) - { - printf("%d\n",p_map[i]); - p_map[i] = i + 10; - } - - - - -here: - - munmap(p_map, PAGE_SIZE); - return 0; -} +#include +#include +#include +#include +#include +#include +#include +#include + +#define PAGE_SIZE 4096 + + +int main(int argc , char *argv[]) +{ + + int fd; + int i; + unsigned char *p_map; + + + //打开设备 + fd = open("/dev/mymap",O_RDWR); + + if(fd < 0) + { + printf("open fail\n"); + exit(1); + } + + + + //内存映射 + p_map = (unsigned char *)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0); + if(p_map == MAP_FAILED) + { + + printf("mmap fail\n"); + goto here; + } + + + + //打印映射后的内存中的前10个字节内容 + for(i=0;i<10;i++) + { + printf("%d\n",p_map[i]); + p_map[i] = i + 10; + } + + + + +here: + + munmap(p_map, PAGE_SIZE); + return 0; +} diff --git a/study/kernel/02-memory/v2p/Makefile b/study/kernel/02-memory/00-code/v2p/Makefile similarity index 100% rename from study/kernel/02-memory/v2p/Makefile rename to study/kernel/02-memory/00-code/v2p/Makefile diff --git a/study/kernel/02-memory/v2p/v2p.c b/study/kernel/02-memory/00-code/v2p/v2p.c similarity index 96% rename from study/kernel/02-memory/v2p/v2p.c rename to study/kernel/02-memory/00-code/v2p/v2p.c index d3ab710..123a6d9 100644 --- a/study/kernel/02-memory/v2p/v2p.c +++ b/study/kernel/02-memory/00-code/v2p/v2p.c @@ -1,139 +1,139 @@ -/***************************************************************** -文件名:mem.c -输入参数: -pid 接收待查询进程的PID -va 接收待查询的虚拟地址 -*****************************************************************/ - - -#include -#include -#include -#include -#include -#include -#include - -MODULE_LICENSE("GPL"); -static int pid; -static unsigned long va; - -module_param(pid,int,0644); -module_param(va,ulong,0644); - - -/* -* find_task_by_pid maybe not supported -* O(n) is fine :) -*/ -struct task_struct * findTaskByPid(pid_t pid) -{ - struct task_struct *task = NULL; - - // Traversing the process in the system to find the PID - // add by gatieme @2016-03-20 - for_each_process(task) - { - if(task->pid == pid) - { - printk("find task by pid = %d\n", pid); - return task; - } - } - return NULL; -} - -static int find_pgd_init(void) -{ - unsigned long pa = 0; - struct task_struct *pcb_tmp = NULL; - pgd_t *pgd_tmp = NULL; - pud_t *pud_tmp = NULL; - pmd_t *pmd_tmp = NULL; - pte_t *pte_tmp = NULL; - - printk(KERN_INFO"PAGE_OFFSET = 0x%lx\n",PAGE_OFFSET); - printk(KERN_INFO"PGDIR_SHIFT = %d\n",PGDIR_SHIFT); - printk(KERN_INFO"PUD_SHIFT = %d\n",PUD_SHIFT); - printk(KERN_INFO"PMD_SHIFT = %d\n",PMD_SHIFT); - printk(KERN_INFO"PAGE_SHIFT = %d\n",PAGE_SHIFT); - - printk(KERN_INFO"PTRS_PER_PGD = %d\n",PTRS_PER_PGD); - printk(KERN_INFO"PTRS_PER_PUD = %d\n",PTRS_PER_PUD); - printk(KERN_INFO"PTRS_PER_PMD = %d\n",PTRS_PER_PMD); - printk(KERN_INFO"PTRS_PER_PTE = %d\n",PTRS_PER_PTE); - - printk(KERN_INFO"PAGE_MASK = 0x%lx\n",PAGE_MASK); - - //if(!(pcb_tmp = find_task_by_pid(pid))) - if(!(pcb_tmp = findTaskByPid(pid))) - { - printk(KERN_INFO"Can't find the task %d .\n",pid); - return 0; - } - printk(KERN_INFO"pgd = 0x%p\n",pcb_tmp->mm->pgd); - - /* 判断给出的地址va是否合法(va<vm_end)*/ - if(!find_vma(pcb_tmp->mm,va)) - { - printk(KERN_INFO"virt_addr 0x%lx not available.\n",va); - return 0; - } - - pgd_tmp = pgd_offset(pcb_tmp->mm,va); - printk(KERN_INFO"pgd_tmp = 0x%p\n",pgd_tmp); - printk(KERN_INFO"pgd_val(*pgd_tmp) = 0x%lx\n",pgd_val(*pgd_tmp)); - if(pgd_none(*pgd_tmp)) - { - printk(KERN_INFO"Not mapped in pgd.\n"); - return 0; - } - - pud_tmp = pud_offset(pgd_tmp,va); - printk(KERN_INFO"pud_tmp = 0x%p\n",pud_tmp); - printk(KERN_INFO"pud_val(*pud_tmp) = 0x%lx\n",pud_val(*pud_tmp)); - if(pud_none(*pud_tmp)) - { - printk(KERN_INFO"Not mapped in pud.\n"); - return 0; - } - - pmd_tmp = pmd_offset(pud_tmp,va); - printk(KERN_INFO"pmd_tmp = 0x%p\n",pmd_tmp); - printk(KERN_INFO"pmd_val(*pmd_tmp) = 0x%lx\n",pmd_val(*pmd_tmp)); - if(pmd_none(*pmd_tmp)) - { - printk(KERN_INFO"Not mapped in pmd.\n"); - return 0; - } - - /*在这里,把原来的pte_offset_map()改成了pte_offset_kernel*/ - pte_tmp = pte_offset_kernel(pmd_tmp,va); - - printk(KERN_INFO"pte_tmp = 0x%p\n",pte_tmp); - printk(KERN_INFO"pte_val(*pte_tmp) = 0x%lx\n",pte_val(*pte_tmp)); - if(pte_none(*pte_tmp)) - { - printk(KERN_INFO"Not mapped in pte.\n"); - return 0; - } - if(!pte_present(*pte_tmp)){ - printk(KERN_INFO"pte not in RAM.\n"); - return 0; - } - - pa = (pte_val(*pte_tmp) & PAGE_MASK) | (va & ~PAGE_MASK); - printk(KERN_INFO"virt_addr 0x%lx in RAM is 0x%lx t .\n",va,pa); - printk(KERN_INFO"contect in 0x%lx is 0x%lx\n", pa, *(unsigned long *)((char *)pa + PAGE_OFFSET)); - - return 0; - -} - -static void find_pgd_exit(void) -{ - printk(KERN_INFO"Goodbye!\n"); -} - -module_init(find_pgd_init); -module_exit(find_pgd_exit); +/***************************************************************** +文件名:mem.c +输入参数: +pid 接收待查询进程的PID +va 接收待查询的虚拟地址 +*****************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include + +MODULE_LICENSE("GPL"); +static int pid; +static unsigned long va; + +module_param(pid,int,0644); +module_param(va,ulong,0644); + + +/* +* find_task_by_pid maybe not supported +* O(n) is fine :) +*/ +struct task_struct * findTaskByPid(pid_t pid) +{ + struct task_struct *task = NULL; + + // Traversing the process in the system to find the PID + // add by gatieme @2016-03-20 + for_each_process(task) + { + if(task->pid == pid) + { + printk("find task by pid = %d\n", pid); + return task; + } + } + return NULL; +} + +static int find_pgd_init(void) +{ + unsigned long pa = 0; + struct task_struct *pcb_tmp = NULL; + pgd_t *pgd_tmp = NULL; + pud_t *pud_tmp = NULL; + pmd_t *pmd_tmp = NULL; + pte_t *pte_tmp = NULL; + + printk(KERN_INFO"PAGE_OFFSET = 0x%lx\n",PAGE_OFFSET); + printk(KERN_INFO"PGDIR_SHIFT = %d\n",PGDIR_SHIFT); + printk(KERN_INFO"PUD_SHIFT = %d\n",PUD_SHIFT); + printk(KERN_INFO"PMD_SHIFT = %d\n",PMD_SHIFT); + printk(KERN_INFO"PAGE_SHIFT = %d\n",PAGE_SHIFT); + + printk(KERN_INFO"PTRS_PER_PGD = %d\n",PTRS_PER_PGD); + printk(KERN_INFO"PTRS_PER_PUD = %d\n",PTRS_PER_PUD); + printk(KERN_INFO"PTRS_PER_PMD = %d\n",PTRS_PER_PMD); + printk(KERN_INFO"PTRS_PER_PTE = %d\n",PTRS_PER_PTE); + + printk(KERN_INFO"PAGE_MASK = 0x%lx\n",PAGE_MASK); + + //if(!(pcb_tmp = find_task_by_pid(pid))) + if(!(pcb_tmp = findTaskByPid(pid))) + { + printk(KERN_INFO"Can't find the task %d .\n",pid); + return 0; + } + printk(KERN_INFO"pgd = 0x%p\n",pcb_tmp->mm->pgd); + + /* 判断给出的地址va是否合法(va<vm_end)*/ + if(!find_vma(pcb_tmp->mm,va)) + { + printk(KERN_INFO"virt_addr 0x%lx not available.\n",va); + return 0; + } + + pgd_tmp = pgd_offset(pcb_tmp->mm,va); + printk(KERN_INFO"pgd_tmp = 0x%p\n",pgd_tmp); + printk(KERN_INFO"pgd_val(*pgd_tmp) = 0x%lx\n",pgd_val(*pgd_tmp)); + if(pgd_none(*pgd_tmp)) + { + printk(KERN_INFO"Not mapped in pgd.\n"); + return 0; + } + + pud_tmp = pud_offset(pgd_tmp,va); + printk(KERN_INFO"pud_tmp = 0x%p\n",pud_tmp); + printk(KERN_INFO"pud_val(*pud_tmp) = 0x%lx\n",pud_val(*pud_tmp)); + if(pud_none(*pud_tmp)) + { + printk(KERN_INFO"Not mapped in pud.\n"); + return 0; + } + + pmd_tmp = pmd_offset(pud_tmp,va); + printk(KERN_INFO"pmd_tmp = 0x%p\n",pmd_tmp); + printk(KERN_INFO"pmd_val(*pmd_tmp) = 0x%lx\n",pmd_val(*pmd_tmp)); + if(pmd_none(*pmd_tmp)) + { + printk(KERN_INFO"Not mapped in pmd.\n"); + return 0; + } + + /*在这里,把原来的pte_offset_map()改成了pte_offset_kernel*/ + pte_tmp = pte_offset_kernel(pmd_tmp,va); + + printk(KERN_INFO"pte_tmp = 0x%p\n",pte_tmp); + printk(KERN_INFO"pte_val(*pte_tmp) = 0x%lx\n",pte_val(*pte_tmp)); + if(pte_none(*pte_tmp)) + { + printk(KERN_INFO"Not mapped in pte.\n"); + return 0; + } + if(!pte_present(*pte_tmp)){ + printk(KERN_INFO"pte not in RAM.\n"); + return 0; + } + + pa = (pte_val(*pte_tmp) & PAGE_MASK) | (va & ~PAGE_MASK); + printk(KERN_INFO"virt_addr 0x%lx in RAM is 0x%lx t .\n",va,pa); + printk(KERN_INFO"contect in 0x%lx is 0x%lx\n", pa, *(unsigned long *)((char *)pa + PAGE_OFFSET)); + + return 0; + +} + +static void find_pgd_exit(void) +{ + printk(KERN_INFO"Goodbye!\n"); +} + +module_init(find_pgd_init); +module_exit(find_pgd_exit);