/
一、S5PV210的启动方式
iROM:BL0,BootLoader 0,初始化系统时钟,初始化对应的设备和启动设备(Nand,SD卡),三星固化在芯
片的代码,我们是不能修改。
BL1:BootLoader 1,uboot前面的16KB代码。
.重新初始化系统时钟,CPU=1GHz,初始化串口、Nand、DDR2等硬件设备。
.拷贝整个u-boot到DDR2内存当中,拷贝512KB大小。
BL2:BootLoader 2,它是整个uboot。
.带有调试功能
.启动内核,将内核拷贝到内存0x30008000地址当中。
///
一、嵌入式的启动过程
uboot ---> kernel ---> 根文件系统 ---> 应用程序
加载 挂载 调用
bios ---> winnt ---> ntfs ---> 应用程序
二、什么是u-boot?
1.u-boot是通用的引导程序。
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。U-
Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上
,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从
U-Boot源码的注释中能体现这一点。
选择U-Boot的理由:
① 开放源码;
② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
④ 较高的可靠性和稳定性;
⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦ 较为丰富的开发调试文档与强大的网络技术支持;
2.u-boot官网
主页:http://www.denx.de/wiki/U-Boot/
源码:ftp://ftp.denx.de/pub/u-boot/
3.特征
1)通用性
.支持多种硬件:MIPS、ARM、x68、PowerPC
.支持多种操作系统:Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android
;
2)BootLoader
.Boot 启动及初始化
.CPU级别的初始化:时钟、看门狗、DDR2、Uart
.板级的初始化:网络设备DM9000、I2C设备、音频设备等。
.Loader
.将Nand Flash存储的kernel拷贝到DDR2内存当中
.向Kernel传递启动参数,会放在0x3000_0100地址当中
.bootargs=root=/dev/mtdblock4 rootfstype=yaffs2 init=/linuxrc
console=ttySAC0,115200
.启动内核
.the_kernel
3)带有调试功能
.loady tftp go .....
4.u-boot不是Linux的一部分,我们也可以设计一个bootloader
5.u-boot就是一个复杂的裸机程序而已
6.u-boot一般来说分为两个阶段:BL1,BL2
三、u-boot的使用
1.查看u-boot支持的命令
GEC210 # help
或者
GEC210 # ?
2.ping
默认状态下,u-boot是将网卡进行关闭的。所以使用ping命令的时候,一定要主动ping电脑主机。
成功:
GEC210 # ping 192.168.1.2
dm9000 i/o: 0x88000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
host 192.168.1.2 is alive
失败:
GEC210 # ping 192.168.1.254
dm9000 i/o: 0x88000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
ping failed; host 192.168.1.254 is not alive
3.setenv 设置环境变量
bootargs=root=/dev/mtdblock4 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200
bootcmd=nand read 0x30008000 0x600000 0x500000 ;bootm 0x30008000
bootdelay=3
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.0.1
netmask=255.255.0.0
ipaddr=192.168.1.3
serverip=192.168.1.2
例如现在设置开发板的IP
GEC210 # setenv ipaddr 192.168.1.3
GEC210 # saveenv
Saving Environment to SMDK bootable device...
Erasing Nand...
Writing to Nand...
Saved enviroment variables
例如现在u-boot加载内核的延时时间
GEC210 # setenv bootdelay 5
GEC210 # saveenv
Saving Environment to SMDK bootable device...
Erasing Nand...
Writing to Nand...
Saved enviroment variables
4.reset 复位开发板
GEC210 # reset
reset...
5.bdinfo 开发板信息
GEC210 # bdinfo
arch_number = 0x00000998 //机器码,跟Linux Kernel内置的机器码进行匹配,如果匹
配成功,则能启动内核;反之,就不能启动内核。
boot_params = 0x30000100 //存放启动参数的位置,给Linux内核启动的时候进行访问
DRAM bank = 0x00000000 //DDR2内存通道0
-> start = 0x30000000 //通道0内存起始地址0x30000000
-> size = 0x10000000 //通道0内存大小为256MB
DRAM bank = 0x00000001 //DDR2内存通道1
-> start = 0x40000000 //通道1内存起始地址0x40000000
-> size = 0x10000000 //通道1内存大小为256MB
ethaddr = 00:40:5C:26:0A:5B //网卡的MAC地址信息
ip_addr = 192.168.1.3 //网卡的IP地址信息
baudrate = 115200 bps //串口波特率
6.bootcmd uboot启动完之后接着要做的事情
bootcmd=nand read 0x30008000 0x600000 0x500000 ;bootm 0x30008000
1)nand read 0x30008000 0x600000 0x500000
从Nand Flash起始地址0x600000读取0x500000字节大小内容拷贝到0x30008000
2)bootm 0x30008000
在0x30008000地址上启动内核
有些时候不需要启动内核,只需要调试代码。
setenv bootcmd 'tftp 0x40000000 start.bin;go 0x40000000'
saveenv
setenv bootcmd 'nand read 0x30008000 0x600000 0x500000 ;bootm 0x30008000'
saveenv
7.启动参数
bootargs=root=/dev/mtdblock4 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200
1)root=/dev/mtdblock4
挂载的是Nand Flash第4个分区
2)rootfstype=yaffs2
根文件系统类型
3)init=/linuxrc
init是Linux启动的第一个进程,也是所有进程的父进程,PID=1,也是唯一的一个Linux内核发起
的进程。
4)console=ttySAC0,115200
当前使用串口0,波特率为115200
8.boot 启动内核
四、u-boot的编译
0.使用粤嵌公司制造好的u-boot
uboot-gec21020130916.tar.bz2
.将u-boot源码包解压到家目录,不能在共享目录进行编译,因为软链接在共享目录是失效的。
tar -jxf /mnt/hgfs/share/uboot-gec21020130916.tar.bz2 -C ~
1.交叉编译工具
arm-2009q3.tar.bz2
.切换到root权限
.安装到/usr/local/arm/arm-2009q3
tar -jxf /mnt/hgfs/share/arm-2009q3.tar.bz2 -C /usr/local/arm/
root@ubuntu:/usr/local/arm# ls
arm-2009q3
2.进入uboot-gec210目录,直接输入make命令显示以下的错误信息
root@ubuntu:~/uboot-gec210# make
System not configured - see README
make: *** [all] Error 1
Selection of Processor Architecture and Board Type:
---------------------------------------------------
For all supported boards there are ready-to-use default
configurations available; just type "make <board_name>_config".
Example: For a TQM823L module type:
cd u-boot
make TQM823L_config
在Makefile发现有对于gec210开发板平台的配置
gec210_nand_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x gec210 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/gec210/config.mk
那么我们制定开发板平台,可以输入以下命令:
root@ubuntu:~/uboot-gec210# make gec210_nand_config
Configuring for gec210_nand board...
3.在Makefile当中,要制定好交叉编译工具。
行147修改如下:
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
4.输入make命令,进行编译uboot。
5.固化uboot到Nand Flash
tftp 0x40000000 u-boot.bin //将u-boot.bin下载到内存0x40000000地址处
nand erase 0x0 0x100000 //将Nand Flash起始地址0擦除0x100000字节大小的空间
nand write 0x40000000 0x0 0x100000 //将内存地址0x4000000地址处内容写入到Nand Flash 起始
地址0,大小为0x100000