问题标签 [device-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
661 浏览

windows-ce - 如何在对 XXX_IOControl 的调用结束后映射 Windows CE 设备驱动程序中的调用者内存?

我在 Windows CE 设备驱动程序中实现了一个 ioctl,它采用指向大量应用程序内存的指针来执行通过对 DeviceIoControl 的应用程序调用启动的异步 I/O。

使用 MapCallerPtr() 时,指针在 XXX_IOControl 函数返回时被取消映射;当指针在 IST 中使用时,它不再被映射导致崩溃。

将超出调用结束的指针映射到 XXX_IOControl 的最佳方法是什么?应用程序保证内存将保持有效,直到它从驱动程序收到驱动程序已完成它的指示。

这是在 Windows CE 5.0 上。

0 投票
1 回答
654 浏览

fonts - 如何制作资源dll来描述设备字体?

我正在构建的目标驱动程序不是本机驱动程序,而是与 Microsoft Universal Pinter 驱动程序一起使用的微型驱动程序

根据 DDK:

这些项目的描述 [在我的例子中是字体] 被放置在资源 DLL 中,如 Platform SDK 文档中所述。

然后它继续说:

在打印机的资源 DLL 中,使用 RC_UFM 资源类型指定 .ufm 文件,并使用 RC_FONT 资源类型指定 .ifi 文件。

尽管引用了 SDK,但没有关于如何将 .ifi 字体信息实际放置在资源 dll 中的信息。

谁能指出一种方法来做到这一点?

编辑

是的,打印机包含常驻字体,我需要创建一个描述它们的资源文件。

到目前为止,我遇到了另一个障碍,因为显然您必须编译到资源 dll 中的字体描述文件不能.ifi(即使 DDK 说可以),它们只是不起作用。但是它适用于.ufm字体描述文件。问题是我们只有描述设备字体的 ifi 文件,但没有 umf ...

有什么建议吗?

0 投票
3 回答
5612 浏览

windows - 您如何获得 Windows 视频驱动程序的版本?

在 Windows 上,我的用户模式程序如何获取已安装显卡的驱动程序版本号?

像 ATI 的“催化剂控制中心”这样的程序可以向用户显示此信息或将其自动包含在错误报告中。他们如何得到它?

我一直在查看 PSDK 文档,但找不到任何相关内容。

用户程序可以遍历设备管理器显示的数据库吗?
是否有像获取磁盘驱动器几何形状这样的 IOCTL 调用?
它是否在(可靠的)注册表项中?

0 投票
3 回答
2000 浏览

java - 数据采集​​硬件的java驱动程序?

我需要做一些数据采集并想使用 Java 来编写我的数据采集应用程序。现在我正在使用一个 LabJack,它的驱动程序有一个 Java 包装器,它对于简单的东西工作正常,但我需要升级到真正的东西。

有人知道有 Java 设备驱动程序可用的数据采集平台(NI 或 Measurement Computing 或其他之一)吗?

0 投票
1 回答
750 浏览

linux - Linux 设备驱动程序不安全的 FXSAVE/FXRSTOR 错误——任何先例?

有一个令人讨厌的问题暂时难住了我公司的一些工程师试图对其进行调试。

C++ 程序通常在具有 MPI 的多核计算机集群上运行。

它会运行很长时间——也许是几天——然后突然失败。

大多数从事它的工程师已经消除了程序本身存在错误的任何合理可能性,因此他们开始将责任归咎于可能的硬件问题,但我怀疑 Linux 内核模块或设备中一定存在软件问题司机。

值得怀疑的是,内核模块或设备驱动程序为了进行一些浮点计算,正在以在 SMP 系统上不安全的方式执行 FXSAVE/FXRSTOR。它可以像对需要可重入的内核例程中的静态缓冲区执行 FXSAVE 一样简单。这将创建一个竞争条件错误,该错误很少会破坏线程的浮点上下文。

在应用程序级别,似乎正在发生的事情是 MXCSR 的一个或多个位(它是 FXSAVE/FXRSTOR 上下文的一部分)突然更改,但没有应用程序代码来更改它。

多年前我在 Windows 上遇到过类似的情况,最终证明是视频驱动程序中的一个错误,因此当应用程序代码被操作系统抢占时,该线程上下文中的一些 MXCSR 位被破坏。

我不是 Linux 内核黑客或设备驱动程序开发方面的专家,但我了解到重入规则已经发生了很大变化;在非 SMP 和 SMP(多核)系统之间;内核版本之间;等等因此出现竞争条件错误的可能性似乎是合理的。

所以我的问题是:是否有任何已知的 Linux 驱动程序(或内核)错误符合该描述?

如果他们有类似的症状,我可以引用的任何先例都会有所帮助。在这一点上,很多相关人员(恕我直言)浪费时间思考“好吧,我的代码中没有错误,所以它一定是坏硬件。” 我想让他们超越这一点,并寻找更有可能成为真正原因的东西。

0 投票
2 回答
224 浏览

linux - 为了能够为其编写设备驱动程序,设备的一些最低要求是什么?

我最近开始阅读一些关于内核空间的文章,尤其是关于设备驱动程序的文章。所以我想知道是否对设备有一些最低要求,以便轻松为其编写设备驱动程序?

0 投票
7 回答
8689 浏览

embedded - 用于嵌入式设备的 USB - 设计设备驱动程序/协议栈

我的任务是为嵌入式设备编写一个设备驱动程序,它将通过 SPI 接口与微控制器通信。最终,USB 接口将用于从外部下载更新的代码并在验证阶段使用。

我的问题是,有没有人知道一个好的参考设计或文档或在线教程,其中涵盖了嵌入式系统中 USB 协议栈/设备驱动程序的实现/设计?我刚刚开始阅读 650 页的 USB v2.0 规范目前有点令人生畏。

仅供参考,我使用的微控制器是飞思卡尔 9S12。

标记

根据 Goldenmean 的 (-AD) 评论,我想添加以下信息:

1) 嵌入式设备使用自定义执行程序,不使用 COTS 或 RTOS。

