阅读:2201回复:17
老板逼我,疯了。
现在老板让我开发一个ISA卡在2000下的驱动。这个卡好象主要完成传真监控。首先他没给我那个卡,他只给我提供了一个以前在98下的.asm文件。从这个文件中我知道要对:双口RAM,中断,DMA,等操作。我是个新手,不知道该咋做,我真得快疯了。
|
|
|
沙发#
发布于:2002-04-15 08:42
新手我的建议还是windriver,这种问题立即搞定,否则从头开始了解驱动概念,时间太长了
|
|
|
板凳#
发布于:2002-04-15 12:24
可是调试呢?不了解的话怎么做?不能指望写完就OK吧?
|
|
|
地板#
发布于:2002-04-15 15:01
Windriver里不是也能调试吗?想会用Windriver是不是看它的手册就足够了?哪儿有没有中文版的,因为它的英文版太长了,MY GOD,276页。
|
|
|
地下室#
发布于:2002-04-15 15:11
windriver的手册应当算是短的,耐心看完吧,通常英文的表述更准确.
|
|
|
5楼#
发布于:2002-04-16 09:10
查看了整个Windriver的手册,发现对硬件的资源的访问只限于I/O,MEMORY,Interupt以Register.而且大多都是针对PNP,我想问一下,现在我要开发的是Non PNP的ISA卡,那是不是我要对ISA卡的这些资源自已指定?另外,我还要用到对DMA的访问。手册中只有两个关于DMA的函数:WD_DMA()和WD_DMA_PAGE()这两个函数是否足够?
|
|
|
6楼#
发布于:2002-04-16 10:25
DMA的两个函数绝对不够用,你没有指定相关的DMa控制器资源,没有设定寄存器,DMA是运行不起来的.和硬件相关的东东通常不是调用几个标准函数就可以解决问题的.
非即插即用卡的资源自己指定. |
|
|
7楼#
发布于:2002-04-16 17:21
从你提供的简单情况来看,老板只给了。ASM文件,我的观点硬件板肯定不是PNP的,那么你必须先把。ASM文件读通,然后读懂,我估计并不需用到诸如WINDRIVER之类的工具。先肯定地告诉我,板子是工作在实模式还是保护模式?
|
|
8楼#
发布于:2002-04-16 18:04
首先要感谢楼上各位给我的帮助,说实话对我真是像冬天里给了把炭一样,使我暧融融的。老板没给我板子也没告诉我是实模式下还是保护模式,唯一给我的就是那个.asm,不过那板子的确不是pnp的,它以前是在98下运行的,没驱动,只有两个.asm提供一系列的函数。后来因为不稳定,要改成在2000下去用。而2000又不认什么.asm,所以
我一下就急了。我在看到那段汇编时说实在的真是从内心里感到汇编的强大。就那几行,能实现在2000驱动下要那么行去实现。不妨我把这几行拷到下面,大家有针对性的谈一下,看如何从2000角度去实现。第一个getramnr和setramnr两个函数实际上就是对端口的读写,还是很简单的,但后面的要对端口连续进行操作,我就不知道在2000驱动下如何实现了。 Static Name Aliases ; TITLE fax_txcz ; NAME fax_txcz.asm .286c FAX_TXCZ_TEXT SEGMENT BYTE PUBLIC \'CODE\' FAX_TXCZ_TEXT ENDS _DATA SEGMENT WORD PUBLIC \'DATA\' _DATA ENDS CONST SEGMENT WORD PUBLIC \'CONST\' CONST ENDS _BSS SEGMENT WORD PUBLIC \'BSS\' _BSS ENDS DGROUP GROUP CONST, _BSS, _DATA ASSUME CS: FAX_TXCZ_TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP EXTRN __chkstk:FAR EXTRN _sjkbuf:BYTE FAX_TXCZ_TEXT SEGMENT PUBLIC _getramnr _getramnr PROC FAR push bp mov bp,sp push dx ; dkaddr = 6 mov dx,[bp+6] ;dkaddr in al,dx sub ah,ah pop dx mov sp,bp pop bp ret _getramnr ENDP PUBLIC _setramnr _setramnr PROC FAR push bp mov bp,sp push dx ; dkaddr = 6 ; data = 8 mov dx,[bp+6] ;dkaddr mov al,[bp+8] ;data out dx,al pop dx mov sp,bp pop bp ret _setramnr ENDP PUBLIC _hqidmasj _hqidmasj PROC FAR push bp mov bp,sp push bx push cx push dx push si ; addr = 6 ; qsaddr = 8 mov cx,WORD PTR [bp+6] inc cx inc cx mov bx,WORD PTR [bp+8] mov si,0 cmp WORD PTR [bp+8],3000H ;qsaddr jae $I24 $F25: cmp si,12288 ;PM jge $I29 mov dx,cx mov ax,bx out dx,ax inc bx mov dx,WORD PTR [bp+6] ; in ax,dx in ax,dx mov BYTE PTR _sjkbuf[si],ah inc si mov BYTE PTR _sjkbuf[si],al inc si ; in ax,dx in ax,dx jmp SHORT $F25 $I24: cmp si,12288 ;DM jge $I29 mov dx,cx mov ax,bx out dx,ax inc bx mov dx,WORD PTR [bp+6] ; in ax,dx in ax,dx mov BYTE PTR _sjkbuf[si],ah inc si mov BYTE PTR _sjkbuf[si],al inc si jmp SHORT $I24 $I29: pop si pop dx pop cx pop bx mov sp,bp pop bp ret _hqidmasj ENDP PUBLIC _fwcz _fwcz PROC FAR push bp mov bp,sp push bx push dx push es push si ; addr = 6 ; cxbuf = 8 ; cxcd = 12 les si,[bp+8] ;cxbuf mov ax,1 ; mov dx,WORD PTR [bp+6] ;xxxH数据口 inc dx inc dx ;xxx+2H out dx,ax dec dx dec dx ;xxxH mov bx,3 ;i jmp SHORT $L20002 $F27: mov ah,es:[bx][si] mov al,es:[bx+1][si] out dx,ax mov ah,0 mov al,es:[bx+2][si] out dx,ax add bx,3 $L20002: cmp bx,[bp+12] ;cxcd jl $F27 mov ax,0 mov dx,WORD PTR [bp+6] ;xxxH inc dx inc dx ;xxx+2H out dx,ax dec dx dec dx ;xxxH mov bx,0 ;i mov ah,es:[bx][si] mov al,es:[bx+1][si] out dx,ax mov ah,0 mov al,es:[bx+2][si] out dx,ax $I44: pop si pop es pop dx pop bx mov sp,bp pop bp ret _fwcz ENDP FAX_TXCZ_TEXT ENDS END |
|
|
9楼#
发布于:2002-04-16 23:28
诸位,WinDriver能开发WIN2000的驱动吗?据我所知,WinDriver的应用应该在95/98/ME平台。
|
|
|
10楼#
发布于:2002-04-17 09:27
windriver当然能用在win2000,只不过版本应该新一点.
这些代码看来是运行在16位实模式下的,改成2000下运行这些源代码应该没用了,关键是分析他具体作了些什么事情,完成一项工作要有哪些具体步骤. 端口的读写windriver实现非常容易. |
|
|
11楼#
发布于:2002-04-17 11:22
我的观点,板子是工作在实模式,并且不需所谓WIN98或WIN2K驱动,只不过是在WINDOWS操作系统下的一块8086模式的应用,这样看来,也无需专门为他写什么驱动程序了,将你手重的。ASM文件编译以下,看看是个什么现象,运气好的话,就可交差,先试试看,祝你好云。
|
|
12楼#
发布于:2002-04-17 14:21
如果是98,95,而且只涉及io端口的操作,那么可能真的是只要编译一下就可以运行.但现在的前提是2000,而且有端口,擅自操作端口几乎肯定要蓝屏.何况还有中断,dma
|
|
|
13楼#
发布于:2002-04-18 21:12
怎么看怎么象反汇编的东东,你命真好,真的很好。
|
|
|
14楼#
发布于:2002-04-18 22:02
楼上的,你为什么说我命好啊,说实话,我愁都愁不过来呢,不过很感谢各位帮忙,我觉得这个网站的讨论的气氛真得很浓,很好。我以后要多向大家学啊
|
|
|
15楼#
发布于:2002-04-24 14:35
用windriver来解决isa型驱动烦恼
etude 写到 \"www.windriver.com有下载驱动程序快速生成软件,有for win和for linux的,且每个平台都有windriver和kerneldriver两中版本(区别么看名字就知道了) 以下是针对isapnp(有点老的结构)设备怎样在linux下正确安装驱动做个简单说明首先弄到pnptools这套工具(套装linux都有带),先在/etc下建立配置文件(关于pnptools的用法可看man) , 这个配置文件记录了你机器上所有isa设备的可利用资源信息,不过每个设备只有一组资源可用,其余的不能用.接下来就是确定你的设备到底占用了哪些资源,并根据具体情况更改配置.有很多文章都推荐进入windows的系统管理来观察资源(假定你的设备在win下可以工作),并根据win的数据更改linux下的.但是,win和linux分配硬件资源的代码并不一样,根据win只会导致失败(在我的机器上就是如此,win中mouse为com2,linux里为cua0,真是奇了怪了!)你可以去www.windriver.com下载windriver for linux,然后运行里面的工具pnpscan(注意了没注册的windriver模块只能运行10分钟,所以要快点执行pnpscan),这样它会把linux下所有isapnp设备的正确资源都找出来,开始改配置吧(我的modem就这样搞定的). 由于有isapnp(pnptools的一个程序)的帮助,linux可以正确安装isa设备了,那么pci设备怎么办呢?在此提供一个设想: 下载windriver for win 和 for linux,用wd for win的驱动程序生成向导对你所指定的设备快速生成驱动源代码(无须自己写),然后在linux下的wd中编译,加载wd模块后,编译的驱动应该可以顺利执行.但是linux下没注册的wd模块只能运行10分钟,管不管用我没试过. btw,linux下显卡是最麻烦的设备了,当初为了linux的x,特地去弄了块可以用的,以前那块pci的显卡在linux下根本就是废物了.(当时没有看到windriver,本来倒可以试试win下生成的驱动在linux下是不是可以用)\" |
|
16楼#
发布于:2002-04-24 14:48
如果你只是做简单的驱动程序,那你可以用windriver,要是具体的话,那你可要用到driver studio来开发比较的好一些,具体的你自己把握了。
|
|
17楼#
发布于:2002-04-26 15:41
老板再逼你,你就革命吧! :D
|
|
|