u-boot的使用

来源:互联网 发布:怎么建立网络共享 编辑:程序博客网 时间:2024/05/30 05:30

U-Boot -- the Universal Boot Loader

u---通用的

1、支持多种架构的CPUx86、powerPC、ARM、MIPS....

2、支持多种CPU的电子板mini2440、smdkv210、smdk2410.......

3、支持多种操作系统,如:linux、wince、vxworks......

 

boot是一个bootloader

   1、boot

      CPU级初始化、板级初始化,完成一个硬件平台的启动

   2、loader

      加载操作系统内容,并启动内核.....,后面与uboot没有任何关系

 

uboot的官网:

ftp://ftp.denx.de/pub/u-boot/

http://www.denx.de/wiki/U-Boot/WebHome

 

 

1、查看uboot支持的命令

GEC210 # ?

GEC210 # help

 

2、version

GEC210 # version

U-Boot 1.3.4 (Aug  9 2013 - 15:03:53) for GEC210

 

3、bdinfo(bd)

GEC210 # bdinfo

arch_number = 0x00000998  //uboot针对board的一个ID号,会与kernel对应ID做对比,如果相符,内核就会启动。

env_t       = 0x00000000

boot_params = 0x30000100  //uboot在启动kernel的时候,会传递参数给kernel,uboot将参数放在0x30000100地址上

DRAM bank   = 0x00000000  //DDR2 ch0

-> start    = 0x30000000

-> size     = 0x10000000

DRAM bank   = 0x00000001  //DDR2 ch1

-> start    = 0x40000000

-> size     = 0x10000000

ethaddr     = 00:40:5C:26:0A:5B //MAC地址

ip_addr     = 192.168.1.190 //ip地址

baudrate    = 115200 bps  //串口的波特率

 

4、printenv(pri)

GEC210 # printenv

baudrate=115200

ethaddr=00:40:5c:26:0a:5b

netmask=255.255.255.0

bootargs=console=ttySAC0,115200 init=/linuxrc root=/dev/mtdblock4 rootfstype=yaffs rw

machid=0x998

ipaddr=192.168.1.190

gatewayip=192.168.1.1

bootdelay=5

bootcmd=nand read 0x30008000 0x600000 0x500000;bootm 0x30008000

serverip=192.168.1.9

stdin=serial

stdout=serial

stderr=serial

 

1)bootargs  ----启动参数  args ---arguments

   告诉内核,如何找到rootfs,并且启动linux的第一个进程(init)

  1)console=ttySAC0,115200 //内核使用的控制台是uart0,115200bps

  2)init=/linuxrc 启动的linux第一个进程是/linuxrc  ,即启动shell命令环境

 

       lrwxrwxrwx    1 root     root            11 Sep  5  2012 linuxrc -> bin/busybox

       busybox---->生成shell工具

  3)root=/dev/mtdblock4  //存放的是rootfs(nand的第四个分区),告诉内核去哪里挂载rootfs

       [root@YueQian /]# ls /dev/mtdblock4 -l

       brw-rw----    1 root     root       31,   4 Jan  1 13:08 /dev/mtdblock4  //nand flash的第四个分区

  4)rootfstype=yaffs rw

       rootfs的格式,并且是可读写的。

 

   #setenv bootargs 'console=ttySAC0,115200 init=/linuxrc root=/dev/mtdblock4 rootfstype=yaffs rw'

   #saveenv

 

2)machid=0x998

uboot针对该平台的机器ID

   #setenv machid 0x999

 

3)ipaddr=192.168.1.190   //GEC210平台IP

#setenv ipaddr 192.168.1.110

#saveenv

 

4)gatewayip=192.168.1.1

#setenv gatewayip 192.168.1.1

#saveenv

 

5)serverip=192.168.1.9  // linux主机ip

#setenv serverip 192.168.1.9

#saveenv

 

技巧:

# setenv  severip 192.168.1.9

#setenv severip

#saveenv

 

6)bootdelay=5  //启动操作系统的等待时间

#setenv bootdelay 3

#saveenv

 

