U-Boot移植--支持串口Xmodem协议

来源:互联网 发布:java面试专业技能 编辑:程序博客网 时间:2024/05/17 01:42

       U-Boot默认支持的loadb命令需要配合Linux下的kermit工具来使用,loady命令通过串口ymodem协议来传输文件。Windows下的超级终端虽然支持ymodem,但是它的使用界面实在不友好。而SecureCRT只支持xmodem和zmodem。而上位机和开发板之间的文件传输又实在是一件非常重要的事,所以现在修改代码以增加对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命令下载文件了。

 

 

0 0