zoukankan      html  css  js  c++  java
  • u-boot README--linux support

    Linux HOWTO:
    ============

    Porting Linux to U-Boot based systems:
    ---------------------------------------

    U-Boot cannot save you from doing all the necessary modifications to
    configure the Linux device drivers for use with your target hardware
    (no, we don't intend to provide a full virtual machine interface to
    Linux :-).

    But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot).

    Just make sure your machine specific header file (for instance
    include/asm-ppc/tqm8xx.h) includes the same definition of the Board
    Information structure as we define in include/asm-<arch>/u-boot.h,
    and make sure that your definition of IMAP_ADDR uses the same value
    as your U-Boot configuration in CONFIG_SYS_IMMR.


    Configuring the Linux kernel:
    -----------------------------

    No specific requirements for U-Boot. Make sure you have some root
    device (initial ramdisk, NFS) for your target system.


    Building a Linux Image:
    -----------------------

    With U-Boot, "normal" build targets like "zImage" or "bzImage" are
    not used. If you use recent kernel source, a new build target
    "uImage" will exist which automatically builds an image usable by
    U-Boot. Most older kernels also have support for a "pImage" target,
    which was introduced for our predecessor project PPCBoot and uses a
    100% compatible format.

    Example:

    make TQM850L_config
    make oldconfig
    make dep
    make uImage

    The "uImage" build target uses a special tool (in 'tools/mkimage') to
    encapsulate a compressed Linux kernel image with header information,
    CRC32 checksum etc. for use with U-Boot. This is what we are doing:

    * build a standard "vmlinux" kernel image (in ELF binary format):

    * convert the kernel into a raw binary image:

    ${CROSS_COMPILE}-objcopy -O binary
    -R .note -R .comment
    -S vmlinux linux.bin

    * compress the binary image:

    gzip -9 linux.bin

    * package compressed binary image for U-Boot:

    mkimage -A ppc -O linux -T kernel -C gzip
    -a 0 -e 0 -n "Linux Kernel Image"
    -d linux.bin.gz uImage


    The "mkimage" tool can also be used to create ramdisk images for use
    with U-Boot, either separated from the Linux kernel image, or
    combined into one file. "mkimage" encapsulates the images with a 64
    byte header containing information about target architecture,
    operating system, image type, compression method, entry points, time
    stamp, CRC32 checksums, etc.

    "mkimage" can be called in two ways: to verify existing images and
    print the header information, or to build new images.

    In the first form (with "-l" option) mkimage lists the information
    contained in the header of an existing U-Boot image; this includes
    checksum verification:

    tools/mkimage -l image
    -l ==> list image header information

    The second form (with "-d" option) is used to build a U-Boot image
    from a "data file" which is used as image payload:

    tools/mkimage -A arch -O os -T type -C comp -a addr -e ep
    -n name -d data_file image
    -A ==> set architecture to 'arch'
    -O ==> set operating system to 'os'
    -T ==> set image type to 'type'
    -C ==> set compression type 'comp'
    -a ==> set load address to 'addr' (hex)
    -e ==> set entry point to 'ep' (hex)
    -n ==> set image name to 'name'
    -d ==> use image data from 'datafile'

    Right now, all Linux kernels for PowerPC systems use the same load
    address (0x00000000), but the entry point address depends on the
    kernel version:

    - 2.2.x kernels have the entry point at 0x0000000C,
    - 2.3.x and later kernels have the entry point at 0x00000000.

    So a typical call to build a U-Boot image would read:

    -> tools/mkimage -n '2.4.4 kernel for TQM850L'
    > -A ppc -O linux -T kernel -C gzip -a 0 -e 0
    > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz
    > examples/uImage.TQM850L
    Image Name: 2.4.4 kernel for TQM850L
    Created: Wed Jul 19 02:34:59 2000
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
    Load Address: 0x00000000
    Entry Point: 0x00000000

    To verify the contents of the image (or check for corruption):

    -> tools/mkimage -l examples/uImage.TQM850L
    Image Name: 2.4.4 kernel for TQM850L
    Created: Wed Jul 19 02:34:59 2000
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
    Load Address: 0x00000000
    Entry Point: 0x00000000

    NOTE: for embedded systems where boot time is critical you can trade
    speed for memory and install an UNCOMPRESSED image instead: this
    needs more space in Flash, but boots much faster since it does not
    need to be uncompressed:

    -> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz
    -> tools/mkimage -n '2.4.4 kernel for TQM850L'
    > -A ppc -O linux -T kernel -C none -a 0 -e 0
    > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux
    > examples/uImage.TQM850L-uncompressed
    Image Name: 2.4.4 kernel for TQM850L
    Created: Wed Jul 19 02:34:59 2000
    Image Type: PowerPC Linux Kernel Image (uncompressed)
    Data Size: 792160 Bytes = 773.59 kB = 0.76 MB
    Load Address: 0x00000000
    Entry Point: 0x00000000


    Similar you can build U-Boot images from a 'ramdisk.image.gz' file
    when your kernel is intended to use an initial ramdisk:

    -> tools/mkimage -n 'Simple Ramdisk Image'
    > -A ppc -O linux -T ramdisk -C gzip
    > -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
    Image Name: Simple Ramdisk Image
    Created: Wed Jan 12 14:01:50 2000
    Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
    Data Size: 566530 Bytes = 553.25 kB = 0.54 MB
    Load Address: 0x00000000
    Entry Point: 0x00000000


    Installing a Linux Image:
    -------------------------

    To downloading a U-Boot image over the serial (console) interface,
    you must convert the image to S-Record format:

    objcopy -I binary -O srec examples/image examples/image.srec

    The 'objcopy' does not understand the information in the U-Boot
    image header, so the resulting S-Record file will be relative to
    address 0x00000000. To load it to a given address, you need to
    specify the target address as 'offset' parameter with the 'loads'
    command.

    Example: install the image to address 0x40100000 (which on the
    TQM8xxL is in the first Flash bank):

    => erase 40100000 401FFFFF

    .......... done
    Erased 8 sectors

    => loads 40100000
    ## Ready for S-Record download ...
    ~>examples/image.srec
    1 2 3 4 5 6 7 8 9 10 11 12 13 ...
    ...
    15989 15990 15991 15992
    [file transfer complete]
    [connected]
    ## Start Addr = 0x00000000


    You can check the success of the download using the 'iminfo' command;
    this includes a checksum verification so you can be sure no data
    corruption happened:

    => imi 40100000

    ## Checking Image at 40100000 ...
    Image Name: 2.2.13 for initrd on TQM850L
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 335725 Bytes = 327 kB = 0 MB
    Load Address: 00000000
    Entry Point: 0000000c
    Verifying Checksum ... OK


    Boot Linux:
    -----------

    The "bootm" command is used to boot an application that is stored in
    memory (RAM or Flash). In case of a Linux kernel image, the contents
    of the "bootargs" environment variable is passed to the kernel as
    parameters. You can check and modify this variable using the
    "printenv" and "setenv" commands:


    => printenv bootargs
    bootargs=root=/dev/ram

    => setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2

    => printenv bootargs
    bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2

    => bootm 40020000
    ## Booting Linux kernel at 40020000 ...
    Image Name: 2.2.13 for NFS on TQM850L
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 381681 Bytes = 372 kB = 0 MB
    Load Address: 00000000
    Entry Point: 0000000c
    Verifying Checksum ... OK
    Uncompressing Kernel Image ... OK
    Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000
    Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
    time_init: decrementer frequency = 187500000/60
    Calibrating delay loop... 49.77 BogoMIPS
    Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
    ...

    If you want to boot a Linux kernel with initial RAM disk, you pass
    the memory addresses of both the kernel and the initrd image (PPBCOOT
    format!) to the "bootm" command:

    => imi 40100000 40200000

    ## Checking Image at 40100000 ...
    Image Name: 2.2.13 for initrd on TQM850L
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 335725 Bytes = 327 kB = 0 MB
    Load Address: 00000000
    Entry Point: 0000000c
    Verifying Checksum ... OK

    ## Checking Image at 40200000 ...
    Image Name: Simple Ramdisk Image
    Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
    Data Size: 566530 Bytes = 553 kB = 0 MB
    Load Address: 00000000
    Entry Point: 00000000
    Verifying Checksum ... OK

    => bootm 40100000 40200000
    ## Booting Linux kernel at 40100000 ...
    Image Name: 2.2.13 for initrd on TQM850L
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 335725 Bytes = 327 kB = 0 MB
    Load Address: 00000000
    Entry Point: 0000000c
    Verifying Checksum ... OK
    Uncompressing Kernel Image ... OK
    ## Loading RAMDisk Image at 40200000 ...
    Image Name: Simple Ramdisk Image
    Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
    Data Size: 566530 Bytes = 553 kB = 0 MB
    Load Address: 00000000
    Entry Point: 00000000
    Verifying Checksum ... OK
    Loading Ramdisk ... OK
    Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000
    Boot arguments: root=/dev/ram
    time_init: decrementer frequency = 187500000/60
    Calibrating delay loop... 49.77 BogoMIPS
    ...
    RAMDISK: Compressed image found at block 0
    VFS: Mounted root (ext2 filesystem).

    bash#

    Boot Linux and pass a flat device tree:
    -----------

    First, U-Boot must be compiled with the appropriate defines. See the section
    titled "Linux Kernel Interface" above for a more in depth explanation. The
    following is an example of how to start a kernel and pass an updated
    flat device tree:

    => print oftaddr
    oftaddr=0x300000
    => print oft
    oft=oftrees/mpc8540ads.dtb
    => tftp $oftaddr $oft
    Speed: 1000, full duplex
    Using TSEC0 device
    TFTP from server 192.168.1.1; our IP address is 192.168.1.101
    Filename 'oftrees/mpc8540ads.dtb'.
    Load address: 0x300000
    Loading: #
    done
    Bytes transferred = 4106 (100a hex)
    => tftp $loadaddr $bootfile
    Speed: 1000, full duplex
    Using TSEC0 device
    TFTP from server 192.168.1.1; our IP address is 192.168.1.2
    Filename 'uImage'.
    Load address: 0x200000
    Loading:############
    done
    Bytes transferred = 1029407 (fb51f hex)
    => print loadaddr
    loadaddr=200000
    => print oftaddr
    oftaddr=0x300000
    => bootm $loadaddr - $oftaddr
    ## Booting image at 00200000 ...
    Image Name: Linux-2.6.17-dirty
    Image Type: PowerPC Linux Kernel Image (gzip compressed)
    Data Size: 1029343 Bytes = 1005.2 kB
    Load Address: 00000000
    Entry Point: 00000000
    Verifying Checksum ... OK
    Uncompressing Kernel Image ... OK
    Booting using flat device tree at 0x300000
    Using MPC85xx ADS machine description
    Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb
    [snip]

     

  • 相关阅读:
    Using PL/SQL APIs as Web Services
    1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码
    我对贝叶斯分类器的理解
    VB.NET的前世今生
    《转》PyQt4 精彩实例分析* 实例2 标准对话框的使用
    网络流合集:bzoj1433,1934,1854 题解
    Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)
    Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
    深入浅出之数据分析四步曲
    深入浅出之数据分析四步曲
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/5858735.html
Copyright © 2011-2022 走看看