Articles of 设备驱动程序

在Linux中,如何在现有类中使用device_create?

注意:我现在列出这个问题,我不反对改变实现(例如,将类的创build移动到公共区域),如果它让事情变得更简单,我只是不确定怎么做。 :结束注意 我有两个Linux内核模块,我试图更新他们的/ sys条目。 search谷歌和其他来源,我已经看到了大量的代码沿线: static dev_t MyDev; static struct class *c1; static int __init start_func(void) { … MyDev = MKDEV(nMajor, MINOR_VERSION); register_chrdev_region(MyDev, 1, MODULE_NAME); c1 = class_create(THIS_MODULE, "chardrv"); device_create(c1, NULL, MyDev, NULL, MODULE_NAME); …. 我已经validation了我的第一个模块这个代码的作品,它正确地创build一个: /sys/class/chardrv/<MODULE_NAME> 条目。 我想知道的是如何在现有的类中创build一个设备。 换句话说,我的一个模块创build了这个新的chardrv类,现在我希望我的其他模块也能够在同一个类下注册它的设备。 我不能再次调用class_create()(在第二个模块中),因为“chardrv”类已经存在… 所以我可以运行一个检查来查看/ sys / class / chardrv是否存在,这可以帮助我决定是否需要调用class_create()或不是这个问题。 让我们在这里澄清一些伪代码: if ( path "/sys/class/chardrv" does not exist) […]

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

有一个令人讨厌的问题,暂时难倒了我公司的一些工程师试图进行debugging。 C ++程序通常运行在具有MPI的多核计算机集群上。 它会跑很长一段时间 – 也许是几天 – 然后突然失败。 大多数工程师已经消除了程序本身出现任何错误的合理可能性,所以他们开始将责任归于可能的硬件问题,但是我怀疑在Linux内核模块或者设备中必定存在软件问题驱动程序。 令人怀疑的是内核模块或设备驱动程序为了执行一些浮点计算,正在以对SMP系统不安全的方式执行FXSAVE / FXRSTOR。 这可能与FXS​​AVE在需要重入的内核例程中的静态缓冲区一样简单。 这将创build一个竞争条件错误,很less会损坏线程的浮点上下文。 在应用程序层面,似乎发生的情况是MXCSR的一个或多个位(即FXSAVE / FXRSTOR上下文的一部分)突然更改,但没有应用程序代码可以对其进行更改。 我在Windows上遇到了类似的问题,最终在video驱动程序中出现了一个错误,例如当应用程序代码被操作系统抢占时,该线程上下文中的某些MXCSR位已损坏。 我不是Linux Kernel黑客或设备驱动程序开发方面的专家,但是我正在读的是重入规则已经发生了很大的变化。 在非SMP和SMP(多核)系统之间; 在内核版本之间; 等等。所以种族条件错误的可能性似乎是合理的。 所以我的问题是: 是否有任何已知的Linux驱动程序(或内核)错误符合该描述? 如果他们有类似的症状,我可以引用任何先例都是有帮助的。 在这一点上,很多涉及到的人都是(IMHO)浪费时间思考“好吧,我的代码中没有错误,所以它肯定是坏的硬件”。 我想让他们超越这个,寻找更有可能成为真正原因的东西。

便宜的Windows驱动程序签署64位Windows 7

我需要在Windows 7 64位机器上安装libusb-win32驱动程序。 这个驱动程序是开源的,所以它没有数字签名,所以我想自己做这个,但我不知道这是否可以付出很多钱。 是否可以使用未经Verisign或GlobalSign签名的证书? 也许自签名或通过使用StartSSL ? 如果是的话,我该怎么做呢? 根据一个关于x64内核驱动程序签名的实用真理 ,我必须使用“交叉证书”(微软列表中只有6个可用,大多数是不再活动的CA) 。 我不在乎用户是否面临警告信息。 我甚至可以接受,如果用户必须先安装一个特殊的CA证书。 我只要求驱动程序运行,而不必手动禁用每个Windows启动时的签名检查。

我在哪里可以得到Windows检查构build?

我正在开发一个文件系统驱动程序。 我使用免费的Windows作为目标机器。 如果我能得到Windows的检查版本,我想我会更方便。 不是吗 但我甚至不知道我在哪里可以得到它。 是否需要成本? 当我使用它时,我可以得到什么好处。

虚拟USB设备

我一直在search一个虚拟的USB存根。 这个想法是制作一个驱动程序,您可以使用通常来自USB控制器芯片的数据stream。 从Windows开始,它应该是透明的,所以当虚拟设备连接时,它会显示“正在安装新硬件”的泡泡等等。 我知道USB / IP开源项目,有没有其他的项目库?

安装Windows打印机驱动程序时出错

我试图安装在WDK(Windows驱动程序工具包)中作为示例提供的Windows打印机驱动程序( OEMUNI )。 但是我一直从添加打印机向导中得到以下错误:“ 打印机驱动程序未安装,操作无法完成(错误0x00000002) ”。 我曾尝试运行与pipe理员权限的添加打印机向导,但我仍然遇到同样的问题。 我正在使用Windows 7,64位版本。 有人可以帮我吗? 另外,错误代码是什么:0x00000002意味着什么? 以下是我的INF文件: – ; OEMDLL.INF ; ; INF file for OEM DLL Customization samples ; ; Copyright 1999-2003 Microsoft Corporation [Version] Signature="$Windows NT$" Provider=%MS% LayoutFile=ntprint.inf ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318} Class=Printer DriverVer=6/07/2001,1.0.0.1 ; ; Manufacturer section. ; ; This section lists all of the manufacturers ; that we will […]

