龙芯2F BIOS解析:pmon探索之旅

5星 · 超过95%的资源 需积分: 46 65 下载量 142 浏览量 更新于2024-08-02 收藏 1.17MB PDF 举报
"龙芯2F pmon学习笔记" 本文档是关于龙芯2F处理器上pmon(Power-on Monitor)的学习笔记,pmon是系统上电后首先执行的代码,类似于x86平台的BIOS,它兼备引导加载器的功能。pmon的源代码源自早期的BSD内核,经过多次迭代,现在已经有了显著的变化。 1. **pmon的启动与作用** - pmon是在CPU上电后从固定地址0xbfc00000开始执行的,这个地址对应物理地址0x1fc00000。在x86架构中,上电初期执行的地址也是实地址,但x86有实模式和保护模式之分,而MIPS架构从一开始就使用虚拟地址,这些虚拟地址需要通过页表映射到物理地址。 2. **内存与配置空间访问** - pmon需要初始化内存管理和配置空间的访问,以识别和配置系统中的硬件设备。这部分涉及到内存管理的基本结构,如页表的设置,以及超级I/O(SuperIO)芯片的初始化,该芯片通常用于控制串口、键盘、鼠标等设备。 3. **汇编与C语言的过渡** - pmon的启动部分通常由汇编语言编写,以实现最小化和高效的启动过程。随着系统的初始化,pmon会逐渐过渡到C语言代码,提供更高级的抽象和功能。 4. **系统初始化** - 包括`initmips`、`dbginit`等函数,它们负责初始化MIPS架构的特定组件,如调试接口,并进行系统级别的初始化工作。 5. **PCI总线初始化** - `_pci_businit`函数处理PCI总线的初始化,识别并配置PCI设备,如网卡、显卡等。 6. **PCI设备的修复** - `cs5536_pci_fixup`函数可能针对特定的PCI设备,如CS5536芯片,进行额外的配置调整。 7. **网络初始化** - `Init_net`函数启动网络子系统,包括`tgt_devconfig`,用于配置网络设备。对于显卡和配置初始化的部分,笔记详细描述了显卡的配置过程以及配置初始化函数`config_init`。 8. **USB支持** - 龙芯2F的pmon笔记中提到了USB设备的初始化,这是现代计算机系统中不可或缺的一部分。 9. **回到网络初始化** - 在处理完其他设备后,笔记再次回到网络初始化,继续完成网络设备的设置。 10. **设备初始化** - `DevicesInit`函数负责整个系统的设备初始化,确保所有关键硬件都能正常工作。 11. **文件系统与加载内核** - `load内核`部分讨论了如何加载操作系统内核,这通常是pmon的主要任务之一。内核的加载可能涉及特定的文件系统操作,如open函数。 12. **输入输出系统** - 文档中还包含了对Termio、printf和write函数的讨论,这些都是与用户交互和输出信息的基础。另外,还介绍了键盘事件的响应机制和ioctl函数,用于控制设备。 13. **环境变量与Flash存储** - 环境变量的处理涉及到系统配置的持久化,而Flash存储则通常用于保存pmon本身以及这些环境变量。 14. **GPIO(通用输入/输出)** - GPIO的介绍表明pmon可以控制和检测系统的数字输入输出信号,这对于控制硬件状态非常有用。 15. **图像显示** - 文档末尾提到图片显示,这可能涉及图形界面的支持,如初始化显卡后显示启动画面。 总结:这篇笔记详尽地记录了pmon在龙芯2F处理器上从启动到初始化系统各个组件的过程,包括硬件识别、设备配置、网络设置、文件系统交互等多个层面,是理解MIPS架构下BIOS级别的系统启动流程的重要参考资料。