Chinaunix首页 | 论坛 | 博客
  • 博客访问: 819866
  • 博文数量: 117
  • 博客积分: 2583
  • 博客等级: 少校
  • 技术积分: 1953
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-06 22:58
个人简介

Coder

文章分类
文章存档

2013年(1)

2012年(10)

2011年(12)

2010年(77)

2009年(13)

2008年(4)

分类: 嵌入式

2010-03-11 20:43:10

第四步、支持串口xmodem协议

U-Boot默认支持的loadb命令需要配合Linux下的kermit工具来使用,loady命令通过串口ymodem协议来传输文件。Windows下的超级终端虽然支持ymodem,但是它的使用界面实在不友好。而SecureCRT只支持xmodemzmodem。而上位机和开发板之间的文件传输又实在是一件非常重要的事,所以现在修改代码以增加对xmodem的支持,即增加一个命令loadx(在配置文件中,会自动包含一个默认的命令配置文件include/config_cmd_default.h,同时U-Boot已经实现的命令的列表在include/config_cmd_all.h中。)依照loady的实现来编写代码,首先使用U_BOOT_CMD宏来增加loadx命令(在文件common/cmd_load.c文件中):

U_BOOT_CMD(

    loadx, 3, 0,  do_load_serial_bin,

    "load binary file over serial line (xmodem mode)",

    "[ off ] [ baud ]\n"

    "    - load binary file over serial line"

    " with offset 'off' and baudrate 'baud'"

);

其次,在do_load_serial_bin函数中增加对loadx命令的处理分支。也依照loady来实现:

else   if (strcmp(argv[0],"loadx")==0) {

        printf ("## Ready for binary (xmodem) download "

           "to 0x%08lX at %d bps...\n",

           offset,

           load_baudrate);

 

       addr = load_serial_xmodem (offset);

 

    }
addr
行调用了load_serial_xmodem函数,它也是依照load_serial_ymodem实现的一个函数:

#if defined(CONFIG_CMD_LOADB)

static ulong load_serial_ymodem (ulong offset);

static ulong load_serial_xmodem (ulong offset);

#endif

……

static ulong load_serial_ymodem (ulong offset)

{

……

    char ymodemBuf[1024];

……

    info.mode = xyzModem_xmodem;

……

}

首先在文件开头增加loadx_serial_xmodem函数的声明,然后复制load_serial_ymodem函数为load_serial_xmodem,稍作修改。

1)、将局部数组ymodemBuf改名为xmodemBuf,并在后面使用到的地方统一修改,这只是为了与函数名称一致,可改可不改。

2)、info.mode的值从xyzModem_ymodem改为xyzModem_xmodem

重新编译,就可以使用loadx命令下载文件了。

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