【小梅哥SOPC學習筆記】NIOS II工程目錄改變時project無法編譯問題


 

解決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。

 

001

然后在彈出的工作空間選擇對話框中,可以看到,工作空間還是上次的工作空間路徑,

 

002

這里,我們將工作空間切換到C:\Users\Administrator\Desktop\03_pio_int,如下圖所示:

 

003

然后選擇OK就會打開工程,打開后我們可以看到,軟件自動加載了一個軟件工程和一個bsp工程,該工程名字與復制前的工程(E:\easy_sopc\NiosOnlyExp\03_pio_int\software)中的軟件工程名字一致(注意,如果用戶磁盤上舊位置不存在該工程,例如該工程是從其他電腦拷貝過來的,工程將顯示藍色,無法打開,這個雖然會影響我們后續一步一步分析問題原因,但是不影響我們解決問題,如果各位自己電腦上無法打開,可以找一個原本存在的工程測試,或者跳過分析問題步驟,直接看解決方案總結)。

 

004

這時候,我們鼠標右鍵選中key_int_bsp,選擇NIOS II -> BSP Editor

 

005

在彈出的BSP設置界面中我們可以看到,BSP target direction還是E:\easy_sopc\NiosOnlyExp\03_pio_int\software\key_int_bsp,即復制前的路徑。

 

006

 

因此可知,如果此時我們在當前工程的Qsys中更改了NIOS II系統的架構或者增刪了東西,重新生產Qsys文件,然后我們回到Eclipse中選擇generate BSP時,軟件會根據新的Qsys信息重新生產bsp文件,而這個bsp文件還是保存在之前的E:\easy_sopc\NiosOnlyExp\03_pio_int\software\key_int_bsp中,因此就導致原本的復制之前的工程內容被更改,即本來我們是想把整個工程復制到另一個地方進行單獨修改的,然而卻實質上把原路徑下的工程文件給更改了,到最后導致原版和復制后的工程都被改變。

為了解決這個問題,接下來我們將新打開的工作空間中已經存在的兩個工程移除。選中已經存在的工程和工程對應的bsp,右鍵選擇Delete:

 

007

 

在彈出的對話框中,點擊OK。不過大家一定要注意的是,千萬不要勾選上面的那個“Delete project contents on disk(cannot be undone)”,因為這個是刪除軟件工程的源文件,如果選擇了這個,那么在刪除時就會將原本沒有復制之前的路徑下的軟件源工程給刪除掉,那么原版工程就被徹底破壞掉了,我們所需要做的,只是把這兩個工程從工作空間中移除,而不是將原工程刪掉,這點大家要切記。

 

008

 

移除了工程之后,我們回到新復制的工程下的key_int_bsp文件夾下(C:\Users\Administrator\Desktop\03_pio_int\software\key_int_bsp),找到settings.bsp文件,使用任意一個文本編輯器打開:

 

009

 

注意,不同版本的Quartus II軟件該文件稍有差別。對於Quartus II13.0版本, BSP文件中兩個位置記錄了工程絕對路徑,而對於15.1或以上,則只有一個位置記錄絕對路徑,另一個位置已經改進為相對路徑了(相對路徑是相對當前工程,因此無需修改)(其他版本我暫時未檢驗)。

首先我們看一個13.0版本的工程

 

010

 

該文件的7和9兩行都是使用的絕對位置記錄的,因此在Quartus II13.0版本的軟件中需要修改這兩個位置都為新的路徑,修改后如下圖所示:

 

011

 

而對於15.1版本的工程,打開文件后我們可以看到,該文件下的第7行左右,BspGeneratedLocation指定的還是復制前的路徑,第9行已經改進為采用相對路徑了:

 

012

 

於是,這里只需將第7行這個地方更改為我們復制后的新路徑C:\Users\Administrator\Desktop\03_pio_int\software\key_int_bsp,第9行不變即可更改后的文件內容如下所示:

 

013

 

然后保存文件,回到NIOS II Eclipse中,選擇File -> Import

 

014

 

在彈出的窗口中,選擇General下的Existing Projects into Workspace:

 

015

 

在彈出的窗口中,選擇Select root directiory,點擊Browse,定位到Workspace目錄(這里也就是Quartus II工程目錄)C:\Users\Administrator\Desktop\03_pio_int

 

016

 

可以看到,軟件會自動找到該目錄下存在的軟件工程,然后點擊finish即可將工程導入進來。導入進來后,再次進入BSP Editor,發現BSP target direction就已經是現在的新路徑了。

 

017

 

為了區分開這樣更改后是否還會對未復制前的工程造成影響,這里我將未復制前的工程剪切到了另一個地方放着,這樣如果在重新編譯的時候還是要對未復制前的工程進行操作,那么因為原工程已經不在了,就會報警告或則報錯。而事實上,當我再次編譯時並沒有報任何警告和錯誤。修改C代碼后,重新編譯生產elf文件,下載到芯航線FPGA開發板上,也能夠正常的運行。打開原版工程(已經將原版工程拷貝回原路徑了),還是之前的內容,編譯下載也沒問題。因此該問題得以完美解決。

6.4 解決方案步驟總結

好了,說了這么多,各種推理和驗證,導致真正有用的操作步驟被弱化了,不容易區分,這里,我再總結下:

6.4.1 切換工作空間(workspace)

切換工作空間前:

 

018

切換工作空間后:

 

019

6.4.2 移除舊版工程

 

020

021

 

注意:千萬不要勾選上面的那個“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文件,使用任意一個文本編輯器打開:

 

022

 

第7行左右,將BspGeneratedLocation指定路徑由原版路徑改為更改后的新路徑:

13.0版本

更改前:

 

023

 

更改后

 

024

15.1及以上版本

更改前

 

025

更改后

 

026

 

然后保存文件。

6.4.4 重新導入(import)工程

NIOS II Eclipse中,選擇File -> Import

 

027

在彈出的窗口中,選擇General下的Existing Projects into Workspace:

 

028

 

在彈出的窗口中,選擇Select root directiory,點擊Browse,定位到Workspace目錄(這里也就是Quartus II工程目錄)C:\Users\Administrator\Desktop\03_pio_int

 

029

 

點擊finish即可將工程導入進來。

接下來就可以放心的更改Qsys系統和軟件工程啦。

 

如有更多問題,歡迎加入芯航線 FPGA 技術支持群交流學習:一群 472607506(已滿)  二群  615381411

小梅哥

芯航線電子工作室


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM