bootloader的作用和步骤及例程

boot + loader

了解开发板资源
1、找CPU,用什么样的架构的CPU,为了找到系统上电后,第一条执行的代码,我们该放在哪里?
ARM:异常向量表(reset) 0x0 0x90
2、0x0接的是什么芯片,flash(nor-flash),ROM
s5pv210:SOC
SOC = CPU + Controler
2.1、datasheet block
3、这些地址都被芯片公司重新定义,去芯片公司的datasheet中去寻找memory map这样的章节
片内资源:SFR
片外资源
找异常向量表中的reset向量的地址对应的是什么东西
s5pv210:0x0–irom–code–jump to new addr
s3c2410:cpu arm – 0x0 –SROM(bank0) —bank0 挂接的是什么芯片

boot目的:
跳到c语言中:
关闭看门狗,中断,MMU(带操作系统),CACHE。
配置系统工作时钟
配置SDRAM的控制器(行地址数,列地址数,多少块,周期性的充电)
让sp指向可读可写的设备区间中,满足递减栈的规则SDRAM
—用哪些模式,就要初始化哪些模式下的SP
—每个模式值不能覆盖其他模式
代码搬移
—执行速度问题,把程序从存储器 (nor-flash)搬移到快速的内存
—只把存储器的一部分代码执行出来,把存储在其他位置上的代码搬移到内存,—对应存储器控制器的初始化

BL MAIN

SP5V210

loader的目的:
执行应用逻辑,点灯,uart,load linux kernel

创建接口开发的工程

创建文件
inc makefile mian.c

1、Makefile

1 通用的Makefile,支持SD卡启动和在uboot下直接运行在ram
1)程序运行时的地址不同
- - - - DDR : 0x20000000
- - - - SD : 0x0
2) SD   16KB ,  需要加一个头信息,校验
    RAM : 不需要加头信息
2、变量集合
TARGET:DEP
COMMAND

#Design by rocky for S5PV210
#define var
TARGET  :=  led.bin
BUILD   :=  led

ENV     ?=  SD
SDTOOL  :=  ./mk210

COBJS   +=  start.o
COBJS   +=  mian.o

CROSS_COMPILE   :=  arm-linux-

CC      :=  $(CROSS_COMPILE)gcc
LD      :=  $(CROSS_COMPILE)ld
OBJCOPY :=  $(CROSS_COMPILE)objcopy


CFLAGS  +=  -Wall
CFLAGS  +=  -I./inc
ifeq    ($(ENV),RAM)
LDFLAGS +=  -Ttext= 0x0
else
LDFLAGS +=  -Ttext = 0x20000000
endif



#Way
all : $ (TARGET)
ifeq ($(ENV),RAM)
$(TARGET: $(BUILD)
    $(OBJCOPY) -O binary $^ $@
else
$ (TARGET) :$(BUILD)
    $(OBJCOPY) -O binary $^ $@.TMP
    $(SDTOOLS) $@.TMP $@  
endif



$(BUILD) : $(COBJS)
    $(LD) $ (LDFLAGS) -o)  $@ $^      

%.o : %.c
        $(CC$(CFLAGS)  -c  -o  $@  $^

%.o : %.S
        $(CC)  $(CFLAGS)  -c  -o  $@  $^



clean:
    rm -f $(TARGET$(BUILD)  *.o *.TMP

你可能感兴趣的:(bootloader)