设备驱动程序或软件驱动程序是允许更高级别的计算机程序与硬件设备交互的计算机程序。此标记仅应用于与驱动程序开发相关的问题,因为有关查找或安装驱动程序的问题与StackOverflow无关。
使用 Windows 驱动程序工具包中的 ObRegisterCallbacks 时访问被拒绝
我一直在为我的业余项目制作内核模式应用程序,并且遇到了一些问题。我在代码中使用了 ObRegisterCallback 函数,如下所示。 NT状态 注册回调( 语音...
Storport 虚拟微型端口驱动程序在 AdapterControl 上停止
为什么我的 StorPort Virtual Miniport Driver (KMDF) 在首次调用 AdapterControl 函数后停止工作? 目前,驱动程序实现后(WinDbg)会发生以下情况:
Windows 如何枚举设备?更具体地说,例如来自 PCIe 卡的视频设备
Windows 将枚举视频设备,因此应用程序可以看到设备列表。 我想知道 Windows 是如何详细做到这一点的,这样我就可以处理设备的顺序。 我希望列表中的设备顺序...
Windows 内核转储分析:查找涉及特定驱动程序模块的任何线程调用堆栈的所有出现情况
我正在 Windbg 中进行 Windows 内核转储分析,并且想编写脚本,该脚本可以从涉及特定驱动程序模块 n 的任何进程中找到所有出现的任何线程调用堆栈...
为什么当这个 ttyUSB 通过 C 寻址时,有时会向 stdout 写入一些内容,有时则不会?
嗨,我为 ttyUSB 设备用 c 语言编写了以下代码。部分代码来自其他来源: // C 库头文件 #包括 #包括 #包括 嗨,我为 ttyUSB 设备用 c 语言编写了以下代码。代码的某些部分来自其他来源: // C library headers #include <stdio.h> #include <string.h> #include <stdlib.h> // Linux headers #include <fcntl.h> // Contains file controls like O_RDWR #include <errno.h> // Error integer and strerror() function #include <termios.h> // Contains POSIX terminal control definitions #include <unistd.h> // write(), read(), close() // Custom headers //// klammern ////#include "some_functions.h" ////int write_log(char*); int main(int argc, char* argv[]) { if (argc < 2) { printf("Usage: %s <at-command>\n", argv[0]); exit(-1); } int serial_port = open("/dev/ttyUSB4", O_RDWR); // Check for errors if (serial_port < 0) { printf("Error %i from open: %s\n", errno, strerror(errno)); exit(1); } struct termios tty; // Read in existing settings, and handle any error if(tcgetattr(serial_port, &tty) != 0) { printf("Error %i from tcgetattr: %s\n", errno, strerror(errno)); return 1; } tty.c_cflag &= ~PARENB; // Clear parity bit, disabling parity (most common) tty.c_cflag &= ~CSTOPB; // Clear stop field, only one stop bit used in communication (most common) tty.c_cflag &= ~CSIZE; // Clear all bits that set the data size tty.c_cflag |= CS8; // 8 bits per byte (most common) tty.c_cflag &= ~CRTSCTS; // Disable RTS/CTS hardware flow control (most common) tty.c_cflag |= CREAD | CLOCAL; // Turn on READ & ignore ctrl lines (CLOCAL = 1) tty.c_lflag &= ~ICANON; tty.c_lflag &= ~ECHO; // Disable echo tty.c_lflag &= ~ECHOE; // Disable erasure tty.c_lflag &= ~ECHONL; // Disable new-line echo tty.c_lflag &= ~ISIG; // Disable interpretation of INTR, QUIT and SUSP tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL); // Disable any special handling of received bytes tty.c_oflag &= ~OPOST; // Prevent special interpretation of output bytes (e.g. newline chars) tty.c_oflag &= ~ONLCR; // Prevent conversion of newline to carriage return/line feed // tty.c_oflag &= ~OXTABS; // Prevent conversion of tabs to spaces (NOT PRESENT ON LINUX) // tty.c_oflag &= ~ONOEOT; // Prevent removal of C-d chars (0x004) in output (NOT PRESENT ON LINUX) tty.c_cc[VTIME] = 50; // Wait for up to 1s (10 deciseconds), returning as soon as any data is received.; 5 sek ^= 50 tty.c_cc[VMIN] = 0; // Set in/out baud rate to be 9600 cfsetispeed(&tty, B9600); cfsetospeed(&tty, B9600); // Save tty settings, also checking for error if (tcsetattr(serial_port, TCSANOW, &tty) != 0) { printf("Error %i from tcsetattr: %s\n", errno, strerror(errno)); return 1; } // Write to serial port //unsigned char msg[] = { 'a', 't', '+', 'c', 'g', 'p', 'a', 'd', 'd', 'r', '=', '1', '\r' }; unsigned int argv1_len = strlen(argv[1]); char msg[argv1_len+2]; // unsigned char strcpy(msg, argv[1]); ////write_log(msg); strcat(msg, "\r"); write(serial_port, msg, sizeof(msg)); // Allocate memory for read buffer, set size according to your needs char read_buf [256]; // Normally you wouldn't do this memset() call, but since we will just receive // ASCII data for this example, we'll set everything to 0 so we can // call printf() easily. memset(&read_buf, '\0', sizeof(read_buf)); // Read bytes. The behaviour of read() (e.g. does it block?, // how long does it block for?) depends on the configuration // settings above, specifically VMIN and VTIME int num_bytes = read(serial_port, &read_buf, sizeof(read_buf)); // n is the number of bytes read. n may be 0 if no bytes were received, and can also be -1 to signal an error. if (num_bytes < 0) { printf("Error reading: %s", strerror(errno)); close(serial_port); return 1; }else if (num_bytes == 0) { printf("0"); close(serial_port); return 1; } // Here we assume we received ASCII data, but you might be sending raw bytes (in that case, don't try and // print it to the screen like this!) //printf("Read %i bytes. Received message: %s", num_bytes, read_buf); printf("%s", read_buf); fflush(stdout); ////removeLeadingNewlines(read_buf); ////write_log(read_buf); close(serial_port); return 0; // success } 这是我的 Makefile,它的构建没有错误或警告: WARNFLAGS = -W -Wall -Werror OPTFLAGS = -O3 DEBUGFLAGS = -ggdb3 -DDEBUG CFLAGS += $(WARNFLAGS) binaries = at_commander ifdef DEBUG CFLAGS += $(DEBUGFLAGS) else CFLAGS += $(OPTFLAGS) endif all: $(binaries) at_commander: some_functions.c clean: $(RM) *~ $(binaries) *.o 问题是为什么现在不规则地输出到控制台: root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at OK root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at OK root@OpenMPTCProuter:~/autostart# ./at_commander at OK root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at root@OpenMPTCProuter:~/autostart# ./at_commander at OK root@OpenMPTCProuter:~/autostart# 首先我认为这与刷新有关,但也许与我的代码中的错误时机有关。 提前谢谢您! 为什么当这个ttyUSB通过C寻址时,... 您的标题和问题表明您要么对自己正在做的事情了解不够,并且/或者写得不好。 “ttyUSB 设备”不是端点设备(例如闪存驱动器),而是通信接口。假设您使用电缆将某些设备连接到此“ttyUSB 设备”,并且您的目的是与该连接的设备进行通信。然而,您完全忽略了提及任何其他设备的任何信息。 ...有时某些内容会写入标准输出,有时则不会? 您对名词“something”的使用是不明确的,并且完全忽视了以下事实:这涉及(a)命令消息由您的程序传输,(b)该消息必须由远程单元接收和处理,( c) 响应消息必须由该远程单元传输,并且 (d) 该响应消息必须由您的程序接收/读取。 换句话说,“something”是来自远程单元/设备的响应,而(您的程序)失败为“sometimes not”表示该远程单元/设备没有响应。 所连接设备的间歇性响应可能表明向该设备发送了不正确的消息。最坏的情况是连接不良/不良(即电缆/硬件问题)。 您的帖子中只有一些线索可以识别您的程序尝试与之通信的连接设备。一种是注释掉的初始化。有对“at-command”的引用。显然,连接的设备是使用 AT(又名 Hayes)命令集的调制解调器。 您发布的程序有各种小问题,其中大部分已在评论中提到。 IMO 程序中的显着错误是发送消息/命令时不正确的行终止。 AT命令的格式为: 命令以AT开头,大小写均可; 命令以回车符和换行符结束。 但是,您的程序(如发布的那样)以换行符和空字符终止消息。调制解调器可能会感到困惑,因为它没有接收到关键的回车符。因此,偶尔会有OK的回应。
我一直在尝试为 Git 中的合并冲突设置一个自定义合并驱动程序,并使其大部分工作正常,但无法弄清楚为什么它不会自动暂存成功解决的冲突,例如...
我阅读了文档https://learn.microsoft.com/en-us/samples/microsoft/windows-driver-samples/simple-audio-sample-device-driver/ Microsoft 简单音频示例设备驱动程序展示了如何开发...
为什么我在 Visual Studio 2015 中配置设备之前收到错误?
我想部署我的驱动程序进行测试。我已经配置了我的目标计算机以进行测试(尽管这应该不重要,因为我什至还没有到那一步)。在我的主机上,我打开 Visual ...
我正在尝试在 Linux Mint (6.8.0-38-generic #38-Ubuntu) 上从 https://github.com/jeremyb31/rtl8822bu 编译驱动程序。我已经解决了几个问题(例如 sudo apt-get install gcc-multilib
未找到 Nvidia-smi 命令 - 安装了 nvidia 驱动程序
~$ nvidia-smi nvidia-smi:找不到命令 〜$ nvcc --版本 nvcc:NVIDIA (R) Cuda 编译器驱动程序 版权所有 (c) 2005-2018 NVIDIA 公司 建于 Tue_Jun_12_23:07:04_CDT_2018 Cuda编译...
我正在尝试构建适用于板 A 和板 B 的 zephyr 示例代码(即构建是为代码 A 编写的,但我需要更改它,以便它可以与板 B 一起使用)。我一直遇到这个呃...
操作系统:Windows Server 2016 R2 我有一个 RAMDisk 驱动程序,可以使用“添加旧硬件向导”(hdwwiz.exe) 成功安装。从 devcon hwids * 的输出来看,该设备可以是...
我在 Windows 8.1 中工作。 我需要从命令行安装驱动程序文件(.inf 文件)。我需要使用哪个命令? 我知道我有很多其他方法来安装 .inf 文件,但我必须......
在 VirtualBox 上安装 androidx86 后,在 CLI 中启动 android 启动,几秒钟后我出现黑屏,屏幕左上角有一个闪烁的下划线,它一直闪烁
Android Studio 无法识别三星 Galaxy 手机
我的三星手机在 Windows 7 上无法被 Android Studio 识别。我通过在此处安装 Samung 驱动程序来修复它: http://developer.samsung.com/technical-doc/view.do?v=T000000117 我测试过...
错误 1324:[Version] 部分应指定 PnpLockdown=1 以防止外部应用程序修改已安装的驱动程序文件
Gravité 代码 描述 Projet Fichier Ligne État de la压制 详细信息 Erreur 1324 [Version] 部分应指定 PnpLockdown=1 以防止外部应用程序修改已安装的...
ODBC 驱动程序升级 13-> X - SQL Server 2016 代理停止工作
卸载 ODBC 驱动程序 13(13.0.1501.5) 并安装 ODBC 驱动程序 17 或 18 时,SQL Server 代理停止工作,并且该服务根本无法启动。 我们有 Microsoft SQL Server 2016...
如何解决 tf_agents 中的错误“TypeError:此 __dict__ 描述符不支持 '_DictWrapper' 对象”?
我使用 tf_agents 编写了一个强化学习算法,并配有自定义环境和网络。来自环境的观察是一本字典(我尝试创建环境bo...
我编写了一个dockerfile来构建docker镜像。此 docker 映像已安装旧版本的 cuda 驱动程序。所以我需要卸载它们,并安装一些更新的。这是
我正在尝试为我的小米 Mi4i 的内核编译 wlan 驱动程序。 我能够成功编译 wlan.ko 文件。 我还在手机上使用了我编译过的相同内核......