2) 设备将使用中断来指示数据已准备好从设备中检索。

3) 我已经阅读了一些关于 Linux 的文档,但是由于我对 Linux 一点也不熟悉,所以目前它不是很有帮助(尽管我希望它会很快)。

4) 设计方法,至少现在,它为 USB 设备编写设备驱动程序,然后 USB 协议层 (I/O) 将驻留在设备驱动程序的顶部以解释数据。我认为这将是最好的方法,尽管我可能是错的。

编辑 - 一年后

我只是想在它们从我脑海中消失之前分享一些东西,以防我再也不会在 USB 设备上工作。在开发代码并首次启动和运行时,我遇到了一些障碍。

我遇到的第一个问题是,当 USB 设备连接到主机(在我的情况下为 Windows)时,主机发出了重置请求。USB 设备将复位并清除中断使能标志。我没有阅读足够多的文献来知道这种情况正在发生,因此我从未收到设置请求中断。我花了很长时间才弄清楚这一点。

我遇到的第二个问题是没有正确处理 Set_Configuration 的设置请求。我正在处理它,但我没有正确处理请求,因为当这个设置请求进来时 USB 设备没有发送 ACK。我最终通过使用硬件 USB 协议分析器发现了这一点。

我还遇到了其他问题,但这是我花了很长时间才弄清楚的两个最大的问题。我不得不担心的另一个问题是大端和小端,分别是飞思卡尔 9S12 与 USB 数据格式(英特尔)。

我最终构建了类似于我过去所做的 UART 设备驱动程序的 USB 设备驱动程序。我已在以下 URL 上发布了代码。

http://lordhog.wordpress.com/2010/12/13/usb-drive

我经常使用结构,因此人们可能不喜欢它们,因为它们不像使用#defines 那样具有门户(例如,MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20),但我喜欢它们,因为它使代码对我来说更具可读性。如果有人对此有任何疑问,请随时发送电子邮件,我可以尝试提供一些见解。只要您知道要专注于哪些领域,“USB Complete:开发人员指南”一书就会很有帮助。这是一个简单的应用程序,只使用了低速 USB。

0 投票
1 回答
1702 浏览

usb - 设置 USB 配置失败

我正在尝试使用 libusb 与 USB 设备通信,但我觉得我在比赛的第一站被绊倒了。我确切地知道我需要与之交谈的端点等,但我什至无法做到这一点。本质上,我有:

现在,我可以在调试模式下查看设备信息,我知道当前配置为 0(未初始化/重启后),并且正好有 1 个有效配置,其配置编号为 1。但是当我设置配置时到 1,我得到一个返回值 -22,它(通过 stringifier 传递)转换为“windows api 错误:错误参数。

我找不到其他人有类似的问题,这似乎是一件很简单的事情——我什至无法声明接口,或设置 alt-interface 或类似的东西,因为我必须先设置配置。我错过了什么?(如果重要:这是在 WinXP 上)

0 投票
3 回答
5848 浏览

windows - 对 USB 传输电缆进行编程/与 USB 设备驱动程序通话

如何以编程方式从 Windows访问 USB 传输电缆(例如 Belkin 的Easy Transfer Cable )?

我对libusb-win32很熟悉,但据我所知,将它与较新的设备和 Windows Vista 一起使用似乎不太确定。

我知道Windows Easy Transfer可以做到这一点。如何编写与 Windows 轻松传送功能相同的代码?

如果没有关于如何做到这一点的罐头文档,我愿意做一些挖掘,但我不知道从哪里开始。如何查看 Windows Easy Transfer 的操作以了解它是如何操作的?我看到 Windows 甚至在设备管理器“传输电缆设备”中为传输电缆提供了自己的类别。我如何与这些驱动程序之一进行低级通信?

0 投票
2 回答
332 浏览

windows - 如何提高 USB 设备驱动程序中的 Tx 性能?

我使用 Windows 驱动程序模型 (WDM) 为 Windows 2000 及更高版本的 USB 1.1 设备开发了设备驱动程序。

我的问题是使用 64 字节批量传输时 Tx 性能非常差。根据使用的 USB 主机控制器,最大数据包吞吐量为每秒 1000 个数据包 (UHCI) 或 2000 个数据包 (OHCI)。我在 Linux Kernel 2.6 上开发了一个类似的驱动程序,每秒大约 5000 个数据包。

Linux 驱动程序使用最多 10 个异步批量传输,而 Windows 驱动程序使用 1 个同步批量传输。因此,比较这一点可以清楚地表明,虽然性能如此糟糕,但我已经尝试过异步批量传输,但没有成功(没有性能提升)。

有没有人有一些提示和技巧来提高 Windows 的性能?