官方都只发布Windows驱动,无原理图,如何自已为它写Linux驱动?提供点手段思路

时间:2020-12-05 00:26:03
大多数设备官方都只发布Windows驱动,但这些设备发现好多在Linux后来也有了驱动,我想知道官方是不可能发布硬件资料出来的,在只有Windows驱动可执行文件的情况下,这些linux设备驱动是怎么写出来的?如何探明硬件细节?是拆了设备看电路板然后分析电路的吗?请各位高手给点思路....因为能把Windows驱动移到Linux下是很有趣的一件事,现在有linux驱动开发经验,但都是在有硬件资料的情况下开发的,对于厂商开发出的成品设备该如何为它写驱动呢?有哪些手段可以用?请高手们指教,多谢,多谢..

8 个解决方案

#1


通常 pc 机上的外围设备都是标准设备,比如 pci 设备 ,ide 设备, usb 设备。
像 pci 这种设备,完全不需要了解主板是如何设计的,你只需要扫描 pci 卡的配置空间,获取你要的信息,
然后根据设备的 datesheet 去写驱动就ok了。

#2


无论是windows驱动还是linux驱动, 都有自己的框架。 相应也有自己的sample。
windows有著名的DDK, linux在kernel下源码无数。
配合书籍搞懂这些, 软后再加上设备的datasheet ,无敌了。。

#3


如果是比较有能力的开源工程师,很多厂家其实愿意提供相关的开发资料
以方便其开发。现在的硬件一般比较复杂,自己独力分析然后开发软件难
度较大。

#4


扫描PCI卡的配置空间,就算有空间地址也并不知道每个地址被定义成了功能吧,那驱动也还是没法写的..设备的datasheet应该是没有的,如果有设备的资料那就不难写了..

举个例子来说吧:
假如现在有一块PCMCIA的并口转接卡,用于笔记本上扩展并口出来的,厂家提供了XP上的驱动程序,运行良好,但是我想在Linux下也能用这个设备,显然应该有个驱动,如果我们现在就是要开发这个驱动,怎么着手呢?没有设备硬件资料,也不知道这个卡内部用的什么芯片,没有原理图,只有一个可运行的window驱动,这种情况下写LInux驱动肯定条件是不具备的,我就是想知道用什么手段能在官方不提供电路资料和功能资料的情况下完成一个设备的Linux支持?比如是不是把电路板拿出来抄出一块板子来..???

我只所以这样想是因为Linux下已经支持了很多设备,而这些设备在发布时也大多没有官方Linux驱动,那么后来这些设备的Linux驱动是怎么写出来的?厂方应该不会发布厂品内部资料的...

#5


如果按 morris88 所说那应该是可以的...
这也就是说开源的驱动还是需要厂家来提供支持的..不然的话我们自已徒手是很难弄出来的...
主要还是取决于厂家对开源的态度...

#6


看了楼主的想法,有点启发。
我自己最近也在针对一块自做的设备板写USB驱动程序,发现一点问题:无法实现通信的链接,想向您请教下!~
我自己针对一个用8051芯片做的板子做了一个驱动程序,然后驱动成功后会在/dev下出现相应的设备文件skel0(我看网上都说可以直接对其进行读写操作即可),我又用自己另外编写的一个具备打开、读写、关闭功能的小程序对其进行操作的时候,没有反应,也即没有数据读出来,不知道该怎么做好。是哪一步出问题了还是怎么回事。
另:在那块板子中是灌注了程序的。是否需要对其通信协议了解后,在自己做的程序中进行相应的设置呢?不太懂。请指教!~

#7


要驱动起一个设备是肯定要需要对其通信协议了解的,不然设备不能按正常收到指示或数据自然无法正常工作.
至于对设备的设置,有一些是放在驱动层的,这部分一般是与设备间可以自动协商的参数,而有一些是开放给应用层的,这部分就需要你的应用程序对设备做的设置....

#8


不知道您做过没相关驱动没?设备上的通信帧的格式以及帧相关内容都有,但是不晓得该如何应用它们。请指点下。谢谢了~~

#1


通常 pc 机上的外围设备都是标准设备,比如 pci 设备 ,ide 设备, usb 设备。
像 pci 这种设备,完全不需要了解主板是如何设计的,你只需要扫描 pci 卡的配置空间,获取你要的信息,
然后根据设备的 datesheet 去写驱动就ok了。

#2


无论是windows驱动还是linux驱动, 都有自己的框架。 相应也有自己的sample。
windows有著名的DDK, linux在kernel下源码无数。
配合书籍搞懂这些, 软后再加上设备的datasheet ,无敌了。。

#3


如果是比较有能力的开源工程师,很多厂家其实愿意提供相关的开发资料
以方便其开发。现在的硬件一般比较复杂,自己独力分析然后开发软件难
度较大。

#4


扫描PCI卡的配置空间,就算有空间地址也并不知道每个地址被定义成了功能吧,那驱动也还是没法写的..设备的datasheet应该是没有的,如果有设备的资料那就不难写了..

举个例子来说吧:
假如现在有一块PCMCIA的并口转接卡,用于笔记本上扩展并口出来的,厂家提供了XP上的驱动程序,运行良好,但是我想在Linux下也能用这个设备,显然应该有个驱动,如果我们现在就是要开发这个驱动,怎么着手呢?没有设备硬件资料,也不知道这个卡内部用的什么芯片,没有原理图,只有一个可运行的window驱动,这种情况下写LInux驱动肯定条件是不具备的,我就是想知道用什么手段能在官方不提供电路资料和功能资料的情况下完成一个设备的Linux支持?比如是不是把电路板拿出来抄出一块板子来..???

我只所以这样想是因为Linux下已经支持了很多设备,而这些设备在发布时也大多没有官方Linux驱动,那么后来这些设备的Linux驱动是怎么写出来的?厂方应该不会发布厂品内部资料的...

#5


如果按 morris88 所说那应该是可以的...
这也就是说开源的驱动还是需要厂家来提供支持的..不然的话我们自已徒手是很难弄出来的...
主要还是取决于厂家对开源的态度...

#6


看了楼主的想法,有点启发。
我自己最近也在针对一块自做的设备板写USB驱动程序,发现一点问题:无法实现通信的链接,想向您请教下!~
我自己针对一个用8051芯片做的板子做了一个驱动程序,然后驱动成功后会在/dev下出现相应的设备文件skel0(我看网上都说可以直接对其进行读写操作即可),我又用自己另外编写的一个具备打开、读写、关闭功能的小程序对其进行操作的时候,没有反应,也即没有数据读出来,不知道该怎么做好。是哪一步出问题了还是怎么回事。
另:在那块板子中是灌注了程序的。是否需要对其通信协议了解后,在自己做的程序中进行相应的设置呢?不太懂。请指教!~

#7


要驱动起一个设备是肯定要需要对其通信协议了解的,不然设备不能按正常收到指示或数据自然无法正常工作.
至于对设备的设置,有一些是放在驱动层的,这部分一般是与设备间可以自动协商的参数,而有一些是开放给应用层的,这部分就需要你的应用程序对设备做的设置....

#8


不知道您做过没相关驱动没?设备上的通信帧的格式以及帧相关内容都有,但是不晓得该如何应用它们。请指点下。谢谢了~~