8

我知道我的问题相当广泛,但我一直在想这个问题。

一点背景。我在一个物理实验室工作,那里所有的实验室计算机都在运行 Debian(旧版本和 Lenny 的混合)或最近的 Ubuntu 10.4 LTS。我们编写了许多定制软件来与实验硬件和其他计算机进行交互。

我们有很多 FPGA 板来控制实验的各个部分,它们通过 USB 连接到不同的计算机。升级控制实验的计算机后,我们开始看到运行所有激光器的计算机崩溃/锁定。这曾经是完全稳定的。

我的问题是:如果整个计算机由于 a) Python/GTK 软件 gui b) USB 设备驱动程序或 c) 的问题而锁定,这可以归咎于 Linux 内核(或其他级别的操作系统) ?

即使我在软件/硬件的实现中犯了错误,要求 linux 内核不要惊慌是不公平的。

我自己的猜测:任何用户级应用程序都不应该使整个系统崩溃,因为它们应该只能访问自己的东西。

任何设备驱动程序都成为内核本身的一部分,因此能够使其崩溃。我的推理合理吗?

额外的问题:有没有办法以某种方式隔离设备和内核,这样无论硬件犯了什么愚蠢的错误,Linux 都能继续愉快地运行。这将非常有用,原因有两个:1) 运行系统更容易调试,2) 出于实验的目的,我们确实需要较长的正常运行时间,并且只有系统的一部分崩溃比系统的一部分崩溃要好得多系统传播到其余部分。

任何有关此主题的链接和阅读材料将不胜感激。谢谢你。

4

1 回答 1

4

您是正确的,除非存在内核错误,否则非特权代码不应该能够关闭系统。然而,非特权和特权之间的界限与用户空间与内核并不完全相同。如果用户帐户具有超级用户权限,则用户模式程序可以打开/dev/kmem和丢弃操作系统的内部数据结构。

要将主内核与设备驱动程序问题隔离开,请在虚拟机中运行设备驱动程序。

包括 VMWare Workstation 在内的几种流行的 VM 系统支持将任意 USB 设备从主机转发到来宾,而主机上没有特定于设备的驱动程序。

于 2012-04-15T17:26:15.540 回答