Вы упоминаете, что хост Linux заморожен. Сначала я бы определил, действительно ли оно заблокировано в ядре или существует какой-то процесс (ы) пользовательского пространства, потребляющий слишком много ЦП.
Может ли хост проверяться (желательно на интерфейсе, отдельном от вашей карты FPGA Ethernet)? Если он отвечает, ядро не заблокировано.
Аппаратная проблема?
Если возможно, можно ли временно изменить настройку, чтобы удалить карту FPGA Ethernet и затем воспроизвести проблему? Я хотел бы сделать это, чтобы помочь изолировать проблемы, конкретно связанные с аппаратным обеспечением (FPGA Ethernet).
Проблема пространства пользователя (программного обеспечения)?
Если вы удалите VLC из уравнения, сможете ли вы по-прежнему блокировать / зависать, используя другой метод для генерации трафика Ethernet?
Вы можете попытаться создать оболочку с более высоким приоритетом для извлечения данных, когда система, кажется, зависает. Возможно, запустив top в этой высокоприоритетной оболочке, вы сможете определить, кто, если кто-либо, использует весь процессор. Вы можете запустить эту оболочку по сети (telnet / ssh) или через последовательный терминал.
#include <errno.h>
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
struct sched_param scheduling_parameters;
scheduling_parameters.sched_priority = 10;
if (sched_setscheduler(getpid(), SCHED_FIFO, &scheduling_parameters) < 0) {
printf("error is %d\n", errno);
}
execlp("/bin/bash", "bash",0, 0, 0, 0);
return 0;
}
Проблема с ядром (программным обеспечением)?
Вы можете включить магический ключ sysrq , проверить состояние системы и перейти оттуда. Разработчики ядра используют этот интерфейс для отладки своего программного обеспечения. Чтобы использовать эту функцию, во время компиляции ядра должна быть включена опция CONFIG_MAGIC_SYSRQ.
После эмпирического сужения ошибки до определенного модуля printk () все еще остается хорошим ресурсом.
Также может быть полезно включить отладчик ядра ( KDB ) и подключиться к нему через последовательный кабель.