Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1637963
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: 嵌入式

2010-11-30 00:42:07

Andrew Haung
 
   裸机程序开发里有一种低成本方案,利用u-boot的TFTP和USB下载功能,将成程序下载到开发板的内存用go命令来运行。
 
   只要最终结果是ARM机器指令即可。理论上u-boot也能直接运行内存中的ELF文件,它需要用bootelf命令运行。不过我一般都是编译器直接转成bin文件来运行的。
 
   因为u-boot已经对开发板进行基本的初始化了,比如内存,时钟等。因此下载的二进制程序可以直接做一些操作,比如直接来点LED。以下均在mini6410进行测试.
 
 
一.下载,运行程序
---------------------------------------------------------------------
  
  上电后,长按回车键进入u-boot控制台.按q进入提示符.
 
   配置网络
     setenv ipaddr 10.1.0.123  #设置开发板IP
     setenv serverip 10.1.0.191 #设置下载服务器IP
     saveenv                    #只存当前设置到Nand Flash之上.
     ping 10.1.0.191            #ping 服务器
 

MINI6410 # setenv ipaddr 10.1.0.123
MINI6410 # setenv serverip 10.1.0.191
MINI6410 # saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done

MINI6410 # ping 10.1.0.191
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:90:90:90:90:90
operating at 100M full duplex mode
checksum bad
checksum bad
host 10.1.0.191 is alive

 
tftp下载
 
  1.tftp <内存地址> <文件名>
       tftp 0x50000000 asm-led.bin
     还有一种写法是
        tftp <内存地址> <服务器IP>:<文件名> 这样可以从不同服务器下载
             
    要求serverip对应的服务器要有TFTP服务器,如果是RHEL5,用自带的tftpserver即可,
  如果WINDOWS,我建议是用3CDaemon ,它是一个简单的TFTP/FTP服务器.开发时足够了。
   
 
  
MINI6410 # tftp 0x50000000 asm-led.bin
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:90:90:90:90:90
operating at 100M full duplex mode
TFTP from server 10.1.0.191; our IP address is 10.1.0.123
Filename 'asm-led.bin'.
Load address: 0x50000000
Loading: checksum bad
checksum bad
T #
done
Bytes transferred = 132 (84 hex)
MINI6410 # go 0x50000000
## Starting application at 0x50000000 ...
 
运行二进制文件用 go就行.
 
USB下载
    
USB下载标准u-boot没带,一般都是开发者自己加的,PC机端用DNW通过USB下载。如何加这个功能,可以参考
 
我们这里只介绍下载命令
 

usbslave - usbslave - get file from host(PC)
Usage:
usbslave [wait] [loadAddress]
"wait" is 0 or 1, 0 means for return immediately, not waits for the finish of transferring

  
   usbslave 1 0x50000000
       
 
二.运行ADS编程程序
-----------------------------------------------------------------------------
  ADS程序本身就是ELF格式的,因此用FromElf工具转换成 *.bin文件即可下载到内存直接运行。你可以下载这个针对MINI6410的汇编的点灯的小程序,它会把1,3和2,4号LED交替闪烁。
 
汇编程序
  
  所以一般只要把汇编编写的bin下载到ADS程序的RO-BASE地址即可,运行看到LEDS灯点亮。
 
文件: asm-led.zip
大小: 0KB
下载: 下载
 
C程序
 
  但是如果包括带的C的程序,则需要对代码做一些调整才能在线下载,比如mini6410官方提供的LEDS点灯程序,可以在SD卡中运行。但是用u-boot 下载后运行没有反应。因此需要调整
 
 
三.运行arm-linux-gcc 编译程序
----------------------------------------------------------------------------
 
阅读(3648) | 评论(3) | 转发(2) |
给主人留下些什么吧!~~

kangear2012-09-25 08:51:21

学习了

HMSIWTV2011-08-28 08:27:46

您好,我按照书上生成hello.bin运行不成功,显示data abort ,代码如下
/* Start.S */
.global _start
.text
_start:
             b    hello  @ 调用hello
.end


/*hello.c*/

void hello ()
{
        printf ("hello world!\n");
}
(链接时加载了uboot的libstubs.a)
将生成的hello.bin文件下载到0x50000000后运行,屏幕上显示

data abort