zoukankan      html  css  js  c++  java
  • 20.核心初始化之异常向量表

    20.核心初始化之异常向量表

    一、异常向量表:

    包含:1.异常定义

         2.异常类型

         3.异常入口

         4.向量表

    首先异常定义,在ARM Architecture Reference Manual.pdf文档中,2.Programmers' Model的2.6.Exceptions异常:

    异常:因为内部或外部的一些事件,导致处理器停下来正在处理的工作,转而去处理这些发生的事件。

    2.异常类型

    当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称之为异常向量,多个异常向量在一起就形成了异常向量表。

    从上面的异常向量地址可以注意到,地址0x00000014没有使用。上图的右边可以看到有两组异常向量表可以使用。一组是低地址的,一组是高地址的。可以通过CP15对应的位来配置,当没有配置CP15的时候,默认是从低地址作为异常向量表。

    3.入口:00000000;

    4.异常向量表:由七个异常向量和处理函数跳转关系组成的表就是异常向量表。

    二、代码编写(6410)

    链接器脚本:forfish.lds:

    OUTPUT_ARCH(arm)

    ENTRY(_start)

    SECTIONS {

        . = 0x50008000;

        

        . = ALIGN(4);

        .text :

        {

        start.o (.text)

        *(.text)

        }

        . = ALIGN(4);

        .data :

        {

        *(.data)

        }

        

        . = ALIGN(4);

        bss_start = .;

        .bss :

        {

        *(.bss)

        }

        bss_end = .;

    }

    汇编文件start.S完成相应的硬件操作的代码结构:

    @****************************

    @File:start.S

    @

    @FORFISH

    @****************************

    .text

    .global    _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                    

    undefined_instruction:

            nop

    software_interrupt:

            nop

    prefetch_abort:

            nop

    data_abort:

            nop

    not_used:

            nop

    irq:

            nop

    fiq:

            nop

    reset:

            nop

    上面编写好了之后就是编写这个工程的Makefile文件了:

    Makefile:

    all: start.o

        arm-linux-ld -Tforfish.lds -o forfish.elf $^

        arm-linux-objcopy -O binary forfish.elf forfish.bin

    %.o : %.S

        arm-linux-gcc -g -c $^

    .PHONY: clean

    clean:

        rm *.o *.elf *.bin

    编写好了之后,工程的框架就建立好了,进行make进行编译:

    可以看到bin文件成功生成,说明裸机uboot工程建立完成了。

  • 相关阅读:
    开启mysql远程访问的知识点
    U850EAI二次开发说明,用友EAI二次开发说明下载
    U8界面按钮二次开发手册,用友界面二次开发手册.pdf下载
    用友二次开发,用友EAI案例分析
    正则表达式在线测试相关网站
    用友EAI企业应用集成使用手册U8EAI手册2006年下载
    用友EAI企业应用集成使用手册U8EAI手册2005年下载
    U8EAI企业应用集成培训,用友EAI培训下载
    如何使用批处理,遍历指定目录下的文件。
    hdu 1021 数学水题 枚举法
  • 原文地址:https://www.cnblogs.com/FORFISH/p/5188727.html
Copyright © 2011-2022 走看看