我正在使用 kgdb 调试在 sbc 上运行的 riscv Linux 内核。 gdb 连接到启用了 kgdb 的 Linux 内核后,gdb 中的 print 命令会产生令人困惑的结果。
例如,在执行语句
host = kzalloc(sizeof(struct mmc_host) + extra, GFP_KERNEL);
后,p *host
会产生以下结果。但根据 kzalloc 注释,该主机结构的所有内容都应该为 0。
还有其他一些变量内容与实际情况相差甚远的例子。当我们使用 kgdb 调试 Linux 内核时,这是预期的吗?
>>> p *host
$38 = {
parent = 0x650000000000636d,
class_dev = {
kobj = {
name = 0x20642520726f7272 <error: Cannot access memory at address 0x20642520726f7272>,
entry = {
next = 0x6974736575716572,
prev = 0x757461747320676e
},
parent = 0x4300000000000a73,
kset = 0x6375747320647261,
ktype = 0x6f7277206e69206b,
sd = 0x657461747320676e,
kref = {
refcount = {
refs = {
counter = 1931812897
}
}
},
state_initialized = 0,
state_in_sysfs = 0,
state_add_uevent_sent = 0,
state_remove_uevent_sent = 0,
uevent_suppress = 0
},
parent = 0x782325203a737574,
p = 0x660000000000000a,
init_name = 0x6f725f6563726f <error: Cannot access memory at address 0x6f725f6563726f>,
type = 0x7200000000000000,
bus = 0x755f6b636f6c5f6f,
driver = 0x78656e5f6c69746e,
platform_data = 0x5f7265776f705f74,
driver_data = 0x100000000006e6f,
mutex = {
owner = {
counter = 2325059501578864179
},
wait_lock = {
{
rlock = {
raw_lock = {<No data fields>}
}
}
},
wait_list = {
next = 0x25000000000a6425,
prev = 0x1000a786c6c3830
}
},
links = {
suppliers = {
next = 0x3a6b6c62636d6d33,
prev = 0x6e20646c756f6320
},
consumers = {
next = 0x736967657220746f,
prev = 0x424d505220726574
},
needs_suppliers = {
next = 0x7079742073756220,
prev = 0x100000000000a65
},
defer_hook = {
next = 0x3a6b6c62636d6d33,
prev = 0x2064656c69616620
},
need_for_probe = 116,
status = 1668246636
},
power = {
power_state = {
event = 543519841
},
can_wakeup = 0,
async_suspend = 1,
in_dpm_list = false,
is_prepared = false,
is_suspended = true,
is_noirq_suspended = true,
is_late_suspended = true,
no_pm = false,
early_init = false,
direct_complete = false,
driver_flags = 1919443744,
lock = {
{
rlock = {
raw_lock = {<No data fields>}
}
}
},
should_wakeup = 0,
subsys_data = 0xa6e6f69676572,
set_latency_tolerance = 0x100000000000000,
qos = 0x3a6b6c62636d6d36
},
pm_domain = 0x2520676e69737520,
pins = 0x73726f6e696d2064,
dma_mask = 0x7665642072657020,
coherent_dma_mask = 2666130979577750377,
bus_dma_limit = 7286934618062731891,
dma_range_map = 0xa642520726f7272,
dma_parms = 0x2500000000000000,
dma_pools = {
next = 0x2061746164203a73,
prev = 0x642520726f727265
},
dma_mem = 0x10000000000000a,
cma_area = 0x636f4c203a732536,
archdata = {<No data fields>},
of_node = 0x6f6f6220676e696b,
fwnode = 0x7469747261702074,
devt = 544108393,
id = 1965059954,
devres_lock = {
{
rlock = {
raw_lock = {<No data fields>}
}
}
},
devres_head = {
next = 0x78656e206c69746e,
prev = 0x207265776f702074
},
class = 0x1000000000a6e6f,
groups = 0x636572203a732533,
release = 0x616620797265766f,
iommu_group = 0x6e000a2164656c69,
iommu = 0x642065726f6d206f,
offline_disabled = true,
offline = false,
of_node_reused = true,
state_synced = false,
dma_coherent = false
},
index = 1986076787,
ops = 0x6d0000000a656c62,
pwrseq = 0x2575256b6c62636d,
f_min = 115,
f_max = 671088640,
f_init = 2715506,
f_src = 1828716544,
ocr_avail = 1667195757,
ocr_avail_sdio = 1819307375,
ocr_avail_sd = 6648933,
ocr_avail_mmc = 16777216,
ws = 0x2064656c69614633,
max_current_330 = 1663070068,
max_current_300 = 1952540018,
max_current_180 = 1835868261,
caps = 1868767331,
caps2 = 1701605485,
fixed_drv_type = 1852795252,
pm_caps = 1919907616,
max_seg_size = 1702195563,
max_segs = 25973,
unused = 0,
max_req_size = 16777216,
max_blk_size = 980624694,
max_blk_count = 544417056,
max_busy_timeout = 622883621,
lock = {
{
rlock = {
raw_lock = {<No data fields>}
}
}
},
ios = {
clock = 1931812979,
vdd = 10,
power_delay_ms = 16777216,
bus_mode = 51 '3',
chip_select = 37 '%',
power_mode = 115 's',
bus_width = 58 ':',
timing = 32 ' ',
signal_voltage = 99 'c',
drv_type = 111 'o',
enhanced_strobe = 117
},
use_spi_crc = 0,
claimed = 0,
bus_dead = 1,
doing_init_tune = 1,
can_retune = 0,
doing_retune = 1,
retune_now = 1,
retune_paused = 0,
use_blk_mq = 0,
retune_crc_disable = 0,
can_dma_map_merge = 1,
rescan_disable = 1629516911,
rescan_entered = 1663067236,
need_retune = 1634885992,
hold_retune = 1919251555,
retune_period = 1986356256,
retune_timer = {
entry = {
next = 0x10000000a656369,
pprev = 0x207325203a732536
},
expires = 7598824234099438373,
function = 0x207525206e6f6974,
flags = 539783973
},
trigger_card_event = 100,
card = 0x10000000a296425,
wq = {
lock = {
{
rlock = {
raw_lock = {<No data fields>}
}
}
},
head = {
next = 0x207325203a732536,
prev = 0x6974726170207325
}
},
claimer = 0x207525206e6f6974,
claim_cnt = 684837,
default_ctx = {
task = 0x25006473635f7478
},
detect = {
work = {
data = {
counter = 8223649134899378803
},
entry = {
next = 0x20797265766f6365,
prev = 0x25000a7472617473
},
func = 0x7220455143203a73
},
timer = {
entry = {
next = 0x20797265766f6365,
pprev = 0x100000a656e6f64
},
expires = 7165029233473037619,
function = 0x6f6f6220676e696b,
flags = 1634738292
},
wq = 0x75206f72206e6f69,
cpu = 1818850414
},
detect_change = 1869619316,
slot = {
cd_irq = 1713401455,
cd_wake_enabled = 97,
handler_priv = 0x1000a6425203a64
},
bus_ops = 0x6b6e75203a732533,
bus_refs = 1853321070,
sdio_irqs = 1769104416,
sdio_irq_thread = 0x6365707320726576,
sdio_irq_work = {
work = {
data = {
counter = 7309464380119803497
},
entry = {
next = 0xa6e6f69746172,
prev = 0x6d00000000000000
},
func = 0x6d00006b6c62636d
},
timer = {
entry = {
next = 0x6b636f6c625f636d,
pprev = 0x6400000000000000
},
expires = 7867634009205270898,
function = 0x2f65726f632f636d,
flags = 1668246626
},
wq = 0x6d00000000000000,
cpu = 1918853997
},
sdio_irq_pending = false,
sdio_irq_thread_abort = {
counter = 1392508928
},
pm_flags = 842026309,
led = 0x5300004734304d45,
supply = {
vmmc = 0x5300004738304d45,
vqmmc = 0x5300004736314d45
},
debugfs_root = 0x5300004732334d45,
ongoing_mrq = 0x530032332d424d44,
actual_clock = 858803524,
slotno = 1291845682,
dsr_req = 942687053,
dsr = 1291845703,
cqe_ops = 0x4d0000473631434d,
cqe_private = 0x410000473233434d,
cqe_qdepth = 1146298438,
cqe_enabled = false,
cqe_on = false,
ever_unplugged = false,
hsq_enabled = 65,
private = 0xffffffe0007b7b19
}