Страница 1 из 1

Linux Kernel debugger

Добавлено: 18 дек 2006, 14:20
aldep
Мне надо иметь возможность в случае если Linux машина зависнет (насмерть) из-за бага в ядре, иметь возможность прочитать память.
Как я понимаю, сделать kernel dump зависнувшего ядра не получится скорее всего.
Можно ли для этого использовать kernel debugger?
Если да то какой лучше? Я пока видел дебаггеры от Novell и SGI.

Re: Linux Kernel debugger

Добавлено: 18 дек 2006, 16:25
ajkj3em
Magic SysReq mozhet pomoch, no po-horoshemu takie dela otlazhivajutsja
starymi dobrymi printf'ami. Na krajnjak, esli visnet ne v hardware irq, to
mozhno na keyboard interrupt povesit' svoj handler i dump'at' stack pri
nazhatii na opredelennuju kombinaciju knopok (ponjatno chto na multi-cpu
machines nado budet dumpat' stek na vseh CPU).

Esli jadro visnet (chto v principe dazhe v processe razrabotki dolzhno
sluchatjsja _krajne_ redko), to proishodit wto obychno po odnoj iz dvuh
prichin - deadlock ili busy loop. Pervye elementarno vylavlivajutsja
perepisyvaniem spinlock_xxx macrosov, vtorye - vuchitkoj koda. Hotja
komu kak udobnee .. komu i debugger nevesta :)

Sorry za translit. Mu***atsja s wtimi idiotskimu TRN tagami netu vremeni.

Добавлено: 18 дек 2006, 16:33
Groundhog
Смотря как зависнет а то и никакие примочки не помогут.
Смотря какой процессор и откуда грузишься.
Чтение памяти помогает при отладке девайс драйверов,
когда физические адреса смысл имеют, иначе по таблицам
лазить ухихикаешся.
А если уж память читать хочется - пришпандорь к загрузчику
свою читалку - как кернел неправильный лод операции
словит - в загрузчик переходи и читай/писай на здоровье.

Добавлено: 18 дек 2006, 17:12
aldep
Magic SysReq mozhet pomoch, no po-horoshemu takie dela otlazhivajutsja
starymi dobrymi printf'ami.
Я не отлаживаю код, так что фиксить мне актуально. Надо именно наиболее надежным образом прочитать память. Причем память ядра, а не пользовательских процессов.
А если уж память читать хочется - пришпандорь к загрузчику
свою читалку - как кернел неправильный лод операции
словит - в загрузчик переходи и читай/писай на здоровье.
А где-то есть примеры кода?

Добавлено: 18 дек 2006, 17:22
Groundhog
"А где-то есть примеры кода?"
Для ARM процессора сам скрябал - легко сделать.
Если интересно найду в своих завалах.
Для X86 не искал не знаю - загрузчик в начале памяти
должен сидеть тогда ему управление и в руки
легко передается (В ARM - ах чуть какая пакость -
автоматически в начало скачет).

Добавлено: 18 дек 2006, 19:44
ajkj3em
aldep писал(а):
Magic SysReq mozhet pomoch, no po-horoshemu takie dela otlazhivajutsja
starymi dobrymi printf'ami.
Я не отлаживаю код, так что фиксить мне актуально. Надо именно наиболее надежным образом прочитать память. Причем память ядра, а не пользовательских процессов.
а, понятно, не так понял, сорри

* перевод с транслита

Добавлено: 18 дек 2006, 20:21
aldep
Groundhog писал(а):"А где-то есть примеры кода?"
Для ARM процессора сам скрябал - легко сделать.
Если интересно найду в своих завалах.
Интересно. Если не в облом, то найди.

Спасибо!

Добавлено: 19 дек 2006, 10:25
Groundhog
В субботу, после возврата с соседской террритории,
закину боотлоадер с читалкой (примитивная но работает :) - да и разбираться в коде легче).

Добавлено: 19 дек 2006, 15:23
Ильгиз
The Linux Kernel Crash Dump patch to the kernel doesn't read arbitrary memory regions. I could store a kernel crash back trace to a floppy disk.