1

我不知道这个问题在这里或超级用户是否相关,但无论如何都要问。

我在下面提到了设置 - Linux 桌面 PC 系统。一个定制的 FPGA 开发板与此相连。在这个 FPGA 中,有一个以太网网卡 IP 实现并执行。该板使用 USB 端口-USB 电缆和串行电缆连接到 FPGA 开发板。本质上,整个设置测试基于 FPGA 的网卡和在其上实现的相关以太网驱动程序。

有许多应用程序在主机 linux pc 上运行,并将数据发送到基于 FPGA 的以太网 n/w 卡,后者接受它,进行必要的处理并发送到 FPGA 上实现的物理层,然后通过以太网网络到网络上的其他节点/设备。

即使主机 PC 中的多个应用程序将数据发送到 FPGA 网卡,此设置也能正常工作。作为应用程序之一,我使用基于 Linux 的 VLC 播放器(它是一个多媒体播放器)来播放来自 Linux 主机的一些多媒体流,并将数据发送到 FPGA 网卡。在 VLC 播放器中,我使用 vlc 播放器控件搜索(反向/转发)流。当我连续执行此搜索操作时,它使 linux 主机 pc。挂起/冻结。没有 i/o 设备工作,只有重新启动工作。

现在我试图查看 linux 主机 pc /var/log (dmesg) 中的日志,看看我是否知道是什么进程/应用程序导致了冻结,但我无法从中获得任何输入。

  1. 我如何继续隔离我的整个设置中涉及的不同组件(软件、硬件)以缩小问题的根本原因?

  2. 有没有办法通过某种方式与冻结的linux主机通信(串行电缆或其他连接以在它挂起时从中获取任何数据?

  3. 我应该遵循哪些步骤?我如何判断是 VLC 应用程序有问题还是 FPGA 网卡驱动程序有问题,还是其他问题?

任何指针都会很有用。

谢谢。

-广告。

4

2 回答 2

2

您提到 Linux 主机已冻结。我将首先确定它是否实际上被锁定在内核中,或者是否有一些用户空间进程消耗过多的 CPU。

是否可以 ping 主机(最好在与 FPGA 以太网卡分开的接口上)?如果它回复,则内核没有被锁定。

硬件问题?

如果可能,是否可以临时更改设置以移除 FPGA 以太网卡,然后重现问题?我会这样做以帮助隔离与硬件(FPGA 以太网)特别相关的问题。

用户空间(软件)问题?

如果您从等式中删除 VLC,您是否仍然可以通过使用另一种方法生成以太网流量来发生锁定/挂起?

您可以尝试创建一个以更高优先级运行的 shell,以便在系统似乎挂起时检索数据。也许通过在这个高优先级 shell 中运行 top,您可以确定谁(如果有的话)正在使用所有 CPU。您可以通过网络 (telnet/ssh) 或通过串行终端运行此 shell。

#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 ) 并通过串行电缆连接到它也可能会有所帮助。

于 2009-12-17T20:04:01.163 回答
1

@Jscheimer:感谢您对我的问题的详细说明。经过大量调试和在工作场所与其他系统开发人员的一些讨论,我终于找到了根本原因。在整个设置中有一个 DMA 外设。DMA 被配置为对齐访问,但在某些数据传输中,它正在接收未对齐的地址,因为我没有在代码中检查缓冲区对齐,这导致挂起/冻结。这种行为没有规律可循。

于 2009-12-20T16:32:44.797 回答