U-Boot移植串口xmodem协议

 

   今天完成了U-Boot上串口xmodem协议,实现了通过xmodem协议的数据传输,现将笔记整理如下。
   串口xmodem的移植比较简单,参考ymodem协议就行。


实验环境:Linux ubuntu 9.10(来自韦东山老师光盘自带虚拟机)

开发板:
Jz2440(ARM9   S3C2440

        NAND   K9F2G08

        SDRAM  K4S561632 * 2

U-Boot: u-boot-1.1.6

烧写工具: OpenJtag

串口软件:SecureCRT

一、增加loadx命令

    在cmd_load.c (路径:u-boot-1.1.6/common/cmd_load.c)中增加一条U_BOOT_CMD命令以支持xmodem。

找到loady命令的U_BOOT_CMD结构体,紧跟其后增加loadx的U_BOOT_CMD。

U_BOOT_CMD(

       loady, 3, 0, do_load_serial_bin,
       "loady- load binary file over serial line (ymodem mode)\n",

       "[ off ] [ baud ]\n"
" - load binary file over serial line"" with offset 'off' and baudrate 'baud'\n"

);

U_BOOT_CMD(
          loadx, 3, 0,do_load_serial_bin,

         "loadx- load binary file over serial line (xmodem mode)\n",

         "[ off ] [ baud ]\n"
"- load binary file over serial line"" with offset 'off' and baudrate 'baud'\n"

);

红色为新增部分。



二、增加loadx命令处理分支

   在文件cmd_load.c(路径:u-boot-1.1.6/common/cmd_load.c)中找到函数do_load_serial_bin(),新增加loadx的分支,修改后如下:

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);

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

   printf ("## Ready for binary (ymodem) download""to 0x%08lX at %d bps...\n",offset, load_baudrate);
   addr = load_serial_ymodem (offset);

} else ……

红色部分为新加入loadx处理分支。


三、新增load_serial_xmodem()函数

   在文件cmd_load.c(路径:u-boot-1.1.6/common/cmd_load.c)中仿照load_serial_ymodem()实现load_serial_xmodem()函数,没有什么技巧,主要修改以下两点:

1.局部数组ymodemBuf改为xmodemBuf;

2.info.mode的值由xyzModem_ymodem改为xyzModem_xmodem。代码太多,完成后的函数见附件cmd_load.c。

   特别注意,需要在文件cmd_load.c(路径:u-boot-1.1.6/common/cmd_load.c)的开头增加函数load_serial_xmodem()的声明。

#if (CONFIG_COMMANDS & CFG_CMD_LOADB)

static ulong load_serial_ymodem (ulong offset);

static ulong load_serial_xmodem (ulong offset);

#endif

  红色为新增。

   xmodem协议移植完毕后,重新编译u-boot,然后烧写到开发板。


四、测试串口xmodem协议

   为了测试移植是否成功,使用串口xmodem协议下载一个LED程序到SDRAM中运行(LED闪灯程序链接地址在0x30000000处,源码见附件)。

   使用串口线连接好开发板与PC,打开SecureCRT,选择与开发板适应的波特率,开发板上电,进入u-boot界面,在u-boot命令行输入“?”或者“help”,可以看到loadx协议的命令提示。


imls    - list all images found in flash
itest   - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loadx   - load binary file over serial line (xmodem mode)
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
md      - memory display
mm      - memory modify (auto-incrementing)
mtest   - simple RAM test
mw      - memory write (fill)


在u-boot命令行输入loadx 0x30000000。

JZ2440 # loadx 0x30000000

## Ready for binary (xmodem) download to 0x30000000 at 115200 bps...

CCCCCCC

   u-boot已经在等待数据了。

   在SecureCRT菜单中选择“传输->发送Xmodem(N)”,如图1。


选择发送Xmodem.jpg(64.97 K)
2012-3-6 22:14:27

1选择发送Xmodem

   在弹出的对话框中选择leds.bin,开始数据传输。如图2。

选择发送bin文件.jpg(20.15 K)
2012-3-6 22:14:27

2选择发送bin文件


JZ2440 # loadx 0x30000000

## Ready for binary (xmodem) download to 0x30000000 at 115200 bps...

CCCCCCCCCC

开始 xmodem传输。   Ctrl+C 取消。


100%
168 bytes
168 bytes/s 00:00:01
0 Errors

xyzModem - CRC mode, 2(SOH)/0(STX)/0(CAN) packets, 10 retries

## Total Size
= 0x000000a8 = 168 Bytes


  

   发送完毕,输入go命令执行程序。

JZ2440 #go 0x30000000

## Starting application at 0x30000000 ...

   可以看到在Jz2440开发板上leds已经开始闪烁了。说明移植xmodem协议OK!



五、小结

   串口的xmodem移植比较简单,也很容易看到效果,比较适合初学者。如果想仅仅测试xmodem移植效果,可以直接使用附件中的cmd_load.c文件替换掉源文件(路径:u-boot-1.1.6/common/cmd_load.c)即可。如果在传输数据时,串口上时间没有反应,请按 Ctrl+C 取消,然后重新再试一次基本就OK。



六、参考资料

《嵌入式Linux应用完全开发手册》-15章 U-Boot分析与移植


七、附件

   leds测试程序,链接地址0x30000000

  

leds_0x30000000.rar ( 7.11 K, 下载次数:3)

   移植好xmodem协议的cmd_load.c

  

cmd_load.rar ( 7.37 K, 下载次数:1)

 

 

声明:本文为个人原创,边移植边写,完全来自实践。本文首先发表在百问网(www.100ask.net)转载请指明出处。

原文地址:http://www.100ask.net/forum/showtopic-3631.aspx

 

免费视频下载地址:

1期共33个视频,免费,下载后可以直接观看,下载地址:
http://115.com/folder/fa55184z#
http://dl.dbank.com/c03o1ebwlo
第一期视频从Linux安装开始,讲解了SDRAMNAND FLASHLCD等硬件操作,U-Boot的移植、内核移植、简单字符驱动的编写,非常详尽。

第二期视频主要是驱动深入讲解,精华啊!

第二期视频需要收费的哦,具体见韦东山老师淘宝店铺:

http://100ask.taobao.com/

 

书籍资料下载:

《嵌入式Linux应用开发完全手册》及相关资源电炉可以下载:

http://www.verycd.com/topics/2828590/

      嵌入式linux应用开发完全手册光盘里的驱动和例子源代码.rar详情

嵌入式linux应用开发完全手册.pdf详情

 

如果能买一块韦东山老师的开发板,加上视频讲解,加上书,那学起来就太Easy了!

淘宝店铺上http://100ask.taobao.com/全套都有了!!!

 

Logo

更多推荐