Articles of 设备驱动程序

是由kmalloc()分配的内存自动释放?

我正在编写一个设备驱动程序,其中包括用kmalloc分配一块内存。 这个内存在用户程序closures文件时被释放。 在我的一个实验中,用户程序崩溃而没有closures文件。 会有什么东西释放这个记忆? 在另一个实验中,我将kfree()从close()函数移动到了module_exit()函数。 当我连续运行两次用户程序时,我再次用同一个指针调用kmalloc ,而不是先释放它。 因此,我失去了一个指向这个内存的指针,并且不能释放它。 在重新启动之前,这个内存是否会丢失到系统中,或者当我卸载驱动程序时它会被释放吗?

Linux挂起/恢复代码stream(在android手机上)

有没有人知道如何整个过程和代码stream是Android / Linux暂停/恢复(按下电话上的结束键后)有什么好的阅读? 我想了解并阅读相关的代码和文件。 或者,也许如果有人可以指向我的代码看看…

两台设备如何共享相同的主要次要设备号?

我正在阅读“ Linux设备驱动程序,第三版 ”,并发现我不明白的东西。 在第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 […]

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

我需要使用外部设备控制我的电脑屏幕的鼠标指针。我只知道我必须为该设备编写一个设备驱动程序。 这是一个USB设备。 谁能告诉我该怎么处理这个问题? 什么是模块和algorithm将需要这个? 如果你能提供一些参考资料,我将不胜感激。 对不起,这样的小问题,但在Linux设备驱动程序区域是一个新手。

打开没有UAC的设备驱动程序时,CreateFile()失败

我现在正在分析设备驱动程序二进制。 我写了如下代码: CreateFileA("\\\\.\\device_name", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 我从CreateFileA()返回的是INVALID_HANDLE_VALUE(0xFFFFFFFF),没有UAC。 当我运行与UACauthentication相同的代码它工作得很好,它给了我有效的句柄。 我听说访问设备驱动程序的权限是由IoCreateDevice()的设备types参数决定的。 我检查了它,但驱动程序types是FILE_DEVICE_UNKNOWN(0x22),它不仅可以被pipe理员访问,也可以被其他用户访问。 但我失败了 因此我感到沮丧。 我在想错吗? 为什么我在CreateFile()上失败? 任何人都可以帮我吗? 谢谢阅读。 祝你有美好的一天。

在Windows 7 32bit中拦截并忽略键盘事件

我的硬件有一个问题,有时会发送一个“keydown”,然后是“keyup”事件: keydown:无LButton,OemClear 255 keyup:无LButton,OemClear 255 keydown:无LButton,OemClear 255 keyup:无LButton,OemClear 255 它是这样的,每隔1或2秒,永远在Windows中。 通常它不会影响大部分的应用程序,因为这个键是不可打印的。 我认为这是一个特殊的function键,就像一个媒体键或什么的。 它什么都不做。 但是,在一些应用程序,监听keydown和keyup,我得到意想不到的行为。 问题 :有没有办法在Windows中拦截这两个键盘事件(对于所有应用程序和Windows本身),并使操作系统忽略它们? 这对我来说真的很重要,如果你能想出任何解决办法,我会永远感激。

如何打包Windows驱动程序进行部署?

我有一个Windows驱动程序,这是我需要打包在最终用户系统上的sys和inf文件。 我如何做到这一点,我可以使用什么工具?

对设备驱动程序的源文件进行预处理

C_DEFINES=$(C_DEFINES) -D_PRODUCT_A //C_DEFINES=$(C_DEFINES) -D_PRODUCT_B #ifdef PRODUCT_A // <- I want to do doing like this in a sources file. MOST_SOURCES= ac bc productA.c #elif PRODUCT_B MOST_SOURCES= ac bc productB.c #endif 有没有适当的语法?

DDK / WDM将wink32.lib导入驱动程序

最近我试图在我的驱动程序中使用W32pServiceTable。 我在源代码中导入了wink32.lib: TARGETNAME=exp TARGETTYPE=DRIVER TARGETLIB=$(DDK_LIB_PATH)\win32k.lib SOURCES=Experimental.cpp MSC_WARNING_LEVEL=/W3 我在源文件中声明: extern PDWORD W32pServiceTable; 但是我得到的标志没有解决。 我读过,只有GDI驱动程序可以使用wink32.lib。 但我很确定其他驱动程序也可以链接到该库(但我不知道如何)。 如果你能帮忙,我将不胜感激。

Windows XP:我可以查找通用驱动程序的名称吗?

我已经inheritance了一个兼容USB类的audio驱动程序。 它在WinXP,Win7等工作正常 我发现在意大利的XP机器(我还没有检查其他语言),它无法运行。 我们的安装程序(本质上)是这样的: … SetupDiGetDeviceRegistryProperty( info, &data, SPDRP_DEVICEDESC, &type, (BYTE *)name, sizeof(name) ; … if( 0 == wcsicmp(name, "USB Audio Device") ) { … // install our driver } 因此,如果我们有正确的设备( USB\VID_0a73 ),并且安装了通用驱动程序(“USB Audio Device”),那么我们就继续安装我们的产品。 但是在意大利机器上,通用名称是“USB扬声器”。 我们的比较失败,我们不安装。 在我看来,Windows必须从registry中的某个地方拉出该名称。 我可能应该从相同的地方拉,而不是硬连接的string比较。 我在下面看到这个名字: HKLM\Software\Microsoft\Window NT\CurrentVersion\drivers.desc: wdmaud.drv == USB Speakers 有没有更好的方法来检测当前安装的驱动程序是否是通用驱动程序? 如果我留在这个string比较有没有在registry中find通用驱动程序的名称?