龙芯嵌入式开发学习路线之一:pmon学习

pmon 是 cpu 上电后执行的代码,相当于 x86PC 机中的 BIOS,兼有 bootloader的功能,代码来源于早期BSD 的内核,到如今已旧貌换新颜,糟蹋得差不多了。

pmon 的二进制代码存放于主板上的一块 512KB 的 flash 芯片上,选择这个容量是因为够用了,龙芯 2F 允许的最大 boot rom 容量是 1MB。

这块 flash 芯片的地址是确定的,虚拟地址 0xbfc00000,物理地址 0x1fc00000。

cpu 上电后,会在第一时刻从虚拟地址为 0xbfc00000 的读取指令执行,这个和

x86 的 cpu 是一样的,差别的只是地址。

地址差别的一方面是地址值,另一方面是地址类型。

x86 有实模式和保护模式的区别,上电初期为实模式,地址就是物理地址。MIPS 没有这两种模式的区别,而且一开始就是虚拟地址。虚拟地址是虚的,所以必定需要映射到物理地址。

下面介绍一下 pmon 文件相关的地址问题。

cpu 眼中的地址是虚拟地址,cpu 取指和取数据的地址是物理地址(经过北桥解释后的地址是总线地址),编译器产生的地址(包括解析了所有引用和重定位的符号后)为程序地址,也就是程序它自己理解的地址。不同的地址概念间需要有映射函数来关联。

mips 的虚拟地址到物理地址的映射比x86 要复杂一些(也更有用些),既有可供页表之类动态建立映射函数的机制,也有 unmapped cacheed/uncached 这种固定映射关系的转换方式。bios 代码由于其执行时机的限制,开始阶段只能使用unmapped uncached 这个段。地址范围是 0xa0000000~0xc0000000,也就是 2.5G 到 3G 的 512MB 空间。这个范围的映射函数为物理地址=程序地址-2.5G。所有的 32 位 mips 架构的 cpu 都遵循这个约定。

pmon的代码绝大部分是用C写的,只有个别的体系结构相关的代码使用了汇编。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值