walkie

小节—Spartan 3E uclinux-完成

0
阅读(2644)

------Before 25th July --------------

最近因为有人询问如何在Spartan3E板子上移植uclinux,想着自己在大三的时候就开始在3E板子上 移植uclinux,这次本想一次性通过的,但是结果并不是很理想。出现了一些奇怪的问题。包括flash无法识别,SDRAM内存测试无法通过等。我使 用的9.1 sp3工具链。

 

自己一开始创建完硬件之后,选择了Flash,DDR_SDRAM,硬件编译通过,开始编译软件,发现在 OS and libraries中无法识别flash,,在多次测试的情况下,发现在创建工程的时候,9.1软件中默认的flash的接口为mch opb emc,而8.2版本中是opb emc,在创建工程的初期就要注意这个选项,记得改成opb emc,这样在软件平台中就可以发现Flash了。

 

硬件编译通过之后出现,设计软件平台,现在的软件平台中 是可以发现flash了。生成了autoconfig.in文件,接下来就开始uclinux的交叉编译。

在本本上装了一个redhat 9,考虑到之后用到图形界面的可能性很小,而且本本的虚拟机中已经有一个Cent os了,所以这里装了一个没有图形界面的红帽子,设置了编译环境,开始交叉编译uclinux。

这变的流程都很顺利,除了在第一次编译的时 候会出现说g++,C++ 文件夹做link的错误,说目标快捷方式已经存在,无法创建新的。修改include下面的Makefile,在创建快捷方式的ln命令那几行,加上-f,如此就可以完全编译通过了。

 

把 image.bin文件拷贝出来,感觉还是命令行方式会更加方便一点,爽啊。。。

 

下载到3E板子里去。结果超级终端一点反 应。这个问题比较严重,因为不知道到底错在哪里。

在XMD中stop一下,结果发现地址跑到了一个系统中没有的地址上去了,跑飞了。 

 

从 硬件开始检测,

下载硬件下去,发现无法内存检测没有通过。

开始慢慢的调试硬件。

尝试的不加FLS总线,尝试者 使用opb ddr而不是mch opb ddr接口,尝试者使用32M的ddr而不用64的ddr,每一次都需要重新编译硬件,超级慢,

 

结果都是一样的,内存无法 通过,

唯一的不同之处是有的现实正在测试32bit,有的直接现实三个failed

 

尝试最小系统,创建之后 直接编译硬件,和软件,不对microblaze做任何修改,

..............

....................................

...............

...

........

.....................

用EDK map时候会出现的这些点点点来表示此刻的等待以及漫长的思考过程。。。。

 

下载到3E板子里去,发现内存测试都通过 了。。。

对microblaze做一些修改,设置一些参数,再连接debug_module的接口,然后update一下bit文件,在编 译硬件的时候出现了,clock绑定之类的问题,无法编译通过。。。

 

目前的情况就是如此,

我甚至开始怀疑是 不是9.1的软件的问题。

 

-------After 25th July-----------------------------

 

恩, 好,经过一些时间的调试,

总算发现了问题,自己尝试的使用一个调试的Flow,把目标锁定在DDR上,是9.1软件的问题。

是 一些BUFG搞出来的问题。

只要在UCF文件中添加以下一些约束:

NET "*/DDR_DQ_I*" IOBDELAY=NONE;
NET "*/DDR_DQS_I*" IOBDELAY=NONE;
NET "*/DDR_DQS_T*" IOBDELAY=NONE;

 

之 后的结果非常顺利。感谢Ricky的大力相助:)

这是自己在Spartan 3E上实现的uClinux下tftp的功能。也忠心祝愿参加 2008信息安全大赛的各个参赛队可以顺利的完成操作系统移植这一步。

 

 

自己也尝试了在8.2软件上的移植,虽然在一 年前,自己的第一份实习就是使用8.2版本的软件在Microblaze上移植uClinux,而且成功了。

 

但是这次不知 道是因为什么原因,一直会出现各种问题。DDR test的问题。Xilinx网站上说是BUFG的问题。

1)内存的测试首先是跳线的问 题,虽然我一直不知道这是为什么,但是通过以下这样的设置,在工程没有Ethernet这个IP的时候是可以通过的。这是在Xilinx的问题集中翻出来 的。

Change the mode pins to JTAG/BSCAN by removing the jumpers from M0 and M2 and keeping the jumper on M1.

 

2)如果有 Ethernet这个IP,不必要的BUFG就造成了很多问题。

可以有一个workaround

在mhs文件中,DCM的IP中添加以下参数。每一个都需要。

PARAMETER C_CLKOUT_PHASE_SHIFT = FIXED
PARAMETER C_PHASE_SHIFT = 50

这样,内存的测试就可以过了。

 

不过对于Spartan3E上跑的uClinux,速度非常慢,

以至于想移植一些软件上去,处理的速度会非常慢,

所以还请在上面想移植软件的各个参赛队三思。

如果可以,尽量不使用操作系统,我见过有人在microblaze上不使用操作系统,做JPEG的压缩的实例,所以也 许不用操作系统,也一样可以处理很多事。