PowerPC 440 u-boot启动代码深入分析

PowerPC 440 u-boot启动代码解析
本文深入分析了u-boot在PowerPC 440体系结构中的启动代码,包括汇编语言部分。从准备工作、启动流程、硬件配置等方面详细探讨了ppc440的引导过程,强调了硬件初始化、TLB配置和栈空间设置的重要性。

本文主要分析u-boot中与PowerPC 440体系结构紧密相关的汇编语言代码,不涉及u-boot整体启动流程。

我用的芯片是ppc 460-s,由于它和ppc 440的差别较小,我们不妨把两者混为一谈。在u-boot代码中也是以ppc4xx呈现的,即ppc 440, 460或405等系列,都使用同一套引导代码。

1. 准备工作

uboot版本:u-boot-2016.03

Linux版本:debian 10

1.1 安装powerpc gcc交叉编译工具

参考以前写的文章[powerpc linux 交叉编译环境配置],网址:

https://blog.csdn.net/eugenelyq/article/details/119734517

1.2 编译

make gdppc440etx_defconfig

make

这里以gdppc440etx配置为蓝本,分析主要涉及第一阶段启动代码的汇编语言部分。

1.3 涉及的文件

arch\powerpc\cpu\ppc4xx\resetvec.S (reset instruction)

arch\powerpc\cpu\ppc4xx\start.S    (boot code)

arch\powerpc\cpu\ppc4xx\u-boot.lds (linker script)

board\gdsys\gdppc440etx\init.S    (tlbtab)

include\configs\gdppc440etx.h     (config)

1.4 涉及的知识点

ppc 440 体系结构及指令

gnu汇编语法

gnu链接脚本

2. powerpc 440 体系结构之启动流程

想看懂代码,必须要了解不同体系结构的引导流程。

[PowerPC 460-S Embedded Processor Core User’s Manual] ppc460-s用户手册的第三章专门用了一章讲解该cpu core的初始化(引导)流程,其中比较重要的是下面一段话:

这里要说的意思是:

复位后,(硬件)设置内存管理资源以便处理器能够取指,执行,从地址空间的最高4k有效地址处读取数据。具体如何设置,每个处理器的实现不同。不管硬件如何实现访问4K内存空间,处理器都将从0xffff_fffc处开始执行指令,这里是有效地址的最后一个字(最后4个字节)该地址处的指令必须是一个无条件分支指令,必须跳转到4K地址空间内。在这4K地址空间内,作必要的初始化工作。

熟悉arm体系结构者应该清楚,arm核的mmu默认是关闭的,在此情况下,理论上32位地址空间可以随便访问。但powerpc 440系列不同,它们的mmu是常开的,即如果不经过mmu映射,地址空间中的任何地址都无法访问,不能读写。

那么,最后4K的地址空间又是怎么实现取指和执行的呢?

是的,是硬件通过shadow TLB实现的,硬件把rom开始的4K映射到32位地址空间的最后4K。这也解释了”必须跳转到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值