原创 几种Bootloader简介(二)

2006-10-14 23:37 5289 12 7 分类: MCU/ 嵌入式

  l         ViVi


        vivi是什么?


        vivi是由mizi公司设计为ARM处理器系列设计的一个bootloader,因为vivi目前只支持使用串口和主机通信,所以您必须使用一条串口电缆来连接目标板和主机。


       它有如下作用:


       1)、 把内核(kernel)从flash复制到RAM,然后启动它


       2)、 初始化硬件


       3)、 下载程序并写入flash(一般通过串口或者网口先把内核下载到RAM中,然后写入到flash)


       4)、 检测目标板(bootloader会有一些简单的代码用以测试目标板硬件的好坏)


       vivi的使用方法


       摘录自vivi的guide.txt,稍作修改。


Getting started with vivi


Janghoon Lyu (nandy@mizi.com)


This is a short introduction about the vivi.


Revision History


Revision v0.1 2002-10-21 Revised by: jl


Initial public release. very very short descriptions. (with foolish sentences -_-;;)


------------------------------------------------------------------------


   <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


1. Introduction.


1.1. Definitions.


1.2. vivi的目录结构及文件.


1.2.1 vivi的目录树.


1.2.2 vivi的文件.


2. vivi 的编译.


2.1. Pre-Requirements.


2.2. Straight-forward compilation.


2.3. SA-1110-Based machines with the NOR flash.


2.4. S3C2410-Based machines with the NAND flash.


3. vivi的使用.


3.1. Interface between an user and the vivi.


3.2. Built-in user commands.


3.2.1. load command.


3.2.2. part command.


3.2.3. param command.


3.2.4. boot command.


3.2.5. flash command.


------------------------------------------------------------------------

1. Introduction


This document explains to you:


 


1) compiling the vivi


 


2) interface an user and the vivi


 


3) avaliable user commands


1.1. Definitions


vivi


 


The vivi is one of arm boot loaders.


 


Autoboot mode


 


The vivi has two modes. one of these is autoboot mode. This is a default mode. In this mode, The vivi automatically boot-up the linux kernel when a delay time is expired.


 


Prompt mode


 


One of vivi's modes is prompt mode. In this mode, An user is able to command to the vivi doing something.


 


Host platform


 


Generally, an engineer develop the software on the powerful destktop computer (not on the embedded machines). This descktop called host platform.


 


Target platform


 


Target platform means developemnt boards or embedded machines.


1.2. vivi的目录结构及文件


1.2.1 vivi的目录树


E:\S3C2410_VIVI_R1.1


├───Documentation


   └───html


├───arch


   ├───def-configs


   └───s3c2410


├───drivers


   ├───mtd


      ├───maps


      ├───nand


      └───nor


  └───serial


├───include


   ├───mtd


   ├───proc


   └───platform


├───init


├───lib


   └───priv_data


├───scripts


   └───lxdialog


└───util


1.2.2 vivi的文件


Directory of E:\s3c2410_vivi_r1.1



2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          Documentation


2006-08-30  14:10    <DIR>          arch


2006-08-30  14:10    <DIR>          drivers


2006-08-30  14:10    <DIR>          include


2006-08-30  14:10    <DIR>          init


2006-08-30  14:10    <DIR>          lib


2006-08-30  14:10    <DIR>          scripts


2006-08-30  14:10    <DIR>          util


2004-05-07  08:48            18,008 COPYING


2004-05-07  08:48             5,540 Makefile


2004-05-07  08:48             4,348 Rules.make


               3 File(s)      27,896 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\Documentation


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          html


2004-05-07  08:48                98 .cvsignore


2004-05-07  08:48             7,002 CHANGELOG


2004-05-07  08:48             8,537 Configure.help


2004-05-07  08:48             7,979 Configure.help.en


2004-05-07  08:48             1,301 README


2004-05-07  08:48             4,373 booting.ARM


2004-05-07  08:48               682 compile.txt


2004-05-07  08:48             8,965 guide.txt


2004-05-07  08:48             1,353 optoions.txt


2004-05-07  08:48             1,490 vivi_priv_data.txt


              10 File(s)         41,780 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\Documentation\html


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48            18,232 guide.html


               1 File(s)         18,232 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\arch


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          def-configs


2004-05-07  08:48             2,282 Makefile


2004-05-07  08:48             3,435 config.in


2004-05-07  08:48             2,070 defconfig


2004-05-07  08:48               137 vivi.lds.in


2006-08-30  14:10    <DIR>          s3c2410


               4 File(s)          7,924 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\arch\def-configs


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48             2,070 smdk2410


               1 File(s)          2,070 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\arch\s3c2410


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               379 Makefile


2004-05-07  08:48            16,566 head.S


2004-05-07  08:48             4,858 mmu.c


2004-05-07  08:48             1,597 nand_read.c


