Trace32에서 제공하는 유용한 명령어를 소개 좀 해볼께요.
특정 변수 이름이 잘 기어나지 않을 때 아래 변수를 입력하면 해당 심볼로 시작하는 정보를 출력해줘요.
y.b slub*
symbol___________________|type_____________________|address__________________________________|
slub_max_order |(static int) | D:FFFFFF9F9BB2E500--FFFFFF9F9BB2E503
slub_min_objects |(static int) | D:FFFFFF9F9BE0C694--FFFFFF9F9BE0C697
slub_min_order |(static int) | D:FFFFFF9F9BE0C690--FFFFFF9F9BE0C693
y.b cpu_up*
symbol________________________________|type_____________________|address__________________________________|
cpu_up |(int ()) | P:FFFFFF9F996A7678--FFFFFF9F996A77CB
_cpu_up |(static int ()) | P:FFFFFF9F996A7448--FFFFFF9F996A7677
cpu_upmigrate_discourage_read_u64 |(u64 ()) | P:FFFFFF9F996FD558--FFFFFF9F996FD587
cpu_upmigrate_discourage_write_u64 |(int ()) | P:FFFFFF9F996FD588--FFFFFF9F996FD5FB
아래 명령어로 섹션 정보를 알려줘요.
y.l.section
__________________address________________|path\section___________________________|acc|init|physical
P:FFFFFF9F99680000--FFFFFF9F9968003F|\\vmlinux\.head.text |R-X|L- |
P:FFFFFF9F99680800--FFFFFF9F9A834FE7|\\vmlinux\.text |R-X|L- |
D:FFFFFF9F9A840000--FFFFFF9F9B0976C7|\\vmlinux\.rodata |R--|L- |
D:FFFFFF9F9B0976C8--FFFFFF9F9B09770F|\\vmlinux\.eh_frame |R--|L- |
D:FFFFFF9F9B097710--FFFFFF9F9B0A4317|\\vmlinux\__bug_table |R--|L- |
D:FFFFFF9F9B0A4318--FFFFFF9F9B0A6627|\\vmlinux\.pci_fixup |R--|L- |
D:FFFFFF9F9B0A6628--FFFFFF9F9B0A666F|\\vmlinux\.builtin_fw |R--|L- |
D:FFFFFF9F9B0A6670--FFFFFF9F9B0BEA2F|\\vmlinux\__ksymtab |R--|L- |
D:FFFFFF9F9B0BEA30--FFFFFF9F9B0CE9EF|\\vmlinux\__ksymtab_gpl |R--|L- |
D:FFFFFF9F9B0CE9F0--FFFFFF9F9B0DABCF|\\vmlinux\__kcrctab |R--|L- |
D:FFFFFF9F9B0DABD0--FFFFFF9F9B0E2BAF|\\vmlinux\__kcrctab_gpl |R--|L- |
D:FFFFFF9F9B0E2BB0--FFFFFF9F9B114ABF|\\vmlinux\__ksymtab_strings |R--|L- |
D:FFFFFF9F9B114AC0--FFFFFF9F9B11B18F|\\vmlinux\__param |R--|L- |
D:FFFFFF9F9B11B190--FFFFFF9F9B11BFFF|\\vmlinux\__modver |R--|L- |
D:FFFFFF9F9B11C000--FFFFFF9F9B1203DF|\\vmlinux\__ex_table |R--|L- |
D:FFFFFF9F9B1203E0--FFFFFF9F9B120403|\\vmlinux\.notes |R--|L- |
P:FFFFFF9F9B130000--FFFFFF9F9B19B8B7|\\vmlinux\.init.text |R-X|L- |
P:FFFFFF9F9B19B8B8--FFFFFF9F9B1A3C7B|\\vmlinux\.exit.text |R-X|L- |
D:FFFFFF9F9B1A3D00--FFFFFF9F9B22610F|\\vmlinux\.init.data |RW-|L- |
D:FFFFFF9F9B227000--FFFFFF9F9B232BBF|\\vmlinux\.data..percpu |RW-|L- |
D:FFFFFF9F9B232BC0--FFFFFF9F9B242CE7|\\vmlinux\.altinstructions |R--|L- |
P:FFFFFF9F9B242CE8--FFFFFF9F9B248377|\\vmlinux\.altinstr_replacement |R-X|L- |
D:FFFFFF9F9B248378--FFFFFF9F9BADB0E7|\\vmlinux\.rela |R--|L- |
D:FFFFFF9F9BAE0000--FFFFFF9F9BD765B7|\\vmlinux\.data |RW-|L- |
D:FFFFFF9F9BD765B8--FFFFFF9F9BD765CF|\\vmlinux\.got.plt |RW-|L- |
D:FFFFFF9F9BD765D0--FFFFFF9F9BD76697|\\vmlinux\__clk_of_table_end |RW-|L- |
D:FFFFFF9F9BD77000--FFFFFF9F9C19D967|\\vmlinux\.bss |RW-|-- |.
특정 변수 상세 정보 파악도 가능하죠. 뭐 예를 들어 contig_page_data 변수 타입을 보고 싶으면요.
v.info contig_page_data
variable
\\vmlinux\Global\contig_page_data
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
D:FFFFFF9F9BD5AB00--FFFFFF9F9BD5C3FF global static
type
(struct pglist_data) struct(6400 bytes, [0] struct zone [3] node_zones,
[6144] struct zonelist [1] node_zonelists,
[6208] int nr_zones,
[6216] long unsigned int node_start_pfn,
[6224] long unsigned int node_present_pages,
[6232] long unsigned int node_spanned_pages,
[6240] int node_id,
[6248] wait_queue_head_t kswapd_wait,
[6272] wait_queue_head_t pfmemalloc_wait,
[6296] struct task_struct * kswapd,
[6304] int kswapd_max_order,
[6308] enum zone_type classzone_idx,
[6312] int kcompactd_max_order,
[6316] enum zone_type kcompactd_classzone_idx,
[6320] wait_queue_head_t kcompactd_wait,
[6344] struct task_struct * kcompactd)
Search 기능도 있는데요.
아래 명령어로 0xFFFFFF9F9BD5AB00--0xFFFFFF9F9BD5AC80 메모리 구간에 0xFFFFFFBE53E953A0 값이 있는지 찾아줘요.
d.f 0xFFFFFF9F9BD5AB00--0xFFFFFF9F9BD5AC80 %ll 0xFFFFFFBE53E953A0
조금 지나니 Trace32가 친절하게 결과를 알려주네요. 0xFFFFFF9F9BD5AC68 메모리 공간에 0xFFFFFFBE53E953A0 값이 있다는 소리인데요.
data 0xFFFFFFBE53E953A0 found in NSD:0xFFFFFF9F9BD5AB00--0xFFFFFF9F9BD5AC78 at NSD:0xFFFFFF9F9BD5AC68
실제 0xFFFFFF9F9BD5AC68 주소에 가보니 정말 그 값이 있네요..
________________address|________0________4________8________C
NSD:FFFFFF9F9BD5AC60| 9BD5AC58 FFFFFF9F>53E953A0 FFFFFFBE
NSD:FFFFFF9F9BD5AC70| 53E953A0 FFFFFFBE 9BD5AC78 FFFFFF9F
.
'[Debugging] Tips' 카테고리의 다른 글
특정 CPU를 끄는 패치(특정 CPU에서 커널 크래시) (0) | 2023.05.04 |
---|---|
Trace32 - Memory Class 메모리 클래스 (0) | 2023.05.04 |
커널 오브젝트 Kernel Object - rbtree debugging(child directory) - (1) (0) | 2023.05.04 |
커널 오브젝트 Kernel Object - rbtree debugging(parent directory) - (2) (0) | 2023.05.04 |
IPI (Inter Processor Interrupts) 소개 및 디버깅 패치 (1) (0) | 2023.05.04 |