今天在调试反射内存PCI卡,PC机内存是2G的,在PCI总线插槽上插三块同样的板卡,由于在系统启动阶段将每个板卡BAR3映射到主机内存的连接物理内存为128Mbit,三块卡所占的内存资源就是128*3=384Mbit,然而接下来要为每个板卡各安装一次驱动程序,驱动中为DMA通信时用AllocateCommonBuffer函数申请128Mbit的连接物理内存空间,这样分别将三块板卡安装完驱动后所占的总物理内存空间就是384Mbit+128*3=768Mbit,理论上是这样的,但前两板板卡安装驱动都正常成功,但为三块板卡安装时出现蓝屏(经检查是在xxxxxFreeResources函数的一个个人犯的低级BUG,修改下就好的),原因是在申请DMA缓冲区时申请失败,有可能是内核空间内存不够用了,系统才拒绝分配。今天为了解决这个问题反复重启计算机N次(N大于10)。。。后来我以为2G内存不够,我又从公司别的电脑上拆下一个2G存条加在机器上,发现问题照旧。
要下班了,决定以退步方式测试下,就是试图将DMA申请缓冲区改为64Mbit,好,DDK编译,为三个板卡重新安装驱动,结果安装都成功。(但项目要求不是64Mbit而是 128Mbit的,现在只是排查问题)
现在主要有点不明白:就是为什么4G的内存分配768Mbit的内存会不够用呢,不过在为每个板卡安装驱动程序用AllocateCommonBuffer函数申请的内存和FPGA的BAR3申请的各各128Mbit内存空间可能都是连续的物理内存,难道虽然4G的空间很大,但连续的物理内存却不够多才导致我的问题的????