在Delphi中CreateFile不能返回一个合适的Handle – 设备

希望能find一些在windows中有服务经验的人。 我想在Delphi中使用NdisProt驱动程序用于以太网适配器 my_Handle:= CreateFile(PChar('\\。\ NdisProt'), GENERIC_WRITE或GENERIC_READ,0,nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); (也曾用\\.\\NdisProt ) 执行后, my_Handle的值始终为“4008”,GetLastError总是返回0 如果我试图读取或写入文件,我得到违反,有人知道为什么我得到这种不需要的行为?

获取与COM端口相关的设备/驱动程序信息?

我有一个串口到USB设备,在Windows设备pipe理器中有一个类似命名的设备驱动程序。 在系统启动时,设备并不总是占用相同的COM端口,所以我的程序需要在启动时识别它。 我已经尝试使用RXTX来枚举系统上的COM端口,但是这不起作用,因为CommPortIdentifier.getName()只是返回COM名称(例如COM1,COM2等),我需要获取驱动程序制造商名称或设备pipe理器中显示的驱动程序名称,并将其与COM名称相关联。 这可以轻松地在Java中完成吗? (我会对任何支持这个的第三方Java库感兴趣。)否则,我怎样才能通过win32 API来完成这个任务呢?

Windows驱动程序时间戳function

我正在修改现有的Windows内核设备驱动程序,并在那里我需要捕获一个时间戳。 我打算使用time.h库并调用clock()函数来获取,但是在windows visual studio下,链接失败。 所以我把它作为一种手段,我需要在司机的图书馆工作。 我发现了下面的函数,KeInitializeTimer和KeSetTimerEx,但是如果我打算设置一个计时器并将其唤醒,则会使用这些函数。 我真正需要的是能给我一个时间戳的东西。 有任何想法吗?

为什么在Windows SDK中找不到cfgmgr32.lib?

我正在尝试使用Configuration Manager API,例如CM_Get_Device_ID 。 文档说链接到cfgmgr32.lib 。 但是,当我这样做时,我从链接器中收到一条错误消息: 错误1错误LNK1104:无法打开文件'cfgmgr32.lib' 我无法在Windows SDK中的任何位置findcfgmgr32.lib 。 如果我离开cfgmgr32.lib我得到未解决的外部符号错误。 我如何使用Configuration Manager API?