7)bootcmd 启动命令 cmd ---command

   告诉uboot去哪里找内核映像(uImage/zImage),并且启动内核映像

 

   1)read 0x30008000 0x600000 0x500000;

nand flash的0x600000地址拷贝0x500000大小的内容(linux的内核映像)到DDR2内存的0x30008000地址下

   2)bootm 0x30008000

        0x30008000地址上开始启动内核映像

   

    nand中启动内核

    #setenv  bootcmd “nand read 0x30008000 0x600000 0x500000;bootm 0x30008000”

    #saveenv

 

    自动下载裸机程序,并启动裸机程序

    #setenv bootcmd “tftp 0x30000000 led.bin; go 0x30000000”

    #saveenv

 

    从网络启动内核映像

    #setenv bootcmd 'tftp 0x30008000 uImage; bootm 0x30008000'

#saveenv

 

三、如何应用uboot去更新u-boot.bin、zImage、rootfs.img

思路:先使用tftp将要更新的文件下载到DDR2内存中,然后再进行nand的烧写

 

1、如何更新uboot

#tftp 0x400000000 u-boot.bin

#nand erase 0x0 0x100000

#nand write 0x40000000 0x0 0x100000

 

2、使用uboot更新自zImage

#tftp 0x40000000 zImage

#nand erase 0x600000 0x500000

#nand write 0x40000000 0x600000 0x500000

 

3、使用uboot更新rootfs

#tftp 0x40000000 rootfs.img

#nand erase 0xe00000 0xf200000 //242MB

#nand write.yaffs 0x40000000 0xe00000  0xxxxx  //0xxxx--->实际的下载大小,tftp的传输后的报告

 

=========================================================================================================

四、uboot输出

 

stage1:相当于BL1,这段代码完成CPU级初始化,最关键初始化时钟和内存,该阶段代码是汇编写的。

stage2:相当于BL2,使用C做的,这部分代码都是通用的代码。主要是完成uboot工具和操作系统的启动.....

 

//1、在ARM汇编,BL1

OK

 

//2、BL2

U-Boot 1.3.4 (Aug  9 2013 - 15:03:53) for GEC210

 

 

CPU:  S5PV210@1000MHz(OK)

        APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz

        MPLL = 667MHz, EPLL = 96MHz

                       HclkDsys = 166MHz, PclkDsys = 83MHz

                       HclkPsys = 133MHz, PclkPsys = 66MHz

                       SCLKA2M  = 200MHz

Serial = CLKUART

Board:   GEC210

DRAM:    512 MB

Flash:   8 MB   //nor flash

SD/MMC: 3724MB

NAND:    256 MB

In:      serial

Out:     serial

Err:     serial

backlight_brigness_init

Enter into Normal mode

Hit any key to stop autoboot:  0

 

//3、去启动设备(nand flash、SD卡),找内核映像(uImage、zImage),拷贝到DDR2内存中

NAND read: device 0 offset 0x600000, size 0x500000

Main area read (40 blocks):

 5242880 bytes read: OK

get_format

 

//4、uboot去分析内核映像文件的头(uImage)

-------- 1 --------

## Booting kernel from Legacy Image at 30008000 ...

   Image Name:   linux-2.6.35.7

   Created:      2013-07-02   7:40:27 UTC

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    4065428 Bytes =  3.9 MB

   Load Address: 30008000  //加载地址

   Entry Point:  30008040  //入口地址

   Verifying Checksum ... OK

get_format

-------- 1 --------

   XIP Kernel Image ... OK

OK

Using machid 0x998 from environment

 

//5、启动内核

Starting kernel ...

 

Uncompressing Linux... done, booting the kernel.

 

 

//6、调用了kernel

[    0.000000] Initializing cgroup subsys cpu

[    0.000000] Linux version 2.6.35.7-GEC210 (root@localhost.localdomain) (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) #183 PREEMPT Tue Jul 2 15:38:19 CST 2013

[    0.000000] CPU: ARMv7 Processor [412fc082] revision 2 (ARMv7), cr=10c53c7f

[    0.000000] CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache

[    0.000000] Machine: GEC210

0 0
原创粉丝点击