1、打印
关于打印的工具,主要是这 3 种:
1.1、printk()
1.2、pr_*()
pr_emerg(), pr_alert(), pr_crit(), pr_err(), pr_warning(), pr_notice(), pr_info(), pr_cont(), pr_debug()
1.3、dev_*()
dev_emerg(), dev_alert(), dev_crit(), dev_err(), dev_warn(), dev_notice(), dev_info(), dev_dbg()
内核打印可以参考以下文章:
Kernel-Debug-Series-Part4-dynamic-debug.pdf
2、内核启动初期打印——earlyprintk
1、配置内核的earlyprintk功能
CONFIG_EARLY_PRINTK
CONFIG_DEBUG_LL
2、修改启动参数
修改uboot传递的启动参数或者kernel内置的启动参数commandline
root=/dev/mmcblk0p2 rootwait rw earlyprintk console=ttyS0,115200
3、使用方法
early_printk("--------------\n");
3、内核调试通用手段
3.1 打印当前函数调用栈
方法一:
WARN_ON()
方法二:
#include <asm/ptrace.h>
dump_stack();
该方法一般用于理清内核上下文的堆栈信息,也可以在一些不合理的位置抛出警告,提示某种不合理逻辑发生。
3.2 内核异常触发
BUG()
BUG_ON()
其中BUG_ON是带条件的BUG(),只有当括号内的条件成立的时候,才抛出Oops。
#define BUG_ON(condition) \ do { \ if (unlikely(condition)) BUG(); \ } while(0)
4、kernel Panic信息分析
OOPS 中包含的重要信息,对所有体系结构的机器都是完全相同的:寄存器上下文和回溯线索(回溯线索显示了导致错误发生的函数调用链)
[ 12.888930] ------------[ cut here ]------------
[ 12.888958] WARNING: at fs/buffer.c:1160
[ 12.888963] Modules linked in:
[ 12.888971]
[ 12.888980] CPU: 4 PID: 442 Comm: main Not tainted 4.4.185 #117
[ 12.888986] Hardware name: Rockchip RK3399pro sigma avb board (DT)
[ 12.888993] task: ffffffc0d4298000 task.stack: ffffffc0d4294000
[ 12.889012] PC is at mark_buffer_dirty+0x2c/0x164
[ 12.889026] LR is at __ext4_handle_dirty_super+0x88/0x8c
[ 12.889031] pc : [<ffffff80081f1e6c>] lr : [<ffffff80082771dc>] pstate: 80400145
[ 12.889036] sp : ffffffc0d4297a80
[ 12.889040] x29: ffffffc0d4297a80 x28: 0000000000000000
[ 12.889049] x27: ffffffc0d4297b90 x26: ffffffc0cd507800
[ 12.889059] x25: ffffffc0d1e85368 x24: ffffffc0eb830800
[ 12.889068] x23: ffffffc0eb830000 x22: 000000000000018d
[ 12.889077] x21: ffffff8008d627c8 x20: 0000000000000001
[ 12.889086] x19: ffffffc0ebed7000 x18: 0000000070493f20
[ 12.889095] x17: 00000070623ac128 x16: ffffff80081bf958
[ 12.889104] x15: 0000000000000000 x14: 0000006fddf06de4
[ 12.889112] x13: 0000006fddf06d84 x12: 0000000000000038
[ 12.889121] x11: 0101010101010101 x10: ffff7f7fffffffff
[ 12.889129] x9 : ca87527edb8aa5b8 x8 : 7f7f7f7f7f7f7f7f
[ 12.889139] x7 : ff716e636d64752e x6 : ffffffc0ec3bb48f
[ 12.889148] x5 : 8000000000000000 x4 : 0000000000000000
[ 12.889156] x3 : ffffffc0eb830000 x2 : 000000000000007b
[ 12.889164] x1 : 0000000000000000 x0 : ffffff800963c569
[ 12.889175] \x0aPC: 0xffffff80081f1dec:
[ 12.889180] 1dec 97ff0771 35000255 f9400280 52800081 97ffe342 52800020 17ffffdf f9400260
[ 12.889210] 1e0c 37580040 d4210000 f9401a76 aa1603f5 aa1503e1 52800020 9406ec33 f94006b5
[ 12.889242] 1e2c eb1502df 54ffff61 17ffffde 52800000 17ffffd1 a9bd7bfd 910003fd a90153f3
[ 12.889270] 1e4c aa0003f3 f90013f5 f9400000 37000100 f000a240 9115a400 39400401 35000081
[ 12.889298] 1e6c d4210000 52800021 39000401 d503201f f9400260 37080460 aa1303e1 52800020
[ 12.889326] 1e8c 9406ec45 35000440 f9400a74 aa1403e0 97ff0d85 aa1403e1 aa0003f5 52800080
[ 12.889354] 1eac 9406ec3d 350003c0 aa1403e0 97fe5873 aa0003f3 b40000c0 aa0003e1 52800003
[ 12.889383] 1ecc aa1503e2 aa1403e0 97ffff70 aa1503e0 97ff0735 b40001d3 f9400260 52800081
[ 12.889412] \x0aLR: 0xffffff800827715c:
[ 12.889418] 715c a9025bf5 2a0103f6 a90153f3 aa0003f5 aa0203f4 aa0303e0 f9423061 f9403033
[ 12.889448] 717c 97ffb6e9 f13ffe9f 54000269 aa1303e1 aa1403e0 94006318 2a0003f3 34000120
[ 12.889476] 719c b0005762 913c2042 2a1303e4 aa1403e3 91026042 2a1603e1 aa1503e0 97fffdc6
[ 12.889505] 71bc 2a1303e0 a94153f3 a9425bf5 a8c37bfd d65f03c0 aa1303e0 52800013 97fdeb1a
[ 12.889533] 71dc 17fffff8 a9b97bfd 910003fd a90363f7 aa0003f7 a9025bf5 f0008d75 a90153f3
[ 12.889562] 71fc 912942a0 f90023f9 aa0103f8 f9400001 f90037a1 d2800001 f9400840 b4000900
[ 12.889591] 721c aa0203f4 b90063a0 29400442 d360fc00 d1014316 b9005ba2 11000421 7900bfa0
[ 12.889619] 723c 4b020021 aa1603e0 7900bba1 942acd9d b9400281 52800003 d2800002 aa1803e0
[ 12.889649] \x0aSP: 0xffffffc0d4297a00:
[ 12.889653] 7a00 0000018d 00000000 eb830000 ffffffc0 eb830800 ffffffc0 d1e85368 ffffffc0
[ 12.889684] 7a20 cd507800 ffffffc0 d4297b90 ffffffc0 00000000 00000000 d4297a80 ffffffc0
[ 12.889712] 7a40 082771dc ffffff80 d4297a80 ffffffc0 081f1e6c ffffff80 80400145 00000000
[ 12.889741] 7a60 d4297a80 ffffffc0 081d5158 ffffff80 00000000 00000080 dc8ba6b9 cb88537f
[ 12.889769] 7a80 d4297ab0 ffffffc0 082771dc ffffff80 00000000 00000000 00000001 00000000
[ 12.889798] 7aa0 08d627c8 ffffff80 d1e85368 ffffffc0 d4297ae0 ffffffc0 08241ee8 ffffff80
[ 12.889826] 7ac0 09426000 ffffff80 00000000 00000000 08d627c8 ffffff80 00000001 00000000
[ 12.889854] 7ae0 d4297ba0 ffffffc0 081be3a0 ffffff80 cd507800 ffffffc0 d1e85368 ffffffc0
[ 12.889884] \x0aX0: 0xffffff800963c4e9:
[ 12.889888] c4e8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.889917] c508 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.889945] c528 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.889973] c548 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890002] c568 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890031] c588 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890059] c5a8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890087] c5c8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890118] c5e8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890148] \x0aX3: 0xffffffc0eb82ff80:
[ 12.890153] ff80 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 12.890181] ffa0 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 12.890209] ffc0 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 12.890238] ffe0 ffffffff ffffffff ffffffff ffffffff fffbffff ffffffff ffffffff ffffffff
[ 12.890265] 0000 eb832800 ffffffc0 ec20a800 ffffffc0 0fc00001 0000000c 00001000 00000000
[ 12.890295] 0020 fffff000 00000fff 0945f3c0 ffffff80 08d64648 ffffff80 08d64778 ffffff80
[ 12.890326] 0040 08d647c0 ffffff80 08d64730 ffffff80 70000000 00000000 00000001 00000000
[ 12.890354] 0060 0000ef53 00000000 eca5e9c0 ffffffc0 00000000 00000000 eb830078 ffffffc0
[ 12.890384] \x0aX6: 0xffffffc0ec3bb40f:
[ 12.890389] b40c 0000e37d 0001f2b4 00000000 00000002 00000002 00008000 00008000 00007e00
[ 12.890417] b42c 62422eec 6241448e ffff0001 0000ef53 00000001 6241448d 00000000 00000000
[ 12.890445] b44c 00000001 00000000 0000000b 00000080 00000038 00000242 0000007b d17dc4cd
[ 12.890474] b46c 5640bb78 a4ffb085 69e3235d 646e6576 0000726f 00000000 00000000 6e65762f
[ 12.890502] b48c 00726f64 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890534] b4ac 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890561] b4cc 001f0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890589] b4ec 6930f83c 664ba1a7 2680e591 57560a4d 00000001 0000000c 00000000 6241448d
[ 12.890615] b50c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.890645] \x0aX16: 0xffffff80081bf8d8:
[ 12.890649] f8d8 f9400ea1 2a1603e2 aa1803e0 9400f8a7 aa1803e2 52800005 d2800004 52800023
[ 12.890676] f8f8 2a1603e1 aa1903e0 9400f78e aa1503e1 2a1703e0 94007410 17ffffcf 928002a0
[ 12.890703] f918 17ffffa6 a94153f3 a9425bf5 a94363f7 f94023f9 a8c87bfd d65f03c0 a9bf7bfd
[ 12.890729] f938 2a0203e3 320f0022 aa0003e1 910003fd 12800c60 97ffff5a a8c17bfd d65f03c0
[ 12.890764] f958 a9bf7bfd 320f0042 910003fd 97ffff54 a8c17bfd d65f03c0 a9bf7bfd 2a0103e2
[ 12.890791] f978 52804821 910003fd 97ffffed a8c17bfd d65f03c0 a9bf7bfd 52800340 910003fd
[ 12.890818] f998 97fba0b7 72001c1f 540000a0 940a778f d2800000 a8c17bfd d65f03c0 92800000
[ 12.890846] f9b8 17fffffd b6f80061 b9404403 36680143 eb02003f 5400010c f9403802 eb02003f
[ 12.890875] \x0aX19: 0xffffffc0ebed6f80:
[ 12.890879] 6f80 eb642980 ffffffc0 eb5ff500 ffffffc0 ebed6ca0 ffffffc0 ebed6ca0 ffffffc0
[ 12.890907] 6fa0 ebed6fa0 ffffffc0 ebed6fa0 ffffffc0 00000000 00000000 eb612b48 ffffffc0
[ 12.890936] 6fc0 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffbf ffffffff
[ 12.890965] 6fe0 ffffffff ffffffff ffffffff ffffffff ffffffff fffffbff ffffffff ffffffff
[ 12.890997] 7000 00000828 00000000 ebed7000 ffffffc0 c3b0eec0 ffffffbd 00000000 00000000
[ 12.891027] 7020 00001000 00000000 ec3bb000 ffffffc0 ebf14000 ffffffc0 081f293c ffffff80
[ 12.891055] 7040 00000000 00000000 ebed7048 ffffffc0 ebed7048 ffffffc0 00000000 00000000
[ 12.891084] 7060 00000001 00000000 00000029 00000000 ebed7068 ffffffc0 c3b0ef00 ffffffbd
[ 12.891114] \x0aX21: 0xffffff8008d62748:
[ 12.891119] 2748 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891147] 2768 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891175] 2788 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891203] 27a8 00000000 00000000 00000000 00000000 00000000 00000000 0d020202 00000058
[ 12.891233] 27c8 34747865 6c69665f 706f5f65 00006e65 00000000 00000000 00000000 00000000
[ 12.891260] 27e8 00000000 00000000 0824ed3c ffffff80 00000000 00000000 0816ea30 ffffff80
[ 12.891288] 2808 0824e91c ffffff80 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891318] 2828 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891346] \x0aX23: 0xffffffc0eb82ff80:
[ 12.891352] ff80 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 12.891380] ffa0 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 12.891411] ffc0 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
[ 12.891439] ffe0 ffffffff ffffffff ffffffff ffffffff fffbffff ffffffff ffffffff ffffffff
[ 12.891467] 0000 eb832800 ffffffc0 ec20a800 ffffffc0 0fc00001 0000000c 00001000 00000000
[ 12.891496] 0020 fffff000 00000fff 0945f3c0 ffffff80 08d64648 ffffff80 08d64778 ffffff80
[ 12.891525] 0040 08d647c0 ffffff80 08d64730 ffffff80 70000000 00000000 00000001 00000000
[ 12.891553] 0060 0000ef53 00000000 eca5e9c0 ffffffc0 00000000 00000000 eb830078 ffffffc0
[ 12.891582] \x0aX24: 0xffffffc0eb830780:
[ 12.891587] 0780 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891616] 07a0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891644] 07c0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891672] 07e0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891701] 0800 00000020 00000000 00000020 00000000 00008000 00000000 00008000 00000000
[ 12.891729] 0820 00007e00 00000000 000003f0 00000000 00000001 00000000 00000080 00000000
[ 12.891757] 0840 00000004 00000004 00000fce 00000000 00000001 00000000 0040c000 00000401
[ 12.891786] 0860 ebed7000 ffffffc0 ec3bb400 ffffffc0 ec676c00 ffffffc0 a8024010 00000002
[ 12.891814] \x0aX25: 0xffffffc0d1e852e8:
[ 12.891819] 52e8 d1e852e0 ffffffc0 00000000 00000000 00000000 00000000 d1e85300 ffffffc0
[ 12.891848] 5308 d1e85300 ffffffc0 00006340 00000000 00000000 00000000 d1e85320 ffffffc0
[ 12.891876] 5328 d1e85320 ffffffc0 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.891905] 5348 d1e85348 ffffffc0 d1e85348 ffffffc0 00000000 00000000 00000000 00000000
[ 12.891933] 5368 000581a4 00000000 00000000 00000000 ffffffff ffffffff ffffffff ffffffff
[ 12.891961] 5388 08d62840 ffffff80 eb830000 ffffffc0 d1e854c0 ffffffc0 cd7b0c30 ffffffc0
[ 12.891991] 53a8 000001c4 00000000 00000001 00000000 00006340 00000000 624142bb 00000000
[ 12.892019] 53c8 00000000 00000000 624142bb 00000000 00000000 00000000 624142bb 00000000
[ 12.892048] \x0aX26: 0xffffffc0cd507780:
[ 12.892052] 7780 00000000 00000000 00000000 00000000 00000000 00000000 e9e9acc0 ffffffc0
[ 12.892081] 77a0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.892109] 77c0 00000000 00000000 cd499d90 ffffffc0 00000000 00000000 cd5077d8 ffffffc0
[ 12.892139] 77e0 cd5077d8 ffffffc0 cd5077e8 ffffffc0 cd5077e8 ffffffc0 cd5f7a68 ffffffc0
[ 12.892172] 7800 00000000 00000000 00000000 00000000 edbf81e0 ffffffc0 eb574780 ffffffc0
[ 12.892201] 7820 d1e85368 ffffffc0 08d62940 ffffff80 00000000 00000000 00000001 00000000
[ 12.892232] 7840 00020000 0000801d 00000001 00000000 cd507850 ffffffc0 cd507850 ffffffc0
[ 12.892265] 7860 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.892298] \x0aX27: 0xffffffc0d4297b10:
[ 12.892303] 7b10 08241db0 ffffff80 cd507810 ffffffc0 0000011d 00000000 eb650480 ffffffc0
[ 12.892335] 7b30 08d42000 ffffff80 cd507810 00000000 00000000 00000000 edbf81e0 ffffffc0
[ 12.892368] 7b50 eca5e9c0 ffffffc0 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.892398] 7b70 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 12.892428] 7b90 6e65762f 00726f64 dc8ba6b9 cb88537f d4297bf0 ffffffc0 081bf46c ffffff80
[ 12.892459] 7bb0 cd507800 ffffffc0 d4297d58 ffffffc0 e90ca9c0 ffffffc0 d4297e90 ffffffc0
[ 12.892489] 7bd0 00000000 00000000 00000015 00000000 0000011d 00000000 d4297e90 ffffffc0
[ 12.892519] 7bf0 d4297c20 ffffffc0 081ce25c ffffff80 d4297d58 ffffffc0 cd507800 ffffffc0
[ 12.892548] \x0aX29: 0xffffffc0d4297a00:
[ 12.892553] 7a00 0000018d 00000000 eb830000 ffffffc0 eb830800 ffffffc0 d1e85368 ffffffc0
[ 12.892581] 7a20 cd507800 ffffffc0 d4297b90 ffffffc0 00000000 00000000 d4297a80 ffffffc0
[ 12.892609] 7a40 082771dc ffffff80 d4297a80 ffffffc0 081f1e6c ffffff80 80400145 00000000
[ 12.892638] 7a60 d4297a80 ffffffc0 081d5158 ffffff80 00000000 00000080 dc8ba6b9 cb88537f
[ 12.892666] 7a80 d4297ab0 ffffffc0 082771dc ffffff80 00000000 00000000 00000001 00000000
[ 12.892695] 7aa0 08d627c8 ffffff80 d1e85368 ffffffc0 d4297ae0 ffffffc0 08241ee8 ffffff80
[ 12.892726] 7ac0 09426000 ffffff80 00000000 00000000 08d627c8 ffffff80 00000001 00000000
[ 12.892754] 7ae0 d4297ba0 ffffffc0 081be3a0 ffffff80 cd507800 ffffffc0 d1e85368 ffffffc0
[ 12.892783]
[ 12.892788] ---[ end trace 4db48db2783ce54d ]---
[ 12.892794] Call trace:
[ 12.892800] Exception stack(0xffffffc0d4297890 to 0xffffffc0d42979c0)
[ 12.892806] 7880: ffffffc0ebed7000 0000008000000000
[ 12.892813] 78a0: 0000000001ab5000 ffffff80081f1e6c 0000000080400145 ffffffc0d4297a00
[ 12.892820] 78c0: ffffff8009186017 ffffffc0d4297910 ffffff8008356e84 ffffffc0d4297910
[ 12.892828] 78e0: ffffffc0d4297910 ffffff80083507c4 ffffffc0d42979d0 ffffff8009718738
[ 12.892834] 7900: ffffffc0ebb80380 ffffff8009426000 ffffffc0d4297970 ffffff8008356e84
[ 12.892841] 7920: ffffffc0d4297970 ffffff8008356dc0 0000000000000000 ffffffc0cd7a2bc0
[ 12.892847] 7940: ffffff8009718000 cb88537fdc8ba6b9 ffffff800963c569 0000000000000000
[ 12.892854] 7960: 000000000000007b ffffffc0eb830000 0000000000000000 8000000000000000
[ 12.892860] 7980: ffffffc0ec3bb48f ff716e636d64752e 7f7f7f7f7f7f7f7f ca87527edb8aa5b8
[ 12.892867] 79a0: ffff7f7fffffffff 0101010101010101 0000000000000038 0000006fddf06d84
[ 12.892873] [<ffffff80081f1e6c>] mark_buffer_dirty+0x2c/0x164
[ 12.892880] [<ffffff80082771dc>] __ext4_handle_dirty_super+0x88/0x8c
[ 12.892888] [<ffffff8008241ee8>] ext4_file_open+0x138/0x194
[ 12.892899] [<ffffff80081be3a0>] do_dentry_open+0x284/0x2e0
[ 12.892904] [<ffffff80081bf46c>] vfs_open+0x78/0x7c
[ 12.892912] [<ffffff80081ce25c>] path_openat+0xc14/0xddc
[ 12.892917] [<ffffff80081cf858>] do_filp_open+0x4c/0xb0
[ 12.892922] [<ffffff80081bf834>] do_sys_open+0x180/0x280
[ 12.892927] [<ffffff80081bf968>] SyS_openat+0x10/0x18
[ 12.892934] [<ffffff80080832f0>] el0_svc_naked+0x24/0x28
关键信息:
PC is at mark_buffer_dirty+0x2c/0x164
PC:ffffff80081f1e6c
5、Pstore
用途:
如果发生 Kernel panic 时,由于没有连接串口终端,那么这一次的内核异常崩溃信息就丢失了。pstore通过管理一块“非易失性的存储空间”,如不断电的RAM或外部存储,当系统异常时,将log信息写到pstore管理的存储空间,直到下一次系统正常时,在将log读出来,以文件形式提供给用户使用
内核配置
内核配置:
CONFIG_PSTORE=y //使用pstore文件系统功能
CONFIG_PSTORE_CONSOLE=y //内核控制台日志信息
CONFIG_PSTORE_PMSG=y //记录用户空间日志信息(类似于logcat)
CONFIG_PSTORE_RAM=y //内核崩溃或者错误日志
设备树配置:
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
ramoops_mem@90008000 {
compatible = "ramoops_mem";
reg = <0x90008000 0x100000>;
record-size = <0x0 0x20000>;
console-size = <0x0 0x20000>;
ftrace-size = <0x0 0x20000>;
pmsg-size = <0x0 0x20000>;
};
};
ramoops {
memory-region = <&reserved-memory>;
status = "okay";
};
内核驱动代码:
kernel/fs/pstore
6、devmem2
6.1用途
调试驱动时,通过devmem2工具可以查看CPU,控制器的寄存器值,该工具通过读写/dev/mem文件节点实现应用层读写IO内存和物理内存
6.2用法
devmem2 { address } [ type [ data ] ] address : 物理地址,如果是要修改该地址的数据,需要填入下面的参数;如果只是读取,省略即可 type : 要访问的数据类型 : [b]byte, [h]halfword, [w]word data : 想要写入的数据
例子: devmem2 0xb0400000 w 0x12345678
往0xb0400000地址写入int型数据0x12345678
注意:该工具一次只能读/写1个寄存器
官方源码:http://sources.buildroot.net/devmem2.c
7、GDB与LLDB
7.1GDB使用
7.1.1内核配置:
CONFIG_KGDB
CONFIG_KGDB_SERIAL_CONSOLE
CONFIG_KGDB_KDB
7.1.2启动参数:
console=ttyS0,115200 kgdboc=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 oops=panic panic=0
7.1.3、让内核进入 debug 模式:
$ echo g > /proc/sysrq-trigger
[ 1958.025927] sysrq: SysRq : DEBUG
[ 1958.029191] KGDB: Entering KGDB
7.1.4、让 PC 机连接板子
登录后复制
$ arm-linux-gdb vmlinux
(gdb) set serial baud 115200
(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0
0xc02c3540 in kgdb_breakpoint ()
7.2 LLDB
官方文档:https://lldb.llvm.org/use/tutorial.html
8、ftrace
trace的核心思想是跟踪记录;ftrace即linux kernel中实现的一套trace机制,可以记录各个function、event等处理的时长和调用顺序;帮助开发人员了解 Linux 内核的运行时行为,以便进行故障调试或性能分析。最早 Ftrace 是一个 function tracer,仅能够记录内核的函数调用流程。如今 ftrace 已经成为一个 framework,采用 plugin 的方式支持开发人员添加更多种类的 trace 功能。
基于ftrace,Android拓展为systrace功能记录系统主要事件的处理path(alios 也有类似的atrace);
主要用途:
-
学习系统功能模块的调用path跟踪;
-
系统各个阶段的耗时情况跟踪优化;
-
对display模块中抖动、丢帧问题排查;
官方文档:
内核: https://www.kernel.org/doc/Documentation/trace/ftrace.txt
Android: android:https://source.android.com/devices/tech/debug/ftrace#dftrace
配置使能
CONFIG_IRQSOFF_TRACER=y
CONFIG_PREEMPTIRQ_EVENTS=y
CONFIG_PREEMPT_TRACER=y
CONFIG_SCHED_TRACER=y
CONFIG_HWLAT_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_PROFILE_ALL_BRANCHES=y
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACER=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_DEBUG_FS=y #ftrace 通过 debugfs 向用户态提供了访问接口
激活编译选项 -pg
ifdef CONFIG_FUNCTION_TRACER
ORIG_CFLAGS := $(KBUILD_CFLAGS)
KBUILD_CFLAGS = $(subst -pg,,$(ORIG_CFLAGS))
...
endif
...
用法:
确认是否可以进行ftrace
$ mount -t tracefs none /sys/kernel/tracing
$ cd /sys/kernel/tracing/
$ cat available_tracers
hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop
内核ftrace使用方法:
#!/bin/sh
dir=/sys/kernel/debug/tracing
sysctl kernel.ftrace_enabled=1
echo function_graph > ${dir}/current_tracer
echo 1 > ${dir}/tracing_on
sleep 1
echo 0 > ${dir}/tracing_on
less ${dir}/trace
trace:抓取到的文件,可以load到解析工具上作为可视化解析
tracing_on:打开关闭trace的开关echo 0 关闭 echo 1打开;
current_tracer:查看当前抓取哪些信息
available_tracers:支持的tracer
available_events:支持的events
set_ftrace_pid:配置需要监测的pid
注意事项:
1、ftrace一般在共存模式的时候才使能,userdebug和user模式下会去除ftrace功能;
9、Kdump+Crash
kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。
kdump 需要两个不同目的的内核,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的 ramdisk 一起组建一个微环境,用以对生产内核下的内存进行收集和转存。