2004-05-07  08:48             9,077 proc.c


2004-05-07  08:48             2,497 smdk.c


2004-05-07  08:48             3,801 smdk2410_test.c


2004-05-07  08:48             9,069 test.c


               8 File(s)         47,844 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\drivers


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          mtd


2004-05-07  08:48               237 Makefile


2006-08-30  14:10    <DIR>          serial


               1 File(s)            237 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\drivers\mtd


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          maps


2006-08-30  14:10    <DIR>          nand


2004-05-07  08:48               506 Config.in


2004-05-07  08:48               284 Makefile


2004-05-07  08:48            12,856 mtdcore.c


2006-08-30  14:10    <DIR>          nor


               3 File(s)         13,646 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\drivers\mtd\maps


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               553 Config.in


2004-05-07  08:48               340 Makefile


2004-05-07  08:48             2,683 pxa250_flash.c


2004-05-07  08:48             2,701 s3c2400_flash.c


2004-05-07  08:48             7,570 s3c2410_flash.c


2004-05-07  08:48             2,632 sa1100_flash.c


               6 File(s)         16,479 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\drivers\mtd\nand


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               630 Config.in


2004-05-07  08:48               278 Makefile


2004-05-07  08:48            10,376 bon.c


2004-05-07  08:48             5,252 nand_ecc.c


2004-05-07  08:48            26,771 smc_core.c


               5 File(s)         43,307 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\drivers\mtd\nor


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48             2,000 Config.in


2004-05-07  08:48               265 Makefile


2004-05-07  08:48            29,770 amd_flash.c


2004-05-07  08:48            25,191 cfi_cmdset_0001.c


2004-05-07  08:48             9,777 cfi_probe.c


2004-05-07  08:48             1,007 chipreg.c


2004-05-07  08:48             6,781 gen_probe.c


               7 File(s)         74,791 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\drivers\serial


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               955 Config.in


2004-05-07  08:48               324 Makefile


2004-05-07  08:48             1,174 getcmd.c


2004-05-07  08:48               647 getcmd.h


2004-05-07  08:48             6,878 getcmd_ext.c


2004-05-07  08:48             1,530 serial_core.c


2004-05-07  08:48             1,264 term.c


2004-05-07  08:48             4,895 xmodem.c


2004-05-07  08:48             7,204 ymodem.c


               9 File(s)         24,871 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\include


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          mtd


2006-08-30  14:10    <DIR>          proc


2004-05-07  08:48               691 architecture.h


2004-05-07  08:48             2,835 bitfield.h


2004-05-07  08:48               764 boot_kernel.h


2004-05-07  08:48             3,122 cap.h


2004-05-07  08:48               912 command.h


2004-05-07  08:48               257 compile.h


2004-05-07  08:48               196 config.h


2004-05-07  08:48               106 ctype.h


2004-05-07  08:48               106 errno.h


2004-05-07  08:48               105 flash.h


2004-05-07  08:48               112 getcmd.h


2004-05-07  08:48               694 hardware.h


2004-05-07  08:48               229 heap.h


2004-05-07  08:48               385 io.h


2004-05-07  08:48               441 linkage.h


2004-05-07  08:48             1,087 machine.h


2004-05-07  08:48             3,938 md5.h


2004-05-07  08:48               427 memory.h


2004-05-07  08:48               796 mmu.h


2004-05-07  08:48               114 printk.h


2004-05-07  08:48             1,657 priv_data.h


2004-05-07  08:48               312 processor.h


2004-05-07  08:48            24,247 pxa250.h


2004-05-07  08:48               357 reset_handle.h


2004-05-07  08:48            16,876 s3c2400.h


2004-05-07  08:48            17,357 s3c2410.h


2004-05-07  08:48            17,979 sa1100.h


2004-05-07  08:48               438 serial.h


2004-05-07  08:48               104 setup.h


2004-05-07  08:48             1,130 sizes.h


2004-05-07  08:48               198 time.h


2004-05-07  08:48               125 types.h


2004-05-07  08:48             1,296 vivi.h


2004-05-07  08:48               273 vivi_lib.h


2004-05-07  08:48               328 vivi_string.h


2004-05-07  08:48               115 xmodem.h


2004-05-07  08:48             2,690 ymodem.h


2006-08-30  14:10    <DIR>          platform


              37 File(s)        102,799 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\include\mtd


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48             2,918 amd_flash.h


2004-05-07  08:48               201 bonfs.h


2004-05-07  08:48            11,521 cfi.h


2004-05-07  08:48             1,277 flashchip.h


2004-05-07  08:48               505 gen_probe.h


2004-05-07  08:48             2,632 map.h


2004-05-07  08:48             5,997 mtd.h


2004-05-07  08:48             6,572 nand.h


2004-05-07  08:48               782 nand_ecc.h


