• 用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法 分类: HI3531 arm-linux-Ubuntu 2013-12-12 10:22 801人阅读 评论(0) 收藏


      S3C44B0开发板中,用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法
      
    1.开发板说明:
     开发板上已有移植好的UBOOT运行。
     
    2.交叉编译工具链为arm-linu-gcc-4.0.4

    3.原理:
     采用UBOOT自带的命令loadb,加应用程序(.bin)加载至SDRAM中某一地址中,然后用go 命令从某地址处开始执行程序。
     
    操作方法说明:
     1.编写一个测试程序,见附上的例程hello.c。
       hello.c主要包含以下几个功能,在串口终端打印输出字符串,控制开发板上的LED灯,同时采用等待延时的方法循环执行。
     2.编写Makefile文件,方便调试,省得每次都要敲命令行。
     3.将得到的hello.bin文件用loadb命令加载至相应的地址(addr),该地址应与Makefile文件中-Ttext指定的地址相同。
     4.用go addr命令运行程序。
     
    需要注意的问题:
     1.在SDRAM中运行的地址选取问题:
      由于UBOOT也是在SDRAM中运行的,因此,要考虑应用程序的大小,加载到某地址后,不要破坏了UBOOT的正常运行。
      如果影响到了UBOOT的运行,那结果是不可预知的。因此,要避免此种情况的发生。
     2.在地址链接时,需要指定程序入口地址,即arm-linux-ld -Ttext 0x0c400000 -e main hello.o -o hello.elf中-e main这项。
      -e指定的是入口点,即名称,应该与应用程序中的主程序名(main)相同。
      这里的主程序指应用程序的主运行程序,并不一定是main,可任意指定,比如entry等,但-e指定的名称必须与之相同。
     3.如果在应用程序中,有多个函数时,默认情况下,是依据函数的实现顺序分配地址值的。
      如此例中,delay函数在main函数之前的话,那delay的分配地址,应该会是0x0c400000,而main的是0x0c400030,要比delay的靠后。
      若main在delay前面,则main为0x0c400000,delay为0x0c40006c。
      同时,文件中的函数地址值可以通过hello.map文件得知。
     4.如果违反了3所述的情况,可通过查看hello.map文件中主程序的地址(main),然后在用go 命令时所接的地址改为主程序的起始地址的话,也是可以正确运行程序的。
     

    资源下载:

    http://download.csdn.net/detail/mao0514/6701601

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    第221题:最大正方形
    第238题:除自身以外数组的乘积
    简单易懂的拓扑排序
    第207题 课程表
    第198题:打家劫舍
    第四章 初始化与清理
    【笔记】jquery判断两个日期之间相差多少天
    【笔记】spring定时器时间配置实例
    【笔记】jquery加减乘除及科学计算法处理
    string 日期相加和相减
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706699.html
Copyright © 2020-2023  润新知