将TQ2440的ADS测试程序放到MDK下或Ubuntu下开发

    前几天找同学借了TQ2440的开发板来玩,由于是第一次弄ARM9,理所当然从裸奔开始了。

    MDK比较熟悉,但是ADS没用过,可是TQ2440光盘里的测试程序就是ADS下建立的工程。实在不想去折腾ADS,于是百度将这个工程移植到MDK下的方法。

    经亲自测试,按以下步骤做可以成功在MDK下编译出bin文件。本人使用的MDK版本是4.72a。

 

    第一步就是打开MDK,新建一个project,device选择Samsung -> S3C2440A。MDK提示是否自动添加启动代码,选择否,因为测试程序自带了启动代码2440init.s,并且更好。

 

    第二步配置参数(Options for Target ...),首先在User栏里,“Run User Programs After Build/Rebuild”,勾上Run #1,然后右边添加这么一句:

    "fromelf.exe --bin -o @p.bin  @p.axf",这是为了让MDK编译后生成DNW下载所用到的Bin文件。如下图所示:

    接下来在asm栏里勾掉"Enable ARM/Thumb Interworking",我看有说法是这样做为了避免一大堆warnning。然后在Include paths里添加.\inc

    之后是在Linker栏里勾掉Use Memory Layout from Target Diaglog,然后在工程文件夹下新建一个XXX.sct文件,内容如下。并在Linker栏里面添加。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_ROM1 0x30000000 0x02000000  {    ; load region size_region
  ER_ROM1 0x30000000 0x02000000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_RAM1 0x32000000 0x02000000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM1 0x40000000 0x00001000  {
   .ANY (+RW +ZI)
  }
}

    SDRAM的大小是64MB,即0x4000000,初始地址为0x30000000。由于之后是用DNW把代码下载到SDRAM里运行,所以ROM的地址设为0x30000000,并分配32MB。

之后是32MB的RAM。

    例如我这里,我的scatter文件名为ADCTest.sct。

    然后将原测试程序TQ2440_Test文件夹下的inc和src拷贝到MDK工程的文件夹下。注意,还要把inc文件夹下面的3个XXX.inc文件移动到src文件夹下,保证这三个文件与启动文件2440init.s在同一文件夹里,否则后面编译时会提示文件无法打开或不存在。 

 

    把src下所有文件添加到工程里。将2440init.s里面的 AREA    Init,CODE,READONLY 改为 AREA    RESET,CODE,READONLY。这是为了与scatter文件里面段的名字对应。

    还要在每个.s文件里添加PRESERVE8这一句。

[FILE - 2440init.s]:
......
80 IMPORT Main ; The main entry of mon program 81 IMPORT RdNF2SDRAM ; Copy Image from Nand Flash to SDRAM 82 83 AREA RESET,CODE,READONLY 84 PRESERVE8 85 ENTRY 86 87 EXPORT __ENTRY __ENTRY ......
[FILE - 2440slibs.s]:
......
26   MEND
27
28   AREA |C$$code|, CODE, READONLY
29   PRESERVE8
30   EXPORT    EnterCritical
EnterCritical  
......

 

   在编译前的最后一件事就是把所有的

   Image$$RO$$Limit 改为 Image$$ER_ROM1$$RO$$Base

   Image$$RO$$Limit 改为 Image$$ER_ROM1$$RO$$Limit

   Image$$RW$$Base 改为 Image$$RW_RAM1$$RW$$Base

   Image$$ZI$$Base 改为 Image$$RW_RAM1$$ZI$$Base 

   Image$$ZI$$Limit 改为 Image$$RW_RAM1$$ZI$$Limit

   这是为了与scatter文件里面的执行域名对应。

  

    做完以上的准备工作后就可以编译了。

    编译后在工程所在的文件夹下面会有一个.bin文件。

    把TQ2400开发板连上串口和方头的USB(标有host)。

    打开SecureCRT,配置好串口的参数并打开串口,把开发板拨到NOR FLASH启动模式并上电,可以看到UBOOT打印出的选项列表。

    WINDOWS也会提示有新的USB设备,这时需要手动给开发板USB设备安装驱动,驱动程序在TQ2440的资料里。

    之后打开DNW,可以看到软件顶端的显示USB:OK,表示已经DNW已经看到开发板了。

    接下来要把刚才编译的程序放到2440的SDRAM里面运行。设置DNW的Address,这个是.bin被传送的目的位置,与scatter文件里的参数一样,把这个地址设为0x30000000。然后在SecureCRT里按7,即告诉UBOOT我们选择了“Download to sdram and run it”,可以看到UBOOT提示正在等待host的传输。之后在DNW中点Transimit,选择刚才的.bin文件。至此程序就在2440的SDRAM里运行了。 

 

     如果想在Ubuntu下开发,首先需要安装MINICOM 和 DNW。

     具体安装,配置过程参考以下几篇帖子,非常详细。

     http://www.linuxidc.com/Linux/2011-03/32869p2.htm

     http://blog.csdn.net/mybelief321/article/details/8987658

     http://blog.csdn.net/mybelief321/article/details/8987502

     注意的是,第一篇帖子里用的DNW工具是用libsub开发的,所以与WINDOWS下不同,这里不需要给开发板装USB驱动了。直接用DNW就可以打开设备。一个不足之处是,用这个DNW下载bin文件时,偶尔会无法传输。

     接下来就是安装交叉编译工具arm-linux-gcc。参考下面这一篇帖子

     http://blog.sina.com.cn/s/blog_771bd2c901010n22.html

     至于如何在UBUNTU下用GCC编译,目前还不会,等这段时间忙完就开始研究。

 

      

posted @ 2013-11-30 22:14  Ilmen  阅读(720)  评论(0编辑  收藏  举报