Articles of 驱动程序

我可以使用win32安装程序API检测USB设备插入或拔出的时间吗?

我正在浏览http://msdn.microsoft.com/en-us/library/aa376947 (v=vs.85) .aspx (安装程序API参考)和http://msdn.microsoft.com/ (v = vs.85).aspx (驱动程序安装API参考),我没有看到一个函数,让我注册一个函数,将被调用时,一个特定的设备/ 硬件/ ff549791硬件ID /驱动程序键/或任何出现。 任何人都知道我会怎么做呢? 理想情况下,我想在用户空间中进行这种检测,但是如果有必要,我可以在内核空间中进行检测。

Windows错误检查callback不在64位系统上调用

前一段时间,我们已经成功地将驱动程序移植到了64位系统。 但有一件事是不存在的,这不是很重要,但它是一个非常方便的debuggingfunction。 KeRegisterBugCheckReasonCallback注册的callback从不被调用。 该函数成功返回TRUE,但我的callback从不被调用。 我也尝试了不同的值为参数的原因,没有成功。 用旧的KeRegisterBugCheckCallback尝试也失败了。 我做错了什么? 我在文档中遗漏了什么?

读(fd,NULL,0); 它有什么作用? 它是明确的吗?

我在几个程序中看到了下面的说法,大部分/全部似乎都是针对Linux的。 rv = read(fd, NULL, 0); 在一些程序中,它是在一个循环中,在一个单一的声明。 它究竟做了什么? 手册页说,像这样的调用可能会或可能不会检查错误… 回报价值的意义是什么? 什么types的文件描述符被支持? 如果rv==0如何区分“没有错误”从例如“套接字closures”。

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

我正在devise一个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; } 我该怎么做才能做到这一点? 提前谢谢! 请允许我更详细地解释我的申请。 我的设备位于/ dev / myCharDev。 我的用户空间应用程序是这样的: #define […]

如果设备已经插入,Linux USB驱动程序探测器不会被调用

如果我在Linux上使用经过修改的usb骨架驱动程序,并使用已插入的USB设备对模块进行insmod,则不会调用探测function。 我需要拔下并重新插入设备才能激活驱动程序。 这不是例如串口驱动程序,我做了一些testing。 是否有一个原因? 如何获取调用函数来调用?

Unix下的键盘设备

如何捕获所有的用户input,一次读取一个字节? 我做了这个编码,但它不工作 if ((fd = open("/dev/char", O_RDONLY) != 1) { tty = open("/dev/tty", O_RDONLY); tcsetattr(0, TCSANOW, &orig_info); read (fd, &buf, sizeof(char)); } close(fd); 我希望terminal等待input,但没有。

在Linux源代码中,对特定USB设备的识别是在哪里进行的?

我有一个特定的USB设备的Linux驱动程序源代码,我想检查。 我的理解是,USB驱动程序的第一步是注册自己,能够处理具有特定供应商ID和产品ID的设备。 在我的情况下,供应商ID是0BDA ,产品ID是8187 。 鉴于这些信息,有没有一种方法可以find注册自己能够处理该设备的源文件,然后查看其他源文件实际执行的驱动程序详细信息? 作为参考,我在内核3.2.0-26 。 我试过了一个grep -rl 8187 /usr/src ,但是这列出了一大堆文件,我不知道从哪里开始。

如何为平台驱动程序正确初始化属性组?

编辑#4:我想,我不应该将attr_groups分配给struct platform_driver结构的driver字段中的groups字段。 寻找评论/* WRONGO: should not be assigned here. */ /* WRONGO: should not be assigned here. */下面。 我还没有想出我应该把它分配到哪里… 我的平台驱动程序的代码在读取sysfs属性时,由于NULL引用而导致内核“OOPS”。 我确定这是一个简单的监督下面的代码,但我看不到它: … static int samples_per_frame = SAMPLE_CHANNEL_COUNT; DEVICE_INT_ATTR(samples_per_frame, S_IRUGO | S_IWUSR, samples_per_frame); static struct attribute *attrs[] = { &dev_attr_samples_per_frame.attr.attr, NULL, }; static struct attribute_group attr_group = { .attrs = attrs, }; static const struct attribute_group […]

I2C_SLAVE ioctl的用途

我正在编写代码来实现一个简单的i2c读/写function,使用一般的linux i2c驱动程序linux/i2c-dev.h 我对ioctl : I2C_SLAVE感到困惑 内核文档说明如下: 您可以使用read(2)和write(2)调用来执行简单的i2c事务。 你不需要传递地址字节; 而是在尝试访问设备之前通过ioctl I2C_SLAVE进行设置 但是,我正在使用ioctl I2C_RDWR ,我再次使用i2c_msg.addr设置从站地址。 内核文档还提到了以下内容: 一些ioctl()调用是用于pipe理任务的,由i2c-dev直接处理。 例子包括I2C_SLAVE 那么是否必须使用ioctl I2C_SLAVE ? 如果是这样,我只需要设置一次或每次执行读取和写入? 如果我有一个i2c设备,我可以刚刚在设备上testing代码,不会打扰你们,但不幸的是我现在没有一个。 谢谢您的帮助。

HR定时器精确度研究案例

有了这个话题,我会更好地讨论人力资源计时器和真正的精确度问题。 我研究了大量关于它们的文档,我确信它们是在Linux内核模块中延迟执行问题的最好和最可靠的解决scheme,CPU成本较低,时序精度更高(例如一些时间关键驱动程序使用它们,就像这个https://dev.openwrt.org/browser/trunk/target/linux/generic/files/drivers/pwm/gpio-pwm.c?rev=35328 )。 你也适合吗? 这是我见过的最全面和最详细的文档之一: https : //www.landley.net/kdocs/ols/2006/ols2006v1-pages-333-346.pdf 。 人力资源计时器承诺在jiffies的决议下,但不幸的是,在我的系统,我没有得到低于6毫秒的延迟的预期结果(我会稍后显示更多的细节)。 我的环境是: Windows 10 PRO 64位/ 8Gb RAM / CPU Intel 4 Core VMWare播放器12 虚拟化操作系统Linux Mint 18.1 64位 内核configuration 版本:4.10.0-24 – 通用 CONFIG_HIGH_RES_TIMERS = Y CONFIG_POSIX_TIMERS = Y CONFIG_NO_HZ_COMMON = Y CONFIG_NO_HZ_IDLE = Y CONFIG_NO_HZ = Y CONFIG_HZ_250 = Y CONFIG_HZ = 250 / sys / […]