标签: device-driver

I/O完成端口的优缺点

为什么很多人说I/O完成端口是快速而漂亮的模型?
什么是I/O完成端口的优缺点?

我想知道一些比其他模型更快的IOCP的要点.

如果你可以解释它比较其他模型(选择,epoll,传统的多线程/进程),那会更好.

windows io network-programming device-driver iocp

51
推荐指数
2
解决办法
2万
查看次数

Android USB主机模式"软模式"驱动程序,适用于符合标准的USB设备

既然Android API支持直接使用USB设备(从3.1开始),我很好奇是否有任何工作要为一些更受欢迎的类兼容设备(如音频或HID)创建"软模式"驱动程序.

换句话说,是否有任何开源项目将特定类设备的更有用的通信包含在可以添加到Android项目的Java类中?

出于我的目的,我对USB音频特别感兴趣,但似乎从Linux内核模块源派生的社区构建的一组类可能对许多项目有益.我的希望是其他人已经想到了同样的事情并且已经开始工作了.任何指向这个方向的人都会非常感激.


我偶然发现了一些资源:

usb android driver device-driver

37
推荐指数
1
解决办法
3526
查看次数

Iphone设备令牌 - NSData或NSString

我正在以NSData对象的形式接收iPhone设备令牌.当我测试我的通知脚本功能时,我只从日志中复制了该对象,并且通知正常.但是,当我现在尝试自动执行此操作时,我将以变量的形式将设备令牌作为ASCII编码的字符串发送

