没有合适的资源?快使用搜索试试~ 我知道了~
bootloader(VIVI)源代码分析(S3C2410)
4星 · 超过85%的资源 需积分: 10 236 下载量 6 浏览量
2008-04-24
17:54:05
上传
评论 2
收藏 131KB PDF 举报
温馨提示
试读
23页
Bootloader(Vivi)源代码分析<br>----基于S3C2410 处理器<br>作者:forkchen<br>Email:chenjun@bupt-bcnl.com<br>QQ:56155986<br>欢迎广大嵌入式之友多多交流<br>目 录<br>1.1 Vivi 简介... 2<br>1.2 vivi 的配置与编译... 3<br>1.2.1 建立交叉开发环境... 3<br>1.2.2 配置和编译vivi 4<br>1.3 vivi 代码分析... 4<br>1.4 vivi 的运行... 5<br>1.4.1 vivi 的第一阶段... 5<br>1.4.2 vivi 的第二阶段... 15<br>1.5 启动代码执行流程图... 17<br>1.6 vivi 的配置文件... 19
资源推荐
资源详情
资源评论
s3c2410 的 Bootloader(Vivi)源代码分析
Bootloader(Vivi)源代码分析
----基于 S3C2410 处理器
作者:forkchen
Email:chenjun@bupt-bcnl.com
QQ:56155986
欢迎广大嵌入式之友多多交流
目 录
1.1 Vivi 简介... 2
1.2 vivi 的配置与编译... 3
1.2.1 建立交叉开发环境... 3
1.2.2 配置和编译 vivi 4
1.3 vivi 代码分析... 4
1.4 vivi 的运行... 5
1.4.1 vivi 的第一阶段... 5
1.4.2 vivi 的第二阶段... 15
1.5 启动代码执行流程图... 17
1.6 vivi 的配置文件... 19
1.1 Vivi 简介
Vivi 是韩国 mizi 公司开发的 bootloader, 适用于 ARM9 处理器。 Vivi 有两种工作模
式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行
启动 linux 内核,这时 vivi 的默认模式。在下载模式下,vivi 为用户提供一个命令行接口,
通过接口可以使用 vivi 提供的一些命令,见下表:
命令 功能
Load 把二进制文件载入 Flash 或 RAM
Part 操作 MTD 分区信息。显示、增加、删除、复位、保存 MTD 分区
Param 设置参数
Boot 启动系统
Flash 管理 Flash,如删除 Flash 的数据
1.2 vivi 的配置与编译
1.2.1 建立交叉开发环境
1、在宿主机上安装标准 Linux 操作系统:Redhat 9.0 ( 主机系统为 win2000,用虚
拟机 vmware 安装的 Redhat 9.0,内核版本为 2.4.18) 。
2、宿主机上安装交叉编译器。
我这边的 2410 开发板提供的光盘上已附交叉编译器工具:arm-linux-gcc-2.95.3(源
码为 cross-2.95.3.tar.bz2)。
先以 root 用户的身份登陆到 linux 下。
进入/usr/local 目录,创建名为 arm 的目录:
cd /usr/local
mkdir arm
将光盘提供的 cross-2.95.3.tar.bz2 解压到/usr/local/arm 目录:
tar jxvf cross-2.95.3.tar.bz2 –C /usr/local/arm
然后修改修改 PATH 变量:为了可以方便使用 arm-linux-gcc 编译器系统, 把 arm-linux
工具链目录加入到环境变量 PATH 中:
修改/etc/profile 文件,添加 pathmunge /usr/local/arm/2.95.3/bin 即可。
# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/arm/2.95.3/bin
fi
pathmunge /usr/X11R6/bin after
设置环境变量后,最好是重启或注销一下,这样设置的环境变量才能生效。
1.2.2 配置和编译 vivi
如果 vivi 的源代码已根据开发板作了相应改动,则需要对源代码进行配置和编译,以
生成烧入 flash 的 vivi 二进制映象文件。
由于 vivi 要用到 kernel 的一些头文件,所以需要 kernel 的源代码,所以先要把 linux
的 kernel 准备好。将 vivi 和 kernel 都解到相应目录下(例如我将光盘提供的 vivi 源代码解
压到/home/chenjun 目录下,光盘提供的 Linux kernel 源码 kernel-h2410eb.041024.tar.gz 也
解压到/home/chenjun 目录下,解压后的文件名为 kerne-h2410eb)。
然后需修改/vivi/Makefile 里的一些变量设置:
Ø LINUX_INCLUDE_DIR = /kernel/include/
(LINUX_INCLUDE_DIR 为 kernel/include 的对应目录,我的是
/home/chen/kerne-h2410eb /include/)
因此修改为:
LINUX_INCLUDE_DIR = /home/chenjun/ kerne-h2410eb/include/
Ø CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
(CROSS_COMPILE 为 arm-linux 安装的相应目录,我的是
/usr/local/arm/2.95.3/bin/arm-linux-)
因此修改为:
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
(需根据你 arm-linux 的安装目录修改,我的是
/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。
1.3 vivi 代码分析
vivi 的代码包括 arch,init,lib,drivers 和 include 等几个目录,共 200 多条文件。
Vivi 主要包括下面几个目录:
arch:此目录包括了所有 vivi 支持的目标板的子目录,例如 s3c2410 目录。
drivers:其中包括了引导内核需要的设备的驱动程序(MTD 和串口)。MTD
目录下分 map、nand 和 nor 三个目录。
init:这个目录只有 main.c 和 version.c 两个文件。和普通的 C 程序一样,vivi
将从 main 函数开始执行。
lib:一些平台公共的接口代码,比如 time.c 里的 udelay()和 mdelay()。
include:头文件的公共目录,其中的 s3c2410.h 定义了这块处理器的一些寄存
器。Platform/smdk2410.h 定义了与开发板相关的资源配置参数,我们往往只需要修改这个
文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。
1.4 vivi 的运行
vivi 的运行也可以分为两个阶段:
1.4.1 vivi 的第一阶段
完成含依赖于 CPU 的体系结构硬件初始化的代码,包括禁止中断、初始化串口、复制
自身到 RAM 等。相关代码集中在 head.S(\vivi\arch\s3c2410 目录下):
Head.S:
#include "config.h"
#include "linkage.h"
#include "machine.h"
@ Start of executable code
ENTRY(_start)
ENTRY(ResetEntryPoint)
@
@ Exception vector table (physical address = 0x00000000) ;异常向量表物理地址
@
@ 0x00: Reset ;复位
b Reset
@ 0x04: Undefined instruction exception ;未定义的指令异常
UndefEntryPoint:
b HandleUndef
@ 0x08: Software interrupt exception ;软件中断异常
SWIEntryPoint:
b HandleSWI
@ 0x0c: Prefetch Abort (Instruction Fetch Memory Abort) ;内存操作异常
PrefetchAbortEnteryPoint:
b HandlePrefetchAbort
@ 0x10: Data Access Memory Abort ;数据异常
DataAbortEntryPoint:
b HandleDataAbort
@ 0x14: Not used ;未使用
NotUsedEntryPoint:
b HandleNotUsed
@ 0x18: IRQ(Interrupt Request) exception ;慢速中断处理
IRQEntryPoint:
b HandleIRQ
@ 0x1c: FIQ(Fast Interrupt Request) exception ;快速中断处理
FIQEntryPoint:
b HandleFIQ
@
@ VIVI magics
@
@ 0x20: magic number so we can verify that we only put
.long 0
剩余22页未读,继续阅读
资源评论
- 小菜一碟1112012-07-08vivi代码不错,值得研究学习
- jialei8512252013-07-29几年前下载的东西了,代码很不错,学到了很多东西
- hps3112011-11-18vivi确实是个不错的ARM bootloader, 可惜三星只是拿它用来做为卖芯片的吸引点,没有后续支持.本身支持的接口又少,结果落的个无人问津的地步,被UBOOT压过
panqihe
- 粉丝: 30
- 资源: 57
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功