Bootloader(Vivi)源代码分析
----基于 S3C2410 处理器
作者:forkchen
Email:chenjun@bupt-bcnl.com
QQ:56155986
编辑整理:马晨元
Email:mcy2000@21cn.com
QQ:12282568
目 录
1.1 Vivi 简介
1.2 vivi 的配置与编译
1.2.1 建立交叉开发环境
1.2.2 配置和编译 vivi
1.3 vivi 代码分析
1.4 vivi 的运行
1.4.1 vivi 的第一阶段
1.4.2 vivi 的第二阶段.
1.5 启动代码执行流程图
1.6 vivi 的配置文件
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。