![]() |
1
2
您提到Linux主机已冻结。我首先要确定它是否被锁定在内核中,或者是否有一些用户空间进程占用了太多的CPU。 主机是否可以被ping(最好是在与您的FPGA以太网卡分开的接口上)?如果它回复,内核就不会被锁定。 硬件问题?如果可能,是否可以临时更改设置以删除FPGA以太网卡,然后重新生成问题?我这样做是为了帮助隔离与硬件(FPGA以太网)特定相关的问题。 用户空间(软件)问题?如果您从等式中删除VLC,您仍然可以通过使用另一种方法生成以太网流量来实现锁定/挂起吗? 您可以尝试创建一个以更高优先级运行的shell,以便在系统似乎挂起时检索数据。也许通过在这个高优先级shell中运行top,您可以确定谁(如果有)正在使用所有CPU。您可以通过网络(telnet/ssh)或通过串行终端运行此shell。
内核(软件)问题?您可以启用 magic sysrq key 然后检查系统状态并从那里开始。内核开发人员使用这个接口调试他们的软件。要使用此功能,必须在内核编译时启用config“magic”sysrq选项。 通过经验将bug缩小到特定模块后,printk()仍然是一个很好的资源。 它还可以帮助启用内核调试程序( KDB )并通过串行电缆连接到它。 |
![]() |
2
1
@JScheimer:感谢您对我的问题提供详细的指导。在工作场所与其他系统开发人员进行了大量的调试和讨论之后,我终于找到了根本原因。在整个设置中,有一个DMA外围设备进入画面。DMA被配置为对齐访问,但是在某些数据传输中,由于我没有在代码中检查缓冲区对齐,它接收到一个未对齐的地址,这导致了挂起/冻结。这种行为没有任何模式。 |