diff --git a/study/kernel/02-memory/00-code/layout/0001-arm64-Stop-printing-the-virtual-memory-layout.patch b/study/kernel/02-memory/00-code/layout/0001-arm64-Stop-printing-the-virtual-memory-layout.patch new file mode 100644 index 0000000..d45abd3 --- /dev/null +++ b/study/kernel/02-memory/00-code/layout/0001-arm64-Stop-printing-the-virtual-memory-layout.patch @@ -0,0 +1,75 @@ +From 071929dbdd865f779a89ba3f1e06ba8d17dd3743 Mon Sep 17 00:00:00 2001 +From: Laura Abbott +Date: Tue, 19 Dec 2017 11:28:10 -0800 +Subject: [PATCH] arm64: Stop printing the virtual memory layout + +Printing kernel addresses should be done in limited circumstances, mostly +for debugging purposes. Printing out the virtual memory layout at every +kernel bootup doesn't really fall into this category so delete the prints. +There are other ways to get the same information. + +Acked-by: Kees Cook +Signed-off-by: Laura Abbott +Signed-off-by: Catalin Marinas +Signed-off-by: Cheng Jian +--- + arch/arm64/mm/init.c | 43 ------------------------------------------- + 1 file changed, 43 deletions(-) + +diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c +index 5960bef0170d..672094ed7e07 100644 +--- a/arch/arm64/mm/init.c ++++ b/arch/arm64/mm/init.c +@@ -599,49 +599,6 @@ void __init mem_init(void) + + mem_init_print_info(NULL); + +-#define MLK(b, t) b, t, ((t) - (b)) >> 10 +-#define MLM(b, t) b, t, ((t) - (b)) >> 20 +-#define MLG(b, t) b, t, ((t) - (b)) >> 30 +-#define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K) +- +- pr_notice("Virtual kernel memory layout:\n"); +-#ifdef CONFIG_KASAN +- pr_notice(" kasan : 0x%16lx - 0x%16lx (%6ld GB)\n", +- MLG(KASAN_SHADOW_START, KASAN_SHADOW_END)); +-#endif +- pr_notice(" modules : 0x%16lx - 0x%16lx (%6ld MB)\n", +- MLM(MODULES_VADDR, MODULES_END)); +- pr_notice(" vmalloc : 0x%16lx - 0x%16lx (%6ld GB)\n", +- MLG(VMALLOC_START, VMALLOC_END)); +- pr_notice(" .text : 0x%p" " - 0x%p" " (%6ld KB)\n", +- MLK_ROUNDUP(_text, _etext)); +- pr_notice(" .rodata : 0x%p" " - 0x%p" " (%6ld KB)\n", +- MLK_ROUNDUP(__start_rodata, __init_begin)); +- pr_notice(" .init : 0x%p" " - 0x%p" " (%6ld KB)\n", +- MLK_ROUNDUP(__init_begin, __init_end)); +- pr_notice(" .data : 0x%p" " - 0x%p" " (%6ld KB)\n", +- MLK_ROUNDUP(_sdata, _edata)); +- pr_notice(" .bss : 0x%p" " - 0x%p" " (%6ld KB)\n", +- MLK_ROUNDUP(__bss_start, __bss_stop)); +- pr_notice(" fixed : 0x%16lx - 0x%16lx (%6ld KB)\n", +- MLK(FIXADDR_START, FIXADDR_TOP)); +- pr_notice(" PCI I/O : 0x%16lx - 0x%16lx (%6ld MB)\n", +- MLM(PCI_IO_START, PCI_IO_END)); +-#ifdef CONFIG_SPARSEMEM_VMEMMAP +- pr_notice(" vmemmap : 0x%16lx - 0x%16lx (%6ld GB maximum)\n", +- MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE)); +- pr_notice(" 0x%16lx - 0x%16lx (%6ld MB actual)\n", +- MLM((unsigned long)phys_to_page(memblock_start_of_DRAM()), +- (unsigned long)virt_to_page(high_memory))); +-#endif +- pr_notice(" memory : 0x%16lx - 0x%16lx (%6ld MB)\n", +- MLM(__phys_to_virt(memblock_start_of_DRAM()), +- (unsigned long)high_memory)); +- +-#undef MLK +-#undef MLM +-#undef MLK_ROUNDUP +- + /* + * Check boundaries twice: Some fundamental inconsistencies can be + * detected at build time already. +-- +2.17.1 + diff --git a/study/kernel/02-memory/00-code/layout/Makefile b/study/kernel/02-memory/00-code/layout/Makefile new file mode 100644 index 0000000..dea0865 --- /dev/null +++ b/study/kernel/02-memory/00-code/layout/Makefile @@ -0,0 +1,14 @@ + + +obj-m := layout.o + +KERNELDIR ?= /lib/modules/$(shell uname -r)/build + +PWD := $(shell pwd) + +all: + make -C $(KERNELDIR) M=$(PWD) modules + +clean: + make -C $(KERNELDIR) M=$(PWD) clean + diff --git a/study/kernel/02-memory/00-code/layout/layout.c b/study/kernel/02-memory/00-code/layout/layout.c new file mode 100644 index 0000000..bc38b4d --- /dev/null +++ b/study/kernel/02-memory/00-code/layout/layout.c @@ -0,0 +1,99 @@ +/***************************************************************** +文件名:mem.c +输入参数: +pid 接收待查询进程的PID +va 接收待查询的虚拟地址 +*****************************************************************/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +MODULE_LICENSE("GPL"); + +typedef unsigned long (*PFUNC)(void); + +#if 0 +unsigned long SYMS_FUN(char *name) +{ + PFUNC func = (PFUNC)kallsyms_lookup_name(name); + + //printk("0x%16lx\n", (unsigned long)func); + return (*func)(); +} +#endif +void show_layout(void) +{ +#define SYMS_VAL(name) ((unsigned long)kallsyms_lookup_name(name)) +#define SYMS_FUN(name) ((*((PFUNC)kallsyms_lookup_name(name)))()) +#define MLK(b, t) b, t, ((t) - (b)) >> 10 +#define MLM(b, t) b, t, ((t) - (b)) >> 20 +#define MLG(b, t) b, t, ((t) - (b)) >> 30 +#define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K) + + pr_notice("Virtual kernel memory layout:\n"); + pr_notice(" memory : 0x%16lx - 0x%16lx (%6ld MB)\n", + MLM((unsigned long)phys_to_virt(SYMS_FUN("memblock_start_of_DRAM")), + (unsigned long)high_memory)); +#ifdef CONFIG_KASAN + pr_notice(" kasan : 0x%16lx - 0x%16lx (%6ld GB)\n", + MLG(KASAN_SHADOW_START, KASAN_SHADOW_END)); +#endif + pr_notice(" modules : 0x%16lx - 0x%16lx (%6ld MB)\n", + MLM(MODULES_VADDR, MODULES_END)); + pr_notice(" vmalloc : 0x%16lx - 0x%16lx (%6ld GB)\n", + MLG(VMALLOC_START, VMALLOC_END)); + pr_notice(" kernel : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK(SYMS_VAL("_text"), SYMS_VAL("_end"))); + pr_notice(" .text : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK_ROUNDUP(SYMS_VAL("_text"), SYMS_VAL("_etext"))); + pr_notice(" .rodata : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK_ROUNDUP(SYMS_VAL("__start_rodata"), SYMS_VAL("__init_begin"))); + pr_notice(" .init : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK_ROUNDUP(SYMS_VAL("__init_begin"), SYMS_VAL("__init_end"))); + pr_notice(" .data : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK_ROUNDUP(SYMS_VAL("_sdata"), SYMS_VAL("_edata"))); + pr_notice(" .bss : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK_ROUNDUP(SYMS_VAL("__bss_start"), SYMS_VAL("__bss_stop"))); + pr_notice(" fixed : 0x%16lx - 0x%16lx (%6ld KB)\n", + MLK(FIXADDR_START, FIXADDR_TOP)); + pr_notice(" PCI I/O : 0x%16lx - 0x%16lx (%6ld MB)\n", + MLM(PCI_IO_START, PCI_IO_END)); +#ifdef CONFIG_SPARSEMEM_VMEMMAP + pr_notice(" vmemmap : 0x%16lx - 0x%16lx (%6ld GB maximum)\n", + MLG(VMEMMAP_START, VMEMMAP_START + VMEMMAP_SIZE)); + pr_notice(" 0x%16lx - 0x%16lx (%6ld MB actual)\n", + MLM((unsigned long)phys_to_page(SYMS_FUN("memblock_start_of_DRAM")), + (unsigned long)virt_to_page(high_memory))); +#endif + + pr_notice("PAGE_OFFSET : 0x%16lx\n", PAGE_OFFSET); + pr_notice("KIMAGE_VADDR: 0x%16lx\n", KIMAGE_VADDR); +#undef MLK +#undef MLM +#undef MLK_ROUNDUP +} + +static int __init show_layout_init(void) +{ + show_layout(); + + return 0; +} + +static void __exit show_layout_exit(void) +{ + printk(KERN_INFO"Goodbye!\n"); +} + +module_init(show_layout_init); +module_exit(show_layout_exit);