2004-05-07  08:48             3,216 nand_ids.h


              10 File(s)         35,621 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\include\proc


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48             1,773 proc_pxa250.h


2004-05-07  08:48             1,301 proc_s3c2400.h


2004-05-07  08:48             1,803 proc_s3c2410.h


2004-05-07  08:48             1,911 proc_sa1100.h


               4 File(s)          6,788 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\include\platform


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48             3,654 s3c2410_gen_memmap.h


2004-05-07  08:48             4,417 smdk2410.h


               2 File(s)          8,071 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\init


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               263 version.c


2004-05-07  08:48             3,021 main.c


               2 File(s)          3,284 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\lib


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          priv_data


2004-05-07  08:48               577 Config_cmd.in


2004-05-07  08:48               350 Makefile


2004-05-07  08:48            10,342 boot_kernel.c


2004-05-07  08:48             8,103 command.c


2004-05-07  08:48             1,321 ctype.c


2004-05-07  08:48             3,332 exec.c


2004-05-07  08:48             2,694 heap.c


2004-05-07  08:48             4,160 load_file.c


2004-05-07  08:48            13,371 md5.c


2004-05-07  08:48            11,374 memory.c


2004-05-07  08:48            11,221 memtst.c


2004-05-07  08:48             4,530 misc.c


2004-05-07  08:48             9,044 printk.c


2004-05-07  08:48             1,218 reset_handle.c


2004-05-07  08:48             3,618 string.c


2004-05-07  08:48             2,267 time.c


              16 File(s)         87,522 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\lib\priv_data


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               419 Config.in


2004-05-07  08:48                87 Makefile


2004-05-07  08:48             7,612 mtdpart.c


2004-05-07  08:48             6,685 param.c


2004-05-07  08:48             5,853 rw.c


               5 File(s)         20,656 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\scripts


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2006-08-30  14:10    <DIR>          lxdialog


2004-05-07  08:48            12,287 Configure


2004-05-07  08:48            24,422 Menuconfig


2004-05-07  08:48             7,485 README.Menuconfig


               3 File(s)         44,194 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\scripts\lxdialog


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48               234 BIG.FAT.WARNING


2004-05-07  08:48             1,130 Makefile


2004-05-07  08:48             9,765 checklist.c


2004-05-07  08:48             5,384 colors.h


2004-05-07  08:48             5,936 dialog.h


2004-05-07  08:48             6,179 inputbox.c


2004-05-07  08:48             6,023 lxdialog.c


2004-05-07  08:48            12,844 menubox.c


2004-05-07  08:48             2,529 msgbox.c


2004-05-07  08:48            15,584 textbox.c


2004-05-07  08:48             9,927 util.c


2004-05-07  08:48             3,067 yesno.c


              12 File(s)         78,602 bytes


 


 Directory of E:\s3c2410_vivi_r1.1\util


 


2006-08-30  14:10    <DIR>          .


2006-08-30  14:10    <DIR>          ..


2004-05-07  08:48            10,711 imagewrite.c


2004-05-07  08:48               113 README


2004-05-07  08:48             3,186 ecc.c


2004-05-07  08:48            28,012 imagewrite


4 File(s)         42,022 bytes


2. vivi 的编译


This section describes how to compile the vivi.


2.1. Pre-Requirements


Here is a list of the minimum levels of software necessary to compile the vivi.


 


* Gnu C 2.95.3


 


* Gnu make 3.79.1


 


* binutils 2.11.2


 


And then, your host platform are installed these tools.


 


* You have a cross-compiler and tool-chains.


 


* You have a Baurne-Again shell. (/bin/bash)


 


* You have a ncurses library.


2.2. Straight-forward compilation


The compiliation(configuration) environment of the vivi is simlilar to the environment of the linux kernel. So, you can do make distclean, make clean, make oldconfig , make menuconfig, and make config. General compiling sequence sequence is:


 


1) make distclean


 


2) make menuconfig


 


3) make


 


Note that If you change configurations, run make clean and make. Next two sections describes compilation of two examples.


2.3. SA-1110-Based machines with the NOR flash


I will take an example about the vivi compliation. I assumed that a target platform's core block is composed like this:


 


* CPU: SA-1110 processor


 


* ROM: 32MB Intel Strata Flash (32-bit wide)


 


* RAM: 32MB DRAM


 


These features make sense to you. Many platforms I have met is designed core block like above. For instance, KINGS, GILL, and ENDA's core block is designed like this. Therefore, you refer to vivi/arch/def-configs/kings, vivi/arch/def-configs/gill, and vivi/arch/def-configs/enda


 


If you want to compile vivi for KINGS(i.e. a configuration of a target board, alredy exist in the vivi/arch/def-cofnigs), just do like this:


 


# make kings


 


Other machines can complie same ways.


2.4. S3C2410-Based machines with the NAND flash


