s3c2410的bootloader(vivi)简介

s3c2410Bootloader(Vivi)源代码分析

Bootloader(Vivi)源代码分析

----基于S3C2410处理器

作者:so_zhou

Email:877970105@qq.com

QQ:877970105

欢迎广大嵌入式之友多多交流

 

第一部分 嵌入式系统的引导代码

      0Bootloader

  Bootloader(引导加载程序)是系统加电后运行的第一段代码,一般运行的时间非常短,但是对于嵌入式系统来说,这段代码非常重要。在我们的台式电脑当中,引导加载程序由BIOS(固件程序)和位于硬盘MBR中的操作系统引导加载程序(比如NTLOADERGRUBLILO)一起组成

   在嵌入式系统当中没有像BIOS这样的固件程序,不过也有一些嵌入式CPU会在芯片内部嵌入一小段程序,一般用来将bootloader装进RAM中,有点类似BIOS,但是功能比BIOS弱很多。在一般的典型系统中,整个系统的加载启动任务全由bootloader来完成。在ARM中,系统上电或复位时通常从地址0x00000000处开始执行,而在这个位置,通常安排的就是系统的BOOTLOADER。通过这小段程序可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境设置到一个合适的状态!以为最终调用操作系统内核准备好正确的环境。

嵌入式LINUX系统从软件的角度可看成是4个层次:

1)引导加载程序,包括固化在固件中(firmware)中的启动代码(可选)和BOOTLOADER两大部分。

2)内核。特定于板子的定制内核以及控制内核引导系统的参数。

3)文件系统。包括根文件系统和建立与FLASH内存设备上的文件系统。

4)用户应用程序。特定于用户的应用程序,有时还包括一个GUI

—————————————————————————————

| Bootloader   | 参数   |  Kernel     |  文件系统             |

—————————————————————————————

 大多书BOOTLOASER都包含两中模式,启动加载模式和下载模式

 

BOOTLOADER的启动流程

   大多书分为两个阶段,第一个阶段主要是包含依赖于CPU的体系结构的硬件初始化代码,通常都是用汇编语言来实现的。这个阶段的任务有:

     基本的硬件设备初始化(屏蔽所有中断、关闭处理器内部指令/数据CACHE等)

     为第二阶段准备RAM空间

     如果是从某个固态存储媒质中,则复制BOOTLOADER的第二阶段代码到RAM

     设置堆栈

     跳转到第二阶段的C程序入口点

第二阶段通常是由C语言实现的,这个阶段的主要任务有:

     初始化本阶段所要用到的硬件设备

     检测系统的内存映射

     将内核映像和根文件系统映像从FLASH读到RAM

     为内核设置启动参数

     调用内核

BOOTLOADER调用LINUX内核的方法是直接跳转到内核的第一条指令处,即跳转MEM_START+0x8000地址处,在跳转的时候必须满足下面的条件

     CPU寄存器:R00R1为机器类型IDR2为启动参数,标记列表在RAM中的起始基地址

     CPU模式:必须禁止中断,CPU设置为SVC模式

     CacheMMU设置:MMU必须关闭,指令CACHE可以打开也可以关闭,数据CACHE必须关闭

 

 

 

 

 

1  Vivi简介

vivi是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。 Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这时vivi的默认模式。在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令,见下表:

命令

功能

Load

把二进制文件载入FlashRAM

Part

操作MTD分区信息。显示、增加、删除、复位、保存MTD分区

Param

设置参数

Boot

启动系统

Flash

管理Flash,如删除Flash的数据

 

2 vivi的配置与编译

2.1  建立交叉开发环境

   网上关于这方面的内容有很多,也可以用最简单的cross-tool来自动建立开发环境!

 

1.2   配置和编译vivi

如果vivi的源代码已根据开发板作了相应改动,则需要对源代码进行配置和编译,以生成烧入flashvivi 二进制映象文件。

需修改/vivi/Makefile里的一些变量设置: 

LINUX_INCLUDE_DIR = /usr/local/arm/2.95.3/include

CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-

ARM_GCC_LIBS = /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3

 

进入/vivi目录执行make distclean。(目的是确保编译的有效性,在编译之前将vivi里所有的“*.o”“*.o.flag”文件删掉)

进入/vivi目录里,输入“make menuconfig”,开始选择配置。可以Load一个写好的配置文件也可以自己修改试试。注意Exit时一定要选“Yes”保存配置。

再输入“make”正式开始编译,一会儿就完了。如果不报错,在/vivi里面就有你自己的“vivi”了。这个就是后面要烧写到flash中的bootloader

 

 

原帖:http://blog.mcuol.com/user/so927/article/2850_1.htm

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SC2410处理器有以下几种启动方式: 1. 内部BootLoader启动:S3C2410内部集成了BootLoader程序,可通过配置引脚将处理器引导到内部BootLoader程序,实现系统启动。具体过程如下: a. 将引脚GPF[0]设置为低电平,然后将S3C2410复位。 b. S3C2410会首先读取内部BootLoader程序的固定地址,然后执行BootLoader程序。 c. BootLoader程序会对系统进行初始化,并加载操作系统内核程序到内存中。 d. 最后,BootLoader程序跳转到内核程序的入口地址,启动操作系统。 2. 外部BootLoader启动:在这种方式下,需要通过外部存储器(如NAND Flash、SD卡等)加载BootLoader程序并启动系统。具体过程如下: a. 首先,需要将引脚GPF[0]设置为高电平,然后将S3C2410复位。 b. S3C2410会从外部存储器的固定地址读取BootLoader程序,并执行BootLoader程序。 c. BootLoader程序会对系统进行初始化,并加载操作系统内核程序到内存中。 d. 最后,BootLoader程序跳转到内核程序的入口地址,启动操作系统。 3. JTAG调试启动:在这种方式下,可以通过JTAG调试器连接S3C2410处理器,实现系统的调试和启动。具体过程如下: a. 首先,需要通过JTAG调试器连接S3C2410处理器。 b. 然后,通过JTAG调试器向S3C2410处理器加载BootLoader程序,并启动系统。 c. BootLoader程序会对系统进行初始化,并加载操作系统内核程序到内存中。 d. 最后,BootLoader程序跳转到内核程序的入口地址,启动操作系统。 需要注意的是,在实际应用中,需要根据具体的需求选择合适的启动方式,并按照相应的步骤进行操作,以确保系统能够正常启动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值