解决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

小梅哥

芯航线电子工作室

【小梅哥SOPC学习笔记】NIOS II工程目录改变时project无法编译问题的更多相关文章

  1. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  2. 【小梅哥SOPC学习笔记】sof与NIOS II的elf固件合并jic得到文件

    sof与NIOS II的elf固件合并jic得到文件 注意,本方法已经有更加简便的方法,小梅哥提供相应的脚本文件,可以一键生成所需文件,脚本请前往芯航线FPGA技术支持群获取. 7.1 为什么需要将S ...

  3. 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦

    SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...

  4. 【小梅哥SOPC学习笔记】Altera SOPC嵌入式系统设计教程

    Altera SOPC嵌入式系统设计教程 第1章 概述 SOPC(System On Programmable Chip,可编程的片上系统)是Altera公司提出来的一种灵活.高效的SOC解决方案.它 ...

  5. 【小梅哥SOPC学习笔记】切换NIOS II CPU的主内存后软件中需要注意的几点设置

    切换NIOS II CPU的主内存后软件中需要注意的几点设置 有时候,我们可能面对这样一种情况: 1. 我们创建一个SOPC系统,并在QSYS中设置NIOS II的复位地址和异常地址都指向SRAM: ...

  6. 【小梅哥SOPC学习笔记】给NIOS II CPU增加看门狗定时器并使用

    给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 1. 设置计时溢出时间为1秒 2. 计数器位宽为32位 3. 勾选No Start/Stop control bits 4. 勾选F ...

  7. 【小梅哥SOPC学习笔记】系统时钟的使用

    给NIOS II CPU添加一颗澎湃的心——系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...

  8. 【小梅哥SOPC学习笔记】设置Eclipse在编译(build)前自动保存源代码文件

    设置Eclipse在编译(build)前自动保存源代码文件 Eclipse 常用设置之让Eclipse在编译(build)前自动保存源代码文件 一.让Eclipse在编译(build)前自动保存源代码 ...

  9. Django学习笔记 Django的工程目录

    mysite├── manage.py 管理项目:包括数据库建立.服务器运行.测试……└── mysite    ├── __init__.py     ├── settings.py 配置文件:应用 ...

随机推荐

  1. IO模型之阻塞IO

    1. IO模型的介绍 首先我们先来熟悉下什么是 同步,异步.阻塞.非阻塞 的知识: 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...

  2. Fiddler监控面板显示Server栏(Fiddler v5.0)

    1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.去掉 UI.lvSessions.AddBoundColumn("Server ...

  3. Python Twisted系列教程22:结束

    作者:dave@http://krondo.com/part-22-the-end/  译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted 入门!“ ...

  4. [ Python ] Flask 基于 Web开发 大型程序的结构实例解析

    作为一个编程入门新手,Flask是我接触到的第一个Web框架.想要深入学习,就从<FlaskWeb开发:基于Python的Web应用开发实战>这本书入手,本书由于是翻译过来的中文版,理解起 ...

  5. 象棋AI算法(一)

    最近想做一个象棋游戏,但是AI把我难住了.这是这几天的成果: 象棋程序通过使用“搜索”函数来寻找着法.搜索函数获得棋局信息,然后寻找对于程序一方来说最好的着法. 一,最小-最大搜索Minimax Se ...

  6. Django的contenttypes应用、缓存相关

    一.django的contenttypes contenttypes 是Django内置的一个应用 , 可以追踪项目中所有app 和 model 的对应关系, 并记录djang_content_typ ...

  7. 华为路由器pppoe拨号

    一.概要 模拟pppoe 拨号 , 软件 ensp  , 简单拓扑: 二.配置 1.基本环境配置 pc1 AR1 int gi 0/0/0 ip add 192.168.10.254 24 2.开始 ...

  8. MySQL 基本语法(1.表字段操作,2表记录管理 3.运算符管理4.SQL查询 5.约束6.索引

    .表字段的操作 .语法:alter table 表名 执行动作; .添加字段(add) .添加到末尾 alter table 表名 add 字段名 数据类型; .添加到第一列 alter table ...

  9. BUI 框架使用指南

    指南说明:只适用于对框架的剥离 如果不需要剥离则原来的东西直接粘贴就行 在主界面中使用时需要加入一下引用bui.js jquery.js config.js 末尾的文件 BUI.use(位置1, fu ...

  10. nginx 里设置font-face 跨域

    server { ... # Fix @font-face cross-domain restriction in Firefox location ~* \.(eot|ttf|woff)$ { ad ...