diff --git a/study/debug/tools/perf/kernel_modules/Makefile b/study/debug/tools/perf/kernel_modules/Makefile new file mode 100644 index 0000000..0f6c6e4 --- /dev/null +++ b/study/debug/tools/perf/kernel_modules/Makefile @@ -0,0 +1,14 @@ + + +obj-m := test_kthread_run.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/debug/tools/perf/kernel_modules/test_kthread_run.c b/study/debug/tools/perf/kernel_modules/test_kthread_run.c new file mode 100644 index 0000000..9af5fd7 --- /dev/null +++ b/study/debug/tools/perf/kernel_modules/test_kthread_run.c @@ -0,0 +1,59 @@ +#include +#include + +#include + +#include // error: implicit declaration of function ‘msleep’ + + +static struct task_struct *ptask; + +static int thread_function(void *data) +{ + int time_count = 0; + do + { + printk(KERN_INFO "thread_function: %d times", ++time_count); + msleep(1000); + }while(!kthread_should_stop() + && time_count<=30); + + return time_count; +} + +static int test_kthread_run_init(void) +{ + int cpu = 1; + + printk(KERN_INFO "test_kthread_run, world!\n"); + + ptask = kthread_run(thread_function, NULL, "mythread%d", cpu); + kthread_bind(ptask, cpu); + + if (IS_ERR(ptask)) + { + printk(KERN_INFO "create kthread failed!\n"); + } + else + { + printk(KERN_INFO "create ktrhead ok!\n"); + } + + return 0; +} + +static void test_kthread_run_exit(void) +{ + printk(KERN_INFO "test_kthread_run, exit!\n"); + + if (!IS_ERR(ptask)) + { + int ret = kthread_stop(ptask); + printk(KERN_INFO "thread function has run %ds\n", ret); + } +} + +module_exit(test_kthread_run_exit); +module_init(test_kthread_run_init); +MODULE_LICENSE("Dual BSD/GPL"); + diff --git a/study/kernel/02-memory/00-code/layout/layout.c b/study/kernel/02-memory/00-code/layout/layout.c index bc38b4d..32e3d2e 100644 --- a/study/kernel/02-memory/00-code/layout/layout.c +++ b/study/kernel/02-memory/00-code/layout/layout.c @@ -16,7 +16,7 @@ va 接收待查询的虚拟地址 #include #include #include - +#include MODULE_LICENSE("GPL"); @@ -39,11 +39,8 @@ void show_layout(void) #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) - +#if 0 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)); @@ -70,14 +67,17 @@ void show_layout(void) 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)); + MLG(SYMS_VAL("vmemmap"), SYMS_VAL("vmemmap") + 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(" memory : 0x%16lx - 0x%16lx (%6ld MB)\n", + MLM((unsigned long)phys_to_virt(SYMS_FUN("memblock_start_of_DRAM")), + (unsigned long)high_memory)); +#endif + //pr_notice("KIMAGE_VADDR: 0x%16lx\n", KIMAGE_VADDR); 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 diff --git a/study/kernel/13-debug/0001-dump_backtrace/arm64/main b/study/kernel/13-debug/0001-dump_backtrace/arm64/main new file mode 100755 index 0000000..df1e287 Binary files /dev/null and b/study/kernel/13-debug/0001-dump_backtrace/arm64/main differ diff --git a/study/kernel/13-debug/0001-dump_backtrace/arm64/main.S b/study/kernel/13-debug/0001-dump_backtrace/arm64/main.S new file mode 100644 index 0000000..e69de29 diff --git a/study/kernel/13-debug/0001-dump_backtrace/arm64/main.c b/study/kernel/13-debug/0001-dump_backtrace/arm64/main.c new file mode 100644 index 0000000..a88fec9 --- /dev/null +++ b/study/kernel/13-debug/0001-dump_backtrace/arm64/main.c @@ -0,0 +1,35 @@ +#include + +int func3(int a, int b) +{ + int c = a + b; + printf("c = %d\n", c); + return a + b; +} + +int func2(int a) +{ + int b = 20; + + b = func3(a, b); + printf("b = %d\n", b); + + return b; +} + +int func1(void) +{ + int a; + + a = func2(10); + printf("a = %d\n", a); + + return a; +} + +int main(int argc, const char *argv[]) +{ + func1(); + + return 0; +}