1.ARM一上电就属于一种异常--reset,而且在工作过程中,难免会发生各种异常事件。所谓异常就是,处理器在执行某向特定任务,突然间某个事件发生,而且这个事件导致处理器不能再继续执行当前工作,必须停下手里工作去处理改事件,则称此类事件为异常事件,简称异常。




2.常见异常类型以及入口地址
2440:
6410:
虽然有两套入口地址,但是默认情况下,选择Normal address 作为异常向量,只有当设置了协处理器CP15的相关寄存器以后,才会启用High vector address,此时则忽略Normal address。
3.异常向量:
当一个异常发生的时候,处理器必然要去处理它,但是处理器要到什么地方去处理他呢?这个时候由硬件机制,处理器会跳转到一个固定地址去执行相关异常处理程序,而这个固定地址就是所谓的异常向量。
4.异常向量表:由七个异常向量及其处理函数跳转关系组成的一个“代码表”,之所以叫”表“代码编写以后的布局形状像是一张表,并非实际意义上的表格。
5.代码编写:;利用samba服务器,在Linux和Windows之间编写代码。(Windows工具写Linux服务器的代码)
(1)start.S
@****************************
@File:start.S
@
@Tiny6410裸机上学期代码
@****************************
.text
.global _start
@异常向量表
_start:
b reset
ldr pc, _Undefined_instruction
ldr pc, _Software_interrupt
ldr pc, _Command_abort
ldr pc, _Data_abort
ldr pc, _Nothing_used
ldr pc, _IRQ
ldr pc, _FIQ
@存放实际异常入口地址开辟的存储单元
_Undefined_instruction:
.word Undefined_instruction
_Software_interrupt:
.word Software_interrupt
_Command_abort:
.word Command_abort
_Data_abort:
.word Data_abort
_Nothing_used:
.word Nothing_used
_IRQ:
.word IRQ
_FIQ:
.word FIQ
@各种实际的异常处理函数
Undefined_instruction:
nop
Software_interrupt:
nop
Command_abort:
nop
Data_abort:
nop
Nothing_used:
nop
IRQ:
nop
FIQ:
nop
@上电复位以后就执行这里
reset:
nop
(2)链接脚本jun-boot.lds
用OUTPUT_ARCH(arm)指明输出文件是要运行到arm平台
用ENTRY(_start)指明入口在_start标号处
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS {
. = 0x50000000;
. = ALIGN(4);
.text :
{
start.o(.text)
*(.text)
}
. = ALIGN(4);
.data :
{
*(.data)
}
. = ALIGN(4);
bss_start = .;
.bss :
{
*(.bss)
}
bss_end = .;
}
(3)Makefile文件
all : start.o
arm-linux-ld -Tg-boot.lds -o g-boot.elf $^
arm-linux-objcopy -O binary g-boot.elf g-boot.bin
%.o : %.S
arm-linux-gcc -g -c $^ -o $@
%.o : %.c
arm-linux-gcc -g -c $^ -o $@
.PHONY: clean
clean:
rm *.o *.elf *.bin *.bak
6.针对210的一个补充:BL1头信息的添加
210上电以后由厂商提供的Irom程序(BL0)将nandflash里面的BL1拷贝到iram里面运行,但是拷贝完成以后,他要进行校检,看看是不是拷贝的内容和用户指定的大小相等。而他拷贝文件(BL1)的大小计算方法为
就是扫描拷贝的文件中1的个数。然后和头里面的校检码进行比对,相等则执行后续程序,否则程序崩溃,停止执行。而头部的布局如下
很明显的表示了占用16B的空间,然后分四个部分,第二第四没有用到,第一和第三分别作为拷贝文件的大小控制参数,以及校检码,所以我们要用相同的校检算法将头信息补齐,故要用到210image工具,目的就是加入校检码和文件大小信息,否则没有校检码,Bl1在拷贝完以后是运行不了的。