1

作为一个软件,我目前正在与一些硬件技术人员在硬件检测机制上进行斗争。

我觉得应该有可能建立一个“面向未来”的检测/发现机制,这样今天构建的检测软件将能够识别未来开发的所有硬件版本的一组有限属性.

反对的论点:目前的(dsp)芯片在不久的将来可能会过时;因此,我们不能保证未来的板子会与当前的发现协议兼容。

这对于例如 USB、PnP 是如何完成的,还有其他示例吗?

4

2 回答 2

1

正如您所暗示的那样,答案的关键在于协议。它可能并不总是很漂亮,有时您会将自己锁定在设计中。

然而,PC 架构本身就是前向检测可行性的证明。

通常完全可以在今天购买的系统上启动 1996 年编译的 Linux 内核。Linux 系统可能无法使用该系统中的大部分硬件,但它会发现任何子集仍然相同。

然而,它需要一个非常明智的硬件检测方案或愿意忍受杂物(请参阅 PC 上的 A20 线设置,最初使用键盘控制器)或同时两者兼而有之。(就像今天几乎所有的 PC 内部都有旧的 ISA 总线来支持 PS/2 键盘等,但也有 PCI 协议。)

为了工作,我为子板设计了一个 ID ROM 格式。它们具有紧凑的二进制 XML 或类似 Lisp 的结构,其中包含一些必填字段、几个可选字段和一个版本号。任何全新的硬件都可以增加版本号并添加新软件所需的任何数据,同时仍然告诉旧软件在旧字段中的任何适当内容。

这样至少,旧软件可以检测板ID,用途,然后放弃。这就是 USB 设备的工作原理。所有旧软件都可以枚举新设备,但还远不能确定旧软件可以以任何有意义的方式驱动新硬件。例外是键盘、鼠标和记忆棒,每个人都坚持旧的“应用程序级别”,可以说是协议。

于 2010-09-23T08:02:01.043 回答
1

有一个可配置的供应商 ID 和设备 ID,以标准方式传输到操作系统。负责它的驱动程序以这种方式识别硬件。因此,如果您在驱动程序中知道设备 ID,那么您将知道它是否兼容。如果设备 ID 保持不变,那么您应该使用一些可以读取的内存映射寄存器来包含一些额外的信息(推荐!),如硬件设计版本等。

无论如何,驱动程序必须知道它正在与什么硬件通信并做出相应的反应。有一些标准方法来正确检测硬件是设计问题。因此,就存储此信息的一些地址达成一致并坚持下去。还要以将来可以扩展的方式对其进行设计。

于 2010-09-23T08:02:44.150 回答