Chinaunix首页 | 论坛 | 博客
  • 博客访问: 840099
  • 博文数量: 85
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 952
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-19 22:52
文章分类

全部博文(85)

文章存档

2011年(1)

2008年(1)

2007年(60)

2006年(23)

我的朋友

分类: LINUX

2007-02-26 22:19:05

    翻出多年前的Sitsang板,从TestSuit的实验做起,可惜只有代码,竟然全无了实验手册和文档,不管怎样,第一步得弄清楚如何将裸机程序下载到目标板才行。
    ADS的集成开发环境中,主要的是CodeWarrior和AXD,一个是写程序的,一个是调试程序的。AXD中还可以调用一个工具叫做Flash Downloader的,据说可以把程序下载到目标板的FLASH中,但经过查阅ADS手册《AXD and armsd Debuggers Guide》知,使用该工具必须有Multi-ICE工具或者是在RAM中驻留有Angel程序。由于目标板中已经移植了嵌入式linux操作系统,又没有Multi-ICE工具,只好放弃使用ADS来下载程序。
    TestSuit中有一种办法是使用TestSuitMaster程序来完成对板子的自动测试,而实际进行测试时报错而无法正常继续,由于手头没有详细资料,也难以排错。另外,这种自动测试的办法好像是不需要手工下载二进制文件的,因此,也没有达到摸清下载程序之法的目的。
    经过到互联网搜索,结合实际操作,下载程序到Flash可以如下操作:
    在Windows下,设置好超级终端并建立主机与目标板的连接后:
    1.启动目标板,看到下面提示信息时,按Ctrl+C进入Redboot:
    == Executing boot script in 2.000 seconds - enter ^C to abort
    RedBoot>
    2.可以输入help命令查看可用的命令,详细说明可以参见Redboot相关手册。
    3.查看当前FIS(Flash Image System)中的映像:
    RedBoot> fis list
    Name              FLASH addr   Mem addr    Length      Entry point
    RedBoot           0x00000000   0x00100000  0x00040000  0x00000000
    RedBoot config    0x03F80000   0x03F80000  0x00040000  0x00000000
    FIS directory     0x03FC0000   0x03FC0000  0x00040000  0x00000000
    JFFS2             0x00200000   0x00200000  0x02800000  0x00000000
    linux             0x00100000   0xA0200000  0x00100000  0x00000000
    4.查看Redboot版本信息(包括RAM地址区间!),下载程序时是下载到RAM中的,起始地址必须在RAM地址范围内,否则报错:
    RedBoot> version

    RedBoot(tm) debug environment - built 22:13:14, Sep  3 2003
    Platform: Intel(R) Sitsang Development Platform RedBoot* Debug Monitor ()
    Copyright (C) 2000, Red Hat, Inc.

    RAM: 0xa0000000-0xa4000000
    5.查看FLASH的合法地址空间:将下载到RAM中的程序/映像文件烧写到FLASH中时,要指定在FLASH中的起始地址,这个地址必须在这个合法的地址范围内,否则报错(当然也可不指定起始地址,而自动分配)。在报错信息中可以看到:
    Invalid FLASH address: 0x04000000 (Invalid FLASH address)
       valid range is 0x00100000-0x04000000
    6.下载映像文件到RAM:
    RedBoot> load -r -m xmodem -b 0xa2000000
    输入以上命令并回车后,右键菜单选择发送文件,弹出对话框,然后选择文件,发送即可。发送成功可看到信息如下:
    Raw file loaded 0xa2000000-0xa2000100
    xyzModem - CRC mode, 3(SOH)/0(STX)/0(CAN) packets, 6 retries
    从此信息还可以计算出映像文件的大小为0x00000100。
    7.将下载到RAM中的程序烧写到FLASH中:
    RedBoot> fis create -b 0xa2000000 -l 0x00000100 -f 0x03000000 -r 0xa2000000 firstbr
    ... Erase from 0x03000000-0x03040000: .
    ... Program from 0xa2000000-0xa2000100 at 0x03000000:
    addr:3000000,data:a2000000,size:100.
    ... Unlock from 0x03fc0000-0x04000000: block: 3fc0000,block_size: 40000,blocks: 80
    .
    ... Erase from 0x03fc0000-0x04000000: .
    ... Program from 0xa3fb0000-0xa3ff0000 at 0x03fc0000:
    addr:3fc0000,data:a3fb0000,size:40000.
    ... Lock from 0x03fc0000-0x04000000: .
    其中,-b指定要写到FLASH中的内容的起始的RAM地址,-l指定映像文件长度,-f指定下载到FLASH中的起始地址,可以省略该选项,-r指定将该映像文件从FLASH中加载到RAM中运行时的起始地址;最后是指定映像文件名。
    操作成功后可以再次查看FIS内容,结果如下:
    RedBoot> fis list
    Name              FLASH addr   Mem addr    Length      Entry point
    RedBoot           0x00000000   0x00100000  0x00040000  0x00000000
    RedBoot config    0x03F80000   0x03F80000  0x00040000  0x00000000
    FIS directory     0x03FC0000   0x03FC0000  0x00040000  0x00000000
    JFFS2             0x00200000   0x00200000  0x02800000  0x00000000
    linux             0x00100000   0xA0200000  0x00100000  0x00000000
    firstbr           0x03000000   0xA2000000  0x00040000  0x00000000
   
    至此,程序已经固化到FLASH中,如何运行呢?仍然在Redboot下,可以如下运行:
    RedBoot> fis load firstbr
    RedBoot> go 0xa2000000
    第一步是将映像firstbr从FLASH加载到RAM,由于加载到RAM后在RAM中的起始地址为0xa2000000,因此使用命令go 即可运行该映像文件。
    可惜,这样操作之后就卡住了,目标板上也没有任何运行反应。

    事实上,在没有Redboot的情况下,是可以使用FLASH烧写工具如jflashmm(linux下的免费工具)来通过JTAG线将映像文件写入FLASH的,可惜手头没有与开发板配套的工具。明天打算使用PXA270平台的linux下的jflashmm工具试一下。

参考资料:
1.Redboot命令使用入门
2.
3.
4.RedBoot User's Guide


   
阅读(2586) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-03-26 15:06:41

你好,看了你的博客,相当佩服. 我现在要搞pxa255了,可惜手头没有资料.连个启动初始化代码都没有. 能否给我一份sitsang的实验代码啊? 我的邮箱是:hongyhm@hotmail.com 谢谢!