PMON PCI空间分配解析与开发详解

需积分: 38 24 下载量 172 浏览量 更新于2024-08-25 收藏 186KB PPT 举报
"本文主要介绍了PCI空间分配在PMON中的实现和解读,涉及PMON的版本、编译环境以及PMON2000的目录结构和框架。文章以PCI空间分配为例,阐述了如何在PMON中建立数据结构来管理PCI设备的Memory和IO空间,并提到了相关设备驱动的实现。" 在PMON中,PCI空间分配是一个关键部分,它涉及到PCI设备如何在内存和I/O空间中获取和管理地址。在提供的代码段中,我们可以看到数据结构`pb`被用来存储PCI空间的相关信息。`pci_mem_base`表示Memory空间的基地址,而`pci_io_base`代表IO空间的基地址。`minpciioaddr`和`minipcimemaddr`分别是IO和Memory空间可以分配的最小地址,`nextpcimemaddr`和`nextpciioaddr`则是下次分配时将使用的地址。在PMON中,地址分配采用的是逆序分配策略。 此外,`pb`结构还包含了其他参数,如最大延迟`max_lat`,快速背靠背交易`fast_b2b`,预取标志`prefetch`,带宽`bandwidth`,以及已连接设备的数量`ndev`。这些参数对于理解和优化PCI设备的性能至关重要。 PMON是一个简单的引导加载器,用于启动嵌入式系统。文章提到了两个不同版本的PMON,早期版本不支持硬盘、显卡,且扩展性较差,而PMON2000则增加了对硬盘、显卡和EXT2文件系统的支持,以及对新系统的可移植性。 PMON2000的目录结构清晰,包括了`Conf`、`Target`、`Sys`等多个子目录,便于针对不同系统进行定制。`Dev`目录下包含设备驱动,如IDE的ATA驱动,北桥的网卡IC,以及PCI设备。`Kern`包含了系统调用的实现,而`Cmds`则包含shell命令的实现。`Lib`提供了基本的库函数,如内存拷贝和打印函数。`X86emu`用于模拟X86指令,以便初始化显卡。 在`Targets`目录下,每个系统都有一个单独的子目录,如`Bonito`,其中的`start.S`是C环境建立前的启动汇编代码,`tgt_machdep.c`包含特定板子的函数,而`pci_machdep.c`则涉及PCI空间分配的特定实现。 通过这些信息,我们可以了解到在PMON中进行PCI空间分配的细节,以及如何通过源码管理和控制PCI设备,这对于开发和调试基于PMON的嵌入式系统非常有用。