Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1640071
  • 博文数量: 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-11 17:33:36

Andrew Huang
 
 
 
一.什么是裸机开发
----------------------------------------------------------------------
 
 裸机是一种通俗的讲法,就是指ARM设备上没有任何现成的程序来支持你的开发的软件运行。它是相对设备上有在操作系统的情况运行可执行程序而言的。
 
  这两种程序有很大区别。在操作系统环境下,基本上跟桌面程序开发没有太多区别,而裸机程序需要自己初始化硬件环境来运行。因为必须有一小段汇编写的引导代码来初始化,并且直接操作硬件。
 
  裸机程序一般采用少量汇编加C语言来编译(理论上C++可以了,但比较少)主要用来ARM汇编,硬件控制教学。硬件验证和驱动开发。
 
  大型的程序bootloader,实时操作系统uCOS/Nclues严格讲也是裸机程序。
 
 
  而且ARM的CPU的都有JTAG的在线硬件调试接口,通过JTAG硬件调试器,可以直接运行和单步调试裸机程序
 
 
  
二.裸机开发流程.
 
-------------------------------------------------------------------
 
编码-->编译-->调试-->下载
 
1.编码采用文本编辑器或相应IDE均可
 
2.编译器目前主要是两大类
     armcc (ARM出品的编译器)
     arm-linux-gcc (GNU ARM-Linux 编译器,在非EABI的编译器还分为arm-elf-gcc和arm-linux-gcc的区别现在基本不分了。)
 
     arm-linux-gcc 编译出来的可执行文件格式是ELF,除了常见的TEXT段,BSS/DATA段外,还有会有一些调试段..而armcc编译出来的格式是AXF。但AXF本质是仍然是ELF格式,只不过加一些特殊的调试段。
 
3.调试方法
    如果用JTAG在线硬件调试的那种单步调试.有两种接口。一种是ARM公司的RDI接口,另外一种硬件调试器虚拟的gdb接口。这个要使用ELF/或AXF格式
 
    但很多程序会用直接让程序输出信息到串口方式进行调试。这种速度比较快,可以理解是广义上的调试。这个阶段要使用BIN格式。
   
4.下载
   下载是指把可执行的BIN文件下载到开发板上的Flash之中。让其完全脱离调试环境完全独立运行。
 
   如果一个空板,即Flash中没有任何程序。这时需要一些特殊下载方式。比用JTAG烧录工具下载到Flash之中。有一些CPU还有一些特殊的下载方式。比如S3C6410支持SD卡启动。可以把下载的文件放在SD卡上,由SD卡里的BOOTLOADER来下载。
   还有一些CPU内部带有ROM自行启动一个小程序,然后通过USB下载程序。比如JZ4740。
 
  如果Flash上烧录有bootloader,它往往自带有烧录功能。 可以通过TFTP/USB/串口方式从PC机下载到设备上。
 
 
可执行文件格式
  Elf
    Linux下标准可执行结构.还有一种out是早期的较为简单的可执行文件格式。但是在新版本里out就是ELF格式。
  BIN
     bin文件是由ELF转化而来,专门用下载到设备。相对于ELF它有两个变化。第一BIN只有基本的text/bss/data段,没有调试信息。第二。因为bin要下载到设备的。里面各段的地址是按相应地址对齐烧录的。因为两段之间很可能补一些空间的0空间。
    ELF转换为BIN用arm-linux-objcopy 以下语句把elf_name转换成bin_name。
     arm-linux-objcopy -O binary -S elf_name bin_name   
 
 HEX:
   HEX主要是把BIN内容转换成相应的ASCII的文本格式,并且每一行都带下载地址。 
  HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:
         +---------------------------------------------------------------+
         |   RECORD  | RECLEN |  LOAD  | RECTYPE | INFO or DATA | CHKSUM |
         |  MARK ':' |        | OFFSET |         |              |        |
         +---------------------------------------------------------------+
         |  1-byte   | 1-byte | 2-byte | 1-byte  |    n-byte    | 1-byte |
         +---------------------------------------------------------------+
  关于HEX/BIN区别,参见
 
不同产家的HEX格式有细微的差别,比如MOTO的HEX格式称为S-Record格式,Intel格式称为 Intel-HEX ,两者的差别参见
 
 
  多用于可编程器的的离线下载或者单片机程序的下载。ARM开发不常用。
     
三.裸机开发环境.
---------------------------------------------------------------------------
 
 常见的裸机开发环境
   
  3.1 ADS开发环境 并口。
    1.HOST操作系统: Windows
    2.编译器      : armcc
    3.IDE        : ADS
    4.适用CPU     :ARM7/ARM9
    5.HOST硬件接口:并口JTAG调试板
    6.调试软件    :AXD+H-Jtag
   特点:硬件调试成本比较低,但是调试和下载速度慢。
 
 
     3.2 ADS开发环境 USB。
    1.HOST操作系统: Windows
    2.编译器      : armcc
    3.IDE        : ADS
    4.适用CPU     :ARM7/ARM9
    5.HOST硬件接口:USB接口的J-Link
    6.调试软件    : AXD+J-LinK RDI
 
  3.3 arm-linux-gcc USB。
    1.HOST操作系统: Linux
    2.编译器      : arm-elf-gcc /arm-linux-gcc
    3.IDE        : 任何支持GCC的IDE(如Eclipse等)
    4.适用CPU     :ARM7/ARM9/ARM11
    5.HOST硬件接口:USB接口的OpenJtag
    6.调试软件    : OpenOCD/gdb
      注:有WINDOWS相应版本
 
 3.4 RVDS USB
      1.HOST操作系统: Windowsj/Linux
    2.编译器      : armcc
    3.IDE        : RealView/Eclipse
    4.适用CPU     :ARM全系列
    5.HOST硬件接口:USB接口的J-Link
    6.调试软件    : J-Link GDB
 
 注:RVDS是RealView Developer Suite的缩写是,ARM开发的ADS的升级版,在Eclipse基础上改进。因此可以在多个操作系统运行。
  
另外armcc可以直接在Makefile调用,不需要通IDE。这也是很多大型软件编译方法
 
 
四。Windows下ARM开发环境比较
-------------------------------------------------------------------
  ADS是很长一段时间里ARM专门开发环境。比较小并且很多产商的测试程序是基于ADS的.
 
  ADS的前身是SDT.现在很少人用了。
 
 除了ARM的ADS和RDVS以外.还有不少开发人员喜欢其它的开发环境。其中Keil和MDK就是比较多使用的
 
  Keil的开发环境几乎是单片机IDE开发的代名词.其实它还能做ARM开发。它的完整名称是Keil uVision
 
 
 
Keil后被ARM收购。作为ADS的升级MDK推出。
 
RVDS则是MDK的升级版,使用Eclipse作为IDE,界面操作与前面几个环境完全不一样。
 
 
SDT-->ADS\
         +-- RealView MDK -->RVDS
     Keil/
 
还有一些工程同使用IAR for ARM
 
阅读(2812) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

kangear2012-09-25 08:54:07

总觉得这没有CSDN的氛围好……很多好的文章没人评!