在当前的工作中,我们通过串口向U-BOOT发送命令,通过md、mw命令读写CPU的外部总线实现对FPGA的参数配置。我们遇到的问题是:如何简便快捷地向U-BOOT传递大量的命令。在FPGA作为协处理器的系统中,这一问题是很普遍的。
可供选择的方案如下:
0. 一次性拷贝-粘贴大量的文本是HyperTerminal这样的串口调试工具不能支持的,手工粘贴5条以上的命令就令人难以忍受了,所以该方法不在考虑之列。
1. 采用U-BOOT提供的autoscr命令执行脚本,这一脚本可以通过U-BOOT的loadb命令下载到CPU的内存中。困难的是,.txt脚本必须通过随U-BOOT源码提供的mkimage工具编译(封装)为特定格式的文件才能被U-BOOT执行。 riple 咨询了我们的firmware工程师,结论是不安装Linux操作系统,是无法编译U-BOOT源码并获得mkimage工具的。对于我们这些hardware工程师来说,在Linux操作系统下搭建U-BOOT编译环境还是太奢侈了些;Cygwin又太寒酸了,编译U-BOOT还需要安装这样那样的package。
2. 通过U-BOOT的setenv命令设置自定义命令,然后通过run命令运行自定义命令。困难是,自定义命令的字节长度是有限制的。在我们的情况下,一条自定义命令只能包含不超过4条的mw命令。中等长度的脚本可以以这种方式执行,可是我们的脚本长度是超长的。
这么看来,通过U-BOOT是很难实现我们需要的批处理功能了。幸运的是,在同事的启发下, riple 用Tcl实现了对串口的操作。
在今天早上的一次“隔间探头会议”上,我的同事Jack提议道:为什么不用Tcl写一个程序把我们的脚本发送给CPU呢?Jack的想法是通过Tcl来控制HyperTerminal实现自动化的“拷贝-粘贴”。受到Jack的启发,我恍然大悟:为什么不用Tcl直接控制PC机的串口给CPU发送U-BOOT命令呢?这应该比控制HyperTerminal的图形界面要容易多了。
于是我赶紧到Tcl Developer Xchange上搜索了一下Serial Port,很容易就找到了几个例子。用了2个小时的时间,我终于用Tcl实现了一个简单的串口调试工具;最重要的是,这个工具还能读取.txt脚本文件,直接向CPU逐条发送U-BOOT命令。
有了这个工具,我们不但可以在调试阶段方便地执行脚本,尝试多种配置组合,还可以在内部测试阶段实现无人值守的批量硬件测试,实现自动化的板级验证。
硬件工程师需要多少掌握一点脚本语言——Matlab、Tcl、Perl都行。项目自动化不应该是软件工程师独享的特权。
相关链接:
Serial Port - wiki.tcl.tk
ash_riple_768180695 2009-2-26 22:32
ash_riple_768180695 2009-2-26 22:31
coyoo 2009-2-26 13:24
coyoo 2009-2-26 13:20
ash_riple_768180695 2009-2-24 20:39
coyoo 2009-2-24 19:17