S3C2440驱动开发(七)

本文介绍了S3C2440的Bootloader vivi,讲解了其源码编译过程,并详细解析了head.S文件,包括初始化系统时钟、设置堆栈指针、禁用中断等关键步骤。通过串口输出展示了程序运行的各个阶段,为理解Bootloader的工作原理提供了详细指导。
摘要由CSDN通过智能技术生成

Bootloader

Bootloader 以其本身的含义来讲就是下载和启动系统,它类似于 PC 中的 BIOS,大部

分芯片厂商所提供的嵌入式系统都提供有这样的程序,而且都比较成熟,大可不必自行编写。

为研究其工作原理,清扫上个章节裸机程序中的知识盲点,本章节将通过vivi单独介绍Bootloader的技术细节。vivi由三星提供,韩国 mizi 公司原创,开放源代码,必须使用 arm-linux-gcc 进行编译,主要适用于三星 S3C24xx 系列 ARM 芯片,用以启动 Linux 系统,支持串口下载和网络文件系统启动等常用简易功能。

vivi编译源码

vivi需要在linux环境下编译。本文给出的viv源码交叉编译器版本为arm-linux-gcc-2.95.3。从官网下载gcc,解压到/usr/local/arm/2.95.3目录。下载vivi-20090630.tar.gz,解压到合适目录。cd进入vivi目录,输入make命令进行编译。编译完成后生成vivi二进制文件,使用jlink或者其他BootLoader将其烧录到nand flash中。

 vivi源码解析(一)

vivi源码目录层次结构如下:

arch目录包含了芯片启动初始化相关代码。drivers目录为外设相关的驱动代码,包括FLASH、以太网、串口。init目录包含了main主程序和版本信息相关代码。其他目录包含的工具相关的辅助代码

首先解析‘vivi/arch/s3c2440/head.S’这个汇编文件。该文件是芯片上电后最开始执行的代码。地址为0x00000000。从下一章节“Nand Flash驱动”章节可知,上电后,硬件会自动将nand flash中前4K代码加载到内部的SRAM缓冲区中运行,映射的起始地址为0x00000000。此处的head.S即对应前4K代码。因Flash内部的SRAM缓冲区只有4K,无法存放bootloader全部功能的代码,故该缓存区代码主要功能是将Nand Flash中存储的vivi代码全部复制到SDRAM中,让其具备足够的内存空间运行。

                                                                                                         

1       #include "config.h"

2       #include "linkage.h"

3       #include "machine.h"

4       #define CONFIG_DEBUG_LL

5       #define CONFIG_SERIAL_UART0 1

6       ENTRY(_start)

7       ENTRY(ResetEntryPoint)

8       @ 0x00: Reset

9                b       Reset

10

11     UndefEntryPoint:

12              b       HandleUndef

13

14     SWIEntryPoint:

15              b       HandleSWI

16

17     PrefetchAbortEnteryPoint:

18              b       HandlePrefetchAbort

19

20     DataAbortEntryPoint:

21              b       HandleDataAbort

22

23     NotUsedEntryPoint:

24              b       HandleNotUsed

25

26     IRQEntryPoint:

27              b       HandleIRQ

28

29     FIQEntryPoint:

30              b       HandleFIQ

31

32     @ 0x20: magic number so we can verify that we only put

33              .long   0

34     @ 0x24:

35              .long   0

36     @ 0x28: where this vivi was linked, so we can put it in memory in the right place

37              .long   _start

38     @ 0x2C: this contains the platform, cpu and machine id

39              .long   ARCHITECTURE_MAGIC

40     @ 0x30: vivi capabilities

41              .long   0

42     #ifdef CONFIG_PM

43     @ 0x34:

44              b       SleepRamProc

45     #endif

46     #ifdef CONFIG_TEST

47     @ 0x38:

48     @     b       hmi

49     #endif

50     Reset:

51              @ disable watch dog timer

52              mov r1, #0x53000000

53              mov r2, #0x0

54              str    r2, [r1]

55              @ disable all interrupts

56              mov r1, #INT_CTL_BASE

57    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值