PCI设备初始化与内存映射

5星 · 超过95%的资源 需积分: 16 12 下载量 7 浏览量 更新于2024-07-27 2 收藏 251KB PDF 举报
"PCI设备初始化" 在计算机系统启动过程中,PCI(Peripheral Component Interconnect)设备的初始化是一个关键步骤,它确保了系统能够正确识别并配置所有连接的PCI硬件,包括显卡、网卡、声卡等扩展卡。这个过程通常由操作系统内核或引导加载程序的一部分来执行。本文将详细阐述PCI设备初始化的流程。 当系统加电后,CPU首先从ROM中的固定地址0xbfc0.0000开始执行,这个地址存放的是固件代码,如BIOS或U-Boot。固件会进行一系列的基本初始化任务,例如设置TLB(Translation Lookaside Buffer,翻译旁路缓冲区)、初始化Cache以提高内存访问速度,以及设置UART(通用异步收发传输器)用于串行通信。这些准备工作完成后,固件将自身的控制权转移到内存中,通常是地址0x8010.0000,这里的代码可能是Pmon或其他类似的引导加载程序。 在内存中运行的initmips()函数承担了更复杂的初始化任务,这包括对PCI总线的扫描,这个过程中,系统会枚举所有的PCI设备,识别它们的类型、供应商ID、设备ID以及它们占用的中断线、I/O端口和内存资源。这个阶段是通过读取每个PCI设备配置寄存器来实现的。 接着,initmips()会进行空间映射,即将PCI设备的内存映射区域设置到系统的地址空间中,以便CPU能够访问这些设备。这涉及到调整内存管理单元(MMU)的配置,确保对PCI设备的访问可以正确映射到物理内存地址。 此外,资源分配也是重要的一步,包括分配中断向量、I/O端口和内存资源。这些资源的分配使得操作系统能够有效地调度和管理硬件,避免冲突,并确保设备的正常工作。 在上述初始化阶段,还会有一些辅助操作,比如设置异常向量表,确保系统在遇到异常情况时能够正确响应。例如,`SBD_DISPLAY`可能用于在启动过程中显示进度信息,`CPU_FlushCache()`则清空缓存以确保数据一致性,而`CPU_SetSR()`可能用于设置状态寄存器,以设定正确的异常处理入口地址。 总结起来,PCI设备初始化是操作系统启动流程中的关键部分,它确保了系统能够识别和配置所有连接的PCI设备,为后续的系统启动和应用程序运行提供了基础。这个过程涉及到固件、引导加载程序、内存管理、中断处理等多个方面,是计算机系统正常运行的基石。