日志档案

发表于 2008-7-4 14:40:50

1

标签: 无标签

在Fedora 9下移植uClinux到NIOS II

       因为要参加竞赛,我们的方案中要用到操作系统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的步骤就成功了.

       希望这篇文章对遇到和我同样的错误的朋友有帮助,也希望高手们释一下为什么别人可以编译成功,而我需要修改源码才行.

系统分类: 嵌入式   |   用户分类: Linux   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(96)    回复(0)  

投一票您将和博主都有获奖机会!