uboot ,s5pv210, start.S分析

1 uboot 的版本的选择。

疑问: uboot 的社区会有代码,这里也会有一些 板卡的代码合入 社区, 但是 有时候 cpu 厂商也会 单独拉出一份 开源代码 来维护。

也就是说, 你有两种下载方式,一种是下载uboot 社区的代码,还有一种是下载cpu 厂商的 维护的uboot 的代码,这两种方式的 代码下载的地址是不一样的。

总结: 我觉得他们是有交集的。

这是 arm 设计的  目录是 arch/arm/cpu .

这是 三星设计的,目录是 /board/sumsang/

接下来是关于 spl 的 内容。

先来看一下 关于 6410 的手册。

注意: 这里 看上去 bl1 与 bl2 是两个东西,实际上 bl2= bl1+xxxx= uboot.

bl1 是 Uboot 的前 8K,

首先加载到sram , 然后初始化 内存。

然后加载 整个uboot 到内存。

然后跳转到 内存,然后判断试一下 如果在内存,就跳转到 8K之后运行。

这里的os 指的是 kernel。

我觉得 他后面讲的 goni 开发板就是这种方式。

然后来看一下 V210 的。

注意: 这个时候 实际上 ,uboot 出现了 spl.bin , 此时 , bl2 就不等于 bl1+xxx .了, bl1 与 bl2 通过宏定义成了两个不同的东西。

uboot 还是采用的 6410 的加载方式,只不过镜像不一样了。

接下来是 异常向量 + 地址映射问题。

在 sram  中 三星自己 在 内存中 有开辟一段区域 专门用于存放 中断向量表。

如下图:

当bl1 在运行过程中,如果 出现异常了。

那么 cpu 会自动到 0xD003_7400 去寻找 异常向量表。

这个是 硬件自动完成了,不需要设置。

我们需要做的就是 将异常向量表 拷贝到这个地方。

疑问: 但是程序中有 拷贝的动作吗?

那么如果 要是在 DRAM 中呢?

cp15 协处理器  的 VBAR  专门用于设置 dram 的 中断向量表地址。

 也就是说 我只要 把 异常向量表的地址 ,写入掉 VBAR 寄存器就可以了。

然后是关于ENTRY 的展开。

u-boot.lds 中的 ENTRY 的定义是在。

include/linux/linkage.h

  64  #define ENTRY(name) \
    1 ▎   .globl SYMBOL_NAME(name); \
    2 ▎   LENTRY(name)
    3 ▎

然后  SYMBOL_NAME(name)  的定义是。

 #define SYMBOL_NAME(X)      X

然后 LENTRY(name) 的定义是。

    6 #define LENTRY(name) \
    5 ▎   ALIGN; \
    4 ▎   SYMBOL_NAME_LABEL(name)

ALIGN 的定义如下:

#define ALIGN           __ALIGN

__ALIGN 的定义如下:

   10 #ifndef __ALIGN
    9 #define __ALIGN .align      4
    8 #endif

SYMBOL_NAME_LABEL(name) 的定义如下:

   21 #ifdef __STDC__
   20 #define SYMBOL_NAME_LABEL(X)    X##:
   19 #else
   18 #define SYMBOL_NAME_LABEL(X)    X:
   17 #endif

这里没有定义 __STDC__

所以是 后面的内容。

最终 的代码 展开就是这样的。

#define ENTRY(name) 
    .globl (name);
    .align      4; 
    (name):

总结: 就是定义了一个段,并且把这个段导出到全局变量了。

然后是关于CPSR寄存器的说明。

总结: 这个寄存器的主要作用就是 , 开关中断,并且设置 程序的 运行模式。

它的东西可以保存到 SPSR中。

然后是关于 CP15 协处理器的说明。

总结一下:

1 cp 是一组 协处理器。

2 cp15 自己就是很多个寄存器的集合。

3 操作 cp15 使用的是 MRC 与MCR。

对于 cp15 以  s5pv210 的 uboot 的这段代码 为例。

   12 /*
   11 ▎* Setup vector:
   10 ▎* (OMAP4 spl TEXT_BASE is not 32 byte aligned.
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值