pmon 简介
PMON 拥有非常悠久的历史,它来自于 FreeBSD,支持 i386,PowerPc,MIPS 三种架构,既相当于 X86 电脑上的 BIOS,又具备 BootLoader 的功能,但是由于 uboot 等轻量的 BootLoader 的流行,PMON 的开发社 区逐渐沉寂,现在主要是龙芯中科在给 PMON 移植更多的设备和维护,所以 PMON 是龙芯设备主要使用的 BootLoader,作者认为使用 PMON 作为 BootLoader 同时也是为了防止别人卡脖子,龙芯上大部分的 PMON 都是在 PMON2000 的基础上更改的版本。
PMON 的二进制代码存放在核心板上的一块 512KB 的 flash 芯片上,选择这个容量是因为够用了,龙芯 2k1000 允许的最大启动空间容量是 1MB。这块 flash 芯片的地址是确定的, 虚拟地址 0xbfc00000, 物 理地址 0x1fc00000。cpu 上电后,会在第一时刻从虚拟地址为 0xbfc00000 的读取指令执行。
1 PMON 目录结构
要了解一个陌生的 BSP,我们首先就要从他的目录结构入手,我们得先知道,里面都包含什么,里面 包含的文件夹都是做什么的。我们进到 PMON 源码里面,可以看到非常多的文件以及文件夹,如果您之前对 uboot 非常熟悉,可以发现,PMON 和 uboot 在目录结构上差别还是非常大的。
接下来我就带着大家一起来看下 PMON 的主要目录结构。
── conf
编译源码所依赖的配置文件目录
── doc
说明文档
── examples 例子
── fb 用来在 frambuffer 显示的代码
── include 系统的头文件
── lib 库文件,如 C 库,zip 压缩库
──pmon pmon 的主体代码,需重点关注
│ ├
── arch 平台相关代码
│ │ ├
── mips 处理器相关代码,因为 2K1000 是 MIPS,所以只需要关注这个文件夹即可。
│ ├
── cmds pmon 的 shell 命令
│ ├
── common 有共同依赖的代码
│ ├
── custom 定制的代码
│ ├
── dev 驱动代码
│ ├
── fs 文件系统支持的代码,如 yaffs2, ubifs,mtd
│ ├
──loaders 加载二进制文件代码
│ ├
──netio 网络相关 如 tftp
──sys 处理器更底层的代码
──Targets 目标结构相关代码,需要重点关注里面的 LS2K
│ ├
──LS2K
──tools 工具 如编译 pmon 用到的 pmoncfg 工具
──x86emu X86 显卡模拟器
── zloader zip 格式加载启动代码
其中,位于 Targets/LS2K/ls2k/下的 start.S 是 C 语言环境建立之前的汇编代码,是整个 BIOS 的运行 的起点。Targets/LS2K/dev 存放的为板子一些特殊的驱动。Targets/LS2K/conf 是建立编译环境需要的一些 文件。