阅读:3310回复:0
菜鸟的设备驱动开发之路2003-0406
悲惨世界了。干了半天,什么都没有保存下来,就死机了。一般来说,玩硬件和驱动想不死机真是圣人和傻子才能做到。我不想
再弄一台机器来了,再来我就被屏幕包围了。 然后继续我的历程: 首先是看看设备被安装成了什么样子了: 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内存可用,系统将它们映射到了内存地址空间。 |
|
最新喜欢:lyjyjj |