PCI设备初始化:PMON中的扫描、映射与资源分配

需积分: 9 20 下载量 154 浏览量 更新于2024-07-19 收藏 246KB PDF 举报
本文档深入探讨了在PMON环境中,PCI设备的初始化过程,特别是针对PCI设备的枚举、资源分配以及初始化代码的详细分析。文章从系统刚上电时的执行流程开始,描述了CPU如何首先在Rom空间进行基本的TLB、Cache和UART等硬件初始化,然后将启动代码复制到内存空间的0x8010.0000地址,接着调用initmips()函数进入内存执行。 在initmips函数中,关键步骤包括: 1. 内存地址解码器设置:函数开始时,通过计算内存大小(memsz参数)的高位和低位,确保内存映射的完整性和正确性,将BootROM映射移至高内存区域,以便为后续操作腾出空间。 2. 时钟频率探测:为了确保延迟控制准确,函数执行了对CPU时钟频率的探测(tgt_cpufreq()),这是初始化过程中至关重要的一步。 3. PMON和调试初始化:接下来,initmips函数设置PMON寄存器,并调用dbginit()函数进行调试功能的初始化,这有助于系统的故障检测和调试支持。 4. 异常向量设置:异常向量用于处理处理器在运行时遇到的错误或中断情况。该函数将预定义的MipsException向量复制到TLB_MISS_EXC_VEC和GEN_EXC_VEC地址,确保处理器能够正确响应各种异常事件。同时,清空缓存并设置初始的异常向量地址。 5. 最终调用main():在完成所有必要的基础设置后,程序最后调用main()函数,正式进入操作系统或应用的主循环,此时系统初始化过程已经全面展开,包括对PCI设备的扫描、配置和资源分配。 通过跟踪initmips函数的执行,读者可以深入了解PMON环境下PCI设备初始化的细节,这对理解整个系统的架构和调试至关重要。这一过程展示了操作系统如何有序地为硬件组件提供服务,以及如何确保系统稳定运行。