因为要参加竞赛,我们的方案中要用到操作系统uClinux,开发板是Altera提供的DE1的板子,移植uClinux就是必不可少的一步了,以前接触过这个系统,但从来没有自己亲手移植过.
第一步,是用SOPC
Builder把硬件做好,并且自己写一个小的测试程序,看能否正确运行,主要是测试你的SDRAM和FLASH是否可用,要注意的就是FLASH的访问
时间一定不要太短,我就因为这个问题浪费了两天而没有任何进展.还有一个需要特别注意的就是一定要把CPU的中断向量设在SDRAM中,这是我当时犯的一
个重要的错误,当然,如果你不用uClinux的话这个无所谓.我一开始是把向量设在片内RAM中的,结果是裸机程序可以正常运行,但uclinux怎么
也跑不了,这个小小的一般不会引起注意的小失误又让我痛苦了一天,不过我现在要说的最主要的也是让我痛苦了很长一段时间的问题是uClinux的编译错
误.
我用的是Fedora9的Linux系统,Altera的开发套件却是WINXP下的,这样我不得不停地把电脑重启,在两个系统间不停地切换(谁让我的机器太差跑不了虚拟机呢).到www.uclinux.org下载源码包,http://nioswiki.jot.com/WikiHome这里有NIOSII的补丁,打补丁和安装交差编译环境可以差考这里http://blog.ednchina.com/duckfly/35483/message.aspx.
不过按duckfly的步骤在make是会出错,不是步骤有错,而是源码的问题,不知道其它的朋友有没遇到同样的问题,一般错误原因是
bzero,index,rindex,bcopy符号未这定义,都是在user目录下的文件用到这几个函数引起的,它们
在<strings.h>中定义,用<string.h>的几个同样功能的函数代替就可以
了:memset,strchr,strrchr,memcpy,其中memset有三个参数,而bzero只有两个,替换时把memset的第二个参数
设为0即可,其它的三个就需函数名替换一下就可以了.可以使用以下命令查找用到这几个函数的源文件(在uClinux-dist目录下执行):
grep -lr bzero user/
grep -lr index user/
grep -lr bcopy user/
用gedit或vim分别打开每个命令对应的那些源文件,直接用上面提到的函数替换.保存.差点忘了提了,我还遇到另一个小错误,大概是PATH_MAX未定义,根据make的提示,找到相应的源文件,在文件头部加上:
#define PATH_MAX 100 //100是我随便想的一个数.
这些工作做好了,再按这里http://blog.ednchina.com/duckfly/35483/message.aspx的步骤就成功了.
希望这篇文章对遇到和我同样的错误的朋友有帮助,也希望高手们释一下为什么别人可以编译成功,而我需要修改源码才行.
文章评论(0条评论)
登录后参与讨论