vivi 启动解析 (转)

 

1.4 vivi 的运行

 

1.4.1 vivi 的第一阶段
完成含依赖于 CPU 的体系结构硬件初始化的代码,包括禁止中断、初始化串口、
复制自身到 RAM 等。相关代码集中在 head.S(/vivi/arch/s3c2410 目录下):
Head.S
#include "config.h"
#include "linkage.h"
#include "machine.h"
@ Start of executable code
ENTRY(_start)
ENTRY(ResetEntryPoint)
@
@ Exception vector table (physical address = 0x00000000) ;异常向量表物理地址
@
@0x00: Reset ;复位
b Reset
@ 0x04: Undefined instruction exception
;未定义的指令异常
UndefEntryPoint:
b HandleUndef
@0x08: Software interrupt exception
;软件中断异常
SWIEntryPoint: b HandleSWI
@ 0x0c: Prefetch Abort (Instruction Fetch Memory Abort) ;内存操作异常
PrefetchAbortEnteryPoint: b HandlePrefetchAbort
@ 0x10: Data Access Memory Abort
;数据异常
DataAbortEntryPoint: b HandleDataAbort
@0x14:
Not
used
;未使用
NotUsedEntryPoint: b HandleNotUsed
@ 0x18: IRQ(Interrupt Request) exception
;慢速中断处理
IRQEntryPoint: b HandleIRQ
@ 0x1c: FIQ(Fast Interrupt Request) exception
;快速中断处理
FIQEntryPoint: b HandleFIQ
@
@ VIVI magics

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.4.2 vivi 的第二阶段
vivi 的第二阶段是从 main()函数开始,同一般的 C 语言程序一样,该函数在
/init/main.c 文件中,总共可以分为 8 个步骤。
(1) 函数开始,通过 putstr(vivi_banner)打印出 vivi 的版本。Vivi_banner 在
/init/version.c 文件中定义
(2) 对开发板进行初始化(board_init 函数),board_init 是与开发板紧密相
关的,这个函数在/arch/s3c2410/smdk.c 文件中。开发板初始化主要完成两个功能,
时钟初始化(init_time())和通用 IO 口设置(set_gpios())。
void set_gpios(void)
{
GPACON = vGPACON;
GPBCON = vGPBCON;
GPBUP = vGPBUP;
GPCCON = vGPCCON;
GPCUP = vGPCUP;
GPDCON = vGPDCON;
GPDUP = vGPDUP;
GPECON = vGPECON;
GPEUP = vGPEUP;
GPFCON = vGPFCON;

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值