Как стать автором
Обновить

Записки разработчика Intel System Studio: отладка Linux-ядра Android с помощью Intel JTAG Debugger и MinnowBoard MAX

Время на прочтение8 мин
Количество просмотров8.3K
Всего голосов 17: ↑17 и ↓0+17
Комментарии13

Комментарии 13

Все же я за kgdb на рабочей машине, и дебажить на любом таргете ядро с символами. Кстати сам Торвальдс не любит дебаггеры, gdb использует как дизассемблер на стероидах, дескать без них разработчик более детально вникает в суть кода, решая проблему.
Нет универсального софтварного дебаггера. Всегда найдется несколько usecase'ов в которых будешь отлаживать ядро printf'aми или придется пользоватся JTAG.
Еще про табличку исключений:
1 #DB Зарезервировано Только для использования Intel

По моим данным:
1- “Debug” (trap or fault)
Raised when the TF flag of eflags is set (quite useful to implement single-step
execution of a debugged program) or when the address of an instruction or
operand falls within the range of an active debug register.

И в исходниках (ядро 3.18.19) все в том же entry_64.S вот какую строчку нашел:
idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK
Все это здорово, но простому энтузиасту недоступно.
Стоитмость XDP3 — около 3 тыс. долларов, лицензия на год использования System Studio — еще две, а в результате получаем отладочную платформу, которая не нужна даже при разработке прошивки и bare-metal OS, ибо там хватает Port80h-кодера и одного UART'а.
НЛО прилетело и опубликовало эту надпись здесь
И еще про табличку исключений:
15 Зарезервировано Intel, не предназначено для использования

Смотрю в исходники, теперь уже в хендлеры исключений (arch / x86 / include / asm / traps.h):
X86_TRAP_SPURIOUS, /* 15, Spurious Interrupt */

Интернет отправляет в Вики про The Intel 8259 is a Programmable Interrupt Controller (PIC) designed for the Intel 8085 and Intel 8086 microprocessors.

Spurious interrupts[edit]
The 8259 generates spurious interrupts in response to a number of conditions.

The first is an IRQ line being deasserted before it is acknowledged. This may occur due to noise on the IRQ lines. In edge triggered mode, the noise must maintain the line in the low state for 100 ns. When the noise diminishes, a pull-up resistor returns the IRQ line to high, thus generating a false interrupt. In level triggered mode, the noise may cause a high signal level on the systems INTR line… итд.

Написано, что не предназначено для использования, но почему тогда хендлер в исходниках ядра есть для этого исключения?
Точнее в данном случае уже прерывания.
Оно не предназначено для нормального использования, а скорее просто для индикации, что в системе не все нормально.

Но если честно, это очень старинная вещь, тянется во времен i8259 и ISA шины. Legacy.
Про шумы в IRQ и про контроллер понятно, меня удивляет, что официальная таблица скрывает от нас правду. И в коде ядра обработчик этого прерывания все таки есть.

do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
{
	conditional_sti(regs);
#if 0
	/* No need to warn about this any longer. */
	pr_info("Ignoring P6 Local APIC Spurious Interrupt Bug...\n");
#endif
}

Дак это не заморочка Intel, а проблема ранней архитектуры IBM PC. Для Intel — это совершенно обычное прерывание. Но поскольку для PC потребляется 99.99% чипов x86 Inel, отсюда имеем что имеем. Никто ничего не скрывает.

Не-PC архитектур на x86 было крайне мало, даже ноуты Apple теперь — обычные писишки, Можно вспомнить например SGI Visual Workstation.
Т.е. в коде ядра обрабатываются все 20 векторов + iret на 32-м.
А что произошло со старым добрым ITP отладчиком, который мы применяли Н-лет назад? XDB это реинкарнация на Eclipse старого ITP? Или это совсем другая (не DTS) команда?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий