Chinaunix首页 | 论坛 | 博客
  • 博客访问: 566808
  • 博文数量: 109
  • 博客积分: 2300
  • 博客等级: 大尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-02 13:11
文章分类

全部博文(109)

文章存档

2012年(1)

2011年(17)

2010年(62)

2009年(29)

我的朋友

分类: 嵌入式

2009-10-02 13:51:31

文件: s3c2410 的Bootloader(Vivi)源代码分析.pdf
大小: 131KB
下载: 下载
    提供一个s3c2410 的Bootloader(Vivi)源代码分析文档,看了还是很有收获的。别人的,不知道算不算侵权。不过我不是以盈利为目的,应该不算吧,大家学习。
 
1、Vivi 简介

    Vivi 是韩国mizi 公司开发的bootloader, 适用于ARM9 处理器。 Vivi 有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux 内核,这时vivi 的默认模式。在下载模式下,vivi 为用户提供一个命令行接口,通过接口可以使用vivi 提供的一些命令:
Load:把二进制文件载入Flash 或RAM
Part:操作MTD 分区信息。显示、增加、删除、复位、保存MTD 分区
Param:设置参数
Boot:启动系统
Flash:管理Flash,如删除Flash 的数据
 
2、开发板的vivi下的烧写

通过串口烧写vivi、kernel、root到flash里
vivi> load flash vivi x
vivi> load flash kernel x
vivi> load flash root x
 
通过网口烧写vivi、kernel、root到flash里
    网口烧写vivi,要求原来有vivi且vivi有set功能,bon重新分区时vivi会暂时保存在RAM里面,重启后消失。
使用交叉网线连好PC与开发板,开机进入vivi,打开tftp服务器,
vivi> set c 192.168.0.100
vivi> set s 192.168.0.118
vivi> tftp flash vivi vivi(烧写vivi后须重启)
vivi> tftp flash kernel zImage
vivi> tftp flash root root.cramfs
等待烧写完成即可
 
3、vivi下一些常用命令
param 命令用于对bootloader的参数进行操作
------------------------------------------------------
vivi> param help
Usage:
param help -- Help aout 'param' command
param reset -- Reset parameter table to default table
param save -- Save parameter table to flash memeory
param set -- Reset value of parameter
param set linux_cmd_line "..." -- set boot parameter
param set wince_part_name "..." -- set the name of partition wich wincewill be stored in
param show -- Display parameter table
 
vivi> param show
Number of parameters: 9
name                    :          hex             integer
-------------------------------------------------------------
mach_type               :       000000c1                  193
media_type              :       00000003                    3
boot_mem_base           :       30000000            805306368
baudrate                :       0001c200               115200
xmodem_one_nak          :       00000000                    0
xmodem_initial_timeout  :       000493e0               300000
xmodem_timeout          :       000f4240              1000000
ymodem_initial_timeout  :       0016e360              1500000
boot_delay              :       01000000             16777216
Linux command line: noinitrd root=/dev/bon/3 init=/linuxrc console=ttyS0

//(1)类型,193表示 S3C2410的开发系统
//(2)媒介类型,即指示了bootloader从哪个媒介启动起来的
//(3)引导 linux 内核启动的基地址映像将被从 Flash 中拷贝到boot_mem_base + 0x8000 的地址处,内核参数将被建立在boot_mem_base+0x100的地址处
//(4)bootloader启动时,默认设置的串口波特率
mach_type : 000000c1 193 //(1)
media_type : 00000003 3 //(2)
boot_mem_base : 30000000 805306368 //(3)
baudrate : 0001c200 115200 //(4)
//(5) 以下三个参数和xmodem文件传送协议相关:
xmodem_one_nak
表示接收端(即ARM9系统这端)发起第一个NAK信号给发送端(即PC主机这端)到启动;
xmodem_initial_timeout
表示接收端(即ARM9系统这端)启动xmodem协议后的初始超时时间,第一次接收超时按照这个参数的值来设置,但是超时一次后,后面的超时时间就不再是这个参数的值了,而是xmodem_timeout的值;
xmodem_timeout
表示在接收端(即ARM9系统这端)等待接受发送端(即PC主机这端)送来的数据字节过程中,如果发生了一次超时,那么后面的超时时间就设置成参数 xmodem_timeout的值了这三个参数不需要修改,系统默认的值就可以了,不建议用户去修改这几个参数值
xmodem_one_nak : 00000000 0
xmodem_initial_timeout : 000493e0 300000
xmodem_timeout : 000f4240 1000000

//(6) ymodem_initial_timeout
表示接收端(即 ARM9 系统这端)在启动了ymodem协议后的初始超时时间,这个参数不需要修改,系统默认的值就可以了,不建议用户去修改这几个参数值
//(7) boot_delay是bootloader自动引导linux kernel功能的延时时间
ymodem_initial_timeout : 0016e360 1500000 //(6)
boot_delay : 00300000 3145728 //(7)
os : WINCE
display : VGA 640X480
ip : 192.168.0.15
host : 192.168.0.1
gw : 192.168.0.1
mask : 255.255.255.0
wincesource : 00000001 1
wincedeploy : 00000000 0
mac : 00:00:c0:ff:ee:08
wince part name : wince
Linux command line : noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttyS0
//( Linux command line不是bootloader的参数,而是kernel启动的时候,kernel不能自动检测到的必要的参数些参数需要bootloader传递给 linux kernel, Linux command line就是设置linux kernel启动时,需要手工
传给 kernel的参数

param reset 将bootloader 参数值复位成系统默认值。
param set paramname value 设置参数值
param save 保存参数设置
param set linux_cmd_line ”linux bootparam”
设置linux 启动参数,参数linux bootparam表示要设置的linux kernel命令行参数。
修改boot_delay(延长等待时间)
vivi> param set boot_delay 0x05000000
vivi> param save

part命令用于对MTD分区进行操作
-------------------------------------------------------------------------------
vivi> part show
mtdpart info. (6 partitions)
name              offset        size        flag
------------------------------------------------
vivi            : 0x00000000    0x00020000     0  128k
param           : 0x00020000    0x00010000     0   64k
kernel          : 0x00030000    0x00100000     0    1M
root            : 0x00130000    0x00300000     4    3M
yaffs           : 0x00430000    0x03b00000     8   59M
ucos            : 0x03f30000    0x000cc000     0  816k
 
MTD分区是针对Flash(NOR Flash或者NAND Flash)的分区,以便于对bootloader对Flash进行管理
part add 命令用于添加一个MTD分区
part add name offset size flag
参数 name是要添加的分区的分区名
参数 offset是要添加的分区的偏移(相对于整个MTD设备的起始地址的偏移,在 ARM9系统中不论配置的是NOR Flash,还是NAND Flash,都只注册了一个mtd_info结构,也就是说逻辑上只有一个MTD设备,这个MTD设备的起始地址为0x00000000);
参数 size是要添加的分区的大小,单位为字节;
参数 flag是要添加的分区的标志,参数flag的取值只能为以下字符串(请注意必须为大写)或者通过连接符|
这个标志表示了这个分区的用途
“BONFS” 作为BONFS文件系统的分区;
“JFFS2” 作为JFFS2文件系统的分区;
“LOCK” 该分区被锁定了;
“RAM” 该分区作为RAM使用
例如,添加新的 MTD分区mypart
vivi> part add mypart 0x500000 0x100000 JFFS2
mypart: offset = 0x00500000,
阅读(952) | 评论(0) | 转发(0) |
0

上一篇:开通blog

下一篇:移植vivi修改的地方

给主人留下些什么吧!~~