PMON的解读和开发.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PMON的解读和开发.ppt

PMON的解读和开发 PMON的发展和编译环境 PMON PMON的早期版本的功能有:shell, net, load, debug。不支持硬盘,显卡。并且扩展性不好,编译器是sde-gcc. PMON的发展和编译环境 PMON2000 现在龙芯1和2用的BIOS, 在原来的PMON的基础上添加了硬盘支持,文件系统ext2和fat的支持,显卡的支持等等。修复了debug功能,扩展性也得到提高。比较容易移植到新的系统。 编译器为mips-elf-gcc PMON2000的目录结构 PMON2000的框架 PMON2000的框架 Targets目录的组成 每个系统一个目录,我们拿Bonito来为例子,主要有下列文件: start.S 位于Targets/Bonito/Bonito目录下,是C环境建立之前的汇编代码,使整个BIOS运行的起点。 tgt_machdep.c位于Targets/Bonito/Bonito目录下,一些板子相关的函数。 pci_machdep.c进行Targets/Bonito/pci空间分配的一些函数 Targets/Bonito/dev目录下一些板子特殊的设备的驱动。 Targets/Bonito/conf目录下是一些编译环境建立需要的一些文件 PMON编译环境的建立 将comp.tar.gz在/usr/local解开 将/usr/local/comp/mips-elf/gcc-2.95.3/bin加入到PATH目录下 进入pmon2000的tools目录下make,建立一些conf需要的工具。 进入pmon2000的Targets/Bonito/conf目录中 编辑conf目录下Bonito文件,选择需要编译的模块 tools/pmoncfg/pmoncfg Bonito(conf类型文件)。形成目标主目录下的compiler目录 进入Targets/Bonito/compiler/Bonito的目录,make形成pmon。 PMON编译环境的建立 Makefile是根据Targets/Bonito/conf/Makefile.Bonito文件形成的。 链接脚本是为Targets/Bonito/conf/ld.script。 PMON2000的框架 异常向量表 Pmon的空间分配 PMON的汇编部分(starto.S或sbdreset.S)的解读 Start.S 1.当整个板子起电后,CPU将从0xBFC00000取指令开始执行,而ROM在系统中的地址就是从该地址开始的,所以其中的第一条指令就是整个CPU的第一个指令,在MIPS中,异常处理入口有两套,通过CP0的STATUS寄存器位BEV来决定,当BEV=1时,异常的入口地址为0xBFC00000开始的地址,而BEV=0,异常地址为0始的地址,所以PMON程序段开始处是一些异常的调入口,需要跳过这段空间,程序通过一个跳转bal指令跳到后面. bal locate nop Start.S ? bal uncached nop bal locate nop uncached: or ra, UNCACHED_MEMORY_ADDR j ra nop 此处是可以从cache空间转换到uncache的空间,ra中保留的是bal locate这条指令的地址,然后或上UNCACHED_MEMORY_ADDR,该地址就变成uncache的地址了. Start.S ? la s0, start subu s0, ra, s0 and s0, 0xffff0000 这段代码是为了访问数据,因为这段汇编在Rom执行,而编译出来的数据段在0x8002xxxx,为了能够访问数据段的数据,需要进行一个地址的修正,s0这是起到这种修正的目的。 Start.S 初始化CPU内的寄存器,清TLB. 初始化一些北桥的基本配置,以确保uart能够正常工作. 初始化uart,主要是设置波特率. 初始化内存(主要通过I2C协议从内存的EEPROM读取内存参数来进行设置). 初始化cache. 拷贝pmon的代码到内存,然后通过 la v0, initmips jalr v0 nop 从此代码便到内存中间去了,从这开始因为可以读写内存,所以有了栈,故可以用C的代码了,所以以后的程序便是C代码了. C代码部分

文档评论(0)

天马行空 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档