Coder
分类: 嵌入式
2010-03-11 20:43:10
第四步、支持串口xmodem协议
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命令下载文件了。