self.deviceToken = [[NSString alloc] initWithData:webDeviceToken encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

我得到的字符串有一些时髦的字符,看起来与此类似 "å-0¾fZÿ÷ʺÎUQüRáqEªfÔk«"

当服务器端脚本将通知发送到该令牌时,我没有收到任何内容.

我需要解码一些东西吗?

Regardz

iphone token device-driver

33
推荐指数
3
解决办法
3万
查看次数

内存映射IO - 它是如何完成的?

我已经了解了端口映射IO和内存映射IO之间的区别,但我无法弄清楚在现代操作系统(windows或linux)中如何实现内存映射Io

我所知道的是,物理内存的一部分被保留用于与硬件通信,并且有一个MMIO单元参与处理总线通信和其他与内存相关的东西

驱动程序如何与底层硬件通信?驱动程序将使用哪些功能?在使用它们之前,与视频卡通信的地址是固定的还是某种"协议"?

我还是很困惑

operating-system kernel device-driver linux-kernel

28
推荐指数
1
解决办法
2万
查看次数

BSP与设备驱动程序

虽然理解每一个(或许不是),但看起来我远远不了解两者之间的实际差异.

根据我的理解,BSP是一个驱动程序和配置设置包,允许内核映像启动板(并且是其中的一部分).单个设备驱动程序在特定组件(HW)上运行,一侧与核心内核连接,另一侧与设备本身连接.

看看Linux内核,我不清楚BSP角色的起源和设备驱动程序角色的结束位置.具体来说,我习惯于每个图像每个板看到一个BSP,但是,通用Linux内核可以加载到具有相同图像的任何架构系列(很明显,对于不同的系列,有不同的图像:x86,amd64,arm, etc ...),其中特定的板和外围设备驱动程序是从initrd按需加载的.

常见的Linux内核发行版是否有BSP?或者BSP是否与特殊案例板相关?

这种行为在其他内核上是否相似?VxWorks的?

最后一个,合并不同的BSP/s以生成适合不同电路板的单个图像是很常见的吗?

vxworks bsp device-driver linux-device-driver

28
推荐指数
3
解决办法
2万
查看次数

扩展Magic Mouse的功能:我需要一个kext吗?

我最近购买了一只Magic Mouse.它太棒了,充满了潜力.不幸的是,它受到软件支持的严重阻碍.我想解决这个问题.我做了很多研究,这些是我迄今为止关于事件链的调查结果:

  1. Magic Mouse鼠标向系统发送完整的多点触控事件.
  2. 多点触控事件在MultitouchSupport.framework(Carbon)中处理
  3. 事件在框架中解释,并作为正常事件发送到系统
    • 当您用一根手指滚动时,它会发送实际的滚轮事件.
    • 当您用两根手指滑动时,它会发送滑动事件.
  4. 没有NSTouch事件发送到系统.您无法使用NSTouch API与鼠标进行交互.

在我发现上述所有内容之后,我将MultitouchSupport.framework文件进行了反汇编,并通过一些Google搜索,找到了如何将自己的回调插入链中,以便接收原始触摸事件数据.如果枚举设备列表,则可以为每个设备(触控板和鼠标)附加.这一发现将使我们能够创建一个在鼠标上使用多点触控的框架,但仅限于单个应用程序.请在此处查看我的帖子:Raw Multitouch Tracking.

我想在整个系统中为鼠标添加新功能,而不仅仅是一个应用程序.

为了做到这一点,我想出了如何使用Event Taps来查看最低级别的事件抽头是否允许我获取原始数据,解释它,并在其位置发送我自己的事件.不幸的是,这种情况并非如此.事件点击,即使在HID级别,仍然是在MultitouchSupport.framework中解释输入的步骤.

在此处查看我的事件点击尝试:事件点击 - 尝试原始多点触控.
一个有趣的旁注:当收到多点触控事件(例如滑动)时,会触发默认情况并打印出事件编号29.标题显示28为最大值.

关于我的问题,既然你掌握了所有的信息,并且已经看到了我的尝试:扩展Magic Mouse功能的最佳方法是什么?我知道我需要以足够低的水平插入一些东西,以便在处理输入并调度预定义事件之前获取输入.所以,把它归结为单句问题:

  • 有没有办法覆盖MultitouchSupport.framework中使用的默认回调?
  • 我是否需要编写一个kext并自己处理所有传入的数据?
  • 是否可以编写一个位于现在处理输入的kext 之上的kext,并在该kext完成所有艰苦的工作之后对其进行过滤?

我的第一个目标是,如果您点击时设备上有两个手指,则可以发送中键按钮点击事件.显然,目前还有很多可以做的事情,但这对于拍摄来说似乎是一件好事.

提前致谢!

-Sastira

kernel objective-c device-driver multi-touch magic-mouse

24
推荐指数
1
解决办法
4432
查看次数

如何用cat文件安装驱动程序?

我有内核驱动程序.在32位系统和Windows XP及更低版本上安装时,我没有遇到任何问题并使用了SetupCopyOEMInf,但需要对64位驱动程序进行签名.我签了它,我需要有一个cat文件,驱动程序复制到计算机的某个地方,这种安装方法不起作用.我该如何安装?

编辑:澄清了这个问题.

windows 64-bit signed device-driver

23
推荐指数
1
解决办法
8万
查看次数

是否可以用Java编写设备驱动程序?

介绍

我听说过用Java编写设备驱动程序(听说"用我的耳朵",而不是来自互联网)并且想知道......我一直认为设备驱动程序在操作系统级别上运行,因此必须用同一种语言编写作为操作系统(因此主要是CI假设)

问题

  1. 这个假设我一般都错了吗?(看起来如此)
  2. 如何在操作系统中使用"外星人"语言的驱动程序?
  3. 无论如何,对于设备驱动程序有什么要求(从编程语言的角度来看)?

谢谢阅读

java operating-system device-driver

22
推荐指数
3
解决办法
2万
查看次数

原始PDO将IOCTL发送到上层过滤器驱动程序(kbfiltr/moufiltr)以启用/禁用设备

我对驱动程序开发很新,并试图编写一个简单的过滤器驱动程序来启用或禁用键盘或鼠标设备.如果我可以使它工作,我想用它来插入鼠标插入我的笔记本电脑上的触摸板.我意识到可能有软件已经做到这一点,但我真的对设备驱动程序感兴趣,并希望自己学习如何做到这一点.

我正在使用随WDK一起提供的kbfiltrmoufiltr示例,作为上层过滤器驱动程序安装.kbfiltr示例创建一个pdo,可以通过usermode程序枚举和连接.这允许我将IOCTL发送到由KbFilter_EvtIoDeviceControlForRawPdo处理的PDO .但是,当我尝试做任何与过滤器驱动程序相关的事情时,比如调用KbFilter_EvtIoInternalDeviceControl所以我可以做类似的事情

VOID
KbFilter_EvtIoInternalDeviceControl(
    IN WDFQUEUE      Queue,
    IN WDFREQUEST    Request,
    IN size_t        OutputBufferLength,
    IN size_t        InputBufferLength,
    IN ULONG         IoControlCode
    )
    ...
    hDevice = WdfIoQueueGetDevice(Queue);
    devExt = FilterGetData(hDevice);

    switch (IoControlCode) {      
    ...
      case IOCTL_INTERNAL_KEYBOARD_DISCONNECT:
       //
       // Clear the connection parameters in the device extension.
       //
       devExt->UpperConnectData.ClassService = NULL;
       break;
    ...
    }
Run Code Online (Sandbox Code Playgroud)

我得到了一个BSOD.它不是上面的代码,在vanilla示例中,set to null被注释掉,只是调用Kbfilter会导致BSOD.我试图直接在PDO中设置设备扩展,但这也会导致BSOD,可能是因为它是PDO devExt,而不是kbfiltr?

(相关:什么是从BSOD获取堆栈跟踪的好方法?我使用Virtual PC作为我的测试环境和未经检查的XPSP3版本)

我不能直接向驱动程序堆栈发送IOCTL_INTERNAL_KEYBOARD_DISCONNECT(我知道输入设备一次只接受一个连接?)因此需要原始PDO.我真的只需要发送两个IOCTL(启用和禁用),我想我会使用键盘断开连接,因为这些已经定义.

如果我对这些假设有任何错误,请告诉我,我知道我真的是一个菜鸟,但我没有找到很多关于通过PDO进行此类通信的文档.

winapi driver wdk device-driver kmdf

19
推荐指数
1
解决办法
5932
查看次数

设备驱动程序API匹配错误

我在我的Galaxy 3上安装了cyanogenmod.在Eclipse中开发时,大多数应用程序似乎都运行正常.但是,我已经编写了一个需要访问该库的应用程序,每次我尝试访问它时,应用程序都会在log cat崩溃:

02-03 19:05:42.054: D/libEGL(10279): loaded /system/lib/egl/libEGL_mali.so

02-03 19:05:42.059: D/libEGL(10279): loaded /system/lib/egl/libGLESv1_CM_mali.so

02-03 19:05:42.059: D/libEGL(10279): loaded /system/lib/egl/libGLESv2_mali.so

02-03 19:05:42.064: E/(10279): Device driver API match

02-03 19:05:42.064: E/(10279): Device driver API version: 23

02-03 19:05:42.064: E/(10279): User space API version: 23 

02-03 19:05:42.064: E/(10279): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Wed Oct  9         
21:05:57 KST 2013 
Run Code Online (Sandbox Code Playgroud)

知道如何解决它吗?谢谢!

android device-driver cyanogenmod

19
推荐指数
1
解决办法
5679
查看次数