版本历史 |
||
版本 v0.1 |
2002-10-21 |
作者:Janghoon Lyu |
第一个发布版本,做为一个简单的描述,错漏之处,请见谅 |
1 介绍
1.1 定义
2 编译vivi
2.1 准备工作
2.2 直接编译
2.3 具有NOR flash的SA-1110开发板上的移植
2.4 具有NAND flash的S3C2410开发板上的移植
3 使用vivi
3.1 用户与vivi间的接口
3.2 内嵌的用户命令
3.2.1 load命令
3.2.2 part命令
3.2.3 param命令
3.2.4 boot命令
3.2.5 flash命令
这篇文档跟您讲述了以下内容:
1. 编译vivi
2. 用户与vivi的接口
3. 可用的命令
vivi
vivi是arm处理器的引导装载程序之一。
自启动模式
vivi具有两种启动模式。默认模式便是自启动模式(译者注:也称启动装载模式)。在这种模式下,经一段延时后vivi自动启动Linux内核。
提示行模式
vivi另一个模式便是提示行模式(译者注:也称下载模式)。在这种模式下,用户能通过命令行“命令”vivi做一些事情。
宿主机平台
一般地,工程师在一台功能强大的桌面电脑上开发软件,而不是直接在嵌入式主机上开发。这台桌面电脑就叫做宿主机平台。
目标板平台
目标板即是开发平台或者嵌入式机器。
本部分讲述怎样编译vivi。
以下是编译vivi所需的最少的软件需求。
l GNU C:2.95.3
l GNU make:3.79.1
l Binutils:2.11.2
您的宿主机上必须安装以下工具:
l 交叉编译器以及工具链
l Baurne-Again shell. (/bin/bash)
l ncurses库
vivi的编译(配置)环境与linux内核的配置环境类似。也就是说,您可以执行以下命令:make distclean,make clean,make oldconfig,make menuconfig,以及make config。一般的编译顺序如下:
1. make distclean
2. make menuconfig
3. make
若您改动了配置,请一定要依次再运行make clean及make。下两步讲述两个例子的编译。
下面我们讲述vivi编译的一个例子。假定开发板内核模块组成如下:
l CPU:SA-110处理器
l ROM:32MB Intel Flash(32位)
l RAM:32M DRAM
这些特性对你很有意义。我见过的很多平台正是类似以上的设计好的内核模块。比如说,KINGS,GILL 以及ENDA 的内核模块正是这样设计的。因此,你可以参考vivi/arch/def-configs/kings , vivi/arch/def-configs/gill,及vivi/arch/def-configs/enda来编译你具体处理器对应的vivi。
如果你想做基于KINGS上的vivi编译(假如在vivi/arch/def-configs已经有对应目标板的配置),只要像下面这样子就可以了:
# make kings |
其他机器也是照这种方式编译。
这里,我们以基于S3C2410的机器为例讲述vivi的编译,比如SMDK。SMDK是SAMSUNG的一块基于S3C2410的开发板。其内核模块组成如下:
l CPU:S3C2410
l ROM:64MB SMC(NAND FLASH)
l RAM:64MB DRAM
SMDK的配置文件在vivi/arch/def-configs/smdk2410中,执行以下命令编译SMDK-2410:
# make smdk2410 |
vivi使用串口通讯做为与用户的接口。因此,位了连接vivi,您必须:
1) 使用串口线连接宿主机与目标板
2) 拥有某种串口通讯程序,如果minicom
3) 配置vivi时,使之支持异步串行通讯(UART)
如果以上所有条件均满足,您就可以在屏幕上看到vivi的打印信息。以下信息正是从SMDK-2410的启动信息抓过来的。
VIVI version 0.1.4 ([email protected]) (gcc version 2.95.2 20000516 (release) [Rebel.com]) #0.1.4 수 10월 16 16:19:11 KST 2002 MMU table base address = 0x33DFC000 Succeed memory mapping. NAND device: Manufacture ID: 0xec, Chip ID: 0x75 (Samsung KM29U256T) Found saved vivi parameters. Press Return to start the LINUX now, any other key for vivi |
请看屏幕显示的信息的最后一行(正如我在1.1中提到的),vivi有两种模式:自启动模式以及提示行模式。vivi正等待用户键入。如果用户想进入提示行模式,则按其它键(除了 回车键 ),接着就可以看到以下提示行“vivi>”。否则,vivi在等待几秒钟或几分钟后尝试启动linux内核。
以下并非vivi的所有内嵌用户命令,但就我所知,这对于使用vivi已经足够了。
load命令烧写二进制文件到flash或者ram。
用法:
load <存储介质> [<分区名> | <地址> <大小> ] <x|y|z> |
<存储介质>
烧写二进制文件到什么存储介质。可选的有 flash 以及 ram。
<分区名> 或者 <地址> <大小>
烧写二进制文件到什么地方。如果你想使用vivi预先定义的分区信息,只要使用分区名,否则必须指定地址及大小。
<x|y|z>
传输协议。非常抱歉,vivi目前仅支持xmodem传输协议。所以,仅支持x 值。
例如,你想烧写zImage(linux内核)到flash存储器。
vivi >load flash kernel x |
或者你指定一个地址及其大小。
vivi >load flash 0x80000 0xc0000 x |
vivi具有mtd分区信息表。这个分区表与mtd设备的实际mtd分区信息无关(译者注:此分区表是在/arch/S3C2410/smdk.c中由用户定义的,用来让vivi知道硬件的实际分区情况)。当烧写一个二进制文件,启动linux内核,擦写flash存储器等等时,vivi使用此分区信息表。
可用的命令有:
显示mtd分区信息:
vivi > part show |
新建一个mtd分区:
vivi > part add <name> <offset> <size> <flag> |
<name>
新建分区的名字
<offset>
新建的mtd分区的地址偏移量
<size>
新建的mtd分区的大小
<flag>
mtd分区的标志,目前支持的有: JFFS2, LOCKED, and BONFS
删除mtd分区
vivi > part del <partname> |
复位mtd分区表到默认值
vivi > part reset |
永久地保存参数或者mtd分区表到flash
vivi > part save |
(译者注:若为执行此命令,则重启开发板后本次对vivi所作的更改将丢失,恢复到默认值。)
vivi具有一些参量值,比如:“boot_delay”参量决定了自启动模式下vivi等待键盘输入的时间。我感到很抱歉,因为这个特性仍在进行中。因此列出的参量可能都是vivi目前尚不支持的。当然,这里我可以给您“支”几招。
如果您想改变“linux 命令行”
vivi> param set linux_cmd_line "you wish.." |
如果您想查看所有的参量
vivi> param show |
如果你想在通过xmodem接收文件时多等会
vivi> param set xmodem_initial_timeout 3000000 |
如果您想一进行硬件复位就自动启动
vivi> param set boot_delay 100000 |
此命令启动存储在flash或者ram存储器中的linux内核
用法:
boot <media_type> [ <partname> | <addr> <size> ] |
<media_type>
存储linux内核镜像的存储介质。目前支持ram、nor以及smc。
[ <partname> ] 或者 [ <addr> <size> ]
存储linux内核镜像的地址。如果你想使用vivi预先定义的分区信息,只要使用分区名,否则必须指定地址及大小。
请注意,所有这些参数都是可选的,如果您直接执行boot,所有参数将从预先定义的“kernel”mtd分区表信息中获取。例如:
vivi从“kernel”mtd分区表中读取linux内核的二进制文件
vivi> boot |
vivi从nor flash存储器读取linux内核二进制文件,偏移量是0x80000,大小是默认值(0xc0000)
vivi> boot nor 0x80000 |
偶尔地,您想在ram上测试内核(即是说,未把内核存储在flash中)。您可以在vivi上通过如下方式尝试:
在基于 SA-1110 的机器上:
vivi> load ram 0xc0008000 x vivi> boot ram |
在基于S3C2410的机器上:
vivi> load ram 0x30008000 x vivi> boot ram |
在基于PXA-240的机器上:
vivi> load ram 0xA0008000 x vivi> boot ram |
则vivi从ram启动linux内核。
flash命令用来管理flash存储器。
如果您想擦除flash存储器
vivi> flash erase [ <partname> | <offset> <size> ] |