图 1 为龙芯原始 PMON 初始化的代码流程,其中 C语言环境代码没有详细展开,事实上 C 语言的比重比汇编代码多很多。但是汇编代码的篇幅确实也是不小,这样对阅读代码有很大的障碍。粗略估算了一下,现有代码中,汇编能占到 1.5-2 万行。
现有的代码汇编风格并不是很好,有些代码甚至难以让人读懂。所以将代码结构从新整理是很有必要的。
总体上的思想是将 C 语言环境尽快搭建起来,让汇编代码压缩的最小。并且将所有的初始化变成模块,用树形结构来搭建 BIOS 启动的流程。配置信息类似于表的方式存在,今后在开机上电后龙芯 BIOS 也可以自检,如果当前主板配置和默认配置不匹配,那么将配置文件读入,进而使用配置文件的值来初始化。搭建 C 语言环境可以使用 CAR 技术,CAR 是 Cache As RAM 的缩写。C 语言运行需要栈,在初始化初期,内存不可用,如果想在该阶段使用 C 环境,那么可以使用 cache 作为栈,龙芯平台上可以将 cache 锁定,不让 cache 内容被交换出去,这样就可以让 cache 当做 RAM 来使用。
1