zoukankan      html  css  js  c++  java
  • U-boot mkimage指定Linux内核地址时的两种方式

    http://blog.csdn.net/embededswordman/article/details/6704197

    uImage的制作是使用的u-boot工具mkimage,build完u-boot后也会将mkimage build出來到/tools目录下,可以直接拿來用,它的作用就是在zImage的前面加上64个字节的头,让u-boot能够识别要加载内核的类型、加载地址等。

    基本格式:mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image

    -A 指定CPU的体系结构:(u-boot支持多种的架构,这里应该是arm)
    取值        表示的体系结构
    alpha       Alpha 
    arm          A RM 
    x86          Intel x86
    ia64         IA64
    mips         MIPS
    mips64     MIPS 64 Bit
    ppc          PowerPC
    s390        IBM S390
    sh            SuperH
    sparc       SPARC
    sparc64   SPARC 64 Bit
    m68k       MC68000


    -O 指定操作系统类型,可以取以下值:(u-boot支持多种的OS,这里应该是linux)
    openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos


    -T 指定映象类型,可以取以下值:(u-boot可以加载不同的映像,这里应该是kernel)
    standalone、kernel、ramdisk、multi、firmware、script、filesystem


    -C 指定映象压缩方式,可以取以下值:(除了zImage本身是压缩格式外,u-boot还可以对其再压缩,这里应该是none)
    none 不压缩
    gzip 用gzip的压缩方式
    bzip2 用bzip2的压缩方式


    -a 指定映象在内存中的加载地址,可以于实际加载(如tftp加载)时的地址不相同,也可以相同,详见后面的解释。


    -e 指定映像运行的入口地址,可以等于加载地址,也可以是加载地址偏移64字节(+0x40)后的地址,详见后面的解释。


    -n 指定映像名称


    -d 指定【源文件】和生成的【目标文件名】

    调整的最多的参数是-a, -e,这两个参数需要与实际加载到内存时的动作保持一致。


    1、如果加载时的地址与-a参数指定的不相同,则-e必须等于-a。u-boot会把kernel image去掉不包括64字节的信息头后搬移到-e处,直接启动。要注意两个image的存储空间不要重叠,两者之间至少要留image size的空间。

    编译环境:

    mkimage -A arm -O linux -T kernel -C none -a 0x70008000 -e 0x70008000 -n 'Linux' -d zImage uImage
            cp uImage /tftpboot/        

    目标板环境:

    tftp   0x72200000  uImage;   bootm   0x72200000;

    2、如果加载时的地址与-a参数指定相同,则-e必须是-a + 0x40的地址。这时u-boot不需要再执行搬移的动作,根据-e的地址直接启动。 

            编译环境:

            mkimage -A arm -O linux -T kernel -C none -a 0x0x70008000 -e 0x70008040 -n 'Linux‘ -d zImage uImage

            cp uImage /tftpboot/           

            目标板环境:

            tftp   0x70008000  uImage;    bootm  0x70008000;

    ##########################华丽分割线##########################

    mkimage工具在具体的使用中,可以不进行拷贝,在解压u-boot后,

    将mkimage的目录 /tools添加到,全局环境变量中。

    $gedit /etc/profile在最后一行添加  export PATH=:$PATH :/ubootj解压目录/tools

    $source  /etc/profile

    环境变量就可以实现

    最近直接在执行:

    cd /arch/arm/boot
    mkimage -n 'linux-2.6.34' -A arm -O linux -T kernel -C none -a 0x20008000 -e 0x20008040 -d zImage linux-2.6.34_uImage

    下载到SDRAM 中就可以知道本次编译的内核是否能正确启动,用bootm 20008000 启动即可。

  • 相关阅读:
    C—动态内存分配之malloc与realloc的区别
    C++动态内存管理之深入探究new和delete
    Linux粘滞位的设置
    linux—find指令常见用法示例
    Linux系统date命令的参数及获取时间戳的方法
    Linux系统文件的三个重要时间详解
    《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---27
    《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---26
    《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---25
    《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---24
  • 原文地址:https://www.cnblogs.com/lidabo/p/5312919.html
Copyright © 2011-2022 走看看