From 88bb106201e0953488859fbd2cd1c2bb6645b390 Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Tue, 30 Jun 2020 16:11:40 +0800 Subject: [PATCH] update --- .../debug/tools/perf/kernel_modules/Makefile | 14 +++++ .../perf/kernel_modules/test_kthread_run.c | 59 ++++++++++++++++++ .../kernel/02-memory/00-code/layout/layout.c | 16 ++--- .../13-debug/0001-dump_backtrace/arm64/main | Bin 0 -> 14264 bytes .../13-debug/0001-dump_backtrace/arm64/main.S | 0 .../13-debug/0001-dump_backtrace/arm64/main.c | 35 +++++++++++ 6 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 study/debug/tools/perf/kernel_modules/Makefile create mode 100644 study/debug/tools/perf/kernel_modules/test_kthread_run.c create mode 100755 study/kernel/13-debug/0001-dump_backtrace/arm64/main create mode 100644 study/kernel/13-debug/0001-dump_backtrace/arm64/main.S create mode 100644 study/kernel/13-debug/0001-dump_backtrace/arm64/main.c 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 0000000000000000000000000000000000000000..df1e28759f5076dcb21cf444f55a51e95d58a11c GIT binary patch literal 14264 zcmeHOdvH|OdH?RcD``RKg?I+ARtCq!_3ldIC1M^c35?|d8_Ohi+B8>JyI0bd)vmg` z;t@Kwk~S%IrWrKgNAoav>P&+(lhT?tp>9a4K-n1I#a zckcQ2ad$UPJmc{n;f(J6&i6du`Odlbob%n)!`pY>X&MGeG3jf>*l-}GNZy_3>k)-& zS}z4DMyqHg)q_%pE2cOMy_&$Y+O)u+ma_l@TsJkrjCmCemw6Zo6b~74d&LsdRS#Zc zhfoBP>Wz12)|Dp32JBN6fxX&~nE0dh7-hX+v!@qq_Vfh4s2vk1{o}szwOrd#8eCkW}fB(5Ba!+<$J2>;&*4IAs zFaN+i9xra5?MOdSEfkiiRhED;zY6m<&_Y${ji6PNZ>vEk^gqu1T~E$PCYz_pY%-l6 zCEI3(oy$AfyglJ0)1Zt^WYU^q(~g~k{R4JSq{f#^v#u$1t2GZG;4u z3oU&L8VH0Q5`|N%M>j#|I7tbX&`af8OX#KXTT((VjrH|Ie{=G>MKgGek6l0Xw_iSM z+2^>8%b*`2I@0#mj;pN~x6Xvjj&mI$>m|9sJJn{!uC|(_cnYrvesc*v7kGaO-VA)i z!&lJs_in=VLyMmIcPn=F;!2u%4St*@dhiFh0tP+!pR==%{|_$qr?o!DfVwn1rQtMu zq{}<5#)wY8Iy<{q{0IFMou!#i0CoayCHm0`qCJS=k6zLV(N zo!17Ac3$iI46dV3K^}2F(w`c*+K+ln>s~+f*D8LmH`3LkXlwZS*hbh|cL9EfXnJV) zdD{4TW9;hnL(i+&z6Kw!ANnh$bE1RJJhcp0N9@drWwA3MqQ(18udMPq0F z6n0Aa*AKm*?3CJ=Hm8SJkL6Fm)+Oi^?40oIoKUpbnWDbucg&a``Z4q1i)!~Q1ScH9rNK2Kc2gC(OQBzvG|z_)}q^T^)xd~ThARg z+kezKJGT0`uYR1r8&| zJgg=7+`>i9GK)Qw4(s-XKB;l>TiTnWQK1%VoX}%`EYe3GY zZ`(j1=84pTJ_9=j20j>Cy)&71vY8N&(1ys`a8FnF#z5YiwDefwhDk41ZO!^A$GJ-`O*LLDE>1GU*$N#d9gUk<^|MEP@{I70} z$n)=P!JeFBey60eqw(AnrvyTM_lH34jr5Q)or8M; z;=l%tDDLxq43F=?^{YTkBlvk#O|yYd?`EJuB@Ke=F*J?(FDhQ$E#O&!I-Jlcu!H4- zbzfzU5quh;?snXaCHH_a$NHuY9DR=EXbAV9@d@0yREbJFn@_$6LHSF#9H0bz3L3wH zi9PSXK;WSGC(d<<=&3Joh@&m!{s4C!)5e8x%2+)NO5;ah&$vxhzlIi!+f{XfsS&Q$y^I@Q z+}10A^BT{wT-SF{Zw#=ZZmu@H!Bkt0_5qN%7++}aWm^N%^=ULeZ*W47M9EU*8Ff4J~kh8w)NpZe7acId!V>xkYyxOa0h{ zt;f8DbSpqpgtjjAJiK)&w;o&act7aP5u*y7ZMW1F{4vq{)}moX+Zqv_`3)>MADp1q zb>_7H-X{(4h!#BZNu(N<%=9A~3qhndqZ{Ij*pp35)6JeYRU`FbP)+K_Jz)H_xrq!E z7Q|oWlp&JWG|SK&Qx-a_+vr@mvU8=?6zc4}b)^}Eot2OoK?iV| z>Jg|AtLA`yBkJ~LL9wRGn@DpSa7)%l>pNr=sj^C1{|u@U#SLwL9UfG){Z7^) zTdi18Z{3O}++049%tjCNuD92(4Ns-_rZfA~I;TCBo>EEfv3OjTz!Hwyu|$*Ucxo!) z61l0-a4}-Ans7%W<6cH~jwvrD>jg5b`J1ft-PZh&l@6(T$Z83#ieTxoI{7wOsC8_y zt+|GZ!pDB$5#ZN`9s$`JSgUnR5q{YoShs81JhXtl=d3}212@g6< zR63U&OS_2>FUZ&yWb@TX%;demKzH}Mvq21nC-}R?W+ywbuQ%)fO(paBlpA)_iKLTe z_DFJbYI6PBPj5Q#DGWPQNZ4f7T1=5hC?niDSrtB5?M3W0c5DjilU)7R zr8=z$SP|gYP=zgdb4_X~L+z3^;sFu4OH;A99hdq?3udG_B=_u|AhHxy>_A1Dbw8$5|3bkANPc%J=Oc z=&dF5O`9QG(|djM_5np-RPlb^0Q!8Ye11Px!_IFgd1UIaLq)Md?P<{4 z%*yBMPiokIf#s?AehX+z-&68UbVA21rs?N3UFPAmroV}C=eYUf^I0t~X%8)q^}f3N zWli_5ch|I?R{b1>v?2ce75CRK-vm0|0u|+=vQzoKeMhIc^6W*;tc6b4mt-s6Ht8P4 zNjIFvi8PX-RqyPm`7S!=rL^GL0g7fO^U+*pG{4`;;!{H=lfr2=nT{e$!~NA?jUwIh zZ7J+U$*zpa2(*yCs$}p%D>{|Ss_c(SW@RXjbG^Oab@tk$>G#5iG{yz4KB=@SjlfN5i}_1l!ou8n&9O!_PCQy;C!uqmLl~oiU9e zClyi2&2Tb7k#Q$CPLagHG;Db=pQQ-P>~pjHF|`b_!NWH>hZS^fGL@%@>PIB+9zb1% zKa$O;C`a6JZ)$ilUi!zAkvdE{6UjK*$v_*oh%)J^BO(;R{G7lL&VfzLwv6heS|ASs#VWp8-nsbKDzefV2ZHWJ3@-d&j7#RK=OYkFY@4^=k06WADj1uNQs^jef + +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; +}