zoukankan      html  css  js  c++  java
  • u-boot使用

    下载与烧写
    使用U-boot将映像文件烧写到板上的Flash,一般步骤是: (1)通过网络、串口、U盘、SD卡等方式将文件传输到SDRAM; (2)使用Nand Flash或Nor Flash相关的读写命令将SDRAM中的数据烧入Flash。
    下面是烧写范例: 如果使用 SD卡和U盘形式更新U-boot,那么首先SD卡和U盘中必须有FAT32文件系统,并在里面存放了u-boot.bin 文件。 1) 通过SD卡烧入Nand Flash:

    [u-boot@MINI2440]# mmc init

    mmc: Probing for SDHC ...

    mmc: SD 2.0 or later card found

    trying to detect SD Card...

    Manufacturer:       0x00, OEM "Product name:       "     ", revision 0.0

    Serial number:      7864775

    Manufacturing date: 11/2006

    CRC:                0x4f, b0 = 1

    READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095

    size = 0

    SD Card detected RCA: 0x2 type: SD

    mmc1 is available

    [u-boot@MINI2440]# fatload mmc 1 0x30008000 u-boot.bin

    reading u-boot.bin

     

    256220 bytes read

    [u-boot@MINI2440]# nand erase 0 0x40000

     

    NAND erase: device 0 offset 0x0, size 0x40000

    Erasing at 0x2000000000004 --   0% complete.

    OK

    [u-boot@MINI2440]# nand write 0x30008000 0 0x40000

     

    NAND write: device 0 offset 0x0, size 0x40000

    Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK

    2) 通过U盘烧入Nor Flash:

    [u-boot@MINI2440]# usb start

    (Re)start USB...

    USB:   scanning bus for devices... 2 USB Device(s) found

           scanning bus for storage devices... 1 Storage Device(s) found

    [u-boot@MINI2440]# usb storage

      Device 0: Vendor: Kingston Rev: PMAP Prod: DT 101 II      

                Type: Removable Hard Disk

                Capacity: 3875.0 MB = 3.7 GB (7936000 x 512)

    [u-boot@MINI2440]# usb part 0

    print_part of 0

     

    Partition Map for USB device 0  --   Partition Type: DOS

     

    Partition     Start Sector     Num Sectors     Type

        4                     63         7935937    c

     [u-boot@MINI2440]# fatload usb 0:4 0x30008000 u-boot.bin

    reading u-boot.bin

    ........................

     

    256220 bytes read

    [u-boot@MINI2440]# protect off all

    Un-Protect Flash Bank # 1

    [u-boot@MINI2440]# erase 0x0 0x3ffff

    Erasing sector  0 ... ok.

    Erasing sector  1 ... ok.

    Erasing sector  2 ... ok.

    Erasing sector  3 ... ok.

    Erased 4 sectors

    [u-boot@MINI2440]# cp.b 0x30008000 0x0  0x3ffff

    Copy to Flash... done

    3) 通过TFTP服务烧入Nand Flash:

    [u-boot@MINI2440]# tftpboot 30008000 192.168.1.100:u-boot.bin

    dm9000 i/o: 0x20000300, id: 0x90000a46

    DM9000: running in 16 bit mode

    MAC: 08:08:11:18:12:27

    operating at 100M full duplex mode

    Using dm9000 device

    TFTP from server 192.168.1.100; our IP address is 192.168.1.101

    Filename 'u-boot.bin'.

    Load address: 0x30008000

    Loading: T ##################

    done

    Bytes transferred = 256220 (3e8dc hex)

    [u-boot@MINI2440]# nand erase 0 0x40000

    NAND erase: device 0 offset 0x0, size 0x40000

    Erasing at 0x2000000000004 --   0% complete.

    OK

    [u-boot@MINI2440]# nand write 0x30008000 0 0x40000

     

    NAND write: device 0 offset 0x0, size 0x40000

    Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK

    4) 通过NFS 服务烧入Nand Flash:
     

    [u-boot@MINI2440]# nfs 30008000 192.168.1.100:/home/tekkaman/development/share/u-boot.bin

    dm9000 i/o: 0x20000300, id: 0x90000a46

    DM9000: running in 16 bit mode

    MAC: 08:08:11:18:12:27

    operating at 100M full duplex mode

    Using dm9000 device

    File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101

    Filename '/home/tekkaman/development/share/u-boot.bin'.

    Load address: 0x30008000

    Loading: ###################################################

    done

    Bytes transferred = 256220 (3e8dc hex)

    [u-boot@MINI2440]# nand erase 0 0x40000

    NAND erase: device 0 offset 0x0, size 0x40000

    Erasing at 0x2000000000004 --   0% complete.

    OK

    [u-boot@MINI2440]# nand write 0x30008000 0 0x40000

     

    NAND write: device 0 offset 0x0, size 0x40000

    Writing at 0x2000000020000 -- 100% is complete. 262144 bytes written: OK


    内核引导

    内核的引导步骤如下: (1)用U-boot的mkimage工具处理内核映像zImage。 (2)通过网络、串口、U盘、SD卡等方式将处理过的内核映像传输到SDRAM的一定位置(一般使用0x30008000) (3)然后使用”bootm"等内核引导命令来启动内核。

    为什么要用U-bootmkimage工具处理内核映像zImage?

    因为在用bootm命令引导内核的时候,bootm需要读取一个64字节的文件头,来获取这个内核映象所针对的CPU体系结构、OS、加载到内存中的位置、在内存中入口点的位置以及映象名等等信息。这样bootm才能为OS设置好启动环境,并跳入内核映象的入口点。而mkimage就是添加这个文件头的专用工具。具体的实现请看U-bootbootm的源码和mkimage的源码。

    mkimage工具的使用:

     

    参数说明:

    -A指定CPU的体系结构,可用值有:alphaarm x86ia64mipsmips64ppc s390shsparc sparc64m68k

    -O指定操作系统类型,可用值有:openbsdnetbsdfreebsd4_4bsdlinuxsvr4esixsolarisirixscodellncrlynxosvxworkspsosqnxu-bootrtemsartos

    -T指定映象类型,可用值有:standalonekernelramdiskmultifirmwarescriptfilesystem

    -C指定映象压缩方式,可用值有:

    none 不压缩(一般使用这个,因为zImage是已经被bzip2压缩过的自解压内核)

    gzip gzip的压缩方式

    bzip2 bzip2的压缩方式

    -a指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载

    -e 指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的0x40个字节的头)

    -n 指定映象名

    -d指定制作映象的源文件

     

    以下是制作内核映像的命令示例:

    mkimage -n 'tekkaman' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img

     
    以下是使用范例: 1) 通过SD卡引导内核: 首先SD卡中必须有FAT32文件系统,并在里面存放了处理过的内核映像文件。

    [u-boot@MINI2440]# mmc init                 

    mmc: Probing for SDHC ...

    mmc: SD 2.0 or later card found

    trying to detect SD Card...

    Manufacturer:       0x00, OEM "Product name:       "     ", revision 0.0

    Serial number:      7864775

    Manufacturing date: 11/2006

    CRC:                0x4f, b0 = 1

    READ_BL_LEN=6, C_SIZE_MULT=7, C_SIZE=4095

    size = 0

    SD Card detected RCA: 0x2 type: SD

    mmc1 is available

    [u-boot@MINI2440]# fatload mmc 1 30008000 zImage.img

    reading zImage.img

     

    2277540 bytes read

    [u-boot@MINI2440]# bootm 30008000

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

       Image Name:   tekkaman

       Created:      2010-03-29  12:59:51 UTC

       Image Type:   ARM Linux Kernel Image (uncompressed)

       Data Size:    2277476 Bytes =  2.2 MB

       Load Address: 30008000

       Entry Point:  30008040

       Verifying Checksum ... OK

       XIP Kernel Image ... OK

    OK

     

    Starting kernel ...

     

    Uncompressing Linux... done, booting the kernel.

    Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010

    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

    CPU: VIVT data cache, VIVT instruction cache

    Machine: MINI2440

    (略)

    2) 通过TFTP服务引导内核:

    [u-boot@MINI2440]# tftpboot 0x30008000 192.168.1.100:zImage.img

    dm9000 i/o: 0x20000300, id: 0x90000a46

    DM9000: running in 16 bit mode

    MAC: 08:08:11:18:12:27

    operating at 100M full duplex mode

    Using dm9000 device

    TFTP from server 192.168.1.100; our IP address is 192.168.1.101

    Filename 'zImage.img'.

    Load address: 0x30008000

    Loading: T #################################################################

            #################################################################

            ##########################

    done

    Bytes transferred = 2277540 (22c0a4 hex)

    [u-boot@MINI2440]# bootm 30008000

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

       Image Name:   tekkaman

       Created:      2010-03-29  12:59:51 UTC

       Image Type:   ARM Linux Kernel Image (uncompressed)

       Data Size:    2277476 Bytes =  2.2 MB

       Load Address: 30008000

       Entry Point:  30008040

       Verifying Checksum ... OK

       XIP Kernel Image ... OK

    OK

     

    Starting kernel ...

     

    Uncompressing Linux... done, booting the kernel.

    Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010

    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

    CPU: VIVT data cache, VIVT instruction cache

    Machine: MINI2440

    (略)

     
    3) 通过NFS服务引导内核:

    [u-boot@MINI2440]# nfs 30008000 192.168.1.100:/home/tekkaman/development/share/zImage.img

    dm9000 i/o: 0x20000300, id: 0x90000a46

    DM9000: running in 16 bit mode

    MAC: 08:08:11:18:12:27

    operating at 100M full duplex mode

    Using dm9000 device

    File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101

    Filename '/home/tekkaman/development/share/zImage.img'.

    Load address: 0x30008000

    Loading: #################################################################

            #################################################################

            #################################################################

            #################################################################

            #################################################################

            #################################################################

            #######################################################

    done

    Bytes transferred = 2277540 (22c0a4 hex)

    [u-boot@MINI2440]# bootm 30008000

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

       Image Name:   tekkaman

       Created:      2010-03-29  12:59:51 UTC

       Image Type:   ARM Linux Kernel Image (uncompressed)

       Data Size:    2277476 Bytes =  2.2 MB

       Load Address: 30008000

       Entry Point:  30008040

       Verifying Checksum ... OK

       XIP Kernel Image ... OK

    OK

     

    Starting kernel ...

     

    Uncompressing Linux... done, booting the kernel.

    Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010

    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

    CPU: VIVT data cache, VIVT instruction cache

    Machine: MINI2440

    (略)

    4) 通过Nand Flash引导内核:    首先要将处理过的内核映像文件烧入Nand Flash的一定位置(由内核分区表决定)。以后每次启动时用Nand Flash的读取命令先将这个内核映像文件读到内存的一定位置(由制作内核映像时的-a参数决定),再使用bootm命令引导内核。
    内核映像文件的烧入:

    [u-boot@MINI2440]# nfs 30008000 192.168.1.100:/home/tekkaman/development/share/zImage.img

    dm9000 i/o: 0x20000300, id: 0x90000a46

    DM9000: running in 16 bit mode

    MAC: 08:08:11:18:12:27

    operating at 100M full duplex mode

    Using dm9000 device

    File transfer via NFS from server 192.168.1.100; our IP address is 192.168.1.101

    Filename '/home/tekkaman/development/share/zImage.img'.

    Load address: 0x30008000

    Loading: #################################################################

            #################################################################

            #################################################################

            #################################################################

            #################################################################

            #################################################################

            #######################################################

    done

    Bytes transferred = 2277540 (22c0a4 hex)

    [u-boot@MINI2440]# nand erase 0x80000 0x300000

     

    NAND erase: device 0 offset 0x80000, size 0x300000

    Erasing at 0x36000001800000 --   0% complete.

    OK

    [u-boot@MINI2440]#  nand write 30008000 0x80000 300000

     

    NAND write: device 0 offset 0x80000, size 0x300000

     

    Writing at 0x36000000020000 -- 100% is complete. 3145728 bytes written: OK

     

    内核引导:

    [u-boot@MINI2440]#  nand read 30008000 0x80000 300000

     

    NAND read: device 0 offset 0x80000, size 0x300000

     3145728 bytes read: OK

    [u-boot@MINI2440]# bootm 30008000

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

       Image Name:   tekkaman

       Created:      2010-03-29  12:59:51 UTC

       Image Type:   ARM Linux Kernel Image (uncompressed)

       Data Size:    2277476 Bytes =  2.2 MB

       Load Address: 30008000

       Entry Point:  30008040

       Verifying Checksum ... OK

       XIP Kernel Image ... OK

    OK

     

    Starting kernel ...

     

    Uncompressing Linux... done, booting the kernel.

    Linux version 2.6.33.1 (tekkaman@MAGI-Linux) (gcc version 4.3.2 (crosstool-NG-1.6.1-tekkaman) ) #5 Mon Mar 29 20:58:50 CST 2010

    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

    CPU: VIVT data cache, VIVT instruction cache

    Machine: MINI2440

    (略)

  • 相关阅读:
    Linux命令应用大词典-第11章 Shell编程
    Kubernetes 学习12 kubernetes 存储卷
    linux dd命令
    Kubernetes 学习11 kubernetes ingress及ingress controller
    Kubernetes 学习10 Service资源
    Kubernetes 学习9 Pod控制器
    Kubernetes 学习8 Pod控制器
    Kubernetes 学习7 Pod控制器应用进阶2
    Kubernetes 学习6 Pod控制器应用进阶
    Kubernetes 学习5 kubernetes资源清单定义入门
  • 原文地址:https://www.cnblogs.com/timssd/p/4373062.html
Copyright © 2011-2022 走看看