Увисване на ядрото за отстраняване на грешки

Опитвам се да стартирам приложение, което използва драйвер за режим на ядрото. Системата се заключва на всеки час и единственият начин да я възстановите е хардуерно нулиране. Sysrq спира да отговаря, telnet сесиите висят и няма никакви съобщения за грешка от какъвто и да е вид. За съжаление платката няма поддръжка на ejtag. Опитвах се да го изолирам функционално, но това е като да търсиш игла в купа сено. Някакви предположения?

PS: Това е mips linux система (2.6.31).


person l.thee.a    schedule 07.05.2010    source източник
comment
Интересно ми е - какъв беше проблемът?   -  person jbarlow    schedule 18.06.2010
comment
Засядаше се в често използван спинлок. Вместо това започна да използва spin_lock_irq. Открихме проблема, като написахме съобщения в памет за изтриване.   -  person l.thee.a    schedule 30.06.2010


Отговори (3)


Ето някои опции, в зависимост от спецификата на вашата ситуация. Ако можете да предоставите повече подробности за платформата и естеството на драйвера за режим на ядрото, ще бъде полезно.

Ако приемем, че имате причина да сте уверени в хардуера, вашите вероятни източници на блокиране са проблеми със заключването в ядрото, неинициализирани променливи и безкрайни цикли с деактивирано изпреварване.

Можете ли да конфигурирате прекъсване на таймера да работи периодично и да мига светодиод? Може да ви е полезно да видите дали прекъсванията продължават да се обработват, докато сте в блокиране.

Активирайте откриването на меко блокиране в менюто за хакване на ядрото на Linux и всички други подходящи функции за хакване на ядрото. Може да отнеме на Linux минута или две да открие и докладва меко блокиране. Чакахте ли достатъчно дълго, за да проверите за това?

Активирайте проверката на зависимостта на заключването при хакване на ядрото и поправете всички отчетени грешки при заключване във вашия драйвер.

Опитайте да промените режима на изпреварване на ядрото. Това променя поведението на някои системни заключвания, като в някои случаи превръща блокиранията в по-малко опасни заключвания. Ако е подходящо/възможно, деактивирайте SMP.

person jbarlow    schedule 17.06.2010

За съжаление, без да работи sysreq или някакъв начин да пробиете основната система, нямате късмет.

Ако можете да извлечете някакво поведение от системата (може би хардуерен пазач?), бих препоръчал kdump.

Освен това, ако това е по-скорошен проблем, започнете с разполовяване на кода на драйвера, за да определите къде се случва сривът.

person Yann Ramin    schedule 07.05.2010

Ако ядрото не е напълно увиснало и все още получавате прекъсвания, може да сте в състояние да използвате KGDB.

Ако не можете да направите това, можете да добавите още код за регистриране към вашия драйвер, за да откриете източника на проблема. Бих сложил printk() най-малко на всеки вход на функция и вероятно също на всеки изход на всяка функция. Това поне трябва да ви помогне да разберете къде се случва проблемът.

person JayM    schedule 17.06.2010