zoukankan      html  css  js  c++  java
  • uboot的中断向量初始化

    第一层引导程序的开始部分如下,正常启动的情况下程序从_start入口执行(config.mk定义,地址为0x00000000)。

    但是开始有个疑问:就是_start入口后,第一个指令就执行了b reset,进入了reset标签,正常启动了,对于改指令后的红色部分,并不能有效执行,怎么才能把中断向量正常初始化呢?(中断函数在其他地方也没有执行、或定义过,只有此地方)。

    经查,根据s3c2440的定义,中断向量的定义,是固定定义在0x0000000开始的地址上的,比如reset中断的地址是0x00000000,undefined_instruction是0x00000004,.......,这就可以解释了,编译时在固定位置上存储指定的中断处理方式即可(就是直接存储中断函数到pc,进行中断跳转)。而正常情况下是不需要执行的!

    之所以执行b reset,是因为在启动时,中断已经发生了(重启)。

    .globl _start
    _start: b       reset
     ldr pc, _undefined_instruction
     ldr pc, _software_interrupt
     ldr pc, _prefetch_abort
     ldr pc, _data_abort
     ldr pc, _not_used
     ldr pc, _irq
     ldr pc, _fiq

    _undefined_instruction: .word undefined_instruction
    _software_interrupt: .word software_interrupt
    _prefetch_abort: .word prefetch_abort
    _data_abort:  .word data_abort
    _not_used:  .word not_used
    _irq:   .word irq
    _fiq:   .word fiq

     .balignl 16,0xdeadbeef

  • 相关阅读:
    Jdk1.8 HashMap源码分析
    瘦身部署应用
    Redis 创建和使用集群(yum方式安装低版本)
    Redis 创建和使用集群
    记录一下
    Oracle 开发人员权限控制
    Linux 免密登录远程服务器及执行相关命令
    Oracle 连接表空间并执行SQL文件
    MySQL 8.0.13安装教程(windows 64位) (转)
    scrapy中Selector的使用
  • 原文地址:https://www.cnblogs.com/felixjia/p/2128077.html
Copyright © 2011-2022 走看看