标签: device-driver

input.h中input_absinfo结构体中fuzz和flat的解释

我正在尝试使用 input.h 中的 EVIOCSABS 调用来调整无法与 SDL 一起正常工作的操纵杆的灵敏度。我认为 input_absinfo 结构的 fuzz 和 flat 成员会影响轴的灵敏度,但在黑暗中进行了多次射击后,我仍然对它们的工作原理感到困惑。我希望有人能指出我正确的方向。

感谢您考虑我的问题!这是我在 Joystick 类中编写的代码:

int Joystick::configure_absinfo(int axis, int fuzz, int flat)
{
    struct input_absinfo jabsx;
    int result_code = ioctl(joystick_fd, EVIOCGABS(axis), &jabsx);
    if (result_code < 0)
    {
        perror("ioctl GABS failed");
    }
    else
    {
        jabsx.fuzz = fuzz;
        jabsx.flat = flat;

        result_code = ioctl(joystick_fd, EVIOCSABS(axis), &jabsx);
        if (result_code < 0)
        {
            perror("ioctl SABS failed");
        }
    }
    return result_code;
}
Run Code Online (Sandbox Code Playgroud)

linux input event-handling device-driver

7
推荐指数
1
解决办法
2537
查看次数

检查给定设备 ID 是否存在 Windows 驱动程序

我正在使用 C++ 编写一个 Windows 库。该库应该能够检查系统上是否安装了特定设备的设备驱动程序。因此,我正在寻找一种方法来检查是否为已知的Device ID安装了驱动程序。

到目前为止,我找到了这样的信息:

SetupDiBuildDriverInfoList列出给定设备的可用驱动程序。但是,我必须提供的不仅仅是设备 ID。

SetupDiGetClassDevs似乎准确地返回了我调用 SetupDiBuildDriverInfoList 所需的内容,但它仍然不接受设备 ID 作为输入。它可能需要设备设置/接口类的 GUID,但如果我理解正确的话,特定于供应商的驱动程序没有这样的 GUID。它还可以使用 PnP 枚举器,但我对此不太了解,无法判断是否可以以某种方式使用它。或者最后,它可能需要设备实例 ID,但不是设备 ID。

显然,我想检查是否有同类设备,所以通过设备实例ID查询是不可行的。因此,问题是:如何使用我列出的 API 函数(或可以识别设备的任何其他信息;我假设设备 ID 是正确的)来检查是否安装了给定设备 ID 的驱动程序(或任何其他方式)?

c++ winapi device-driver

7
推荐指数
2
解决办法
5173
查看次数

Linux设备驱动程序:找不到符号"memcpy"

我正在尝试编写Linux设备驱动程序.我已经让它工作得很好,直到我尝试使用"memcpy".我甚至没有得到编译器错误,当我"制造"它只是警告我:

WARNING: "memcpy" [/root/homedir/sv/main.ko] undefined!

好的,当我尝试通过insmod加载时,我进入控制台:

insmod: error inserting './main.ko': -1 Unknown symbol in module

在dmesg上:

main: Unknown symbol memcpy (err 0)

我包括以下内容:

#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>

#include <linux/kernel.h> /* printk() */
#include <linux/slab.h>  /* kmalloc() */
#include <linux/fs.h>  /* everything... */
#include <linux/errno.h> /* error codes */
#include <linux/types.h> /* size_t */
#include <linux/fcntl.h> /* O_ACCMODE */
#include <linux/cdev.h>
#include <asm/system.h>  /* cli(), *_flags */
#include <asm/uaccess.h> /* copy_*_user */
Run Code Online (Sandbox Code Playgroud)

使用memcpy的功能:

