[ 18.281609] <0>-(0)[1:init][name:traps&]Call trace:
[ 18.282223] <0>-(0)[1:init][<ffffffc00008a2c0>] dump_backtrace+0x0/0x190
[ 18.283054] <0>-(0)[1:init][<ffffffc00008a574>] show_stack+0x14/0x1c
[ 18.283847] <0>-(0)[1:init][<ffffffc000c1f118>] dump_stack+0xbc/0xf8
[ 18.284638] <0>-(0)[1:init][<ffffffc00090bf88>] arch_reset+0x6c/0x1a8
[ 18.285439] <0>-(0)[1:init][<ffffffc00090c120>] mtk_arch_reset_handle+0x5c/0xf4
[ 18.286351] <0>-(0)[1:init][<ffffffc0000c5628>] notifier_call_chain+0x88/0x2d4
[ 18.287251] <0>-(0)[1:init][<ffffffc0000c5a88>] atomic_notifier_call_chain+0x64/0x94
[ 18.288217] <0>-(0)[1:init][<ffffffc0000c7048>] do_kernel_restart+0x24/0x2c
[ 18.289084] <0>-(0)[1:init][<ffffffc000086548>] machine_restart+0x90/0xbc
[ 18.289930] <0>-(0)[1:init][<ffffffc0000c7228>] kernel_restart+0x90/0x128
[ 18.290776] <0>-(0)[1:init][<ffffffc0000c76b8>] SyS_reboot+0x1cc/0x214
[trunk-n0.tk]$cd ./prebuilts/gcc/linux-x86/
[linux-x86]$find -name "*-gdb"
./aarch64/cit-aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb
./arm/arm-eabi-4.8/bin/arm-eabi-gdb
./arm/cit-arm-eabi-4.8/bin/arm-eabi-gdb
./arm/cit-arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gdb
./arm/gcc-arm-none-eabi-4_7-2012q4/bin/arm-none-eabi-gdb
./arm/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-gdb
/trunk-n0.tk
2,开GDB,加载vmlinux
[trunk-n0.tk]$./prebuilts/gcc/linux-x86/aarch64/cit-aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb ./out/target/product/tb8163p3_64/obj/KERNEL_OBJ/vmlinux
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=aarch64-elf-linux".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>...
Reading symbols from /trunk-n0.tk/out/target/product/tb8163p3_64/obj/KERNEL_OBJ/vmlinux...done.
(gdb)
3,查看地址对应的函数信息
(gdb) list *(0xffffffc0000c76b8)
0xffffffc0000c76b8 is in SyS_reboot (/trunk-n0.tk/kernel-3.18/kernel/reboot.c:346).
341 ret = -EFAULT;
342 break;
343 }
344 buffer[sizeof(buffer) - 1] = '\0';
345
346 kernel_restart(buffer);
347 break;
348
349 #ifdef CONFIG_KEXEC
350 case LINUX_REBOOT_CMD_KEXEC:
[ 18.282223] <0>-(0)[1:init][<ffffffc00008a2c0>] dump_backtrace+0x0/0x190
[ 18.283054] <0>-(0)[1:init][<ffffffc00008a574>] show_stack+0x14/0x1c
[ 18.283847] <0>-(0)[1:init][<ffffffc000c1f118>] dump_stack+0xbc/0xf8
[ 18.284638] <0>-(0)[1:init][<ffffffc00090bf88>] arch_reset+0x6c/0x1a8
[ 18.285439] <0>-(0)[1:init][<ffffffc00090c120>] mtk_arch_reset_handle+0x5c/0xf4
[ 18.286351] <0>-(0)[1:init][<ffffffc0000c5628>] notifier_call_chain+0x88/0x2d4
[ 18.287251] <0>-(0)[1:init][<ffffffc0000c5a88>] atomic_notifier_call_chain+0x64/0x94
[ 18.288217] <0>-(0)[1:init][<ffffffc0000c7048>] do_kernel_restart+0x24/0x2c
[ 18.289084] <0>-(0)[1:init][<ffffffc000086548>] machine_restart+0x90/0xbc
[ 18.289930] <0>-(0)[1:init][<ffffffc0000c7228>] kernel_restart+0x90/0x128
[ 18.290776] <0>-(0)[1:init][<ffffffc0000c76b8>] SyS_reboot+0x1cc/0x214
以上方reboot的log为例,用gdb 和 vmlinux 查看ffffffc0000c76b8对应的函数。
软件版本Android N0,kernel-3.18,平台mt8163
源码根目录是trunk-n0.tk
[trunk-n0.tk]$cd ./prebuilts/gcc/linux-x86/
[linux-x86]$find -name "*-gdb"
./aarch64/cit-aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb
./arm/arm-eabi-4.8/bin/arm-eabi-gdb
./arm/cit-arm-eabi-4.8/bin/arm-eabi-gdb
./arm/cit-arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gdb
./arm/gcc-arm-none-eabi-4_7-2012q4/bin/arm-none-eabi-gdb
./arm/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-gdb
平台是64bit,采用aarch64。回到根目录
[linux-x86]$cd -/trunk-n0.tk
2,开GDB,加载vmlinux
[trunk-n0.tk]$./prebuilts/gcc/linux-x86/aarch64/cit-aarch64-linux-android-4.9/bin/aarch64-linux-android-gdb ./out/target/product/tb8163p3_64/obj/KERNEL_OBJ/vmlinux
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=aarch64-elf-linux".
For bug reporting instructions, please see:
<http://source.android.com/source/report-bugs.html>...
Reading symbols from /trunk-n0.tk/out/target/product/tb8163p3_64/obj/KERNEL_OBJ/vmlinux...done.
(gdb)
3,查看地址对应的函数信息
(gdb) list *(0xffffffc0000c76b8)
0xffffffc0000c76b8 is in SyS_reboot (/trunk-n0.tk/kernel-3.18/kernel/reboot.c:346).
341 ret = -EFAULT;
342 break;
343 }
344 buffer[sizeof(buffer) - 1] = '\0';
345
346 kernel_restart(buffer);
347 break;
348
349 #ifdef CONFIG_KEXEC
350 case LINUX_REBOOT_CMD_KEXEC:

本文详细介绍了如何使用GDB工具在Android N0版本和kernel-3.18环境下,通过加载vmlinux文件进行地址定位、函数查找和调试流程解析的过程,为开发者提供了一套完整的调试方案。
1843

被折叠的 条评论
为什么被折叠?