Here, I will take an example about a S3C2410-Based machine. The SMDK-2410 (a development board by SAMSUNG) is a S3C2410-Based machine.The core block of SMDK-2410 is composed like this:


 


* CPU: S3C2410


* ROM: 64MB SMC (NAND Flash)


* RAM: 64MB DRAM


 


A configuration for SMDK-2410 will be found atvivi/arch/def-configs/smdk2410. To compile for SMDK-2410, do like this(As I described above):


 


# make smdk2410


3. vivi的使用


3.1. Interface between an user and the vivi


The vivi uses the serical communication for user interface. Therefore, to connect the vivi, you


1) connect a serial cable between host platform and target platform.


2) already have a serial communication program like the minicom.


3) properly make the vivi binary to support a UART port when you configure the vivi.


 


If all of above is ok, you can see messages on the screen printed by the vivi. For example, below messages catched from the SMDK-2410


 


VIVI version 0.1.4 (nandy@nandy.mizi.com) (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


 


See the last line on the screen. (As I mentioned section 1.1) the vivi has two mode: an autoboot mode and a prompt mode. The vivi wait for a key input. If an user want to enter the prompt mode, press andy key (except Enter key). And then you can see the "vivi>" prompt. Otherwise, the vivi try boot the linux kernel after waiting a few seconds or minutes.


3.2. Built-in user commands


This is not full-described built-in user comamnd. But following commands is enough to use the vivi (as far as I know).


3.2.1. load command


A load command is loading binaries to the flash or the ram.


 


Usage:


 


load [ | ]


 


This argument is where to load. Availabe values are *flash* and *ram*.


 


[ ] or [ ]


 


This arguement determines location where to load a binary. If you want to use pre-defined mtd partiton informations, just type a partition name. Otherwise you specify an address and a size.


 


This arguement determines the file transfer protocol. I shy that the vivi only supprot xmodem curruntly. So, Available value is "x".


 


For exampe, you load zImage to flash memroy.


 


vivi > load flash kernel x


 


or you specify an address and a size.


 


vivi > load flash 0x80000 0xc0000 x


3.2.2. part command


The vivi has mtd partiton informations for the vivi. This informatin not related to mtd partition informations of mtd device drivers. The vivi uses partition informations when load a binary, boot the linux kernel, erase flash memroy, etc...


 


Avalilable commands are:


 


Display mtd partition informations.


 


part show


 


Add a new mtd partition.


 


part add


 


is name of a new mtd partiton.


is offset in the mtd device.


is a size of a mtd parition.


is flags of a mtd parition. Available valuse are JFFS2, LOCKED, and BONFS.


 


Delete a mtd partiton.


 


part del


 


Reset mtd partitions to default values.


 


part reset


 


Save paramter valuse and mtd parition informations to flash permanently.


 


part save


3.2.3. param command


The vivi has some parameter values. For example, the "boot_delay" paramter determines how long wait keystroke when the vivi is in the autoboot mode. I'm sorry that this feature is in progress. So all listed parameter is not available.


 


Here, I give several tips for you.


 


If you change the "linxu command line",


 


vivi> param set linux_cmd_line "you wish.."


 


If you want to see paramters,


 


vivi> param show


 


If you want to wait a long time when recevie file via xmodem,


 


vivi> param set xmodem_initial_timeout 3000000


 


If you want to boot imediately when a hardware reset,


 


vivi> param set boot_delay 100000


3.2.4. boot command


A boot command is boot the linux kernel which is stored in the flashmemroy or ram.


 


Usage:


 


boot [ | ]


 


This argument is where to store the linux kernel image. Availabe values are ram, nor and smc.


 


[ ] or [ ]


 


This arguement determines location where to store the linux kernel. If you want to use pre-defined mtd partiton information, just type a partition name. Otherwise you shuld specify an address and a size.


 


Note that all argument is optional. If you omit all argument (just type boot), all arguments is parsing from pre-defined mtd parititon information called "kernel" For example,


 


vivi> boot


 


the vivi read the linux kernel binary from the "kernel" mtd parititons.


 


vivi> boot nor 0x80000


 


the vivi read the linux kernel binary form the nor flash memory. The offset is 0x80000 and the size is default value (0xc0000). Ocassionally, you want to test the kernel on the ram (not store kernel to flash). you can do it on the vivi On the SA-1110 based machine,


 


vivi> load ram 0xc0008000 x


 


vivi> boot ram


 


On the S3C2410 based machine,


 


vivi> load ram 0x30008000 x


 


vivi> boot ram


 


On the PXA-240 based machine,


 


vivi> load ram 0xA0008000 x


 


vivi> boot ram


 


the vivi boot the linux kernel from the ram.


3.2.5. flash command


A flash comamnd manages the flash memory. If you want to erase flash memory,


 

flash erase [ | ]  

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /3 下一条