Linux环境下无配置信息PCI设备的驱动开发(2)

  除了读写操作外,有时还需要控制设备。这在操作时可以通过设备驱动程序中的ioctl()来完成。另外,对于不支持中断的设备,读写时需要轮流查询设备状态,以决定是否继续进行数据传输。如果设备支持中断,则可按中断方式进行。

  3 无配置信息PCI设备驱动程序的设计

  无配置信息PCI设备驱动程序设计的关键在于初始化,其余部分与标准PCI设备驱动差别不大。其初始化的方法有两种:一是选用外接的EEPROM来存储该设备的配置信息;二是直接在驱动程序的探测模块里注册设备。

  用外接EEPROM配置方式时,内核启动后会检测EEPROM,然后读出其中的配置信息,并将设备的信息注册到pci dev里。

  在实际的系统应用中,如果无法外接EEP-ROM,就必须直接在驱动程序的探测模块里注册设备。在这种方式下,若系统中没有其它的即插即用PCI设备,则可能会导致检测设备失败,但事实上已经注册了该PCI设备,因此完全可以正常运行。

  笔者开发的嵌入式TDMA卫星通信系统中的CPU采用MPC8250芯片,基带信号处理模块采用Xilinx公司的X3SC4000(FG676)。MPC8250是Mo-torola公司开发的一款PowerPC系列嵌入式处理器,该处理器中有32位超标量体系结构Power-PC603e处理器内核,并集成有PCI桥、PCI仲裁器、存储器控制器等部件。FPGA的设计中则包括PCI接口、sdram控制器及编码调制运算模块。

  此操作系统采用Linux,内核版本为2.6。由于Linux能很好地支持PCI总线,本设计在CPU和FPGA之间采用了PCI总线连接方式。由于FPGA的设计要求,PCI总线的中断信号未被使用,而是另行设定了两条中断信号线通往MPC8250的通用设计口。该系统支持FPGA中bin文件的实时更新,因此没有采用配置EPROM来配置FPGA,而是把要下载到FPGA里的bin文件同Uboot、Linux内核及jffs2文件系统一起放在了FLASH里,然后通过MPC8250提供的SPI总线下载到FPGA中。实际上,如需要更新FPGA的.bin文件,则可通过以太网口将文件拷入FLASH中再下载。

  在系统上电启动后,由于Linux内核先于jffs2解压,而FPGA的文件又必须在jffs2解压完后才能释放到内核空间,然后再借助SPI总线下载到FP-GA中,因此无法在FPGA中创建PCI设备配置信息空间,所以,本设计采用在检测PCI设备时直接注册的方法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwswwd.html