static int dc_copy_to_user(char __user *buf, size_t …
Run Code Online (Sandbox Code Playgroud)

c device-driver memcpy linux-kernel

6
推荐指数
1
解决办法
5592
查看次数

为什么两个设备共享相同的主要次要设备号?

我正在阅读" Linux设备驱动程序,第3版 ",并发现了一些我无法理解的东西.

在第3.2章中,作者说:

传统上,主要编号标识与设备关联的驱动程序.内核使用次要编号来确定要引用的设备.

然后我尝试了"ls -l/dev"来看一看,我发现有些不寻常:

brw-rw----  1 root disk      1,   1 2011-08-23 23:52 ram1
brw-rw----  1 root disk      1,   2 2011-08-23 23:52 ram2
brw-rw----  1 root disk      1,   3 2011-08-23 23:52 ram3
brw-rw----  1 root disk      1,   4 2011-08-23 23:52 ram4
brw-rw----  1 root disk      1,   5 2011-08-23 23:52 ram5
...
crw-r-----  1 root kmem      1,   1 2011-08-23 23:52 mem
crw-r-----  1 root kmem      1,   4 2011-08-23 23:52 port
crw-rw-rw-  1 root root      1,   3 2011-08-23 23:52 null …
Run Code Online (Sandbox Code Playgroud)

linux device-driver

6
推荐指数
1
解决办法
1536
查看次数

Linux spin_lock与NT KeAcquireSpinLock

从我可以收集到:

  • NT KeAcquireSpinLock相当于spin_lock_bh:一个将IRQL提升到DISPATCH_LEVEL,另一个屏蔽下半部分中断 - 功能相同.虽然NT变体保留了OldIrql,但Linux变体似乎并未在任何地方存储"wereInterruptsAlreadyMasked".这是否意味着spin_unlock_bh总是取消它们?
  • NT KeAcquireInterruptSpinLock就像spin_lock_irqsave.

什么是NT相当于spin_lock

如果spin_unlock_bh总是取消屏蔽中断(在NT语言中,总是将IRQL丢弃到<DISPATCH_LEVEL),它是否意味着spin_lock类似于KeAcquireSpinLockAtDpcLevel

windows wdk device-driver linux-device-driver linux-kernel

6
推荐指数
1
解决办法
910
查看次数

使用Windows 7蓝牙堆栈

我正在与各种(主要是蓝牙)开发板(ConnectBlue,Ubertooth,USRP等)合作,以研究PHY级别的蓝牙通信行为.为了获得更多的见解,我正在寻找一种在Windows 7台式电脑上调试蓝牙堆栈的方法.我的用例相对简单:我有自定义基带实现,它与Windows计算机建立连接.我想看看蓝牙硬件/驱动程序的所有功能.

我不知道如何解决这个问题:我想看看蓝牙芯片/ Windows驱动程序何时收到信号,以及它(消息)如何被解释/格式化/通过各种相关API传递.这主要与内核调试有关.有没有办法在WinDBG中显示Windows中附加硬件的状态?也许在蓝牙内核服务上执行(内核)API日志记录?

我希望有人更熟悉设备驱动程序调试和Windows内核服务可以在这里给我一些指示.

winapi windbg bluetooth device-driver

6
推荐指数
1
解决办法
579
查看次数

查找键盘,鼠标的事件设备

找到硬件键盘鼠标事件设备节点有什么万无一失的方法?

我试过的是读/ proc/bus/input/devices并在设备名称中搜索'Keyboard''Mouse',但这并不总是有效,因为设备名称变化很大.

另一个选择是选择Handlers = kbdHandlers = mouseX,但在笔记本电脑上,还有其他设备,如"电源按钮","视频总线",Handlers = kbd.

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

6
推荐指数
1
解决办法
3251
查看次数

有没有办法以编程方式在Windows上找到芯片组的北桥,南桥名称和其他硬件信息?

有没有办法以编程方式在Windows上查找系统芯片组的北桥,南桥名称和其他硬件信息?我不认为WMI提供这些信息.我试图找出像hwinfocpuinfo这样的工具如何找到这些信息.

wmi winapi device-driver visual-c++

6
推荐指数
1
解决办法
2358
查看次数

需要为USB外围设备编写驱动程序吗?

我正在设计一个 USB 外设,它偶尔会连接到 Windows PC,并在每个方向上传输几 KB 的数据。将有一个定制的 PC 应用程序使用专有协议(即 USB 有效负载)来控制数据传输。

我在下面的链接中看到 Microsoft 描述了如何为 USB 设备编写驱动程序。但我需要一个吗?

为 USB 设备开发 Windows 客户端驱动程序

PC 应用程序是我们想要知道如何与设备通信的唯一应用程序,因此从应用程序共享的角度来看,不需要驱动程序。

我可以直接将自定义协议烘焙到应用程序中,让应用程序与设备对话“原始 USB”,并且无需单独的驱动程序吗?

windows usb driver device-driver

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

使用端口映射I/O时是否使用虚拟内存?

如果我有一个内存映射的I/O设备,并且我想写入位于0x16D340x16D34地址的该设备的寄存器,该地址实际上是一个虚拟地址,CPU将首先将其转换为物理地址,然后写入数据到物理地址.

但对于端口映射I/O设备(例如:串行端口),所以如果我想要写一个寄存器位于地址串口0x3F8,是0x3F8地址的物理地址或虚拟地址?


编辑:我在x86架构上.

c linux x86 device-driver virtual-memory

6
推荐指数
1
解决办法
620
查看次数