用C#编写驱动程序
我较早写过C/C ++,但目前,我需要将其转换为C#. 谁能告诉我代码/方式如何在C#? 中写驱动程序 实际上,目前我在C ++上编写的旧应用程序有一些问题,我们必须在C#中编写LPT1,COM打印机和其他USB驱动程序的驱动程序. 解决方案 您不能. C#产生了通过虚拟机(.NET)解释的中间语言.所有这些东西以用户模式运行,WDM驱动程序以内核模式运行. 有一个DDK,但也不支持Vstudio(但是您可以制作一个Makefile项目以进行编译). 驱动程序的发展很复杂,容易蓝屏,需要对C,内核结构和MEM操纵有良好的了解. C#和.NET不需要这些技能,因此有漫长而痛苦的训练路径. 其他解决方案 实际上,如果使用UMDF,则可以在C#中编写一些驱动程序,因为它在USERMODE中运行(请参阅 umdf 入门).但是我的建议是使用C/C ++. 其他解决方案 您不能在C#中编写内核模式驱动程序(在用户模式下运行时执行,因此您无法进入RING
0 2024-04-12
编程技术问答社区
C#驱动开发?
在我跳入C#... 之前 我一直觉得C,或可能是C ++,最适合在Windows上开发驱动程序.我不喜欢在.NET机器上开发驱动程序的想法. 但是.NET似乎是MS进入应用程序开发的方式,因此我现在想知道: 人们是否正在使用C#开发驱动程序? 您是否必须执行很多API钩子,或者C#具有与内核相互作用的设施,而没有很多黑客? 有人可以谈谈接近0的C#程序的可靠性和安全性吗? 我希望我的设备在C#中可用,如果C#中的驱动程序Dev是成熟的,这显然是必经之路,但是如果不建议使用,我不想在那里花费很多努力. 说,开发一个简单的虚拟串行端口驱动程序有什么好的资源? -adam 解决方案 您无法在C#中制作内核模式设备驱动程序,因为运行时不能安全地加载到RIND0并按照预期运行. 此外,C#不创建适合加载作为设备驱动程序的二进制文件,尤其是关于驱动程序需要暴露的入口点.在加载过程中跳入并分析二进制的运行时间的依赖性禁止驱动程序子系统加载二进制的直接
0 2024-04-11
编程技术问答社区
USB驱动程序编译错误
我目前正在尝试编译Linux USB UART驱动程序,该驱动程序在此处提供: http:///www.exar.com/connectivity/uart - 和桥接溶解/usb-uarts/xr21v1410 该驱动程序由2个标头文件和一个大C文件组成.这些是makefile的内容: obj-m := vizzini.o KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) EXTRA_CFLAGS := -DDEBUG=0 all: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c
0 2024-04-09
编程技术问答社区
在linux上用make编译驱动
此错误消息是什么意思?我正在尝试运行.看起来配置丢失了.配置是内核源的一部分? make -C /lib/modules/4.2.0-19-generic/build SUBDIRS=/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE modules make[1]: Entering directory '/usr/src/linux-headers-4.2.0-19-generic' CC [M] /home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.o /home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.c:55:6: error: macro "__TIME__" might pre
0 2024-04-09
编程技术问答社区
驱动程序如何成为操作系统的一部分?
我知道OS内核是由驱动程序组成的,但是驾驶员如何成为操作系统的一部分?对于内核吗? 解决方案 驱动程序架构完全取决于您的操作系统.对于大多数在计算机上运行的操作系统(与嵌入式设备相反),将驱动程序视为内核的"插件"几乎是准确的.也就是说,有很多较旧,较小且不太复杂的操作系统,需要您作为内核的一部分来构建驱动程序 - 没有动态加载.如今,几个操作系统都支持"用户模式"驱动程序,这些驱动程序是根本不在内核内存空间中运行的设备驱动程序. 其他解决方案 它取决于O/S. 通常,内核是一个单片可执行的,包含所有驱动程序 - 并且在需要添加新驱动程序时重建,包括新驱动程序的代码以及所有旧驱动程序. 在现代Linux和可能的其他O/S中,驱动程序在需要时由内核动态加载.驱动程序的形式允许内核进行加载;通常,这意味着在共享对象或动态链接库格式中. 其他解决方案 在像Linux驱动程序这样的操作系统中,实际上可以将其编译到内核图像中.尽管即使静态链接,它们也很可能展示插入式
0 2024-04-09
编程技术问答社区
我应该如何开始编写设备驱动程序?
我想学习如何编写设备驱动程序,因为我认为这很有趣.我使用Mac OS X MacBook,但也有一台Ubuntu机器(在Mac Min上运行).我对C非常熟悉,目前正在阅读这本书.我在网上找到了一些链接,例如 我想我想要的是一些提示,建议和指导,而且有人知道没有驱动程序的设备列表,或者我可以为已经支持的东西写一个驱动程序(我更喜欢前者,所以我M实际上提供价值).有什么好设备开始使用?我咬的比咀嚼还要多吗?我不怕低级编程或组装或任何需要的努力.我真的想要一个挑战! 解决方案 对于Linux,您可能会考虑捡起O'Reilly Linux内核模块编程编程指南是另一个不错的资源./p> 您可能还想在Linux内核上挑选一本书.我拿起了罗伯特·洛夫(Robert Love)的 linux kernel development(2nd Edition)(第二版)为此目的方式). 其他解决方案 编写设备驱动程序可以很简单,也可能几乎是任意复杂的.例如,我参与了一个项目,在该项目中,
4 2024-04-07
编程技术问答社区
三星Galaxy蓝牙驱动程序
我为Android写了一个申请.主要部分是它通过蓝牙进行通信.我有四个设备: 1.三星Galaxy S2 2.三星Galaxy Gio 3. NetSurfer Touch(在本地[南非]生产的Android平板电脑) 4.摩托罗(Motorolla)et1 现在我写了我的应用程序 - 我需要测试完整的结构. 我首先写了蓝牙方面(因为那是我在最少的经验) - 我唯一可以使用的设备是NetSurfer触摸.它使用标准的蓝牙驱动程序,并且可以很好地工作 - 我可以在PC上接收信号并很好地处理. 我应用程序的另一部分无法在NetSurfer上完成,因为它的规格太低(实际上没有所需的硬件).我尝试了摩托车,整个应用程序都可以预期. ,但是现在Galaxy手机(GIO和S2)都拒绝与任何计算机连接.它们会配对,但是当我使用蓝牙代码连接时,我只会得到 ioexception:服务发现失败 由于它不是我的代码,所以我开始查找我的计算机上缺少驱动程序:"蓝牙外围设备
0 2024-04-01
编程技术问答社区
USB编程
我想对微控制器(AVR)进行编程,以通过USB控制一些LED.这只是对如何构建和编程USB设备的兴趣. 有一些AVR微控制器支持USB协议,或者我可以自己在另一个微控制器中实现USB协议,但我想知道该用什么用来在计算机上编写您自己的驱动程序. 我在系统编程中的水平:总菜鸟(因此问题) 那么,您的文献是什么,您会建议什么以了解USB技术的知识,以及如何编写自己的驱动程序及以后? P.S.:我知道: c(可能在这里需要它) java(可能在这里不需要) python(希望可以在这里使用) 汇编器(希望在这里不需要它xD). ... P.P.S:驱动程序开发因不同的操作系统而有所不同.我使用Linux和Windows,因此欢迎与其中一个或两个系统有关的任何材料. 解决方案 好吧,尽管您可以开发和写自己的USB驱动程序,但USB的优点在于您不需要写自己的驱动程序. 如果您真的想熟悉USB的开发,则应首先查看其他解决方案 如果您是使用
2 2024-03-21
编程技术问答社区
FIQ和IRQ中断系统的区别是什么?
我想知道FIQ和IRQ中断系统之间的区别 任何微处理器,例如:ARM926EJ. 解决方案 现代臂CPU(以及其他一些)的功能. 摘自专利: 执行快速的一种方法 中断数字数据处理器 具有更多处理能力 提供一个中断.当一个 收到快速中断请求 设置了标志,程序计数器 条件代码寄存器是 存储在堆栈上.在 中断日常申报 从中断说明检索 条件代码登记册 包含数字状态 数据处理器和检查以查看 是否已设置标志. 如果设置标志,则表明 快速中断服务了, 因此,只有程序计数器是 未藏品. 换句话说,FIQ只是一个更高的优先级中断请求,在请求服务过程中,通过禁用IRQ和其他FIQ处理程序来优先使用.因此,在处理活动FIQ中断期间,不会发生其他中断. 其他解决方案 ARM调用FIQ 快速中断,这意味着IRQ是正常优先级.在任何实际系统中,中断的来源都将不仅仅是两个设备,因此将有一些外部硬件中断控制器允许这些多个来源的掩模,优先级等,并将中断请求行驱动到处理器. 在某种程度上
4 2024-03-03
编程技术问答社区
安卓工作室无法识别我的小米红米Note3
当我尝试通过Android Studios"运行"应用程序时,我的小米Redmi Note 3并未在列表中弹出.但是,它确实显示在我的PC文件资源管理器中. 我已经做过的事情; 努力安装小米自己的USB驱动程序和Google的USB驱动程序,结果相同; "没有新的驱动程序" 启用USB调试,没有不同的 - 在PTP和MTP模式之间进行编织 有人可以帮我吗? 解决方案 => 启用Redmi注释3: 中的开发人员模式 1:转到设置. 2:单击"关于电话"选项. 3:按 7次 到" miui版本"选项. 现在,您将看到敬酒消息"现在您是开发人员" . => 现在您应该从 1:与连接的Redmi一起安装PC套件. 2:现在继续设置许可,然后单击"通过USB安装". => 用于启用USB调试: 1:打开设置>其他设置>开发人员选项. 2:首先启用开发人员选项,然后下方找到USB调试并启用它. 3:当您的
6 2024-02-18
编程技术问答社区
在安卓系统上获得一个活动的驱动程序列表
是否有一种直接的方法可以获取当前在Android设备上使用的驱动程序列表? lsmod列出了少数驱动程序(3),但我猜想大多数驱动程序都被编译到内核中,而不是模块. 显然,由于设备本身缺乏开发工具,make menuconfig之类的事情没有工作机会.我可以下载内核来源,但我希望避免安装整个交叉补偿工具链,只是为了满足我的好奇心. 我知道这个问题,但除了指出为什么在这种情况下为什么不起作用,它并没有真正回答我的问题. 解决方案 /proc/config.gz应该告诉您相同的信息,您会在make menuconfig中找到答案. adb pull /proc/config.gz . zcat /proc/config.gz | less 编辑:还考虑浏览sysfs用于内置的sysfs: ls -l /sys/module
16 2024-02-05
编程技术问答社区
重启AMI后,NVidia驱动没有在AWS上运行
大家,我有以下问题: 我使用此 ami 开始了P2实例.我安装了一些工具,例如屏幕,火炬等.然后,我成功地使用GPU运行了一些实验,并创建了该实例的图像,以便我可以终止它并稍后再运行. 后来,我从以前创建的AMI开始了一个新实例.一切看起来都很好 - 屏幕,火炬,我的实验在系统上存在,但是我无法与以前进行相同的实验: nvidia-smi失败了,因为它无法与Nvidia通信 司机.确保安装了最新的NVIDIA驱动程序,并 跑步. 对我来说,看来驱动程序可能已经安装了(因为所有其他工具都是从前安装的),但是它们没有运行.这是正确的假设吗?我该如何启动它们? 解决方案 我们最近遇到了这个问题.在我们的情况下,似乎AWS实例上的默认内核已升级(从4.4.0-1049-AWS到4.4.0-1061-AWS),但是新的内核没有安装NVIDIA模块: ubuntu@ip-XXX-XXX-XXX-XXX:~$ ls -laR /lib/modules/4.4.0-
10 2024-01-25
编程技术问答社区
.NET File.Exists在Windows/System32/Drivers文件夹中不起作用?
该过程已提升,我确保了vs debugger中的路径正确(我正在使用emovention.getFolderpath(emovention.specialfolder.system)不硬编码),但是文件.Exists仍然返回false. 我需要这是确保安装某些第三方驱动程序的解决方法,因为他们的注册表设置未在卸载上删除. 我知道写作是通过虚拟化重定向的,但是检查文件的存在也是正确的吗? 解决方案 是的,虚拟化发生在非常低​​的级别. file.exists方法基本上调用win32 createfile方法并检查错误. CreateFile由WOW子系统重定向. 您可以在调用之前暂时禁用虚拟化. [DllImport( "kernel32", CharSet=CharSet.Unicode, SetLastError=true )] public static extern bool Wow64DisableWow64FsRedirection( ref Int
18 2024-01-09
编程技术问答社区
DriverPackagePreinstall可以在64位上工作(编译为32位)。
有什么方法可以编译一个调用DriverPackagePreinstall()(使用PinVoke)的应用程序,即使它针对32bit? ,它也可以在64位设备上使用(Windows 7) 原因将作为更大的应用程序的安装程序的一部分(使用Windows Installer Project)运行,该安装程序的目标是32位,但也必须在64位平台上运行. 这是我的代码: using System; using System.Linq; using System.Runtime.InteropServices; namespace MyDriver { class Program { static void Main(string[] args) { if (args.Count() == 0) { Console.WriteLine("Please s
4 2024-01-08
编程技术问答社区
android-sdks/build-tools/17.0.0/aapt:加载共享库时出错:libz.so.1:无法打开共享对象文件。没有这样的文件或目录
我刚刚安装了Eclipse,Android SDK和JDK在64位Fedora 14的新装置上安装,但是当我创建一个新项目时,我将在控制台中遇到以下错误: android-sdks/build-tools/17.0.0/aapt:加载共享时错误 库:libz.so.1:无法打开共享对象文件:没有这样的文件或 目录 我正在使用64位机器,我需要安装一些32位驱动程序, 因此,我正在尝试安装: sudo apt-get安装ia32-libs阅读包列表...完成构建 依赖树...完成E:找不到软件包Ia32-libs 任何人帮助我如何解决64位Fedora 14 Machine Libz.so.1问题 解决方案 运行kubuntu 13.10(x64),我使用了lib32z1,它为我修复了. sudo apt-get install lib32z1 其他解决方案 lukacsa,它起作用了!简单而伟大的建议 尝试以下操作: sudo y
8 2024-01-08
编程技术问答社区
是否有办法在没有底层操作系统的情况下驱动今天的计算机网卡?
我想编写一个没有基础操作系统的IO密集型应用程序,在X86体系结构上运行并驱动任何现代网络接口控制器. 通过查看Linux的驱动程序源代码,我知道需要数千行代码才能驾驶,例如Intel E1000E Gigabit Controller.我认为从Linux源代码提取此类代码很难. 您知道有任何解决方案/项目提供一种方法来驱动当今计算机(包括其NIC),可能是通过包装Linux驱动程序吗? 非常感谢 解决方案 您必须编写一个驱动程序和一个操作系统来管理这一切.调度,内存管理,从io band io,一个IP堆栈(如果您选择走该路线).为什么要重新发明轮子?获取实时的Linux发行版,或获取VXWorks或QNX - 针对IO密集要求的专门构建. 其他解决方案 undi旨在以实际(16位未保护)模式运行,这使得无需操作系统就可以易于使用. (没有操作系统或像DOS这样的愚蠢的操作系统要比现代OS中的OS容易得多,该操作系统以32或64位保护模式运行.)
6 2023-12-15
编程技术问答社区
使用WMI查找服务的依赖关系,然后区分依赖服务和依赖驱动程序
MSDN上有一个代码示例,该示例使用WMI列举特定服务的所有依赖项:这很棒...但是我发现它发现的依赖项可能并非全部是相同的类型.我期望所有依赖性都属于win32_service ...但是有时您会发现依赖性实际上是驱动程序(win32_systemdriver). so ..我的问题很简单 - 如何调整MSDN代码示例以对每个依赖关系执行检查,并查看它是Win32_Service还是Win32_Systemderdriver,以便我可以适当地处理它?如果您在JScript中提供解决方案(MSDN上的示例是vbscript,但我正在使用JScript). ). 解决方案 结果> QUERY(如 UROC的答案),您将获得任何Win32_BaseService子类 - Win32_Service,Win32_SystemDriver以及Win32_TerminalService. 要以不同的方式处理不同的对象类,您可以使用var strComputer = ".";
10 2023-12-11
编程技术问答社区
在MSI安装后,我如何使用Burn和DPInst来安装驱动?
我有一个设置 msi 用于我们的应用" https://en.wikipedia.org/wiki/ftdi" rel =" nofollow"> ftdi 也需要安装的驱动程序.我想让他们安装 burn 而不是WIX MSI来保持自定义从MSI出发(但是,我也尝试了CA路线). 我已经尝试将指令放入有没有办法告诉burn使用驱动程序安装MSI后使用的文件位置执行DPINST?当前,MSI将驱动程序文件和DPINST复制到安装目录中的A Drivers文件夹中.在网上查看并在堆栈溢出上查看之后,我似乎没有其他人在这样做. 我还尝试使用MSI中的CustomAction路由,但是CustomAction无法执行.我希望将驱动程序安装在Burn上,但是如果他们与MSI一起工作,我会为此安顿下来.当前,MSI将文件复制到驱动程序文件夹,并且自定义看起来像这样:
20 2023-12-10
编程技术问答社区
在Windows 8.1上预装驱动程序失败了
我们有一些驱动程序软件包,我们在Windows上的驱动程序商店中使用 setupcopyoeminf ,跟随 Microsoft的建议程序.这个过程已经正常运行了多年. XP,Vista,7甚至8. 上没有问题. 在避开Windows 8.1 RTM时,我们发现我们的驾驶员不再预装. 检查setupapi.dev.log,我发现: !!! sto: Failed to query boot critical status of device class. Error = 0x00000002 及以后: !!! idb: Failed to query inbox status of device class {ff646f80-8def-11d2-9449-00105a075f6b}. Error = 0x00000002 !!! idb: Failed to p
16 2023-12-07
编程技术问答社区
如何在Windows 8.1上修复预装的驱动程序
与所述的情况相同 windows 8.1上的预启动驱动程序 . 但是,是否有修复程序如何重新安装相同的驱动程序包(无需更改),而不重新安装8.1? 情况: 在新鲜的Windows 8.1安装(不从8.0升级)上,无法安装我们的USB设备.行为可以通过VM复制: 使用来自INF文件的类GUID创建注册表条目,以显示正确的USB图标并在设备管理器中创建自己的组: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{71f11c3d-6aaf-489e-ae80-f705496f1ec3}] "Icon"="-20" @="My Devices" "IconPath"="C:\\Windows\\system32\\setupapi.dll,-20" 连接设备 使用"浏览我的计算机for Driver软件"手动将驱动程序安装在设备管理器中.提示设备软件时单击"安装".安装以: 结束 Err
38 2023-12-07
编程技术问答社区