wordstar
驱动牛犊
驱动牛犊
  • 注册日期2003-03-18
  • 最后登录2003-08-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3253回复:0

菜鸟的设备驱动开发之路2003-0406

楼主#
更多 发布于:2003-04-06 18:23
悲惨世界了。干了半天,什么都没有保存下来,就死机了。一般来说,玩硬件和驱动想不死机真是圣人和傻子才能做到。我不想
再弄一台机器来了,再来我就被屏幕包围了。

然后继续我的历程:

首先是看看设备被安装成了什么样子了:

Window报告:
PCI 9054 RDK-LITE Board,位置: PCI Slot3,总线2 设备11,功能0
资源设置:
内存范围: FFDDFF00 - FFDDFFFF 256
I/O范围:  FE00 - FEFF 256
内存范围: FD000000 - FDFFFFFF 16M
内存范围: FFDE0000 - FFDFFFFF 256K
中断请求: 18

然后看PLXMON的信息;胡乱做了一下测试,又死机了。真XXXXXX

先看PCR 这东东称做PCI 寄存器。
00 字节是设备号和销售商。 540610B5  54代表为PLX9054 ,06 表示桥。10B5大概是PLX公司的意思。
04 字节是命令状态寄存器。 02900117  里面的选项有:支持新能力,支持快速背对背传输操作,设备选择断言时间1
错误状态无,命令方式有:I/O,内存空间操作,总线主能力,内存写/失效能力,系统错误能力,
08 字节是类代码和版本。0680000B,06表示为桥设备,80代表其他桥类型。00是规定的编程接口,0B是版本号。
0C 字节是Cache行容量寄存器,00002008,MINDSHARE公司的书上对它的说明我没有看懂。
10 字节是基地址,FFDDFF00,前面FFDDFF是基地址,后面的00 表示不可预取,可以定位在4GB以下的任意空间,内存。
14 字节是基地址,0000FE01,前面的30位是基地址,最后两位表示是I/O空间。
18 字节是基地址,FD000000,同10字节
1C 字节是基地址,FFDE0000,同10字节
20 和24 字节也是基地,但在RDK-LITE中不可用,值为00000000
28 字节是CardBus CIS指针,指向CardBus卡的卡信息结构(CIS),CardBus是另外一种体系结构,能和PCI共享芯片。
我们永远都不能明白所有的东西。
2C 字节是子系统设备和销售商ID,905410B5,好理解吧。
30 字节是扩展ROM基地址,值为00000000,扩展ROM译码被禁止。
34 字节表示下一个功能点。值为00000040 ,表示下一个扩展功能寄存器在00000040 位置上。
38 字节保留,值为00000000
3C 字节为中断管脚和中断线,00000112,01表示对应CPU的第一个中断引脚(INTA#)12表示使用18(10进制)号中断。
40 字节开始是扩展功能点。这个功能是电源管理。我们暂时不管电源的问题。00014800,48表示下一个功能点。
44 字节也是电源管理,
48 字节是热交换能力,00004C06,4C是下一个功能点,06表示能力号,具体什么意思我没有研究。
4C 字节是VPD,VPD的意思是关键产品数据(VitalProductData),00000003 ,0000 表示VPD地址,00是下一个功能
点,没有下一个功能。03 是功能号,VPD的功能号就是这个。
50 字节是VPD的数据,000000000,基本上我们没有使用VPD。尽管VPD成为关键,但它从来就不是关键的。
PCR就这麽多,下面看看LCR。这东东称做本地配置寄存器。

LCR 我在书上没有找到论述,可能是PLX公司自己的东东。
首先是Space 和扩展ROM。
Space0 范围: FF000000,对应PCR中的18 字节,这样理解应该10字节的基地址是寄存器使用的。
Space0 Remap:00000000,没有使能。这表明Space0不可用,两次死机估计都是我操作这个空间引起的。
我不知道RDK-LITE有没有配置这16M的内存,板子插进去了,我又不想拿出来看。
扩展ROM范围:00000000,没有扩展ROM
扩展ROM Remap: 00000000,没有当然无法使用。
然后是Space0和扩展ROM的描述字。8B430043,内存空间0 32位,使能TA/Ready输入,使能突发传送,不允许无限制突发传送,等待
时间为0,可能是无限。扩展ROM空间32位,使能TA/Ready输入。我们没办法使用它。
还有读取扩展长数据从EEPROM,De-assert TRDY when Wite FIFO之类的,我也不懂。

然后是Space1
Space1 范围 FFFE0000,128KB,这个空间是可用的,我用它读写成功过。
然后是Space Remap,20000001,不知道为什么是20000001。20000000应该是512M的内存之外,01是干什么的???
Space1 描述: 00000143 ,01估计是空间号,43 和Space0 描述的一样。

然后是DirectMaster。不知道DirectMaster是什么意思。先不看也罢。
其他的有VPD,这东东我不关心,Mode/DMAArbitraction,0101000C,不明白什么意思。
后面是RTR,这东东是运行期间寄存器,
里面定义了8个邮槽(Mailbox),我对邮槽没有概念,除了第4个邮槽为013B4000,第5个为00010000外,其余都是0;
然后是Doorbells 控制。PCI到Local的门铃和Local到PCI的门铃都配置了00000000,中断允许了PCI中断和Local中断,其他都是禁止的。
也就是说,Doorbell好像没有投入使用。
后面是EEPROM和用户IO控制,180F677E,选项太多,不想看了。
然后是硬编码设备ID和版本号,905410B5,0000000C,后面怎么会是12 的我也没有想明白。也许是指EEPROM中软件版本号?

后面是DMA控制,
DMA通道都被禁止了,模式为00000043,和内存映射一致。虽然我最终是想用DMA的,但现在先不看也罢。

最后是MCR,为信息序列寄存器。
看不懂。看样子要先研究以下9054 的资料才能明白。

然后看到,LCR是在9054的EEPROM里面的。应该上面这些东东都在这里面的。

然后看看内存。 DMA内存缓冲区有0x17000字节长度。应该是65536+7*256*16 = 94208字节大小。是可读写的。没有问题。
显示的内存为00FF20000到00FF36ffff
S1 显示的内存为01FC0000 到01FDffff,试图填充1FFFF以后的偏移数据,引起了操作系统内存错误。
也就是说:仅有128K内存可用,系统将它们映射到了内存地址空间。

最新喜欢:

lyjyjjlyjyjj
游客

返回顶部