Трябва да проследя ядрото си във FreeBSD. То блокира при зареждане, защото сменям планировчика. Как да направя това?

Модифицирам моя планировчик и това го кара да блокира (защото не мога да го внедря правилно и не вземам неща, които хвърлям в опашките). Така че се опитвам да видя докъде ще стигне. Как да запиша неща в журнал и след това как да прочета този журнал, когато стартирам kernel.old

Хвърлям моите теми в нов набор от опашки, вместо традиционните 3 runq's от по 64 всяка. За да обходя и избирам нишка, използвам TAILQ_FOREACH.


person Robin Singh    schedule 08.02.2016    source източник


Отговори (2)


Вие го правите погрешно.

Това, което трябва да направите, е да стартирате това е хипервизор с поддръжка на програми за отстраняване на грешки, като qemu или bhyve. След това прикачвате gdb към ядрото, което стартирате, и проверявате състоянието, докато се срива.

По принцип вие /можете/ да имате журнал, в който пишете неща и който извличате след неуспешно зареждане, но не виждам защо бихте направили това. Най-простият начин за постигане на това би бил просто да printf и евентуално да разширите размера на буфера, така че да можете да поберете повече съобщения. Ядрото винаги поставя дневника на едно и също място и проверява магическо число при зареждане, така че да знае дали трябва да започне от нулата или да започне да добавя. Тогава споменатият дневник е достъпен в dmesg и /var/log/messages. Но както отбелязахме по-рано, това не е начинът да го направите.

person employee of the month    schedule 08.02.2016

Опитахте ли да проникнете в дебъгера? https://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug-online-ddb.html

DTrace също може да бъде полезен.

person arved    schedule 08.02.2016