标签: device-driver

在OS X中对HID设备的原始访问

在OS X上获取HID设备原始访问权限的最简单方法是什么?

我一直在查看IOKit示例,但即使打开一个设备似乎也是不必要的复杂,涉及多个回调并包含来自六个库的东西.
libusb可用于OS X,但是内核会抓取所有HID设备以进行独占访问,并且在尝试使用无代码.kext阻止它与我的设备关联时,我一直遇到奇怪的行为(它阻止内核抓取设备最初,但任何配置设备的调用似乎都会导致内核从我正在测试的小python libusb脚本中获取设备.

基本上,我有一个只传输数据的HID设备.我想打开它(理想上是独占的)访问,然后获取数据流.

我在IOKit文档中找到的所有示例都非常复杂,与libusb中的~8行相比.必须有一种更简单的方法,而不是第三方的图书馆.

值得注意的是,我完全不熟悉OS X的任何功能编程.

Python支持将是一个很好的加分

device-driver hid osx-snow-leopard

10
推荐指数
2
解决办法
7070
查看次数

如何实现鼠标驱动Linux USB鼠标驱动?

我需要使用外部设备控制计算机屏幕的鼠标指针.我只知道我必须为该设备编写设备驱动程序.这是一个USB设备.

任何人都可以告诉我应该如何解决这个问题?

这需要哪些模块和算法?

如果您能提供一些参考资料,我将不胜感激?

很抱歉这些琐碎的问题,但我是Linux设备驱动程序领域的新手.

linux device-driver linux-device-driver linux-kernel

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

如何在Linux设备驱动程序中设置errno?

我正在设计一个Linux角色设备驱动程序.我想在ioctl()系统调用中发生错误时设置errno.

long my_own_ioctl(struct file *file, unsigned int req, unsigned long arg)
{
    long ret = 0;
    BOOL isErr = FALSE;

    // some operation
    // ...

    if (isErr) {
        // set errno
        // ...                 <--- What should I do?
        ret = -1;
    }

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能实现这一目标?提前谢谢你!


请允许我更详细地解释我的申请.

我的设备位于/ dev/myCharDev中.我的用户空间应用程序是这样的:

#define _COMMAND                    (1)
#define _ERROR_COMMAND_PARAMETER    (-1)

int main()
{
    int fd = open("/dev/myCharDec", O_RDONLY);
    int errnoCopy;

    if (fd) {
        if (ioctl(fd, _COMMAND, _ERROR_COMMAND_PARAMETER) < 0) {      // should cause error in …
Run Code Online (Sandbox Code Playgroud)

linux ioctl driver errno device-driver

10
推荐指数
2
解决办法
5969
查看次数

Linux内核:copy_from_user - 带指针的struct

我已经实现了某种字符设备,我需要copy_ from_user函数的帮助.

我有一个结构:

struct  my_struct{

int a;

int *b;
};
Run Code Online (Sandbox Code Playgroud)

我在用户空间初始化它,并使用'write'函数将指针传递给my_struct到我的char设备.在Kernel的Space字符设备'write'函数中,我将它从*char转换为这种结构.我使用kmalloc为结构分配一些内存并执行copy_from_user 它.

这对于简单的'int a'来说很好,但是它只复制b值的指针(地址),而不是b指向的值,所以我现在在Kernel Space中,我正在使用指向用户空间内存的指针.这是不正确的,我不应该直接访问用户空间指针,我必须 copy_from_user在我的结构中的每个指针,然后使用copy_to_user函数复制"读取"函数中的每个指针 ?

linux kernel device-driver

9
推荐指数
2
解决办法
7084
查看次数

计算机未检测到Google Nexus 5 /未出现在设备管理器中

我通过USB线将手机连接到笔记本电脑,打开了开发人员模式,调试模式,MTP,并通过SDK Manager中的Eclipse"extras"文件夹安装了谷歌驱动程序.我已将设备拔出并重新插入计算机上的每个USB端口,并且在我发布此问题后即将重新启动PC.

但是,考虑到这一点也行不通,有没有人知道如何在没有工厂重置的情况下检测我的设备?这是朋友的电话,所以我不能把他的所有文件都擦掉.

所有帮助赞赏.

usb android device device-driver

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

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

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

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

就像一个FYI,我使用的微控制器是飞思卡尔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数据格式(英特尔).

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

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

我倾向于使用很多结构,所以人们可能不喜欢它们,因为它们不像使用#defines那样(例如,MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20),但我喜欢它们,因为它使代码对我来说更具可读性.如果有人对此有任何疑问,请随时发送电子邮件,我可以尝试给它一些见解.只要您知道要关注哪些方面,"USB Complete:开发人员指南"这本书就很有帮助.这是一个简单的应用程序,只使用低速USB.

embedded usb device-driver

8
推荐指数
2
解决办法
8074
查看次数

如何在设备驱动程序和它控制的FPGA之间共享寄存器和位字段定义

是否有任何好的,现有的软件工具可以帮助生成C头文件,其中#defines用于寄存器偏移以及来自VHDL的位定义?如果确实存在任何此类工具,它们对VHDL有什么限制以及如何指定要导出的内容?

到目前为止,我已经找到了这些工具,但它们并不是我正在寻找的:

基于这些工具,我也感兴趣,如果正确的工作流程是生成C和VHDL而不是尝试直接从VHDL(可能在注释中添加额外的标签)到C.

c embedded driver vhdl device-driver

8
推荐指数
2
解决办法
3222
查看次数

超越抽象的好奇心:字节码是如何执行的?设备驱动程序如何工作?

我在*nix上看到的所有内容都是关于硬件的一组抽象,但我很好奇硬件是如何工作的.
我已经在汇编中进行了编程,但这仍然只是一组抽象.

处理器如何理解汇编操作码(如字节码)?
设备驱动程序如何工作(在较低级别(抽象)进行解释)?

hardware assembly abstraction device-driver

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

如何在Windows下发出USB设备重新连接

我有一个基于FTDI芯片的USB设备.有时,它的驱动程序卡住了.

在linux下,没有问题 - 设备自动断开连接,并通过默认内核重新连接,只有问题是设备名称已更改 - 可以通过udev规则修复.

在Windows下,当它卡住时,应用程序的线程read()或write()当时完全挂起.它不能被杀死TerminateThread,也不能被杀死KillProcess.

杀死应用程序的唯一方法是物理断开USB设备.

有没有办法以编程方式发出设备重新连接,这将删除驱动程序的死锁并允许重新打开端口并继续工作?

如果需要,管理权利申请可以有.

usb deadlock device-driver ftdi

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

Windows 10到平板电脑的USB调试?

我正在固定的PC上开发应用程序Windows 10.我还有一个平板电脑的窗口10,一旦通过USB连接到PC,看不到调试(如何让它可访问?

device-driver visual-studio visual-studio-debugging

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