解决NIOS II工程移动在磁盘上位置后project无法编译问题
说明:本文档于2017年3月4日由小梅哥更新部分内容,主要是增加了讲解以Quartus II13.0为代表的经典版本和以15.1为代表的更新版本之间,解决问题的一些小的差异。
如果用户只是想快速解决问题,不想分析产生问题的原因并和我一起探寻解决问题的思路,可以直接跳到6.4节解决方案步骤总结:6.4 解决方案步骤总结。(点击蓝色字体即可到达)
针对目录改变时,Nios II project无法编译的问题,网上有多种解决方法,不过都操作相对繁琐,这里,小梅哥进过探索,针对11.0及以后的版本,找到了一种简单可靠的解决办法,整个过程只需要简单的四步操作即可搞定,分别为:切换工作空间(workspace),移除旧版工程,修改bsp文件,重新导入(import)工程。
6.1 更改NIOS II Project目录原因
引用网上木易前辈的话,“我们常会有各种理由会改变原来project的目录名称或目录位置”例如:
1. 为了管理方便,可能将原来在d:\project\的所有project移到e:\project\下
2. 同事将project整个目录压缩给我,因为我并不知道该project放在同事计算机什么工作目录下,所以我将压缩文件解压缩到我自己的工作目录下
3. 从网络上下载整包范例程序的压缩文件后,因为我并不知道原本范例程序所存放的目录,所以我将压缩文件解压缩到我自己的工作目录下
4. 从书上光盘复制范例程序到硬盘,因为我并不知道原本范例程序所存放的目录,所以我将范例程序复制到我自己的工作目录下
5. 新的project与旧的project类似,想从旧的project去做修改即可,开了一个新的目录,将旧的project所有档案复制到新的目录下
6. 为了管理方便,想改变原本project的目录名称
6.2 更改NIOS II Project目录引发的问题
Quartus II的工程在更改了路径后是不会存在问题的,我们可以直接编译更改下载,而在NIOS II EDS中的工程却没这么简单,Nios II EDS是用Eclipse去改的,用的是Eclipse的workspace概念,很类似Visual Studio的*.sln概念,但又不完全一样。Eclipse允许你在一个workspace下,去管理多个project,workspace记住的 是project的绝对路径,所以当你Nios II project目录名称改变,或者目录位置改变,该workspace自然就找不到了。
或者,如果你的新工程是从老工程复制过来的,那么一切表面看起来不会出现任何问题,所有的软件工程仍然可以“正常打开”,我们依旧可以编译,重新生产bsp文件,下载。然而,这种方式存在更大的风险,因为这样,你修改的还是原来路径下的文件,因此,这样就有极大的风险使得你在希望更改新的软件工程的时候,把原本的工程给改了。很多朋友表示NIOS II开发中存在各种各样的问题,例如无法下载elf文件,下载后软件不能执行或者执行报错。经过这段时间的辅导答疑,发现他们出问题大部分也都是这个原因。
6.3 解决方案详解
因此,为了让各位NIOS II用户快速上手,避免遇到这个问题而耽误太多的时间,小梅哥这里介绍一种最简单粗暴的解决办法。整个过程只需要简单的四步操作即可搞定,分别为:切换工作空间(workplace),移除旧版工程,修改bsp文件,重新导入(import)工程。
这里,我将我电脑中E:\easy_sopc\NiosOnlyExp\03_pio_int这个文件夹拷贝到桌面(C:\Users\Administrator\Desktop\03_pio_int)上,以符合更改路径这一前提,然后,打开其中的Quartus II工程“CoreCourse_GHRD.qpf”,工程打开后,选择tools->Nios II Software Build Tools For Eclipse。
然后在弹出的工作空间选择对话框中,可以看到,工作空间还是上次的工作空间路径,
这里,我们将工作空间切换到C:\Users\Administrator\Desktop\03_pio_int,如下图所示:
然后选择OK就会打开工程,打开后我们可以看到,软件自动加载了一个软件工程和一个bsp工程,该工程名字与复制前的工程(E:\easy_sopc\NiosOnlyExp\03_pio_int\software)中的软件工程名字一致(注意,如果用户磁盘上旧位置不存在该工程,例如该工程是从其他电脑拷贝过来的,工程将显示蓝色,无法打开,这个虽然会影响我们后续一步一步分析问题原因,但是不影响我们解决问题,如果各位自己电脑上无法打开,可以找一个原本存在的工程测试,或者跳过分析问题步骤,直接看解决方案总结)。
这时候,我们鼠标右键选中key_int_bsp,选择NIOS II -> BSP Editor
在弹出的BSP设置界面中我们可以看到,BSP target direction还是E:\easy_sopc\NiosOnlyExp\03_pio_int\software\key_int_bsp,即复制前的路径。
因此可知,如果此时我们在当前工程的Qsys中更改了NIOS II系统的架构或者增删了东西,重新生产Qsys文件,然后我们回到Eclipse中选择generate BSP时,软件会根据新的Qsys信息重新生产bsp文件,而这个bsp文件还是保存在之前的E:\easy_sopc\NiosOnlyExp\03_pio_int\software\key_int_bsp中,因此就导致原本的复制之前的工程内容被更改,即本来我们是想把整个工程复制到另一个地方进行单独修改的,然而却实质上把原路径下的工程文件给更改了,到最后导致原版和复制后的工程都被改变。
为了解决这个问题,接下来我们将新打开的工作空间中已经存在的两个工程移除。选中已经存在的工程和工程对应的bsp,右键选择Delete:
在弹出的对话框中,点击OK。不过大家一定要注意的是,千万不要勾选上面的那个“Delete project contents on disk(cannot be undone)”,因为这个是删除软件工程的源文件,如果选择了这个,那么在删除时就会将原本没有复制之前的路径下的软件源工程给删除掉,那么原版工程就被彻底破坏掉了,我们所需要做的,只是把这两个工程从工作空间中移除,而不是将原工程删掉,这点大家要切记。
移除了工程之后,我们回到新复制的工程下的key_int_bsp文件夹下(C:\Users\Administrator\Desktop\03_pio_int\software\key_int_bsp),找到settings.bsp文件,使用任意一个文本编辑器打开:
注意,不同版本的Quartus II软件该文件稍有差别。对于Quartus II13.0版本, BSP文件中两个位置记录了工程绝对路径,而对于15.1或以上,则只有一个位置记录绝对路径,另一个位置已经改进为相对路径了(相对路径是相对当前工程,因此无需修改)(其他版本我暂时未检验)。
首先我们看一个13.0版本的工程
该文件的7和9两行都是使用的绝对位置记录的,因此在Quartus II13.0版本的软件中需要修改这两个位置都为新的路径,修改后如下图所示:
而对于15.1版本的工程,打开文件后我们可以看到,该文件下的第7行左右,BspGeneratedLocation指定的还是复制前的路径,第9行已经改进为采用相对路径了:
于是,这里只需将第7行这个地方更改为我们复制后的新路径C:\Users\Administrator\Desktop\03_pio_int\software\key_int_bsp,第9行不变即可更改后的文件内容如下所示:
然后保存文件,回到NIOS II Eclipse中,选择File -> Import
在弹出的窗口中,选择General下的Existing Projects into Workspace:
在弹出的窗口中,选择Select root directiory,点击Browse,定位到Workspace目录(这里也就是Quartus II工程目录)C:\Users\Administrator\Desktop\03_pio_int
可以看到,软件会自动找到该目录下存在的软件工程,然后点击finish即可将工程导入进来。导入进来后,再次进入BSP Editor,发现BSP target direction就已经是现在的新路径了。
为了区分开这样更改后是否还会对未复制前的工程造成影响,这里我将未复制前的工程剪切到了另一个地方放着,这样如果在重新编译的时候还是要对未复制前的工程进行操作,那么因为原工程已经不在了,就会报警告或则报错。而事实上,当我再次编译时并没有报任何警告和错误。修改C代码后,重新编译生产elf文件,下载到芯航线FPGA开发板上,也能够正常的运行。打开原版工程(已经将原版工程拷贝回原路径了),还是之前的内容,编译下载也没问题。因此该问题得以完美解决。
6.4 解决方案步骤总结
好了,说了这么多,各种推理和验证,导致真正有用的操作步骤被弱化了,不容易区分,这里,我再总结下:
6.4.1 切换工作空间(workspace)
切换工作空间前:
切换工作空间后:
6.4.2 移除旧版工程
注意:千万不要勾选上面的那个“Delete project contents on disk(cannot be undone)”,
6.4.3 修改bsp文件
在新复制的工程下的key_int_bsp文件夹下(C:\Users\Administrator\Desktop\03_pio_int\software\key_int_bsp),找到settings.bsp文件,使用任意一个文本编辑器打开:
第7行左右,将BspGeneratedLocation指定路径由原版路径改为更改后的新路径:
13.0版本
更改前:
更改后
15.1及以上版本
更改前
更改后
然后保存文件。
6.4.4 重新导入(import)工程
NIOS II Eclipse中,选择File -> Import
在弹出的窗口中,选择General下的Existing Projects into Workspace:
在弹出的窗口中,选择Select root directiory,点击Browse,定位到Workspace目录(这里也就是Quartus II工程目录)C:\Users\Administrator\Desktop\03_pio_int
点击finish即可将工程导入进来。
接下来就可以放心的更改Qsys系统和软件工程啦。
如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:一群 472607506(已满) 二群 615381411
小梅哥
芯航线电子工作室
此内容由EEWORLD论坛网友芯航线跑堂原创,如需转载或用于商业用途需征得作者同意并注明出处