|
文件: |
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) |